1: #include "global.h"
2: #include "dwds.h"
3:
4:
5: inline int
6: wifi_getParent(const char *csVAP, char *psParent, size_t plen)
7: {
8: char szOID[STRSIZ] = { 0 };
9:
10: FTRACE(5);
11:
12: assert(csVAP);
13: assert(psParent);
14:
15: memset(psParent, 0, plen);
16: snprintf(szOID, STRSIZ, "net.wlan.%s.%%parent", csVAP + 4);
17: if (sysctlbyname(szOID, psParent, &plen, NULL, 0) == -1) {
18: syslog(LOG_ERR, "Error:: can`t get parent #%d - %s\n", errno, strerror(errno));
19: return -1;
20: } else
21: psParent[plen] = 0;
22:
23: return 0;
24: }
25:
26: inline int
27: wifi_chkIface(const char *csIface, char **ppsIF, int nIF)
28: {
29: char szParent[IFNAMSIZ];
30: register int i;
31:
32: FTRACE(5);
33:
34: assert(csIface);
35:
36: if (wifi_getParent(csIface, szParent, IFNAMSIZ) == -1)
37: return -1;
38:
39: for (i = 0; i < nIF; i++)
40: if (!strcasecmp(ppsIF[i], "any") || !strcmp(ppsIF[i], szParent))
41: return 1; /* OK, vap is child */
42:
43: syslog(LOG_ERR, "Error:: Interface %s parent %s not being monitored", csIface, szParent);
44: return 0;
45: }
46:
47: inline int
48: wifi_isWDS(int fd, const char *csVAP)
49: {
50: struct ifmediareq ifmr;
51:
52: FTRACE(5);
53:
54: assert(csVAP);
55:
56: memset(&ifmr, 0, sizeof ifmr);
57: strlcpy(ifmr.ifm_name, csVAP, sizeof ifmr.ifm_name);
58: if (ioctl(fd, SIOCGIFMEDIA, &ifmr) == -1) {
59: syslog(LOG_ERR, "Error:: can`t get media for %s #%d - %s\n", csVAP,
60: errno, strerror(errno));
61: return -1;
62: }
63:
64: return (ifmr.ifm_current & IFM_IEEE80211_WDS) != 0;
65: }
66:
67: inline int
68: wifi_getBSSID(int fd, const char *csVAP, uint8_t *psBSSID, int len)
69: {
70: struct ieee80211req ireq;
71:
72: FTRACE(5);
73:
74: assert(csVAP);
75: assert(psBSSID);
76:
77: memset(&ireq, 0, sizeof ireq);
78: strlcpy(ireq.i_name, csVAP, sizeof ireq.i_name);
79: ireq.i_type = IEEE80211_IOC_BSSID;
80: ireq.i_data = psBSSID;
81: ireq.i_len = len;
82: if (ioctl(fd, SIOCG80211, &ireq) == -1) {
83: syslog(LOG_ERR, "Error:: can`t get BSSID for %s #%d - %s\n", csVAP,
84: errno, strerror(errno));
85: return -1;
86: }
87:
88: return 0;
89: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>