📄 netdev_lib.h
字号:
/*
Copyright (c) 2008, Intel Corporation.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* Neither the name of Intel Corporation nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF SUCH DAMAGE.
*/#ifndef _NETDEV_LIB_H#define _NETDEV_LIB_H#include <vector>using namespace std;typedef enum { NETDEV_ERROR = -255, NETDEV_FAIL = -254, NETDEV_SUCCESS = 0}netdev_ret;#define NETDEVNAMSIZ 16//general ethernet public APIsstruct _statistics{ unsigned long long rx_bytes; unsigned long long rx_packets; unsigned long rx_errors; unsigned long rx_dropped; unsigned long rx_fifo_errors; unsigned long rx_frame_errors; unsigned long rx_compressed; unsigned long rx_multicast; unsigned long long tx_bytes; unsigned long long tx_packets; unsigned long tx_errors; unsigned long tx_dropped; unsigned long tx_fifo_errors; unsigned long tx_frame_errors; unsigned long tx_compressed; unsigned long tx_multicast;};typedef struct _statistics netdev_statistics;struct _multicast_addr{ unsigned long maddr; int users;};struct _netdev_multicast{ int index; char ifname[NETDEVNAMSIZ]; vector<struct _multicast_addr> maddr_list;};typedef struct _netdev_multicast netdev_multicast;enum _netdev_type { TYPE_UNKNOWN = 0, TYPE_802_3, TYPE_802_11, TYPE_BLUETOOTH};typedef enum _netdev_type netdev_type;enum _netdev_enabled { ENABLED_UNKNOWN = 0, ENABLED_UP, ENABLED_DOWN};typedef enum _netdev_enabled netdev_enabled;enum _netdev_running { RUNNING_UNKNOWN = 0, RUNNING_RUN, RUNNING_STOP};typedef enum _netdev_running netdev_running;#define HWADDRLEN 6#define IPV4ADDRLEN 4typedef char netdev_hwaddr[HWADDRLEN];typedef unsigned long netdev_ipaddr;typedef unsigned long netdev_netmask;typedef unsigned long netdev_brdaddr;typedef unsigned long netdev_maddr;struct _netdev_dev{ char ifname[NETDEVNAMSIZ]; int index; netdev_hwaddr hwaddr;};typedef struct _netdev_dev netdev_dev; netdev_ret netdev_get_devices(/*out*/vector<netdev_dev> &dev_list);netdev_ret netdev_get_device(const char *ifname, netdev_dev &dev);netdev_ret netdev_get_type(/*in*/netdev_dev &dev, /*out*/netdev_type &type); netdev_ret netdev_get_index(/*in*/netdev_dev &dev, /*out*/int &index);netdev_ret netdev_get_hwaddr(/*in*/netdev_dev &dev, /*out*/netdev_hwaddr &hwaddr);netdev_ret netdev_get_ipaddr(/*in*/netdev_dev &dev, /*out*/netdev_ipaddr &ipaddr);netdev_ret netdev_get_netmask(/*in*/netdev_dev &dev, /*out*/netdev_netmask &netmask);netdev_ret netdev_get_brdaddr(/*in*/netdev_dev &dev, /*out*/netdev_brdaddr &brdaddr);netdev_ret netdev_get_multicast(/*in*/netdev_dev &dev, /*out*/vector<netdev_maddr> &maddr_list);netdev_ret netdev_get_enabled(/*in*/netdev_dev &dev, /*out*/netdev_enabled &enabled);netdev_ret netdev_get_running(/*in*/netdev_dev &dev, /*out*/netdev_running &running);netdev_ret netdev_get_statistics(/*in*/netdev_dev &dev, /*out*/netdev_statistics &stat);//wireless(802.11) public APIs#define WNETDEVESSIDMAXSIZ 33#define WNETDEVBSSIDLEN 6typedef char wnetdev_ssid[WNETDEVESSIDMAXSIZ];typedef double wnetdev_freq;enum _wnetdev_opt_mode {OPTMODE_UNKNOWN = 0, OPTMODE_AUTO, OPTMODE_ADHOC, OPTMODE_INFRASTRUCTURE};typedef _wnetdev_opt_mode wnetdev_opt_mode;typedef unsigned long wnetdev_bitrate;typedef unsigned long wnetdev_channel;typedef char wnetdev_bssid[WNETDEVBSSIDLEN];typedef unsigned long wnetdev_quality;typedef signed long wnetdev_signal; //the unit is dBmtypedef unsigned long wnetdev_rts_threshold;typedef unsigned long wnetdev_frag_threshold;typedef unsigned long wnetdev_txpower; //the unit is mWatt struct _wnetdev_freq_channel{ wnetdev_channel channel; wnetdev_freq freq;};typedef struct _wnetdev_freq_channel wnetdev_freq_channel;struct _wnetdev_error_stats{ unsigned long discard_essid; //unit is us unsigned long discard_encrypt; unsigned long discard_frag; unsigned long discard_retry; unsigned long miss_beacon;};typedef _wnetdev_error_stats wnetdev_error_stats;enum _wnetdev_pm_mode {PM_UNKNOWN = 0, PM_ALL, PM_UNICAST_ONLY, PM_MULTICAST_ONLY, PM_FORCE_SEND, PM_REPEAT_MUL};typedef enum _wnetdev_pm_mode wnetdev_pm_mode;struct _wnetdev_pm_info{ unsigned long min_period; unsigned long max_period; unsigned long current_period; wnetdev_pm_mode mode;};typedef struct _wnetdev_pm_info wnetdev_pm_info;#define WNETDEVKEYLENMAX 32enum _wnetdev_wep_mode {WEP_UNKNOWN = 0, WEP_OPEN, WEP_RESTRICTED};typedef _wnetdev_wep_mode wnetdev_wep_mode;struct _wnetdev_wep{ unsigned char index; unsigned long key_len; unsigned char key[WNETDEVKEYLENMAX]; wnetdev_wep_mode mode;};typedef _wnetdev_wep wnetdev_wep;netdev_ret wnetdev_get_ssid(netdev_dev &dev, wnetdev_ssid &ssid);netdev_ret wnetdev_get_freq(netdev_dev &dev, wnetdev_freq &freq);netdev_ret wnetdev_get_channel(netdev_dev &dev, wnetdev_channel &channel);netdev_ret wnetdev_get_supported_freqs(netdev_dev &dev, vector<wnetdev_freq_channel> &freq_list);netdev_ret wnetdev_get_opt_mode(netdev_dev &dev, wnetdev_opt_mode &mode);netdev_ret wnetdev_get_bitrate(netdev_dev &dev, wnetdev_bitrate &rate);netdev_ret wnetdev_get_supported_bitrates(netdev_dev &dev, vector<wnetdev_bitrate> &rates_list);//this method will return the ap addr in infrastructure mode, but the cell addr in ad-hoc modenetdev_ret wnetdev_get_bssid(netdev_dev &dev, wnetdev_bssid &bssid);//for compatible to version 16 or previous#define WNETDEVINVALIDQUAL 0x10//this method will return the quality value relative to max 100netdev_ret wnetdev_get_quality(netdev_dev &dev, wnetdev_quality &quality);#define WNETDEVINVALIDSIG 0x20netdev_ret wnetdev_get_signal(netdev_dev &dev, wnetdev_signal &signal);netdev_ret wnetdev_get_error_stats(netdev_dev &dev, wnetdev_error_stats &error_stats);netdev_ret wnetdev_get_rts_threshold(netdev_dev &dev, wnetdev_rts_threshold &rts);netdev_ret wnetdev_get_frag_threshold(netdev_dev &dev, wnetdev_frag_threshold &frag);netdev_ret wnetdev_get_wep(netdev_dev &dev, wnetdev_wep &wep);netdev_ret wnetdev_get_txpower(netdev_dev &dev, wnetdev_txpower &txpower);netdev_ret wnetdev_get_pm_info(netdev_dev &dev, wnetdev_pm_info &pm_info);//bluetooth public APIs#define BTDEVNAMSIZ 8#define BTADDRLEN HWADDRLENtypedef unsigned short btdev_id;typedef char btdev_addr[BTADDRLEN];struct _btdev_dev{ char name[BTDEVNAMSIZ]; btdev_id dev_id; btdev_addr addr;};typedef struct _btdev_dev btdev_dev;netdev_ret btdev_get_devices(/*out*/vector<btdev_dev> &btdev_list);netdev_ret btdev_get_netdev(/*in*/btdev_dev &btdev, /*out*/netdev_dev &netdev);netdev_ret netdev_get_btdev(/*in*/netdev_dev &netdev, /*out*/btdev_dev &btdev);netdev_ret btdev_get_addr(btdev_dev &dev, btdev_addr &addr);netdev_ret btdev_get_devid(btdev_dev &dev, btdev_id dev_id);netdev_ret _get_socket(int &sock);netdev_ret _close_socket(int sock);netdev_ret _get_iwreq(char *ifname, int cmd, struct iwreq &iwr);netdev_ret _set_iwreq(char *ifname, int cmd, struct iwreq &iwr);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -