Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}