static u_char* snmp_mail(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { char *m; if ((m = (char *)snmp_header_list_table(vp, name, length, exact, var_len, write_method, data->email)) == NULL) return NULL; switch (vp->magic) { case SNMP_MAIL_EMAILADDRESS: *var_len = strlen(m); return (u_char *)m; default: break; } return NULL; }
static u_char* check_snmp_vsgroup(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { virtual_server_group_t *g; if ((g = (virtual_server_group_t *) snmp_header_list_table(vp, name, length, exact, var_len, write_method, check_data->vs_group)) == NULL) return NULL; switch (vp->magic) { case CHECK_SNMP_VSGROUPNAME: *var_len = strlen(g->gname); return (u_char *)g->gname; default: break; } return NULL; }
static u_char* check_snmp_virtualserver(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { static struct counter64 counter64_ret; virtual_server_t *v; element e; if ((v = (virtual_server_t *) snmp_header_list_table(vp, name, length, exact, var_len, write_method, check_data->vs)) == NULL) return NULL; switch (vp->magic) { case CHECK_SNMP_VSTYPE: if (v->vsgname) long_ret.u = 3; else if (v->vfwmark) long_ret.u = 1; else long_ret.u = 2; return (u_char*)&long_ret; case CHECK_SNMP_VSNAMEGROUP: if (!v->vsgname) break; *var_len = strlen(v->vsgname); return (u_char*)v->vsgname; case CHECK_SNMP_VSFWMARK: if (!v->vfwmark) break; long_ret.u = v->vfwmark; return (u_char*)&long_ret; case CHECK_SNMP_VSADDRTYPE: if (v->vfwmark || v->vsgname) break; long_ret.u = (v->addr.ss_family == AF_INET6) ? 2:1; return (u_char*)&long_ret; case CHECK_SNMP_VSADDRESS: if (v->vfwmark || v->vsgname) break; RETURN_IP46ADDRESS(v); break; case CHECK_SNMP_VSPORT: if (v->vfwmark || v->vsgname) break; long_ret.u = htons(inet_sockaddrport(&v->addr)); return (u_char *)&long_ret; case CHECK_SNMP_VSPROTOCOL: long_ret.u = (v->service_type == IPPROTO_TCP)?1:2; return (u_char*)&long_ret; case CHECK_SNMP_VSLOADBALANCINGALGO: if (!strcmp(v->sched, "rr")) long_ret.u = 1; else if (!strcmp(v->sched, "wrr")) long_ret.u = 2; else if (!strcmp(v->sched, "lc")) long_ret.u = 3; else if (!strcmp(v->sched, "wlc")) long_ret.u = 4; else if (!strcmp(v->sched, "lblc")) long_ret.u = 5; else if (!strcmp(v->sched, "lblcr")) long_ret.u = 6; else if (!strcmp(v->sched, "dh")) long_ret.u = 7; else if (!strcmp(v->sched, "sh")) long_ret.u = 8; else if (!strcmp(v->sched, "sed")) long_ret.u = 9; else if (!strcmp(v->sched, "nq")) long_ret.u = 10; else long_ret.u = 99; return (u_char*)&long_ret; case CHECK_SNMP_VSLOADBALANCINGKIND: long_ret.u = 0; switch (v->loadbalancing_kind) { case IP_VS_CONN_F_MASQ: long_ret.u = 1; break; case IP_VS_CONN_F_DROUTE: long_ret.u = 2; break; case IP_VS_CONN_F_TUNNEL: long_ret.u = 3; break; } if (!long_ret.u) break; return (u_char*)&long_ret; case CHECK_SNMP_VSSTATUS: long_ret.u = v->alive?1:2; return (u_char*)&long_ret; case CHECK_SNMP_VSVIRTUALHOST: if (!v->virtualhost) break; *var_len = strlen(v->virtualhost); return (u_char*)v->virtualhost; case CHECK_SNMP_VSPERSIST: long_ret.u = (v->persistence_timeout)?1:2; return (u_char*)&long_ret; case CHECK_SNMP_VSPERSISTTIMEOUT: if (!v->persistence_timeout) break; long_ret.u = v->persistence_timeout; return (u_char*)&long_ret; case CHECK_SNMP_VSPERSISTGRANULARITY: if (!v->persistence_granularity || v->addr.ss_family == AF_INET6) break; *var_len = sizeof(v->persistence_granularity); return (u_char*)&v->persistence_granularity; case CHECK_SNMP_VSPERSISTGRANULARITY6: if (!v->persistence_granularity || v->addr.ss_family == AF_INET) break; *var_len = sizeof(v->persistence_granularity); return (u_char*)&v->persistence_granularity; case CHECK_SNMP_VSDELAYLOOP: if (v->delay_loop >= TIMER_MAX_SEC) long_ret.u = v->delay_loop/TIMER_HZ; else long_ret.u = v->delay_loop; return (u_char*)&long_ret; case CHECK_SNMP_VSHASUSPEND: long_ret.u = v->ha_suspend?1:2; return (u_char*)&long_ret; #ifdef IP_VS_SVC_F_ONEPACKET case CHECK_SNMP_VSOPS: long_ret.u = v->flags & IP_VS_SVC_F_ONEPACKET?1:2; return (u_char*)&long_ret; #endif case CHECK_SNMP_VSALPHA: long_ret.u = v->alpha?1:2; return (u_char*)&long_ret; case CHECK_SNMP_VSOMEGA: long_ret.u = v->omega?1:2; return (u_char*)&long_ret; case CHECK_SNMP_VSQUORUM: long_ret.u = v->quorum; return (u_char*)&long_ret; case CHECK_SNMP_VSQUORUMSTATUS: long_ret.u = v->quorum_state?1:2; return (u_char*)&long_ret; case CHECK_SNMP_VSQUORUMUP: if (!v->quorum_up) break; *var_len = strlen(v->quorum_up->name); return (u_char*)v->quorum_up->name; case CHECK_SNMP_VSQUORUMDOWN: if (!v->quorum_down) break; *var_len = strlen(v->quorum_down->name); return (u_char*)v->quorum_down->name; case CHECK_SNMP_VSHYSTERESIS: long_ret.u = v->hysteresis; return (u_char*)&long_ret; case CHECK_SNMP_VSREALTOTAL: if (LIST_ISEMPTY(v->rs)) long_ret.u = 0; else long_ret.u = LIST_SIZE(v->rs); return (u_char*)&long_ret; case CHECK_SNMP_VSREALUP: long_ret.u = 0; if (!LIST_ISEMPTY(v->rs)) for (e = LIST_HEAD(v->rs); e; ELEMENT_NEXT(e)) if (((real_server_t *)ELEMENT_DATA(e))->alive) long_ret.u++; return (u_char*)&long_ret; case CHECK_SNMP_VSSTATSCONNS: ipvs_update_stats(v); long_ret.u = v->stats.conns; return (u_char*)&long_ret; case CHECK_SNMP_VSSTATSINPKTS: ipvs_update_stats(v); long_ret.u = v->stats.inpkts; return (u_char*)&long_ret; case CHECK_SNMP_VSSTATSOUTPKTS: ipvs_update_stats(v); long_ret.u = v->stats.outpkts; return (u_char*)&long_ret; case CHECK_SNMP_VSSTATSINBYTES: ipvs_update_stats(v); counter64_ret.low = v->stats.inbytes & 0xffffffff; counter64_ret.high = v->stats.inbytes >> 32; *var_len = sizeof(struct counter64); return (u_char*)&counter64_ret; case CHECK_SNMP_VSSTATSOUTBYTES: ipvs_update_stats(v); counter64_ret.low = v->stats.outbytes & 0xffffffff; counter64_ret.high = v->stats.outbytes >> 32; *var_len = sizeof(struct counter64); return (u_char*)&counter64_ret; case CHECK_SNMP_VSRATECPS: ipvs_update_stats(v); long_ret.u = v->stats.cps; return (u_char*)&long_ret; case CHECK_SNMP_VSRATEINPPS: ipvs_update_stats(v); long_ret.u = v->stats.inpps; return (u_char*)&long_ret; case CHECK_SNMP_VSRATEOUTPPS: ipvs_update_stats(v); long_ret.u = v->stats.outpps; return (u_char*)&long_ret; case CHECK_SNMP_VSRATEINBPS: ipvs_update_stats(v); long_ret.u = v->stats.inbps; return (u_char*)&long_ret; case CHECK_SNMP_VSRATEOUTBPS: ipvs_update_stats(v); long_ret.u = v->stats.outbps; return (u_char*)&long_ret; #ifdef _WITH_LVS_64BIT_STATS_ case CHECK_SNMP_VSSTATSCONNS64: ipvs_update_stats(v); counter64_ret.low = v->stats.conns & 0xffffffff; counter64_ret.high = v->stats.conns >> 32; *var_len = sizeof(struct counter64); return (u_char*)&counter64_ret; case CHECK_SNMP_VSSTATSINPKTS64: ipvs_update_stats(v); counter64_ret.low = v->stats.inpkts & 0xffffffff; counter64_ret.high = v->stats.inpkts >> 32; *var_len = sizeof(struct counter64); return (u_char*)&counter64_ret; case CHECK_SNMP_VSSTATSOUTPKTS64: ipvs_update_stats(v); counter64_ret.low = v->stats.outpkts & 0xffffffff; counter64_ret.high = v->stats.outpkts >> 32; *var_len = sizeof(struct counter64); return (u_char*)&counter64_ret; case CHECK_SNMP_VSRATECPSLOW: ipvs_update_stats(v); long_ret.u = v->stats.cps & 0xffffffff; return (u_char*)&counter64_ret; case CHECK_SNMP_VSRATECPSHIGH: ipvs_update_stats(v); long_ret.u = v->stats.cps >> 32; return (u_char*)&long_ret; case CHECK_SNMP_VSRATEINPPSLOW: ipvs_update_stats(v); long_ret.u = v->stats.inpps & 0xffffffff; return (u_char*)&counter64_ret; case CHECK_SNMP_VSRATEINPPSHIGH: ipvs_update_stats(v); long_ret.u = v->stats.inpps >> 32; return (u_char*)&long_ret; case CHECK_SNMP_VSRATEOUTPPSLOW: ipvs_update_stats(v); long_ret.u = v->stats.outpps & 0xffffffff; return (u_char*)&counter64_ret; case CHECK_SNMP_VSRATEOUTPPSHIGH: ipvs_update_stats(v); long_ret.u = v->stats.outpps >> 32; return (u_char*)&long_ret; case CHECK_SNMP_VSRATEINBPSLOW: ipvs_update_stats(v); long_ret.u = v->stats.inbps & 0xffffffff; return (u_char*)&counter64_ret; case CHECK_SNMP_VSRATEINBPSHIGH: ipvs_update_stats(v); long_ret.u = v->stats.inbps >> 32; return (u_char*)&long_ret; case CHECK_SNMP_VSRATEOUTBPSLOW: ipvs_update_stats(v); long_ret.u = v->stats.outbps & 0xffffffff; return (u_char*)&counter64_ret; case CHECK_SNMP_VSRATEOUTBPSHIGH: ipvs_update_stats(v); long_ret.u = v->stats.outbps >> 32; return (u_char*)&long_ret; #endif #ifdef IP_VS_SVC_F_SCHED1 case CHECK_SNMP_VSHASHED: long_ret.u = v->flags & IP_VS_SVC_F_HASHED ? 1 : 2; return (u_char*)&long_ret; case CHECK_SNMP_VSSHFALLBACK: long_ret.u = v->flags & IP_VS_SVC_F_SCHED_SH_FALLBACK ? 1 : 2; return (u_char*)&long_ret; case CHECK_SNMP_VSSHPORT: long_ret.u = v->flags & IP_VS_SVC_F_SCHED_SH_PORT ? 1 : 2; return (u_char*)&long_ret; case CHECK_SNMP_VSSCHED3: long_ret.u = v->flags & IP_VS_SVC_F_SCHED3 ? 1 : 2; return (u_char*)&long_ret; #endif default: return NULL; } if (!exact && (name[*length-1] < MAX_SUBID)) return check_snmp_virtualserver(vp, name, length, exact, var_len, write_method); return NULL; }