#ifndef _SYS_SIMNET_IMPL_H
#define _SYS_SIMNET_IMPL_H
#include <sys/types.h>
#include <sys/list.h>
#include <sys/mutex.h>
#include <sys/mac.h>
#include <sys/net80211.h>
#include <inet/wifi_ioctl.h>
#ifdef __cplusplus
extern "C" {
#endif
#define MAX_SIMNET_ESSCONF 25
#define MAX_ESSLIST_ARGS 10
#define MAX_ESSLIST_ARGLEN 50
#define SM_MAX_NUM_MCAST_ADDRS 1024
struct simnet_dev;
typedef struct simnet_wifidev {
struct simnet_dev *swd_sdev;
wl_essid_t swd_essid;
wl_bssid_t swd_bssid;
wl_rssi_t swd_rssi;
wl_linkstatus_t swd_linkstatus;
int swd_esslist_num;
wl_ess_conf_t *swd_esslist[MAX_SIMNET_ESSCONF];
} simnet_wifidev_t;
typedef struct simnet_stats {
uint64_t rbytes;
uint64_t obytes;
uint64_t xmit_errors;
uint64_t xmit_count;
uint64_t recv_count;
uint64_t recv_errors;
} simnet_stats_t;
typedef struct simnet_dev {
list_node_t sd_listnode;
uint_t sd_type;
datalink_id_t sd_link_id;
zoneid_t sd_zoneid;
struct simnet_dev *sd_peer_dev;
uint_t sd_flags;
uint_t sd_refcount;
uint_t sd_threadcount;
kcondvar_t sd_threadwait;
mac_handle_t sd_mh;
simnet_wifidev_t *sd_wifidev;
boolean_t sd_promisc;
kmutex_t sd_instlock;
uint_t sd_mcastaddr_count;
struct ether_addr sd_mcastaddrs[SM_MAX_NUM_MCAST_ADDRS];
uint_t sd_mac_len;
uchar_t sd_mac_addr[MAXMACADDRLEN];
simnet_stats_t sd_stats;
link_state_t sd_ls;
uint_t sd_rx_cksum;
uint_t sd_tx_cksum;
boolean_t sd_lso;
} simnet_dev_t;
#define SD_PROP_RX_IP_CKSUM "_rx_ipv4_cksum"
#define SD_PROP_TX_ULP_CKSUM "_tx_ulp_cksum"
#define SD_PROP_TX_IP_CKSUM "_tx_ipv4_cksum"
#define SD_PROP_LSO "_lso"
#define SD_PROP_LINKSTATE "_linkstate"
#define SDF_SHUTDOWN 0x00000001
#define SDF_STARTED 0x00000002
#define SIMNET_MAX_MTU 9000
#define SD_LSO_MAXLEN 65535
#ifdef __cplusplus
}
#endif
#endif