Esempio n. 1
0
asn_t *
snmp_get_ifLastChange (snmp_t *snmp, unsigned nif, ...)
{
    if (! find_netif (snmp->ip->route, nif))
        return 0;
    return asn_make_int (snmp->pool, 0, ASN_TIME_TICKS);
}
Esempio n. 2
0
asn_t *
snmp_get_ifIndex (snmp_t *snmp, unsigned nif, ...)
{
    if (! find_netif (snmp->ip->route, nif))
        return 0;
    return asn_make_int (snmp->pool, nif, ASN_INTEGER);
}
Esempio n. 3
0
asn_t *snmp_get_udpLocalPort (snmp_t *snmp, unsigned long addr,
	unsigned port, ...)
{
	if (! find_socket (snmp->ip, addr, port))
		return 0;
	return asn_make_int (snmp->pool, port, ASN_INTEGER);
}
Esempio n. 4
0
asn_t *snmp_get_udpLocalAddress (snmp_t *snmp, unsigned long addr,
	unsigned port, ...)
{
	if (! find_socket (snmp->ip, addr, port))
		return 0;
	return asn_make_int (snmp->pool, addr, ASN_IP_ADDRESS);
}
Esempio n. 5
0
asn_t *
snmp_get_ifOperStatus (snmp_t *snmp, unsigned nif, ...)
{
    if (! find_netif (snmp->ip->route, nif))
        return 0;
    return asn_make_int (snmp->pool, SNMP_IFS_UP, ASN_INTEGER);
}
Esempio n. 6
0
asn_t *
snmp_get_ifInDiscards (snmp_t *snmp, unsigned nif, ...)
{
    netif_t *u = find_netif (snmp->ip->route, nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->in_discards, ASN_COUNTER);
}
Esempio n. 7
0
asn_t *
snmp_get_ifInUnknownProtos (snmp_t *snmp, unsigned nif, ...)
{
    netif_t *u = find_netif (snmp->ip->route, nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->in_unknown_protos, ASN_COUNTER);
}
Esempio n. 8
0
asn_t *
snmp_get_ifOutErrors (snmp_t *snmp, unsigned nif, ...)
{
    netif_t *u = find_netif (snmp->ip->route, nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->out_errors, ASN_COUNTER);
}
Esempio n. 9
0
asn_t *
snmp_get_ifOutQLen (snmp_t *snmp, unsigned nif, ...)
{
    netif_t *u = find_netif (snmp->ip->route, nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->out_qlen, ASN_GAUGE);
}
Esempio n. 10
0
asn_t *
snmp_get_ifOutUcastPkts (snmp_t *snmp, unsigned nif, ...)
{
    netif_t *u = find_netif (snmp->ip->route, nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->out_packets - u->out_mcast_pkts, ASN_COUNTER);
}
Esempio n. 11
0
asn_t *asn_make_cnt32as16 (struct _mem_pool_t *pool, unsigned long val)
{
	if (val == -1)
		return asn_make_null (pool);
	if (val > (unsigned short) -2)
		val = (unsigned short) -2;
	return asn_make_int (pool, val, ASN_INTEGER);
}
Esempio n. 12
0
asn_t *
snmp_get_ifType (snmp_t *snmp, unsigned nif, ...)
{
    netif_t *u = find_netif (snmp->ip->route, nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->type, ASN_INTEGER);
}
Esempio n. 13
0
asn_t *
snmp_get_ifSpeed (snmp_t *snmp, unsigned nif, ...)
{
    netif_t *u = find_netif (snmp->ip->route, nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->bps, ASN_GAUGE);
}
Esempio n. 14
0
asn_t *
snmp_next_ifLastChange (snmp_t *snmp, bool_t nextflag, unsigned *nif, ...)
{
    if (nextflag)
        ++*nif;
    else
        *nif = 1;
    if (! find_netif (snmp->ip->route, *nif))
        return 0;
    return asn_make_int (snmp->pool, 0, ASN_TIME_TICKS);
}
Esempio n. 15
0
asn_t *
snmp_next_ifIndex (snmp_t *snmp, bool_t nextflag, unsigned *nif, ...)
{
    if (nextflag)
        ++*nif;
    else
        *nif = 1;
    if (! find_netif (snmp->ip->route, *nif))
        return 0;
    return asn_make_int (snmp->pool, *nif, ASN_INTEGER);
}
Esempio n. 16
0
asn_t *
snmp_next_ifAdminStatus (snmp_t *snmp, bool_t nextflag, unsigned *nif, ...)
{
    if (nextflag)
        ++*nif;
    else
        *nif = 1;
    if (! find_netif (snmp->ip->route, *nif))
        return 0;
    return asn_make_int (snmp->pool, SNMP_IFS_UP, ASN_INTEGER);
}
Esempio n. 17
0
asn_t *
snmp_next_ifType (snmp_t *snmp, bool_t nextflag, unsigned *nif, ...)
{
    netif_t *u;

    if (nextflag)
        ++*nif;
    else
        *nif = 1;
    u = find_netif (snmp->ip->route, *nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->type, ASN_INTEGER);
}
Esempio n. 18
0
asn_t *
snmp_next_ifOutQLen (snmp_t *snmp, bool_t nextflag, unsigned *nif, ...)
{
    netif_t *u;

    if (nextflag)
        ++*nif;
    else
        *nif = 1;
    u = find_netif (snmp->ip->route, *nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->out_qlen, ASN_GAUGE);
}
Esempio n. 19
0
asn_t *
snmp_next_ifOutErrors (snmp_t *snmp, bool_t nextflag, unsigned *nif, ...)
{
    netif_t *u;

    if (nextflag)
        ++*nif;
    else
        *nif = 1;
    u = find_netif (snmp->ip->route, *nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->out_errors, ASN_COUNTER);
}
Esempio n. 20
0
asn_t *
snmp_next_ifInNUcastPkts (snmp_t *snmp, bool_t nextflag, unsigned *nif, ...)
{
    netif_t *u;

    if (nextflag)
        ++*nif;
    else
        *nif = 1;
    u = find_netif (snmp->ip->route, *nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->in_mcast_pkts, ASN_COUNTER);
}
Esempio n. 21
0
asn_t *
snmp_next_ifInUnknownProtos (snmp_t *snmp, bool_t nextflag, unsigned *nif, ...)
{
    netif_t *u;

    if (nextflag)
        ++*nif;
    else
        *nif = 1;
    u = find_netif (snmp->ip->route, *nif);
    if (! u)
        return 0;
    return asn_make_int (snmp->pool, u->in_unknown_protos, ASN_COUNTER);
}
Esempio n. 22
0
asn_t *snmp_next_udpLocalPort (snmp_t *snmp, bool_t nextflag,
	unsigned long *addr, unsigned *port, ...)
{
	udp_socket_t *s;

	if (nextflag)
		s = find_next_socket (snmp->ip, *addr, *port);
	else	s = find_first_socket (snmp->ip);
	if (s) {
		*addr = s->local_ip ? LONG (ipref_as_ucs(s->local_ip)) : 0;
		*port = s->local_port;
	} else	return 0;

	return asn_make_int (snmp->pool, *port, ASN_INTEGER);
}
Esempio n. 23
0
IF_VARIABLE_LIST

