📄 if80211table.c
字号:
snmp_set_var_typed_value(var, ASN_OCTET_STR, (u_char *) buf, len); break; case COLUMN_CURRENTSSID: bzero(buf, 100); getCurrentSSID(iface, buf, &len); snmp_set_var_typed_value(var, ASN_OCTET_STR, (u_char *) buf, len); break; case COLUMN_CURRENTBSSID: bzero(buf, 100); getCurrentBSSID(iface, buf, &len); snmp_set_var_typed_value(var, ASN_OCTET_STR, (u_char *) buf, 6); break; case COLUMN_WEPSTATUS: /* need to scale the wepmode from the device to the MIB scale of 1-3 */ l_ret = getWEPmode(iface) + 1; snmp_set_var_typed_value(var, ASN_INTEGER, (u_char *) &l_ret, sizeof(long)); break; case COLUMN_WEPTXKEY: memcpy(oid_ret, WEPIndex_oid, 10 * sizeof(oid)); oid_ret[10] = getPtrIf80211(*index); oid_ret[11] = getWEPtxkey(iface); snmp_set_var_typed_value(var, ASN_OBJECT_ID, (u_char *) oid_ret, 12 * sizeof(oid)); break; case COLUMN_AUTHMODE: /* need to scale the authmode from the device to the MIB scale of 1-3 */ l_ret = getAuthmode(iface) + 1; snmp_set_var_typed_value(var, ASN_INTEGER, (u_char *) &l_ret, sizeof(long)); break; case COLUMN_STATIONNAME: bzero(buf, 100); getStationname(iface, buf, &len); snmp_set_var_typed_value(var, ASN_OCTET_STR, (u_char *) buf, len); break; case COLUMN_CHANNEL: //DEBUGMSGTL(("if80211Table", "getting channel for iface %s", iface)); l_ret = getChannel(iface); snmp_set_var_typed_value(var, ASN_INTEGER, (u_char *) &l_ret, sizeof(long)); break; case COLUMN_POWERSAVEMODE: /* need to scale the powersave mode from device to MIB scale 1-4 */ l_ret = getPowersave(iface) + 1; snmp_set_var_typed_value(var, ASN_INTEGER, (u_char *) &l_ret, sizeof(long)); break; case COLUMN_POWERSAVESLEEP: l_ret = getPowersavesleep(iface); snmp_set_var_typed_value(var, ASN_INTEGER, (u_char *) &l_ret, sizeof(long)); break; case COLUMN_RTSTHRESHOLD: l_ret = getRTSThreshold(iface); snmp_set_var_typed_value(var, ASN_INTEGER, (u_char *) &l_ret, sizeof(long)); break; case COLUMN_PORTTYPE: /* need to scale porttype from device (1, 3, or 6 = bss, adhoc or hostap) to MIB scale of 1-3 */ l_ret = getPortType(iface); switch (l_ret) { case 3: l_ret = 2; break; case 6: l_ret = 3; break; } snmp_set_var_typed_value(var, ASN_INTEGER, (u_char *) &l_ret, sizeof(long)); break; case COLUMN_EWMACONSTBW: l_ret = getEWMAConst_bw(iface); snmp_set_var_typed_value(var, ASN_INTEGER, (u_char *) &l_ret, sizeof(long)); break; case COLUMN_EWMACONSTSNQ: l_ret = getEWMAConst_snq(iface); snmp_set_var_typed_value(var, ASN_INTEGER, (u_char *) &l_ret, sizeof(long)); break; case COLUMN_TIMEOUT_TIME: l_ret = (long) getTimeoutTime(iface); snmp_set_var_typed_value(var, ASN_INTEGER, (u_char *) &l_ret, sizeof(long)); break; default: /* We shouldn't get here */ snmp_log(LOG_ERR, "problem encountered in if80211Table_handler: unknown column\n"); } break; case MODE_SET_RESERVE1: /* set handling... */ /* the next check is probably not necessary because of the check (index == NULL) way up * but just to be sure... *//* if (requestindex < 1 || requestindex > getNumIf80211()) { snmp_log(LOG_ERR, "if80211Table: %ld is not a valid index\n", requestindex); netsnmp_set_request_error(reqinfo, requests, SNMP_NOSUCHINSTANCE); continue; }*/ switch(table_info->colnum) { case COLUMN_IF80211FLAGS: DEBUGMSGTL(("if80211Table", "FLAGS: type = %d; len = %d, str = 0x%x %x %x\n", var->type, var->val_len, var->val.string[0]&0xff, var->val.string[1]&0xff, var->val.string[2]&0xff)); if (var->type != ASN_OCTET_STR) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); if (var->val_len != 3) // although ifflags is 32 bits, only 19 bits are specified in MIB so // we get 3 bytes from snmpset // simply add zeroed 4th bit netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGLENGTH); break; case COLUMN_DESIREDSSID: if (var->type != ASN_OCTET_STR) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); if (var->val_len < 0 || var->val_len > 32) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGLENGTH); str = var->val.string; for (f = 0; f < var->val_len; f++) if ( !(str[f] >= 'a' && str[f] <= 'z') && !(str[f] >= 'A' && str[f] <= 'Z') && !(str[f] >= '0' && str[f] <= '9')) { netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); snmp_log(LOG_ERR, "SSID string contains non-alphanumerical characters\n"); } break; case COLUMN_POWERSAVESLEEP: if (var->type != ASN_INTEGER) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); l_val = *(var->val.integer); if (l_val < 0) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); break; case COLUMN_WEPSTATUS: if (var->type != ASN_INTEGER) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); l_val = *(var->val.integer); if (l_val < 1 || l_val > 3) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); break; case COLUMN_CHANNEL: if (var->type != ASN_INTEGER) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); l_val = *(var->val.integer); if (l_val < 0 || l_val > 13) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); break; case COLUMN_POWERSAVEMODE: if (var->type != ASN_INTEGER) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); l_val = *(var->val.integer); if (l_val < 1 || l_val > 2) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); break; case COLUMN_WEPTXKEY: if (var->type != ASN_OBJECT_ID) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); if (bcmp(var->val.objid, WEPIndex_oid, 10 * sizeof(oid)) != 0) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); if (var->val.objid[10] != getPtrIf80211(*index)) { snmp_log(LOG_ERR, "OBJECT ID must point to WEP key from same interface\n"); netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); } l_val = var->val.objid[11]; break; case COLUMN_STATIONNAME: if (var->type != ASN_OCTET_STR) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); str = var->val.string; DEBUGMSGTL(("if80211Table", "type=%d, val_len=%d", var->type, var->val_len)); if (str == NULL) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); break; case COLUMN_RTSTHRESHOLD: if (var->type != ASN_INTEGER) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); l_val = *(var->val.integer); if (l_val < 0 || l_val > 2347) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); break; case COLUMN_PORTTYPE: if (var->type != ASN_INTEGER) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); l_val = *(var->val.integer); if (l_val < 1 || l_val > 3) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); break; case COLUMN_AUTHMODE: if (var->type != ASN_INTEGER) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); l_val = *(var->val.integer); if (l_val < 1 || l_val > 3) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); break; case COLUMN_EWMACONSTBW: if (var->type != ASN_INTEGER) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); l_val = *(var->val.integer); if (l_val <= 0 || l_val >= 1000) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); break; case COLUMN_EWMACONSTSNQ: if (var->type != ASN_INTEGER) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); l_val = *(var->val.integer); if (l_val <= 0 || l_val >= 1000) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); break; case COLUMN_TIMEOUT_TIME: if (var->type != ASN_INTEGER) netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGTYPE); l_val = *(var->val.integer); if (l_val < 0 || l_val >= 65536) /* u_int16_t maximum */ netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_WRONGVALUE); break; default: snmp_log(LOG_ERR, "SET_RESERVE1: problem encountered in if80211Table_handler: unkown column (probably read-only)\n"); netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_READONLY); } break; case MODE_SET_RESERVE2: break; case MODE_SET_FREE: break; case MODE_SET_ACTION: DEBUGMSGTL(("if80211Table", "entering MODE_SET_ACTION...\n")); s = socket(AF_INET, SOCK_DGRAM, 0); switch(table_info->colnum) { case COLUMN_IF80211FLAGS: //convert the bitstring to MSB first flags[0] = var->val.string[0]; flags[1] = var->val.string[1]; flags[2] = var->val.string[2]; flags[3] = 0; DEBUGMSGTL(("if80211Table", "got MSB first flags 0x%x %x %x %x\n", flags[0], flags[1], flags[2], flags[3])); for (f = 0; f < 3; f++) { tempflags = 0; for (bit = 0; bit < 8; bit++) tempflags |= ((flags[f] & (1 << bit)) >> bit) << (7 - bit); flags[f] = tempflags; } l_val = flags[0]; l_val |= (flags[1] << 8); l_val |= (flags[2] << 16); DEBUGMSGTL(("if80211Table", "setting flags to 0x%x %x %x %x = 0x%xfor iface %s\n", flags[0], flags[1], flags[2], flags[3], l_val, iface)); setIfFlags(iface, l_val); break; case COLUMN_DESIREDSSID: setDesiredSSID(iface, str); break; case COLUMN_POWERSAVESLEEP: setPowersavesleep(iface, l_val); break; case COLUMN_WEPSTATUS: tostring(l_val-1, IEEE80211_IOC_WEP, buf); setWEPmode(iface, buf); break; case COLUMN_CHANNEL: DEBUGMSGTL(("if80211Table", "setting channel for iface %s\n", iface)); setChannel(iface, l_val); break; case COLUMN_POWERSAVEMODE: tostring(l_val-1, IEEE80211_IOC_POWERSAVE, buf); setPowersave(iface, buf); break; case COLUMN_WEPTXKEY: setWEPtxkey(iface, l_val); break; case COLUMN_STATIONNAME: setStationname(iface, var->val.string); break; case COLUMN_RTSTHRESHOLD: setRTSThreshold(iface, l_val); break; case COLUMN_PORTTYPE: switch (l_val) { case 2: l_val = 3; break; //adhoc case 3: l_val = 6; break; //hostap } setPortType(iface, l_val); break; case COLUMN_AUTHMODE: setAuthmode(iface, l_val-1); break; case COLUMN_EWMACONSTBW: setEWMAConst_bw(iface, l_val); break; case COLUMN_EWMACONSTSNQ: setEWMAConst_snq(iface, l_val); break; case COLUMN_TIMEOUT_TIME: setTimeoutTime(iface, (u_int16_t) l_val); break; default: snmp_log(LOG_ERR, "SET_ACTION: problem encountered in if80211Table_handler: unkown column\n"); } if (close(s) < 0) err(1, "close socket"); break; case MODE_SET_COMMIT: break; case MODE_SET_UNDO: break; default: snmp_log(LOG_ERR, "problem encountered in if80211Table_handler: unsupported mode\n"); } } return SNMP_ERR_NOERROR;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -