00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __VIF_H
00013 #define __VIF_H
00014
00044
00045
00046 #include <netinet/in.h>
00047 #include <linux/wireless.h>
00048 #include "iw_compat.h"
00049
00050
00051
00052
00053
00055 #define MAX_NUM_VIF 2
00056
00057
00058
00059
00060
00065 typedef struct vif_info
00066 {
00067 char vif_name[IFNAMSIZ + 1];
00068 unsigned char vif_mac[ETH_ALEN];
00069 struct wireless_info vif_wlaninfo;
00070 }
00071 vif_info;
00072
00077 typedef struct ioctl_handler
00078 {
00079 int ioctl_num;
00080 int (*iw_handler)(struct iwreq * request);
00081 }
00082 ioctl_handler;
00083
00084
00085 #define CONFIG_READONLY 0
00086 #define CONFIG_READWRITE 1
00087
00088
00089
00090
00091
00093 static const long
00094 channel_frequency[] = {
00095 2412, 2417, 2422, 2427, 2432, 2437, 2442,
00096 2447, 2452, 2457, 2462, 2467, 2472
00097 };
00098
00099
00100 #define VIF_WE_VERSION 22
00101 #define VIF_NUM_FREQ sizeof(channel_frequency) / sizeof(long)
00102
00103 #define VIF_NUM_CHANNEL VIF_NUM_FREQ
00104 #define VIF_MAX_RETRY 255
00105 #define VIF_MAX_RTS 2347
00106 #define VIF_DEFAULT_TXPWR 17
00109 static const struct iw_priv_args vif_private_args[] = {
00110 { SIOCSIWMODE, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "mode" }
00111 };
00112
00114 #define VIF_IW_NUM_IOCTL_PRIV (sizeof(vif_private_args) / sizeof(struct iw_priv_args))
00115
00116
00117
00118
00119
00122 ssize_t
00123 vif_init();
00124
00126 int
00127 vif_create(const char *);
00128
00131 int
00132 vif_delete(const char *dev_name);
00133
00141 int
00142 vif_ioctl(int request, struct iwreq *pwrq);
00143
00145 int
00146 vif_get_names(char vif_names[MAX_NUM_VIF][IFNAMSIZ + 1]);
00147
00149 void
00150 vif_print(void);
00151
00153 int
00154 vif_get_mac(unsigned char *, const char *);
00155
00157 uint16_t
00158 vif_get_channel(const char *);
00159
00161 double
00162 vif_get_frequency(const char *);
00163
00165 int16_t
00166 vif_get_sensitivity(const char *);
00167
00169 int16_t
00170 vif_get_rts(const char *);
00171
00173 int16_t
00174 vif_get_frag(const char *);
00175
00177 int16_t
00178 vif_get_txpower(const char *);
00179
00181 int16_t
00182 vif_get_retry(const char *);
00183
00185 void
00186 vif_set_debug_function(int (*debug)(const char *format, ...));
00187
00189 void
00190 vif_set_error_function(int (*error)(const char *format, ...));
00191
00192
00193
00194
00195
00196 int vif_siocgiwname(struct iwreq *);
00197 int vif_siocgiwnid(struct iwreq *);
00198 int vif_siocsiwfreq(struct iwreq *);
00199 int vif_siocgiwfreq(struct iwreq *);
00200 int vif_siocsiwmode(struct iwreq *);
00201 int vif_siocgiwmode(struct iwreq *);
00202 int vif_siocsiwsens(struct iwreq *);
00203 int vif_siocgiwsens(struct iwreq *);
00204 int vif_siocgiwrange(struct iwreq *);
00205 int vif_siocgiwpriv(struct iwreq *);
00206 int vif_siocgiwap(struct iwreq *);
00207 int vif_siocsiwessid(struct iwreq *);
00208 int vif_siocgiwessid(struct iwreq *);
00209 int vif_siocgiwnickn(struct iwreq *);
00210 int vif_siocsiwrate(struct iwreq *);
00211 int vif_siocgiwrate(struct iwreq *);
00212 int vif_siocsiwrts(struct iwreq *);
00213 int vif_siocgiwrts(struct iwreq *);
00214 int vif_siocsiwfrag(struct iwreq *);
00215 int vif_siocgiwfrag(struct iwreq *);
00216 int vif_siocsiwtxpow(struct iwreq *);
00217 int vif_siocgiwtxpow(struct iwreq *);
00218 int vif_siocsiwretry(struct iwreq *);
00219 int vif_siocgiwretry(struct iwreq *);
00220 int vif_siocsiwencode(struct iwreq *);
00221 int vif_siocgiwencode(struct iwreq *);
00222 int vif_siocgiwpower(struct iwreq *);
00223
00224
00225
00226
00227
00229 static const ioctl_handler ioctl_handler_list[] = {
00230 { SIOCGIWNAME, vif_siocgiwname },
00231 { SIOCGIWNWID, vif_siocgiwnid },
00232 { SIOCSIWFREQ, vif_siocsiwfreq },
00233 { SIOCGIWFREQ, vif_siocgiwfreq },
00234 { SIOCSIWMODE, vif_siocsiwmode },
00235 { SIOCGIWMODE, vif_siocgiwmode },
00236 { SIOCSIWSENS, vif_siocsiwsens },
00237 { SIOCGIWSENS, vif_siocgiwsens },
00238 { SIOCGIWRANGE, vif_siocgiwrange },
00239 { SIOCGIWPRIV, vif_siocgiwpriv },
00240 { SIOCGIWAP, vif_siocgiwap },
00241 { SIOCSIWESSID, vif_siocsiwessid },
00242 { SIOCGIWESSID, vif_siocgiwessid },
00243 { SIOCGIWNICKN, vif_siocgiwnickn },
00244 { SIOCSIWRATE, vif_siocsiwrate },
00245 { SIOCGIWRATE, vif_siocgiwrate },
00246 { SIOCSIWRTS, vif_siocsiwrts },
00247 { SIOCGIWRTS, vif_siocgiwrts },
00248 { SIOCSIWFRAG, vif_siocsiwfrag },
00249 { SIOCGIWFRAG, vif_siocgiwfrag },
00250 { SIOCSIWTXPOW, vif_siocsiwtxpow },
00251 { SIOCGIWTXPOW, vif_siocgiwtxpow },
00252 { SIOCSIWRETRY, vif_siocsiwretry },
00253 { SIOCGIWRETRY, vif_siocgiwretry },
00254 { SIOCSIWENCODE, vif_siocsiwencode },
00255 { SIOCGIWENCODE, vif_siocgiwencode },
00256 { SIOCGIWPOWER, vif_siocgiwpower }
00257 };
00258
00260 #define VIF_NUM_IOCTL sizeof(ioctl_handler_list) / sizeof(ioctl_handler)
00261
00262 #endif // __VIF_H