asn_t *
snmp_get_ifNumber (snmp_t *snmp, ...)
{
    route_t *r;
    unsigned count;

    count = 0;
    for (r=snmp->ip->route; r; r=r->next)
        /* Count all interface records. */
        if (r->netif && ! r->gateway.ucs[0])
            ++count;

    return asn_make_int (snmp->pool, count, ASN_INTEGER);
}
Esempio n. 24
0
asn_t *snmp_get_udpInErrors (snmp_t *snmp, ...)
{
	return asn_make_int (snmp->pool, snmp->ip->udp_in_errors, ASN_COUNTER);
}
Esempio n. 25
0
asn_t *snmp_get_udpOutDatagrams (snmp_t *snmp, ...)
{
	return asn_make_int (snmp->pool, snmp->ip->udp_out_datagrams, ASN_COUNTER);
}
Esempio n. 26
0
asn_t *snmp_get_udpNoPorts (snmp_t *snmp, ...)
{
	return asn_make_int (snmp->pool, snmp->ip->udp_no_ports, ASN_COUNTER);
}
Esempio n. 27
0
asn_t *snmp_get_icmpOutTimeExcds (snmp_t *snmp, ...)
{
	return asn_make_int (snmp->pool, snmp->ip->icmp_out_time_excds, ASN_COUNTER);
}
Esempio n. 28
0
asn_t *snmp_get_icmpOutParmProbs (snmp_t *snmp, ...)
{
	return asn_make_int (snmp->pool, snmp->ip->icmp_out_parm_probs, ASN_COUNTER);
}
Esempio n. 29
0
UDP_VARIABLE_LIST

