blob: 1b4930496d1ee9293198f1a601da12e840658e68 [file] [log] [blame]
/*
**************************************************************************
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
**************************************************************************
*/
/**
* @file nss_wifi_mesh.h
* NSS TO HLOS Wi-Fi mesh device interface definitions.
*/
#ifndef __NSS_WIFI_MESH_H
#define __NSS_WIFI_MESH_H
/**
* @addtogroup nss_wifi_mesh_subsystem
* @{
*/
#define NSS_WIFI_MESH_WIFI_HDRLEN_MAX 48
/*
* Wi-Fi mesh maximum dynamic interface.
*/
#define NSS_WIFI_MESH_MAX_DYNAMIC_INTERFACE 32
/**
* Mesh path update flags.
*/
#define NSS_WIFI_MESH_PATH_UPDATE_FLAG_NEXTHOP 0x01
#define NSS_WIFI_MESH_PATH_UPDATE_FLAG_HOPCOUNT 0x02
#define NSS_WIFI_MESH_PATH_UPDATE_FLAG_METRIC 0x04
#define NSS_WIFI_MESH_PATH_UPDATE_FLAG_MESH_FLAGS 0x08
#define NSS_WIFI_MESH_PATH_UPDATE_FLAG_EXPIRY_TIME 0x10
#define NSS_WIFI_MESH_PATH_UPDATE_FLAG_MESH_GATE 0x20
#define NSS_WIFI_MESH_PATH_UPDATE_FLAG_BLOCK_MESH_FWD 0x40
#define NSS_WIFI_MESH_PATH_UPDATE_FLAG_METADATA_ENABLE_VALID 0x80
/**
* Mesh proxy path update flags.
*/
#define NSS_WIFI_MESH_PROXY_PATH_UPDATE_FLAG_MDA 0x1
#define NSS_WIFI_MESH_PROXY_PATH_UPDATE_FLAG_MESH 0x2
/**
* Mesh path update flags.
*/
#define NSS_WIFI_MESH_PATH_FLAG_REFRESH_SENT 0x1
/**
* Mesh path maximum entries.
*/
#define NSS_WIFI_MESH_PATH_MAX_ENTRIES 10
/**
* Mesh proxy path maximum entries.
*/
#define NSS_WIFI_MESH_PROXY_PATH_MAX_ENTRIES 10
/**
* Mesh configuration flags.
*/
#define NSS_WIFI_MESH_CONFIG_FLAG_TTL_VALID 0x01
#define NSS_WIFI_MESH_CONFIG_FLAG_MPATH_REFRESH_VALID 0x02
#define NSS_WIFI_MESH_CONFIG_FLAG_BLOCK_MESH_FORWARDING_VALID 0x04
#define NSS_WIFI_MESH_CONFIG_FLAG_LOCAL_MAC_VALID 0x08
#define NSS_WIFI_MESH_CONFIG_FLAG_MPP_LEARNING_MODE_VALID 0x10
#define NSS_WIFI_MESH_CONFIG_FLAG_SIBLING_IF_NUM_VALID 0x20
#define NSS_WIFI_MESH_CONFIG_FLAG_BLOCK_MESH_FWD_VALID 0x40
#define NSS_WIFI_MESH_CONFIG_FLAG_METADATA_ENABLE_VALID 0x80
/**
* nss_wifi_mesh_path_flags
* Wi-Fi mesh path flags.
*/
#define NSS_WIFI_MESH_PATH_FLAG_ACTIVE 0x01
#define NSS_WIFI_MESH_PATH_FLAG_RESOLVING 0x02
#define NSS_WIFI_MESH_PATH_FLAG_RESOLVED 0x04
#define NSS_WIFI_MESH_PATH_FLAG_FIXED 0x08
#define NSS_WIFI_MESH_ENCAP_METADATA_OFFSET_TYPE 4
/*
* nss_wifi_mesh_pre_header_type {
* Wi-Fi pre header types.
*/
enum nss_wifi_mesh_pre_header_type {
NSS_WIFI_MESH_PRE_HEADER_NONE = 0xdcb, /**< No preheader. */
NSS_WIFI_MESH_PRE_HEADER_80211 = 0xabc, /**< 802.11 preheader. */
NSS_WIFI_MESH_PRE_HEADER_MAX = 0xdea /**< Max preheader. */
};
/*
* nss_wifi_mesh_extended_data_pkt_types
* Wi-Fi mesh extended data packet types.
*/
enum nss_wifi_mesh_extended_data_pkt_types {
WIFI_MESH_EXT_DATA_PKT_TYPE_NONE, /**< No packet type. */
WIFI_MESH_EXT_DATA_PKT_TYPE_EXCEPTION /**< Exception packet type. */
};
/*
* nss_wifi_mesh_ieee80211_hdr
* Wi-Fi header
*/
struct nss_wifi_mesh_ieee80211_hdr {
uint16_t frame_ctl; /* Frame control. */
uint16_t duration_id; /* Duration ID. */
uint8_t addr1[ETH_ALEN]; /* Address 1. */
uint8_t addr2[ETH_ALEN]; /* Address 2. */
uint8_t addr3[ETH_ALEN]; /* Address 3. */
uint16_t seq_ctrl; /* Sequence control. */
uint8_t addr4[ETH_ALEN]; /* Address 4. */
}__packed;
/*
* nss_wifi_mesh_ieee80211s_hdr
* Wi-Fi mesh header
*/
struct nss_wifi_mesh_ieee80211s_hdr {
uint8_t flags; /* Mesh flags. */
uint8_t ttl; /* TTL. */
uint32_t seq_num; /* Sequence number. */
uint8_t eaddr1[ETH_ALEN]; /* Mesh Address1. */
uint8_t eaddr2[ETH_ALEN]; /* Mesh Address2. */
}__packed;
/*
* nss_wifi_mesh_per_packet_metadata
* Wi-Fi mesh per packet metadata structure.
*/
struct nss_wifi_mesh_per_packet_metadata {
uint16_t pkt_type; /* Packet type of the metadata. */
uint8_t wifi_hdr_bytes[NSS_WIFI_MESH_WIFI_HDRLEN_MAX]; /* Wi-Fi header byte stream. */
};
/**
* nss_wifi_mesh_dp_type
* Interface datapath types.
* NSS-to-host path will be seen by ECM for rules.
*/
enum nss_wifi_mesh_dp_type {
NSS_WIFI_MESH_DP_INNER, /**< Inner/encapsulation interface. */
NSS_WIFI_MESH_DP_OUTER, /**< Outer/decapsulation interface. */
};
/**
* nss_wifi_mesh_msg_types
* Wi-Fi mesh messages.
*/
enum nss_wifi_mesh_msg_types {
NSS_WIFI_MESH_MSG_INTERFACE_CONFIGURE = NSS_IF_MAX_MSG_TYPES + 1, /**< Wi-Fi mesh interface configure message. */
NSS_WIFI_MESH_MSG_MPATH_ADD, /**< Wi-Fi mesh path add message. */
NSS_WIFI_MESH_MSG_MPATH_DELETE, /**< Wi-Fi mesh path delete message. */
NSS_WIFI_MESH_MSG_MPATH_UPDATE, /**< Wi-Fi mesh path update. */
NSS_WIFI_MESH_MSG_PROXY_PATH_LEARN, /**< Wi-Fi mesh proxy path learn. */
NSS_WIFI_MESH_MSG_PROXY_PATH_ADD, /**< Wi-Fi mesh proxy path add. */
NSS_WIFI_MESH_MSG_PROXY_PATH_DELETE, /**< Wi-Fi mesh proxy path delete. */
NSS_WIFI_MESH_MSG_PROXY_PATH_UPDATE, /**< Wi-Fi mesh proxy path update. */
NSS_WIFI_MESH_MSG_PATH_NOT_FOUND, /**< Wi-Fi mesh path not found message. */
NSS_WIFI_MESH_MSG_PATH_REFRESH, /**< Wi-Fi mesh path refresh message. */
NSS_WIFI_MESH_MSG_PATH_EXPIRY, /**< Wi-Fi mesh path expiry message. */
NSS_WIFI_MESH_MSG_PATH_TABLE_DUMP, /**< Wi-Fi mesh path table dump. */
NSS_WIFI_MESH_MSG_PROXY_PATH_TABLE_DUMP, /**< Wi-Fi mesh proxy path table dump. */
NSS_WIFI_MESH_MSG_STATS_SYNC, /**< Wi-Fi mesh statistics sync messgae. */
NSS_WIFI_MESH_MSG_EXCEPTION_FLAG, /**< Wi-Fi mesh exception Flag. */
NSS_WIFI_MESH_CONFIG_EXCEPTION, /**< Wi-Fi mesh configuration exception. */
NSS_WIFI_MESH_MSG_MAX /**< Wi-Fi mesh maximum message. */
};
/*
* nss_wifi_mesh_error_types
* Wi-Fi mesh error types.
*/
enum nss_wifi_mesh_error_types {
NSS_WIFI_MESH_ERROR_NONE = NSS_IF_ERROR_TYPE_MAX + 1, /**< Wi-Fi mesh no error type. */
NSS_WIFI_MESH_ERROR_UNKNOWN_MSG, /**< Wi-Fi mesh unknown message error. */
NSS_WIFI_MESH_ERROR_TTL_CONFIG, /**< Wi-Fi mesh invalid ttl error. */
NSS_WIFI_MESH_ERROR_REFRESH_TIME_CONFIG, /**< Wi-Fi mesh invalid refresh time. */
NSS_WIFI_MESH_ERROR_MPP_LEARNING_MODE_CONFIG, /**< Wi-Fi mesh invalid mpp learning mode. */
NSS_WIFI_MESH_ERROR_PATH_ADD_MAX_RADIO_CNT, /**< Wi-Fi mesh path add error due to maximum radio count. */
NSS_WIFI_MESH_ERROR_PATH_ADD_INVALID_INTERFACE_NUM, /**< Wi-Fi mesh path invalid interface number. */
NSS_WIFI_MESH_ERROR_PATH_ADD_INTERFACE_NUM_NOT_FOUND, /**< Wi-Fi mesh path interface number not found. */
NSS_WIFI_MESH_ERROR_PATH_TABLE_FULL, /**< Wi-Fi mesh path table full error. */
NSS_WIFI_MESH_ERROR_PATH_ALLOC_FAIL, /**< Wi-Fi mesh path alloc error. */
NSS_WIFI_MESH_ERROR_PATH_INSERT_FAIL, /**< Wi-Fi mesh path insert fail. */
NSS_WIFI_MESH_ERROR_PATH_NOT_FOUND, /**< Wi-Fi mesh path not found error. */
NSS_WIFI_MESH_ERROR_PATH_UNHASHED, /**< Wi-Fi mesh proxy path unhashed error. */
NSS_WIFI_MESH_ERROR_PATH_DELETE_FAIL, /**< Wi-Fi mesh proxy path delete error. */
NSS_WIFI_MESH_ERROR_PROXY_PATH_NOT_FOUND, /**< Wi-Fi mesh proxy path not found error. */
NSS_WIFI_MESH_ERROR_PROXY_PATH_UNHASHED, /**< Wi-Fi mesh proxy path unhashed error. */
NSS_WIFI_MESH_ERROR_PROXY_PATH_DELETE_FAIL, /**< Wi-Fi mesh proxy path delete error. */
NSS_WIFI_MESH_ERROR_PROXY_PATH_EXISTS, /**< Wi-Fi mesh proxy path exists error. */
NSS_WIFI_MESH_ERROR_PROXY_PATH_ALLOC_FAIL, /**< Wi-Fi mesh proxy path alloc error. */
NSS_WIFI_MESH_ERROR_PROXY_PATH_INSERT_FAIL, /**< Wi-Fi mesh proxy path insert error. */
NSS_WIFI_MESH_ERROR_PROXY_PATH_TABLE_FULL, /**< Wi-Fi mesh proxy path table full error. */
NSS_WIFI_MESH_ERROR_PB_ALLOC_FAIL, /**< Wi-Fi mesh pbuf allocation failures. */
NSS_WIFI_MESH_ERROR_ENQUEUE_TO_HOST_FAIL, /**< Wi-Fi mesh enqueue to host failures. */
NSS_WIFI_MESH_ERROR_ENABLE_INTERFACE_FAIL, /**< Wi-Fi mesh enabling interface failures. */
NSS_WIFI_MESH_ERROR_DISABLE_INTERFACE_FAIL, /**< Wi-Fi mesh disabling interface failures. */
NSS_WIFI_MESH_ERROR_INVALID_EXCEPTION_NUM, /**< Wi-Fi mesh invalid exception number. */
NSS_WIFI_MESH_ERROR_ONESHOT_ALREADY_ATTACHED, /**< Wi-Fi mesh oneshot already attached error. */
};
/**
* nss_wifi_mesh_mpp_learning_mode
* Mesh device proxy path learning types.
*/
enum nss_wifi_mesh_mpp_learning_mode {
NSS_WIFI_MESH_MPP_LEARNING_MODE_INDEPENDENT_NSS, /**< Independent NSS learning. */
NSS_WIFI_MESH_MPP_LEARNING_MODE_NSS_ASSISTED_HOST, /**< NSS assisted host learning. */
NSS_WIFI_MESH_MPP_LEARNING_MODE_MAX /**< Mesh maximum learning type. */
};
/**
* nss_wifi_mesh_configurable_exceptions
* Mesh configurable exceptions.
*/
enum nss_wifi_mesh_configurable_exceptions {
NSS_WIFI_MESH_DS_MESH_PATH_NOT_FOUND = 1, /**< Downstream (Eth - Wi-Fi) mesh path not found exception. */
NSS_WIFI_MESH_US_MESH_PROXY_NOT_FOUND = 2, /**< Upstream (Wi-Fi - Eth) mesh proxy path not found exception. */
NSS_WIFI_MESH_US_MESH_PATH_NOT_FOUND = 3, /**< Upstream (Wi-Fi - Eth) mesh path not found exception. */
NSS_WIFI_MESH_EXCEPTION_MAX = 4
};
/*
* nss_wifi_mesh_encap_ext_data_pkt_type
* Mesh encap extended data packet type.
*/
enum nss_wifi_mesh_encap_ext_data_pkt_type {
NSS_WIFI_MESH_ENCAP_EXT_DATA_PKT_TYPE_NONE, /**< No packet type. */
NSS_WIFI_MESH_ENCAP_EXT_DATA_PKT_TYPE_MPATH_NOT_FOUND_EXC, /**< Packet when mesh path is not found. */
NSS_WIFI_MESH_ENCAP_EXT_DATA_PKT_TYPE_MAX, /**< Maximum packet type. */
};
/**
* nss_wifi_mesh_config_msg
* Mesh device configuration.
*/
struct nss_wifi_mesh_config_msg {
uint8_t local_mac_addr[ETH_ALEN]; /**< Local MAC address. */
uint16_t reserved; /**< Reserved field. */
uint32_t ttl; /**< TTL for packet. */
uint32_t mesh_path_refresh_time; /**< Mesh path refresh time. */
uint32_t config_flags; /**< Flags indicating which fields are valid. */
uint32_t sibling_ifnum; /**< Sibling interface number. */
uint8_t mpp_learning_mode; /**< Mesh proxy path learning mode. */
uint8_t block_mesh_forwarding; /**< If enabled, blocks packet forwarding. */
uint8_t reserved_2[2]; /**< Reserved bytes. */
uint32_t metadata_type; /**< Indicates if metadata should be enabled when block_mesh_forwarding is true. */
};
/**
* nss_wifi_mesh_mpath_add_msg
* Add a mesh path message for a mesh device.
*/
struct nss_wifi_mesh_mpath_add_msg {
uint8_t dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t next_hop_mac_addr[ETH_ALEN]; /**< Next hop MAC address. */
uint32_t metric; /**< Metric for a mesh path. */
uint32_t link_vap_id; /**< Radio ID of the mesh path. */
uint32_t expiry_time; /**< Expiry time in order of ms. */
uint8_t hop_count; /**< Hop count. */
uint8_t path_flags; /**< Mesh path flags. */
uint8_t is_mesh_gate; /**< Destination of this path is a mesh gate. */
uint8_t block_mesh_fwd; /**< Block intra mesh forward. */
uint32_t metadata_type; /**< Indicates if metadata should be enabled when block_mesh_forwarding is true. */
};
/**
* nss_wifi_mesh_mpath_delete_msg
* Delete a mesh path message for a mesh device.
*/
struct nss_wifi_mesh_mpath_del_msg {
uint32_t link_vap_id; /**< Radio ID of the mesh path. */
uint8_t mesh_dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t next_hop_mac_addr[ETH_ALEN]; /**< Next hop MAC address. */
};
/**
* nss_wifi_mesh_mpath_update_msg
* Update a mesh path message for a mesh device.
*/
struct nss_wifi_mesh_mpath_update_msg {
uint8_t dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t next_hop_mac_addr[ETH_ALEN]; /**< Next hop MAC address. */
uint8_t old_next_hop_mac_addr[ETH_ALEN];/**< Old next hop MAC address. */
uint32_t metric; /**< Metric for a mesh path. */
uint32_t link_vap_id; /**< Radio ID of the mesh path. */
uint32_t expiry_time; /**< Expiration time of mesh path. */
uint8_t hop_count; /**< Hop count. */
uint8_t path_flags; /**< Mesh path flags. */
uint8_t is_mesh_gate; /**< Indicates if the mesh path is a mesh gate. */
uint8_t update_flags; /**< Update flags. */
uint8_t block_mesh_fwd; /**< Block intra mesh forward. */
uint8_t reserved[3]; /**< Reserved bytes. */
uint8_t metadata_type; /**< Indicates if metadata should be enabled when block_mesh_forwarding is true. */
};
/**
* nss_wifi_mesh_proxy_path_learn_msg
* Learn a mesh proxy path message for a mesh device.
*/
struct nss_wifi_mesh_proxy_path_learn_msg {
uint8_t mesh_dest_mac[ETH_ALEN]; /**< Mesh destination MAC address. */
uint8_t dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t path_flags; /**< Mesh path flags. */
uint8_t is_update; /**< Indicates if the learn is an update. */
};
/**
* nss_wifi_mesh_proxy_path_add_msg
* Add a mesh proxy path message for a mesh device.
*/
struct nss_wifi_mesh_proxy_path_add_msg {
uint8_t mesh_dest_mac[ETH_ALEN]; /**< Mesh destination MAC address. */
uint8_t dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t path_flags; /**< Mesh path flags. */
};
/**
* nss_wifi_mesh_proxy_path_update_msg
* Update a mesh proxy path message for a mesh device.
*/
struct nss_wifi_mesh_proxy_path_update_msg {
uint8_t mesh_dest_mac[ETH_ALEN]; /**< Mesh destination MAC address. */
uint8_t dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t path_flags; /**< Mesh path flags. */
uint8_t bitmap; /**< Bitmap indicating valid fields in the update msg. */
};
/**
* nss_wifi_mesh_proxy_path_del_msg
* Delete a mesh proxy path message for a mesh device.
*/
struct nss_wifi_mesh_proxy_path_del_msg {
uint8_t mesh_dest_mac_addr[ETH_ALEN]; /**< Mesh destination MAC. */
uint8_t dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
};
/**
* nss_wifi_mesh_mpath_not_found_msg
* Wi-Fi mesh path not found message.
*/
struct nss_wifi_mesh_mpath_not_found_msg {
uint8_t dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t transmitter_mac_addr[ETH_ALEN]; /**< Transmitter address. */
uint32_t link_vap_id; /**< NSS interface number of the link vap if received from WiFi. */
uint8_t is_mesh_forward_path; /**< Indicates if the message is from a forward path. */
};
/**
* nss_wifi_mesh_path_refresh_msg
* Refresh mesh path message.
*/
struct nss_wifi_mesh_path_refresh_msg {
uint8_t dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t next_hop_mac_addr[ETH_ALEN]; /**< Next hop MAC address. */
uint32_t link_vap_id; /**< Link VAP of the mesh path. */
uint8_t path_flags; /**< Mesh path flags. */
};
/**
* nss_wifi_mesh_path_expiry_msg
* Mesh path expiration message.
*/
struct nss_wifi_mesh_path_expiry_msg {
uint8_t mesh_dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t next_hop_mac_addr[ETH_ALEN]; /**< Next hop MAC address. */
uint32_t link_vap_id; /**< Link VAP of the mesh path. */
uint8_t path_flags; /**< Mesh path flags. */
};
/*
* nss_wifi_mesh_encap_stats
* Encapsulation statistics.
*/
struct nss_wifi_mesh_encap_stats {
uint32_t expiry_notify_sent; /* Number of times expiry notification sent to host. */
uint32_t mc_count; /* Number of multicast packets. */
uint32_t mp_not_found; /* Number of times mesh path is not found. */
uint32_t mp_active; /* Number of times mesh path is active. */
uint32_t mpp_not_found; /* Number of times proxy path is not found. */
uint32_t mpp_found; /* Number of times proxy path is found. */
uint32_t encap_hdr_fail; /* Number of times encapsulating mesh header failed. */
uint32_t mp_del_notify_fail; /* Number of times notifying mesh path delete failed. */
uint32_t link_enqueue; /* Number of packets enqueued to the link VAP. */
uint32_t link_enq_fail; /* Number of times enqueue to link vap failed. */
uint32_t ra_lup_fail; /* Number of times receiver address look up is failed. */
uint32_t dummy_add_count; /* Number of times dummy path is added. */
uint32_t encap_mp_add_notify_fail; /* Number of times add notification failed. */
uint32_t dummy_add_fail; /* Number of times dummy addition failed. */
uint32_t dummy_lup_fail; /* Number of times dummy lookup failed. */
uint32_t send_to_host_failed; /* Number of packets failed to be sent to host. */
uint32_t sent_to_host; /* Number of packets sent to host. */
uint32_t expiry_notify_fail; /* Number of times expiry notification to host failed. */
uint32_t no_headroom; /* Number of packets dropped because there is no headroom. */
uint32_t path_refresh_sent; /* Number of times path refresh is sent to host. */
uint32_t linearise_failed; /* Number of packets dropped because pb_linearise. */
};
/*
* nss_wifi_mesh_decap_stats
* Mesh decapsulation statistics.
*/
struct nss_wifi_mesh_decap_stats {
uint32_t path_refresh_sent; /**< Number of times path refresh is sent to host. */
uint32_t reserved; /**< Reserved field. */
uint32_t mc_drop; /**< Number of MC drop counts. */
uint32_t ttl_0; /**< Number of TTL0 counts. */
uint32_t mpp_lup_fail; /**< Number of mpp lookup failures. */
uint32_t decap_hdr_fail; /**< Number of decap HDR failures. */
uint32_t rx_fwd_fail; /**< Number of receive forward failures. */
uint32_t rx_fwd_success; /**< Number of receive forward success counts. */
uint32_t mp_fwd_lookup_fail; /**< Number of mpath forward lookup failures. */
uint32_t mp_fwd_inactive; /**< Number of mpath forward inactive. */
uint32_t nxt_mnode_fwd_success; /**< Number of next mnode forward successes. */
uint32_t nxt_mnode_fwd_fail; /**< Number of next mnode forward failures. */
uint32_t mpp_add_fail; /**< Number of MPP add failures. */
uint32_t mpp_add_event2host_fail; /**< Number of MPP add event-to-host failures. */
uint32_t mpp_upate_fail; /**< Number of MPP update failures. */
uint32_t mpp_update_even2host_fail; /**< Number of MPP update event-to-host failure counts. */
uint32_t mpp_learn2host_fail; /**< Number of MPP learn-to-host failure counts. */
uint32_t block_mesh_fwd_packets; /**< Number of packets that are blocked for intra mesh forward. */
uint32_t no_headroon; /**< Number of packets dropped due to insufficient headroom.. */
uint32_t linearise_failed; /**< Number of packets dropped due to linear copy failure. */
uint32_t mpp_learn_events_rate_limited; /**< Number of mesh proxy path learn events dropped due to rate limiting */
uint32_t mp_missing_events_rate_limited;/**< Number of path missing notifications dropped due to rate limiting */
};
/**
* nss_wifi_mesh_path_dump_entry
* Wi-Fi mesh path dump entry.
*/
struct nss_wifi_mesh_path_dump_entry {
uint8_t dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t next_hop_mac_addr[ETH_ALEN]; /**< Next hop MAC address. */
uint32_t metric; /**< Mesh path metric. */
uint32_t expiry_time[2]; /**< Mesh path expiration time. */
uint8_t hop_count; /**< Number of hop counts. */
uint8_t flags; /**< Mesh path flags. */
uint8_t is_mesh_gate; /**< Determines whether gateway capability is enabled. */
uint8_t reserved[1]; /**< Reserved field. */
uint32_t link_vap_id; /**< Link interface number. */
};
/**
* nss_wifi_mesh_proxy_path_dump_entry
* Wi-Fi mesh proxy path dump entry.
*/
struct nss_wifi_mesh_proxy_path_dump_entry {
uint8_t dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t mesh_dest_mac[ETH_ALEN]; /**< Mesh destination address. */
uint8_t flags; /**< Mesh path flags. */
uint8_t reserved[3]; /**< Reserved field. */
uint32_t time_diff; /**< Difference of current time and active time. */
};
/**
* nss_wifi_mesh_path_table_dump
* Wi-Fi mesh path table dump.
*/
struct nss_wifi_mesh_path_table_dump {
uint32_t num_entries; /**< Number of entries. */
uint32_t more_events; /**< Determines whether more events are pending. */
struct nss_wifi_mesh_path_dump_entry path_entry[0]; /**< Mesh path entries. */
};
/**
* nss_wifi_mesh_proxy_path_table_dump
* Wi-Fi mesh proxy path table dump.
*/
struct nss_wifi_mesh_proxy_path_table_dump {
uint32_t num_entries; /**< Number of entries. */
uint32_t more_events; /**< More events are pending. */
struct nss_wifi_mesh_proxy_path_dump_entry path_entry[0]; /**< Mesh proxy path entry. */
};
/**
* nss_wifi_mesh_assoc_link_vap
* Associate a link VAP to mesh.
*/
struct nss_wifi_mesh_assoc_link_vap {
uint32_t link_vap_id; /**< Link interface number. */
};
/**
* nss_wifi_mesh_path_stats
* Wi-Fi mesh path statistics.
*/
struct nss_wifi_mesh_path_stats {
uint32_t alloc_failures; /**< Mesh path allocation failures. */
uint32_t error_max_radio_count; /**< Mesh path error maximum radio count. */
uint32_t invalid_interface_failures; /**< Mesh path invalid interface number failures count. */
uint32_t add_success; /**< Mesh path add success count. */
uint32_t table_full_errors; /**< Mesh path table full error count. */
uint32_t insert_failures; /**< Mesh path insert failure count. */
uint32_t not_found; /**< Mesh path not found failure count. */
uint32_t delete_success; /**< Mesh path delete success count. */
uint32_t update_success; /**< Mesh path update success count. */
uint32_t mesh_path_expired; /**< Mesh path expired. */
uint32_t mesh_path_refresh_needed; /**< Mesh path refresh needed. */
uint32_t add_requests; /**< Mesh path add request. */
uint32_t del_requests; /**< Mesh path delete request. */
uint32_t update_requests; /**< Mesh path update requests. */
uint32_t next_hop_updations; /**< Mesh path next hop updations. */
uint32_t hop_count_updations; /**< Mesh path hop count updations. */
uint32_t flag_updations; /**< Mesh path mesh flag updations. */
uint32_t metric_updations; /**< Mesh path metric updations. */
uint32_t block_mesh_fwd_updations; /**< Mesh path block mesh forward updations. */
uint32_t delete_failures; /**< Mesh path delete failures. */
};
/**
* nss_wifi_mesh_proxy_path_stats
* Wi-Fi mesh proxy path statistics.
*/
struct nss_wifi_mesh_proxy_path_stats {
uint32_t alloc_failures; /**< Mesh proxy path allocation failure count. */
uint32_t entry_exist_failures; /**< Mesh proxy path entry already exists. */
uint32_t add_success; /**< Mesh proxy path add success count. */
uint32_t table_full_errors; /**< Mesh proxy path table full count. */
uint32_t insert_failures; /**< Mesh proxy path insert failure count. */
uint32_t not_found; /**< Mesh proxy path not found count. */
uint32_t unhashed_errors; /**< Mesh proxy path unhased erorr count. */
uint32_t delete_failures; /**< Mesh proxy path delete failure count. */
uint32_t delete_success; /**< Mesh proxy path delete success count. */
uint32_t update_success; /**< Mesh proxy path update success count. */
uint32_t lookup_success; /**< Mesh proxy path lookup success count. */
uint32_t add_requests; /**< Mesh proxy path addition requests. */
uint32_t del_requests; /**< Mesh proxy path deletion requests. */
uint32_t update_requests; /**< Mesh proxy path updation requests. */
uint32_t mda_updations; /**< Mesh proxy path mda updations. */
uint32_t flag_updations; /**< Mesh proxy path flags updations. */
};
/**
* nss_wifi_mesh_exception_stats
* Wi-Fi mesh exception statistics.
*/
struct nss_wifi_mesh_exception_stats {
uint32_t packets_success; /**< Mesh exception successful packets count. */
uint32_t packets_dropped; /**< Mesh exception dropped packets count. */
};
/**
* nss_wifi_mesh_stats_sync_msg
* Message to get mesh device statistics from NSS firmware to the host.
*/
struct nss_wifi_mesh_stats_sync_msg {
struct nss_cmn_node_stats pnode_stats; /**< Common firmware statistics. */
struct nss_wifi_mesh_encap_stats mesh_encap_stats; /**< Encapsulation statistics. */
struct nss_wifi_mesh_decap_stats mesh_decap_stats; /**< Decapsulation statistics. */
struct nss_wifi_mesh_path_stats mesh_path_stats; /**< Mesh path statistics. */
struct nss_wifi_mesh_proxy_path_stats mesh_proxy_path_stats; /**< Mesh proxy path statistics. */
struct nss_wifi_mesh_exception_stats mesh_except_stats; /**< Mesh exception statistics. */
};
/* nss_wifi_mesh_exception_flag_msg
* Messsage to send exception packets to host.
*/
struct nss_wifi_mesh_exception_flag_msg {
uint8_t dest_mac_addr[ETH_ALEN]; /**< Destination MAC address. */
uint8_t exception; /**< Exception flag bit. */
uint8_t reserved[2]; /**< Reserved field. */
};
/**
* nss_wifi_mesh_rate_limit_config
* Message to configure exceptions
*/
struct nss_wifi_mesh_rate_limit_config {
uint32_t exception_num; /**< Indicates the exception - enum wifi_mesh_configurable_exceptions. */
uint32_t enable; /**< Indicates if exception is enabled. */
uint32_t rate_limit; /**< Rate limit value in us. */
};
/**
* nss_wifi_mesh_encap_ext_pkt_metadata
* Metadata to extended data callback
*/
struct nss_wifi_mesh_encap_ext_pkt_metadata {
uint16_t pkt_type; /**< Packet type of the exception packet. */
};
/**
* nss_wifi_mesh_msg
* Data sent and received in mesh device-specific messages.
*/
struct nss_wifi_mesh_msg {
struct nss_cmn_msg cm; /**< Common message header. */
/**
* Payload of a virtual device specific message.
*/
union {
union nss_if_msgs if_msg;
/**< NSS interface base message. */
struct nss_wifi_mesh_config_msg mesh_config;
/**< Mesh device configuration. */
struct nss_wifi_mesh_mpath_add_msg mpath_add;
/**< Add a message for a mesh path addition. */
struct nss_wifi_mesh_mpath_del_msg mpath_del;
/**< Add a message for a mesh path deletion. */
struct nss_wifi_mesh_mpath_update_msg mpath_update;
/**< Add a message for a mesh path update. */
struct nss_wifi_mesh_proxy_path_learn_msg proxy_learn_msg;
/**< Add a message for a mesh proxy path learning. */
struct nss_wifi_mesh_proxy_path_add_msg proxy_add_msg;
/**< Add a message for a mesh proxy path addition. */
struct nss_wifi_mesh_proxy_path_update_msg proxy_update_msg;
/**< Add a message for a mesh proxy path update. */
struct nss_wifi_mesh_proxy_path_del_msg proxy_del_msg;
/**< Add a message for a mesh proxy path deletion. */
struct nss_wifi_mesh_mpath_not_found_msg mpath_not_found_msg;
/**< Mesh path not found message. */
struct nss_wifi_mesh_path_refresh_msg path_refresh_msg;
/**< Add a message for a mesh path refresh. */
struct nss_wifi_mesh_path_expiry_msg path_expiry_msg;
/**< Add a message for a mesh path expiration. */
struct nss_wifi_mesh_path_table_dump mpath_table_dump;
/**< Add a message to dump mesh path table. */
struct nss_wifi_mesh_proxy_path_table_dump proxy_path_table_dump;
/**< Add a message to dump mesh proxy path table. */
struct nss_wifi_mesh_stats_sync_msg stats_sync_msg;
/**< Statistics synchronization message. */
struct nss_wifi_mesh_exception_flag_msg exception_msg;
/**< Exception to host message. */
struct nss_wifi_mesh_rate_limit_config exc_cfg;
/**< Add a message to configure the rate limit for exception events. */
} msg; /**< Virtual device message payload. */
};
/**
* nss_wifi_mesh_encap_stats_type
* Wi-Fi mesh encapsulation statistics types.
*/
enum nss_wifi_mesh_encap_stats_type {
NSS_WIFI_MESH_ENCAP_STATS_TYPE_PNODE_RX_PACKETS, /**< Wi-Fi mesh common node receive packets. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_PNODE_RX_BYTES, /**< Wi-Fi mesh common node receive bytes. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_PNODE_TX_PACKETS, /**< Wi-Fi mesh common node transmit packets. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_PNODE_TX_BYTES, /**< Wi-Fi mesh common node transmit bytes. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_PNODE_RX_DROPPED, /**< Wi-Fi mesh common node receive dropped. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_EXPIRY_NOTIFY_SENT, /**< Wi-Fi mesh encapsulation statistics expiry notify sent. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_MC_COUNT, /**< Wi-Fi mesh encapsulation statistics mc count. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_MP_NOT_FOUND, /**< Wi-Fi mesh encapsulation statistics mpath not found. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_MP_ACTIVE, /**< Wi-Fi mesh encapsulation statistics mpath active */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_MPP_NOT_FOUND, /**< Wi-Fi mesh encapsulation statistics mpp not found. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_MPP_FOUND, /**< Wi-Fi mesh encapsulation statistics mpp found. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_HDR_FAIL, /**< Wi-Fi mesh encapsulation statistics header failed. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_MP_DEL_NOTIFY_FAIL, /**< Wi-Fi mesh encapsulation statistics mpath delete notify. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_LINK_ENQUEUE, /**< Wi-Fi mesh encapsulation statistics link enqueue. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_LINK_ENQUEUE_FAIL, /**< Wi-Fi mesh encapsulation statistics link enqueue failed. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_RA_LOOKUP_FAIL, /**< Wi-Fi mesh encapsulation statistics receiver lookup failed. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_DUMMY_ADD_COUNT, /**< Wi-Fi mesh encapsulation statistics dummy add count. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_MP_ADD_NOTIFY_FAIL, /**< Wi-Fi mesh encapsulation statistics mpath add notify failed. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_DUMMY_ADD_FAIL, /**< Wi-Fi mesh encapsulation statistics dummy add failed. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_DUMMY_LOOKUP_FAIL, /**< Wi-Fi mesh encapsulation statistics dummy look-up failed. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_SEND_TO_HOST_FAILED, /**< Wi-Fi mesh encapsulation statistics when a packet fails to send to host. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_SENT_TO_HOST, /**< Wi-Fi mesh encapsulation statistics when packet is sent to host. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_EXPIRY_NOTIFY_FAIL, /**< Wi-Fi mesh encapsulation statistics expiry notified fail. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_NO_HEADROOM, /**< Wi-Fi mesh encapsulation statistics no headroom. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_PATH_REFRESH_SENT, /**< Wi-Fi mesh encapsulation statistics path refresh sent. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_LINEARISE_FAILED, /**< Wi-Fi mesh encapsulation statistics when linearisation failed. */
NSS_WIFI_MESH_ENCAP_STATS_TYPE_MAX /**< Wi-Fi mesh encapsulation statistics maximum. */
};
/**
* nss_wifi_mesh_decap_stats_type
* Wi-Fi mesh decapsulation statistics types.
*/
enum nss_wifi_mesh_decap_stats_type {
NSS_WIFI_MESH_DECAP_STATS_TYPE_PNODE_RX_PACKETS, /**< Wi-Fi mesh common node receive packets. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_PNODE_RX_BYTES, /**< Wi-Fi mesh common node receive bytes. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_PNODE_TX_PACKETS, /**< Wi-Fi mesh common node transmit packets. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_PNODE_TX_BYTES, /**< Wi-Fi mesh common node transmit bytes. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_PNODE_RX_DROPPED, /**< Wi-Fi mesh common node receive dropped. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_PATH_REFRESH_SENT, /**< Wi-Fi mesh decapsulation statistics path refresh sent. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_RESERVED, /**< Wi-Fi mesh decapsulation statistics reserved field. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MC_DROP, /**< Wi-Fi mesh decapsulation statistics MAC dropped count. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_TTL0, /**< Wi-Fi mesh decapsulation statistics ttl0. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MPP_LOOKUP_FAIL, /**< Wi-Fi mesh decapsulation statistics mpp lookup failed. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_HDR_FAIL, /**< Wi-Fi mesh decapsulation statistics header failed. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_RX_FWD_FAIL, /**< Wi-Fi mesh decapsulation statistics receive forward failed. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_RX_FWD_SUCCESS, /**< Wi-Fi mesh decapsulation statistics receive forward successful. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MP_FWD_LOOKUP_FAIL, /**< Wi-Fi mesh decapsulation statistics mpath forward lookup failed. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MP_FWD_INACTIVE, /**< Wi-Fi mesh decapsulation statistics mpath forward inactive. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MNODE_FWD_SUCCESS, /**< Wi-Fi mesh decapsulation statistics mnode forward successful. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MNODE_FWD_FAIL, /**< Wi-Fi mesh decapsulation statistics mnode forward failed. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MPP_ADD_FAIL, /**< Wi-Fi mesh decapsulation statistics mpp add failed. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MPP_ADD_EVENT_TO_HOST_FAIL, /**< Wi-Fi mesh decapsulation statistics mpp add event to host failed. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MPP_UPDATE_FAIL, /**< Wi-Fi mesh decapsulation statistics mpp update failed. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MPP_UPDATE_EVENT_TO_HOST_FAIL, /**< Wi-Fi mesh decapsulation statistics mpp update event to host failed. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MPP_LEARN_TO_HOST_FAIL, /**< Wi-Fi mesh decapsulation statistics mpp learn to host failed. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_BLOCK_MESH_FWD_PACKETS, /**< Wi-Fi mesh decapsulation statistics block mesh fwd packets. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_NO_HEADROOM, /**< Wi-Fi mesh decapsulation statistics no headroom. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_LINEARISE_FAILED, /**< Wi-Fi mesh decapsulation statistics linearise failed. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MPP_LEARN_EVENT_RL_DROPPED, /**< Wi-Fi mesh decapsulation statistics mpp learn event rl dropped. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MP_MISSING_EVENT_RL_DROPPED, /**< Wi-Fi mesh decapsulation statistics mp missing event rl dropped. */
NSS_WIFI_MESH_DECAP_STATS_TYPE_MAX /**< Wi-Fi mesh decapsulation statistics maximum. */
};
/**
* nss_wifi_mesh_path_stats_type
* Wi-Fi mesh path statistics types.
*/
enum nss_wifi_mesh_path_stats_type {
NSS_WIFI_MESH_PATH_STATS_TYPE_ALLOC_FAILURES, /**< Wi-Fi mesh path statistics allocation failures. */
NSS_WIFI_MESH_PATH_STATS_TYPE_ERROR_MAX_RADIO_COUNT, /**< Wi-Fi mesh path statistics maximum radio error count. */
NSS_WIFI_MESH_PATH_STATS_TYPE_INVALID_INTERFACE_FAILURES, /**< Wi-Fi mesh path statistics invalid interface failures. */
NSS_WIFI_MESH_PATH_STATS_TYPE_ADD_SUCCESS, /**< Wi-Fi mesh path statistics add success. */
NSS_WIFI_MESH_PATH_STATS_TYPE_TABLE_FULL_ERRORS, /**< Wi-Fi mesh path statistics table full errors. */
NSS_WIFI_MESH_PATH_STATS_TYPE_INSERT_FAILURES, /**< Wi-Fi mesh path statistics insertion failures. */
NSS_WIFI_MESH_PATH_STATS_TYPE_NOT_FOUND, /**< Wi-Fi mesh path statistics not found. */
NSS_WIFI_MESH_PATH_STATS_TYPE_DELETE_SUCCESS, /**< Wi-Fi mesh path statistics successful deletion. */
NSS_WIFI_MESH_PATH_STATS_TYPE_UPDATE_SUCCESS, /**< Wi-Fi mesh path statistics successful updation. */
NSS_WIFI_MESH_PATH_STATS_TYPE_EXPIRED, /**< Wi-Fi mesh path statistics expired. */
NSS_WIFI_MESH_PATH_STATS_TYPE_REFRESH_NEEDED, /**< Wi-Fi mesh path statistics refresh needed. */
NSS_WIFI_MESH_PATH_STATS_TYPE_ADD_REQUESTS, /**< Wi-Fi mesh path statistics add requests. */
NSS_WIFI_MESH_PATH_STATS_TYPE_DELETE_REQUESTS, /**< Wi-Fi mesh path statistics delete requests. */
NSS_WIFI_MESH_PATH_STATS_TYPE_UPDATE_REQUESTS, /**< Wi-Fi mesh path statistics update requests. */
NSS_WIFI_MESH_PATH_STATS_TYPE_NEXT_HOP_UPDATIONS, /**< Wi-Fi mesh path statistics next hop updations. */
NSS_WIFI_MESH_PATH_STATS_TYPE_HOP_COUNT_UPDATIONS, /**< Wi-Fi mesh path statistics hop count updations. */
NSS_WIFI_MESH_PATH_STATS_TYPE_MESH_FLAG_UPDATIONS, /**< Wi-Fi mesh path statistics mesh flag updations. */
NSS_WIFI_MESH_PATH_STATS_TYPE_METRIC_UPDATIONS, /**< Wi-Fi mesh path statistics metric updations. */
NSS_WIFI_MESH_PATH_STATS_TYPE_BLOCK_MESH_FWD_UPDATIONS, /**< Wi-Fi mesh path statistics block mesh forward updations. */
NSS_WIFI_MESH_PATH_STATS_TYPE_MESH_PATH_DELETE_FAILURES, /**< Wi-Fi mesh path statistics mesh path delete failures. */
NSS_WIFI_MESH_PATH_STATS_TYPE_MAX /**< Wi-Fi mesh path statistics maximum. */
};
/**
* nss_wifi_mesh_proxy_path_stats_type
* Wi-Fi mesh proxy path statistics types.
*/
enum nss_wifi_mesh_proxy_path_stats_type {
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_ALLOC_FAILURES, /**< Wi-Fi mesh proxy path statistics allocation failures. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_ENTRY_EXIST_FAILURES, /**< Wi-Fi mesh proxy path statistics entry exist failures. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_ADD_SUCCESS, /**< Wi-Fi mesh proxy path statistics add success. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_TABLE_FULL_ERRORS, /**< Wi-Fi mesh proxy path statistics table full errors. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_INSERT_FAILURES, /**< Wi-Fi mesh proxy path statistics insert failures. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_NOT_FOUND, /**< Wi-Fi mesh proxy path statistics not found. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_UNHASHED_ERRORS, /**< Wi-Fi mesh proxy path statistics unhashed errors. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_DELTE_FAILURES, /**< Wi-Fi mesh proxy path statistics delete failures */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_DELETE_SUCCESS, /**< Wi-Fi mesh proxy path statistics delete success. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_UPDATE_SUCCESS, /**< Wi-Fi mesh proxy path statistics update_success. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_LOOKUP_SUCCESS, /**< Wi-Fi mesh proxy path statistics lookup sccesss. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_ADD_REQUESTS, /**< Wi-Fi mesh proxy path statistics add requests. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_DELETE_REQUESTS, /**< Wi-Fi mesh proxy path statistics delete requests. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_UPDATE_REQUESTS, /**< Wi-Fi mesh proxy path statistics update request. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_MDA_UPDATIONS, /**< Wi-Fi mesh proxy path statistics mda updations. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_FLAGS_UPDATIONS, /**< Wi-Fi mesh proxy path statistics flags updations. */
NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_MAX /**< Wi-Fi mesh proxy path statistics maximum. */
};
/**
* nss_wifi_mesh_exception_stats_type
* Wi-Fi mesh exception statistics types.
*/
enum nss_wifi_mesh_exception_stats_type {
NSS_WIFI_MESH_EXCEPTION_STATS_TYPE_PACKETS_SUCCESS, /**< Wi-Fi mesh exception statistics packets success. */
NSS_WIFI_MESH_EXCEPTION_STATS_TYPE_PACKETS_DROPPED, /**< Wi-Fi mesh exception statistics packets dropped. */
NSS_WIFI_MESH_EXCEPTION_STATS_TYPE_MAX /**< Wi-Fi mesh exception statistics maximum. */
};
/**
* nss_wifi_mesh_hdl_stats_sync_msg
* Message to get mesh device statistics from NSS firmware to the host.
*/
struct nss_wifi_mesh_hdl_stats_sync_msg {
uint64_t encap_stats[NSS_WIFI_MESH_ENCAP_STATS_TYPE_MAX]; /**< Encap statistics. */
uint64_t decap_stats[NSS_WIFI_MESH_DECAP_STATS_TYPE_MAX]; /**< Decap statistics. */
uint64_t path_stats[NSS_WIFI_MESH_PATH_STATS_TYPE_MAX]; /**< Path statistics. */
uint64_t proxy_path_stats[NSS_WIFI_MESH_PROXY_PATH_STATS_TYPE_MAX]; /**< Proxy path statistics. */
uint64_t except_stats[NSS_WIFI_MESH_EXCEPTION_STATS_TYPE_MAX]; /**< Exception statistics. */
};
/**
* nss_wifi_mesh_stats_notification
* Wi-Fi mesh statistics structure.
*/
struct nss_wifi_mesh_stats_notification {
uint32_t core_id; /**< Core ID. */
nss_if_num_t if_num; /**< Interface number. */
struct nss_wifi_mesh_hdl_stats_sync_msg stats; /**< Encapsulation-decapsulation statistics. */
};
/**
* nss_wifi_mesh_tx_msg
* Sends a Wi-Fi mesh message to the NSS interface.
*
* @datatypes
* nss_ctx_instance \n
* nss_wifi_mesh_msg
*
* @param[in] nss_ctx Pointer to the NSS core context.
* @param[in] msg Pointer to the message data.
*
* @return
* Status of the transmit operation.
*/
nss_tx_status_t nss_wifi_mesh_tx_msg(struct nss_ctx_instance *nss_ctx,
struct nss_wifi_mesh_msg *msg);
/**
* nss_wifi_mesh_tx_buf
* Sends a Wi-Fi mesh data packet to the NSS interface.
*
* @datatypes
* nss_ctx_instance \n
* sk_buff
*
* @param[in] nss_ctx Pointer to the NSS core context.
* @param[in] os_buf Pointer to the OS data buffer.
* @param[in] if_num NSS interface number.
*
* @return
* Status of the transmit operation.
*/
nss_tx_status_t nss_wifi_mesh_tx_buf(struct nss_ctx_instance *nss_ctx,
struct sk_buff *os_buf, nss_if_num_t if_num);
/**
* Callback function for receiving Wi-Fi virtual device messages.
*
* @datatypes
* nss_cmn_msg
*
* @param[in] app_data Pointer to the application context of the message.
* @param[in] msg Pointer to the message data.
*/
typedef void (*nss_wifi_mesh_msg_callback_t)(void *app_data,
struct nss_cmn_msg *msg);
/**
* Callback function for receiving Wi-Fi virtual device data.
*
* @datatypes
* net_device \n
* sk_buff \n
* napi_struct
*
* @param[in] netdev Pointer to the associated network device.
* @param[in] skb Pointer to the data socket buffer.
* @param[in] napi Pointer to the NAPI structure.
*/
typedef void (*nss_wifi_mesh_data_callback_t)(struct net_device *netdev,
struct sk_buff *skb, struct napi_struct *napi);
/**
* Callback function for receiving extended data plane Wi-Fi virtual device data.
*
* @datatypes
* net_device \n
* sk_buff \n
* napi_struct
*
* @param[in] netdev Pointer to the associated network device.
* @param[in] skb Pointer to the data socket buffer.
* @param[in] napi Pointer to the NAPI structure.
* @param[in] netdev Pointer to the associated network device.
*/
typedef void (*nss_wifi_mesh_ext_data_callback_t)(struct net_device *netdev,
struct sk_buff *skb, struct napi_struct *napi);
/**
* nss_wifi_mesh_msg_init
* Initializes a Wi-Fi mesh device message.
*
* @datatypes
* nss_wifi_mesh_msg \n
* nss_wifi_mesh_msg_callback_t
*
* @param[in] nim Pointer to the NSS interface message.
* @param[in] if_num NSS interface number.
* @param[in] type Type of message.
* @param[in] len Length of message.
* @param[in] cb Message callback.
* @param[in] app_data Pointer to the application context of the message.
*
* @return
* None.
*/
void nss_wifi_mesh_msg_init(struct nss_wifi_mesh_msg *nim, nss_if_num_t if_num, uint32_t type, uint32_t len,
nss_wifi_mesh_msg_callback_t cb, void *app_data);
/**
* nss_wifi_mesh_get_context
* Gets the NSS Wi-Fi extended virtual interface context.
*
* @return
* Pointer to the NSS core context.
*/
extern struct nss_ctx_instance *nss_wifi_mesh_get_context(void);
/**
* nss_register_wifi_mesh_if
* Registers a Wi-Fi mesh device interface with the NSS interface.
*
* @datatypes
* nss_if_num_t \n
* nss_wifi_mesh_data_callback_t \n
* nss_wifi_mesh_ext_data_callback_t \n
* nss_wifi_mesh_msg_callback_t \n
* net_device
* @param[in] if_num NSS interface number.
* @param[in] mesh_data_callback Callback for the Wi-Fi virtual device data.
* @param[in] mesh_ext_data_callback Callback for the extended data.
* @param[in] mesh_event_callback Callback for the message.
* @param[in] dp_type Datapath type.
* @param[in] netdev Pointer to the associated network device.
* @param[in] features Data socket buffer types supported by this
* interface.
*
* @return
* NSS_CORE_STATUS_SUCCESS in case of success.
* NSS_CORE_STATUS_FAILURE in case of failure.
*/
uint32_t nss_register_wifi_mesh_if(nss_if_num_t if_num, nss_wifi_mesh_data_callback_t mesh_data_callback,
nss_wifi_mesh_ext_data_callback_t mesh_ext_data_callback, nss_wifi_mesh_msg_callback_t mesh_event_callback,
uint32_t dp_type, struct net_device *netdev, uint32_t features);
/**
* nss_unregister_wifi_mesh_if
* Deregisters a Wi-Fi mesh device interface from the NSS interface.
*
* @param[in] if_num NSS interface number.
*
* @return
* None.
*/
void nss_unregister_wifi_mesh_if(nss_if_num_t if_num);
/**
* nss_wifi_mesh_tx_msg_ext
* Sends Wi-Fi mesh data packet along with metadata as a message to the NSS.
*
* @datatypes
* nss_ctx_instance \n
* sk_buff
*
* @param[in,out] nss_ctx Pointer to the NSS core context.
* @param[in] os_buf Pointer to the OS data buffer.
*
* @return
* Status of the transmit operation.
*/
nss_tx_status_t nss_wifi_mesh_tx_msg_ext(struct nss_ctx_instance *nss_ctx, struct sk_buff *os_buf);
/**
* nss_wifi_mesh_verify_if_num
* Verifies the Wi-Fi mesh interface number.
*
* @datatypes
* interface number \n
*
* @param[in] nss_if_num_t NSS interface number.
*
* @return
* TRUE or FALSE.
*/
extern bool nss_wifi_mesh_verify_if_num(nss_if_num_t if_num);
/**
* nss_wifi_mesh_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_wifi_mesh_stats_register_notifier(struct notifier_block *nb);
/**
* nss_wifi_mesh_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_wifi_mesh_stats_unregister_notifier(struct notifier_block *nb);
/**
* @}
*/
#endif /* __NSS_WIFI_MESH_H */