asn_t *snmp_get_udpInDatagrams (snmp_t *snmp, ...)
{
	return asn_make_int (snmp->pool, snmp->ip->udp_in_datagrams, ASN_COUNTER);
}
Esempio n. 30
0
/*
 * Send trap, SNMP v1 (RFC 1157).
 * SEQUENCE {
 *	version: INTEGER [=0]
 *	community: STRING
 *	pdu: SEQUENCE [=TRAP] {
 *		enterprise: OBJECT IDENTIFIER
 *		agent-addr: NetworkAddress
 *		generic-trap: INTEGER
 *		specific-trap: INTEGER
 *		time-stamp: INTEGER
 *		varlist: SEQUENCE {
 *			var1: SEQUENCE {
 *				name: OID
 *				value: ...
 *			}
 *			...
 * }	}	}
 */
bool_t
snmp_trap_v1 (snmp_t *snmp, udp_socket_t *sock, unsigned char *local_ip,
	unsigned trap_type, asn_t *oid, asn_t *value)
{
	asn_t *pdu, *trap, *varlist, *var1;
	buf_t *pkt;
	unsigned char *output, status;
	unsigned long santisec;

	/*debug_printf ("snmp_trap(%#x)\n", traptype);*/
	if (oid) {
		var1 = asn_make_seq (snmp->pool, 2, ASN_SEQUENCE);
		if (! var1) {
			asn_free (oid);
			asn_free (value);
			return 0;
		}
		var1->seq.count = 2;
		var1->seq.arr[0] = oid;
		var1->seq.arr[1] = value;
	} else
		var1 = 0;

	/*
	 * List of variables.
	 */
	varlist = asn_make_seq (snmp->pool, 1, ASN_SEQUENCE);
	if (! varlist) {
		asn_free (var1);
		return 0;
	}
	varlist->seq.count = var1 ? 1 : 0;
	varlist->seq.arr[0] = var1;

	/*
	 * Protocol data unit.
	 */
	pdu = asn_make_seq (snmp->pool, 6, ASN_TRAP);
	if (! pdu) {
		asn_free (varlist);
		return 0;
	}
	pdu->seq.count = 6;
	pdu->seq.arr[5] = varlist;

	/* Enterprise */
	pdu->seq.arr[0] = asn_make_oid (snmp->pool, "1.3.6.1.4.1.20520");
	pdu->seq.arr[0]->oid.id[6] = snmp->enterprise;

	/* Agent IP address */
	pdu->seq.arr[1] = asn_make_int (snmp->pool,
		NTOHL (*(unsigned long*) local_ip), ASN_IP_ADDRESS);

	/* Generic trap code */
	pdu->seq.arr[2] = asn_make_int (snmp->pool, trap_type & 0xff,
		ASN_INTEGER);

	/* Specific trap code */
	pdu->seq.arr[3] = asn_make_int (snmp->pool, trap_type >> 8,
		ASN_INTEGER);

	/* Timestamp */
	santisec = 0;
	if (snmp->ip && snmp->ip->timer) {
		unsigned long msec;
		unsigned days = timer_days (snmp->ip->timer, &msec);
		santisec = msec / 10 + days * 24L * 60 * 60 * 100;
	}
	pdu->seq.arr[4] = asn_make_int (snmp->pool, santisec, ASN_TIME_TICKS);

	/*
	 * Trap.
	 */
	trap = asn_make_seq (snmp->pool, 3, ASN_SEQUENCE);
	if (! trap) {
		asn_free (pdu);
		return 0;
	}
	trap->seq.count = 3;
	trap->seq.arr[2] = pdu;

	/* Version */
	trap->seq.arr[0] = asn_make_int (snmp->pool, 0, ASN_INTEGER);

	/* Community */
	trap->seq.arr[1] = asn_make_string (snmp->pool, snmp->trap_community);

	/* Encode and send */
	status = 0;
	pkt = buf_alloc (snmp->pool, TRAP_PACKET_SIZE, 50);
	if (pkt) {
		output = asn_encode (trap, pkt->payload + pkt->len, pkt->len);
		if (! output) {
			buf_free (pkt);
		} else {
			/* Send */
			assert (output >= pkt->payload);
			buf_add_header (pkt, - (output - pkt->payload));
			/* debug_dump ("trap-v1", pkt->payload, pkt->len); */
			status = udp_sendto (sock, pkt, snmp->trap_addr, 162);
			++snmp->out_traps;
			++snmp->out_pkts;
		}
	}
	asn_free (trap);
	return status;
}