diff options
Diffstat (limited to 'ripd/rip_snmp.c')
-rw-r--r-- | ripd/rip_snmp.c | 865 |
1 files changed, 423 insertions, 442 deletions
diff --git a/ripd/rip_snmp.c b/ripd/rip_snmp.c index 6a4ae11ae..45bb2e377 100644 --- a/ripd/rip_snmp.c +++ b/ripd/rip_snmp.c @@ -82,319 +82,311 @@ SNMP_LOCAL_VARIABLES /* RIP-MIB instances. */ -static oid rip_oid [] = { RIPV2MIB }; +static oid rip_oid[] = {RIPV2MIB}; /* Interface cache table sorted by interface's address. */ static struct route_table *rip_ifaddr_table; /* Hook functions. */ -static u_char *rip2Globals (struct variable *, oid [], size_t *, - int, size_t *, WriteMethod **); -static u_char *rip2IfStatEntry (struct variable *, oid [], size_t *, - int, size_t *, WriteMethod **); -static u_char *rip2IfConfAddress (struct variable *, oid [], size_t *, - int, size_t *, WriteMethod **); -static u_char *rip2PeerTable (struct variable *, oid [], size_t *, - int, size_t *, WriteMethod **); - -static struct variable rip_variables[] = -{ - /* RIP Global Counters. */ - {RIP2GLOBALROUTECHANGES, COUNTER, RONLY, rip2Globals, - 2, {1, 1}}, - {RIP2GLOBALQUERIES, COUNTER, RONLY, rip2Globals, - 2, {1, 2}}, - /* RIP Interface Tables. */ - {RIP2IFSTATADDRESS, IPADDRESS, RONLY, rip2IfStatEntry, - 3, {2, 1, 1}}, - {RIP2IFSTATRCVBADPACKETS, COUNTER, RONLY, rip2IfStatEntry, - 3, {2, 1, 2}}, - {RIP2IFSTATRCVBADROUTES, COUNTER, RONLY, rip2IfStatEntry, - 3, {2, 1, 3}}, - {RIP2IFSTATSENTUPDATES, COUNTER, RONLY, rip2IfStatEntry, - 3, {2, 1, 4}}, - {RIP2IFSTATSTATUS, COUNTER, RWRITE, rip2IfStatEntry, - 3, {2, 1, 5}}, - {RIP2IFCONFADDRESS, IPADDRESS, RONLY, rip2IfConfAddress, - /* RIP Interface Configuration Table. */ - 3, {3, 1, 1}}, - {RIP2IFCONFDOMAIN, STRING, RONLY, rip2IfConfAddress, - 3, {3, 1, 2}}, - {RIP2IFCONFAUTHTYPE, COUNTER, RONLY, rip2IfConfAddress, - 3, {3, 1, 3}}, - {RIP2IFCONFAUTHKEY, STRING, RONLY, rip2IfConfAddress, - 3, {3, 1, 4}}, - {RIP2IFCONFSEND, COUNTER, RONLY, rip2IfConfAddress, - 3, {3, 1, 5}}, - {RIP2IFCONFRECEIVE, COUNTER, RONLY, rip2IfConfAddress, - 3, {3, 1, 6}}, - {RIP2IFCONFDEFAULTMETRIC, COUNTER, RONLY, rip2IfConfAddress, - 3, {3, 1, 7}}, - {RIP2IFCONFSTATUS, COUNTER, RONLY, rip2IfConfAddress, - 3, {3, 1, 8}}, - {RIP2IFCONFSRCADDRESS, IPADDRESS, RONLY, rip2IfConfAddress, - 3, {3, 1, 9}}, - {RIP2PEERADDRESS, IPADDRESS, RONLY, rip2PeerTable, - /* RIP Peer Table. */ - 3, {4, 1, 1}}, - {RIP2PEERDOMAIN, STRING, RONLY, rip2PeerTable, - 3, {4, 1, 2}}, - {RIP2PEERLASTUPDATE, TIMETICKS, RONLY, rip2PeerTable, - 3, {4, 1, 3}}, - {RIP2PEERVERSION, INTEGER, RONLY, rip2PeerTable, - 3, {4, 1, 4}}, - {RIP2PEERRCVBADPACKETS, COUNTER, RONLY, rip2PeerTable, - 3, {4, 1, 5}}, - {RIP2PEERRCVBADROUTES, COUNTER, RONLY, rip2PeerTable, - 3, {4, 1, 6}} -}; +static u_char *rip2Globals(struct variable *, oid[], size_t *, int, size_t *, + WriteMethod **); +static u_char *rip2IfStatEntry(struct variable *, oid[], size_t *, int, + size_t *, WriteMethod **); +static u_char *rip2IfConfAddress(struct variable *, oid[], size_t *, int, + size_t *, WriteMethod **); +static u_char *rip2PeerTable(struct variable *, oid[], size_t *, int, size_t *, + WriteMethod **); + +static struct variable rip_variables[] = { + /* RIP Global Counters. */ + {RIP2GLOBALROUTECHANGES, COUNTER, RONLY, rip2Globals, 2, {1, 1}}, + {RIP2GLOBALQUERIES, COUNTER, RONLY, rip2Globals, 2, {1, 2}}, + /* RIP Interface Tables. */ + {RIP2IFSTATADDRESS, IPADDRESS, RONLY, rip2IfStatEntry, 3, {2, 1, 1}}, + {RIP2IFSTATRCVBADPACKETS, + COUNTER, + RONLY, + rip2IfStatEntry, + 3, + {2, 1, 2}}, + {RIP2IFSTATRCVBADROUTES, COUNTER, RONLY, rip2IfStatEntry, 3, {2, 1, 3}}, + {RIP2IFSTATSENTUPDATES, COUNTER, RONLY, rip2IfStatEntry, 3, {2, 1, 4}}, + {RIP2IFSTATSTATUS, COUNTER, RWRITE, rip2IfStatEntry, 3, {2, 1, 5}}, + {RIP2IFCONFADDRESS, + IPADDRESS, + RONLY, + rip2IfConfAddress, + /* RIP Interface Configuration Table. */ + 3, + {3, 1, 1}}, + {RIP2IFCONFDOMAIN, STRING, RONLY, rip2IfConfAddress, 3, {3, 1, 2}}, + {RIP2IFCONFAUTHTYPE, COUNTER, RONLY, rip2IfConfAddress, 3, {3, 1, 3}}, + {RIP2IFCONFAUTHKEY, STRING, RONLY, rip2IfConfAddress, 3, {3, 1, 4}}, + {RIP2IFCONFSEND, COUNTER, RONLY, rip2IfConfAddress, 3, {3, 1, 5}}, + {RIP2IFCONFRECEIVE, COUNTER, RONLY, rip2IfConfAddress, 3, {3, 1, 6}}, + {RIP2IFCONFDEFAULTMETRIC, + COUNTER, + RONLY, + rip2IfConfAddress, + 3, + {3, 1, 7}}, + {RIP2IFCONFSTATUS, COUNTER, RONLY, rip2IfConfAddress, 3, {3, 1, 8}}, + {RIP2IFCONFSRCADDRESS, + IPADDRESS, + RONLY, + rip2IfConfAddress, + 3, + {3, 1, 9}}, + {RIP2PEERADDRESS, + IPADDRESS, + RONLY, + rip2PeerTable, + /* RIP Peer Table. */ + 3, + {4, 1, 1}}, + {RIP2PEERDOMAIN, STRING, RONLY, rip2PeerTable, 3, {4, 1, 2}}, + {RIP2PEERLASTUPDATE, TIMETICKS, RONLY, rip2PeerTable, 3, {4, 1, 3}}, + {RIP2PEERVERSION, INTEGER, RONLY, rip2PeerTable, 3, {4, 1, 4}}, + {RIP2PEERRCVBADPACKETS, COUNTER, RONLY, rip2PeerTable, 3, {4, 1, 5}}, + {RIP2PEERRCVBADROUTES, COUNTER, RONLY, rip2PeerTable, 3, {4, 1, 6}}}; extern struct thread_master *master; -static u_char * -rip2Globals (struct variable *v, oid name[], size_t *length, - int exact, size_t *var_len, WriteMethod **write_method) +static u_char *rip2Globals(struct variable *v, oid name[], size_t *length, + int exact, size_t *var_len, + WriteMethod **write_method) { - if (smux_header_generic(v, name, length, exact, var_len, write_method) - == MATCH_FAILED) - return NULL; - - /* Retrun global counter. */ - switch (v->magic) - { - case RIP2GLOBALROUTECHANGES: - return SNMP_INTEGER (rip_global_route_changes); - break; - case RIP2GLOBALQUERIES: - return SNMP_INTEGER (rip_global_queries); - break; - default: - return NULL; - break; - } - return NULL; + if (smux_header_generic(v, name, length, exact, var_len, write_method) + == MATCH_FAILED) + return NULL; + + /* Retrun global counter. */ + switch (v->magic) { + case RIP2GLOBALROUTECHANGES: + return SNMP_INTEGER(rip_global_route_changes); + break; + case RIP2GLOBALQUERIES: + return SNMP_INTEGER(rip_global_queries); + break; + default: + return NULL; + break; + } + return NULL; } -static int -rip_snmp_ifaddr_add (struct connected *ifc) +static int rip_snmp_ifaddr_add(struct connected *ifc) { - struct interface *ifp = ifc->ifp; - struct prefix *p; - struct route_node *rn; + struct interface *ifp = ifc->ifp; + struct prefix *p; + struct route_node *rn; - p = ifc->address; + p = ifc->address; - if (p->family != AF_INET) - return 0; + if (p->family != AF_INET) + return 0; - rn = route_node_get (rip_ifaddr_table, p); - rn->info = ifp; - return 0; + rn = route_node_get(rip_ifaddr_table, p); + rn->info = ifp; + return 0; } -static int -rip_snmp_ifaddr_del (struct connected *ifc) +static int rip_snmp_ifaddr_del(struct connected *ifc) { - struct interface *ifp = ifc->ifp; - struct prefix *p; - struct route_node *rn; - struct interface *i; - - p = ifc->address; - - if (p->family != AF_INET) - return 0; - - rn = route_node_lookup (rip_ifaddr_table, p); - if (! rn) - return 0; - i = rn->info; - if (rn && !strncmp(i->name,ifp->name,INTERFACE_NAMSIZ)) - { - rn->info = NULL; - route_unlock_node (rn); - route_unlock_node (rn); - } - return 0; + struct interface *ifp = ifc->ifp; + struct prefix *p; + struct route_node *rn; + struct interface *i; + + p = ifc->address; + + if (p->family != AF_INET) + return 0; + + rn = route_node_lookup(rip_ifaddr_table, p); + if (!rn) + return 0; + i = rn->info; + if (rn && !strncmp(i->name, ifp->name, INTERFACE_NAMSIZ)) { + rn->info = NULL; + route_unlock_node(rn); + route_unlock_node(rn); + } + return 0; } -static struct interface * -rip_ifaddr_lookup_next (struct in_addr *addr) +static struct interface *rip_ifaddr_lookup_next(struct in_addr *addr) { - struct prefix_ipv4 p; - struct route_node *rn; - struct interface *ifp; - - p.family = AF_INET; - p.prefixlen = IPV4_MAX_BITLEN; - p.prefix = *addr; - - rn = route_node_get (rip_ifaddr_table, (struct prefix *) &p); - - for (rn = route_next (rn); rn; rn = route_next (rn)) - if (rn->info) - break; - - if (rn && rn->info) - { - ifp = rn->info; - *addr = rn->p.u.prefix4; - route_unlock_node (rn); - return ifp; - } - return NULL; + struct prefix_ipv4 p; + struct route_node *rn; + struct interface *ifp; + + p.family = AF_INET; + p.prefixlen = IPV4_MAX_BITLEN; + p.prefix = *addr; + + rn = route_node_get(rip_ifaddr_table, (struct prefix *)&p); + + for (rn = route_next(rn); rn; rn = route_next(rn)) + if (rn->info) + break; + + if (rn && rn->info) { + ifp = rn->info; + *addr = rn->p.u.prefix4; + route_unlock_node(rn); + return ifp; + } + return NULL; } -static struct interface * -rip2IfLookup (struct variable *v, oid name[], size_t *length, - struct in_addr *addr, int exact) +static struct interface *rip2IfLookup(struct variable *v, oid name[], + size_t *length, struct in_addr *addr, + int exact) { - int len; - struct interface *ifp; - - if (exact) - { - /* Check the length. */ - if (*length - v->namelen != sizeof (struct in_addr)) - return NULL; + int len; + struct interface *ifp; - oid2in_addr (name + v->namelen, sizeof (struct in_addr), addr); + if (exact) { + /* Check the length. */ + if (*length - v->namelen != sizeof(struct in_addr)) + return NULL; - return if_lookup_exact_address ((void *)addr, AF_INET, VRF_DEFAULT); - } - else - { - len = *length - v->namelen; - if (len > 4) len = 4; + oid2in_addr(name + v->namelen, sizeof(struct in_addr), addr); - oid2in_addr (name + v->namelen, len, addr); + return if_lookup_exact_address((void *)addr, AF_INET, + VRF_DEFAULT); + } else { + len = *length - v->namelen; + if (len > 4) + len = 4; - ifp = rip_ifaddr_lookup_next (addr); + oid2in_addr(name + v->namelen, len, addr); - if (ifp == NULL) - return NULL; + ifp = rip_ifaddr_lookup_next(addr); - oid_copy_addr (name + v->namelen, addr, sizeof (struct in_addr)); + if (ifp == NULL) + return NULL; - *length = v->namelen + sizeof (struct in_addr); + oid_copy_addr(name + v->namelen, addr, sizeof(struct in_addr)); - return ifp; - } - return NULL; -} + *length = v->namelen + sizeof(struct in_addr); -static struct rip_peer * -rip2PeerLookup (struct variable *v, oid name[], size_t *length, - struct in_addr *addr, int exact) -{ - int len; - struct rip_peer *peer; - - if (exact) - { - /* Check the length. */ - if (*length - v->namelen != sizeof (struct in_addr) + 1) + return ifp; + } return NULL; +} - oid2in_addr (name + v->namelen, sizeof (struct in_addr), addr); - - peer = rip_peer_lookup (addr); - - if (peer->domain == (int)name[v->namelen + sizeof (struct in_addr)]) - return peer; - - return NULL; - } - else - { - len = *length - v->namelen; - if (len > 4) len = 4; - - oid2in_addr (name + v->namelen, len, addr); - - len = *length - v->namelen; - peer = rip_peer_lookup (addr); - if (peer) - { - if ((len < (int)sizeof (struct in_addr) + 1) || - (peer->domain > (int)name[v->namelen + sizeof (struct in_addr)])) - { - oid_copy_addr (name + v->namelen, &peer->addr, - sizeof (struct in_addr)); - name[v->namelen + sizeof (struct in_addr)] = peer->domain; - *length = sizeof (struct in_addr) + v->namelen + 1; - return peer; - } - } - peer = rip_peer_lookup_next (addr); - - if (! peer) +static struct rip_peer *rip2PeerLookup(struct variable *v, oid name[], + size_t *length, struct in_addr *addr, + int exact) +{ + int len; + struct rip_peer *peer; + + if (exact) { + /* Check the length. */ + if (*length - v->namelen != sizeof(struct in_addr) + 1) + return NULL; + + oid2in_addr(name + v->namelen, sizeof(struct in_addr), addr); + + peer = rip_peer_lookup(addr); + + if (peer->domain + == (int)name[v->namelen + sizeof(struct in_addr)]) + return peer; + + return NULL; + } else { + len = *length - v->namelen; + if (len > 4) + len = 4; + + oid2in_addr(name + v->namelen, len, addr); + + len = *length - v->namelen; + peer = rip_peer_lookup(addr); + if (peer) { + if ((len < (int)sizeof(struct in_addr) + 1) + || (peer->domain + > (int)name[v->namelen + + sizeof(struct in_addr)])) { + oid_copy_addr(name + v->namelen, &peer->addr, + sizeof(struct in_addr)); + name[v->namelen + sizeof(struct in_addr)] = + peer->domain; + *length = + sizeof(struct in_addr) + v->namelen + 1; + return peer; + } + } + peer = rip_peer_lookup_next(addr); + + if (!peer) + return NULL; + + oid_copy_addr(name + v->namelen, &peer->addr, + sizeof(struct in_addr)); + name[v->namelen + sizeof(struct in_addr)] = peer->domain; + *length = sizeof(struct in_addr) + v->namelen + 1; + + return peer; + } return NULL; - - oid_copy_addr (name + v->namelen, &peer->addr, - sizeof (struct in_addr)); - name[v->namelen + sizeof (struct in_addr)] = peer->domain; - *length = sizeof (struct in_addr) + v->namelen + 1; - - return peer; - } - return NULL; } -static u_char * -rip2IfStatEntry (struct variable *v, oid name[], size_t *length, - int exact, size_t *var_len, WriteMethod **write_method) +static u_char *rip2IfStatEntry(struct variable *v, oid name[], size_t *length, + int exact, size_t *var_len, + WriteMethod **write_method) { - struct interface *ifp; - struct rip_interface *ri; - static struct in_addr addr; - static long valid = SNMP_VALID; - - if (smux_header_table(v, name, length, exact, var_len, write_method) - == MATCH_FAILED) - return NULL; - - memset (&addr, 0, sizeof (struct in_addr)); - - /* Lookup interface. */ - ifp = rip2IfLookup (v, name, length, &addr, exact); - if (! ifp) - return NULL; - - /* Fetch rip_interface information. */ - ri = ifp->info; - - switch (v->magic) - { - case RIP2IFSTATADDRESS: - return SNMP_IPADDRESS (addr); - break; - case RIP2IFSTATRCVBADPACKETS: - *var_len = sizeof (long); - return (u_char *) &ri->recv_badpackets; - - case RIP2IFSTATRCVBADROUTES: - *var_len = sizeof (long); - return (u_char *) &ri->recv_badroutes; - - case RIP2IFSTATSENTUPDATES: - *var_len = sizeof (long); - return (u_char *) &ri->sent_updates; - - case RIP2IFSTATSTATUS: - *var_len = sizeof (long); - v->type = ASN_INTEGER; - return (u_char *) &valid; - - default: - return NULL; - - } - return NULL; + struct interface *ifp; + struct rip_interface *ri; + static struct in_addr addr; + static long valid = SNMP_VALID; + + if (smux_header_table(v, name, length, exact, var_len, write_method) + == MATCH_FAILED) + return NULL; + + memset(&addr, 0, sizeof(struct in_addr)); + + /* Lookup interface. */ + ifp = rip2IfLookup(v, name, length, &addr, exact); + if (!ifp) + return NULL; + + /* Fetch rip_interface information. */ + ri = ifp->info; + + switch (v->magic) { + case RIP2IFSTATADDRESS: + return SNMP_IPADDRESS(addr); + break; + case RIP2IFSTATRCVBADPACKETS: + *var_len = sizeof(long); + return (u_char *)&ri->recv_badpackets; + + case RIP2IFSTATRCVBADROUTES: + *var_len = sizeof(long); + return (u_char *)&ri->recv_badroutes; + + case RIP2IFSTATSENTUPDATES: + *var_len = sizeof(long); + return (u_char *)&ri->sent_updates; + + case RIP2IFSTATSTATUS: + *var_len = sizeof(long); + v->type = ASN_INTEGER; + return (u_char *)&valid; + + default: + return NULL; + } + return NULL; } -static long -rip2IfConfSend (struct rip_interface *ri) +static long rip2IfConfSend(struct rip_interface *ri) { #define doNotSend 1 #define ripVersion1 2 @@ -403,156 +395,151 @@ rip2IfConfSend (struct rip_interface *ri) #define ripV1Demand 5 #define ripV2Demand 6 - if (! ri->running) - return doNotSend; - - if (ri->ri_send & RIPv2) - return ripVersion2; - else if (ri->ri_send & RIPv1) - return ripVersion1; - else if (rip) - { - if (rip->version_send == RIPv2) - return ripVersion2; - else if (rip->version_send == RIPv1) - return ripVersion1; - } - return doNotSend; + if (!ri->running) + return doNotSend; + + if (ri->ri_send & RIPv2) + return ripVersion2; + else if (ri->ri_send & RIPv1) + return ripVersion1; + else if (rip) { + if (rip->version_send == RIPv2) + return ripVersion2; + else if (rip->version_send == RIPv1) + return ripVersion1; + } + return doNotSend; } -static long -rip2IfConfReceive (struct rip_interface *ri) +static long rip2IfConfReceive(struct rip_interface *ri) { #define rip1 1 #define rip2 2 #define rip1OrRip2 3 #define doNotReceive 4 - int recvv; - - if (! ri->running) - return doNotReceive; - - recvv = (ri->ri_receive == RI_RIP_UNSPEC) ? rip->version_recv : - ri->ri_receive; - if (recvv == RI_RIP_VERSION_1_AND_2) - return rip1OrRip2; - else if (recvv & RIPv2) - return rip2; - else if (recvv & RIPv1) - return rip1; - else - return doNotReceive; + int recvv; + + if (!ri->running) + return doNotReceive; + + recvv = (ri->ri_receive == RI_RIP_UNSPEC) ? rip->version_recv + : ri->ri_receive; + if (recvv == RI_RIP_VERSION_1_AND_2) + return rip1OrRip2; + else if (recvv & RIPv2) + return rip2; + else if (recvv & RIPv1) + return rip1; + else + return doNotReceive; } -static u_char * -rip2IfConfAddress (struct variable *v, oid name[], size_t *length, - int exact, size_t *val_len, WriteMethod **write_method) +static u_char *rip2IfConfAddress(struct variable *v, oid name[], size_t *length, + int exact, size_t *val_len, + WriteMethod **write_method) { - static struct in_addr addr; - static long valid = SNMP_INVALID; - static long domain = 0; - static long config = 0; - static u_int auth = 0; - struct interface *ifp; - struct rip_interface *ri; - - if (smux_header_table(v, name, length, exact, val_len, write_method) - == MATCH_FAILED) - return NULL; - - memset (&addr, 0, sizeof (struct in_addr)); - - /* Lookup interface. */ - ifp = rip2IfLookup (v, name, length, &addr, exact); - if (! ifp) - return NULL; - - /* Fetch rip_interface information. */ - ri = ifp->info; - - switch (v->magic) - { - case RIP2IFCONFADDRESS: - *val_len = sizeof (struct in_addr); - return (u_char *) &addr; - - case RIP2IFCONFDOMAIN: - *val_len = 2; - return (u_char *) &domain; - - case RIP2IFCONFAUTHTYPE: - auth = ri->auth_type; - *val_len = sizeof (long); - v->type = ASN_INTEGER; - return (u_char *)&auth; - - case RIP2IFCONFAUTHKEY: - *val_len = 0; - return (u_char *) &domain; - case RIP2IFCONFSEND: - config = rip2IfConfSend (ri); - *val_len = sizeof (long); - v->type = ASN_INTEGER; - return (u_char *) &config; - case RIP2IFCONFRECEIVE: - config = rip2IfConfReceive (ri); - *val_len = sizeof (long); - v->type = ASN_INTEGER; - return (u_char *) &config; - - case RIP2IFCONFDEFAULTMETRIC: - *val_len = sizeof (long); - v->type = ASN_INTEGER; - return (u_char *) &ifp->metric; - case RIP2IFCONFSTATUS: - *val_len = sizeof (long); - v->type = ASN_INTEGER; - return (u_char *) &valid; - case RIP2IFCONFSRCADDRESS: - *val_len = sizeof (struct in_addr); - return (u_char *) &addr; - - default: - return NULL; - - } - return NULL; + static struct in_addr addr; + static long valid = SNMP_INVALID; + static long domain = 0; + static long config = 0; + static u_int auth = 0; + struct interface *ifp; + struct rip_interface *ri; + + if (smux_header_table(v, name, length, exact, val_len, write_method) + == MATCH_FAILED) + return NULL; + + memset(&addr, 0, sizeof(struct in_addr)); + + /* Lookup interface. */ + ifp = rip2IfLookup(v, name, length, &addr, exact); + if (!ifp) + return NULL; + + /* Fetch rip_interface information. */ + ri = ifp->info; + + switch (v->magic) { + case RIP2IFCONFADDRESS: + *val_len = sizeof(struct in_addr); + return (u_char *)&addr; + + case RIP2IFCONFDOMAIN: + *val_len = 2; + return (u_char *)&domain; + + case RIP2IFCONFAUTHTYPE: + auth = ri->auth_type; + *val_len = sizeof(long); + v->type = ASN_INTEGER; + return (u_char *)&auth; + + case RIP2IFCONFAUTHKEY: + *val_len = 0; + return (u_char *)&domain; + case RIP2IFCONFSEND: + config = rip2IfConfSend(ri); + *val_len = sizeof(long); + v->type = ASN_INTEGER; + return (u_char *)&config; + case RIP2IFCONFRECEIVE: + config = rip2IfConfReceive(ri); + *val_len = sizeof(long); + v->type = ASN_INTEGER; + return (u_char *)&config; + + case RIP2IFCONFDEFAULTMETRIC: + *val_len = sizeof(long); + v->type = ASN_INTEGER; + return (u_char *)&ifp->metric; + case RIP2IFCONFSTATUS: + *val_len = sizeof(long); + v->type = ASN_INTEGER; + return (u_char *)&valid; + case RIP2IFCONFSRCADDRESS: + *val_len = sizeof(struct in_addr); + return (u_char *)&addr; + + default: + return NULL; + } + return NULL; } -static u_char * -rip2PeerTable (struct variable *v, oid name[], size_t *length, - int exact, size_t *val_len, WriteMethod **write_method) +static u_char *rip2PeerTable(struct variable *v, oid name[], size_t *length, + int exact, size_t *val_len, + WriteMethod **write_method) { - static struct in_addr addr; - static int domain = 0; - static int version; - /* static time_t uptime; */ - - struct rip_peer *peer; - - if (smux_header_table(v, name, length, exact, val_len, write_method) - == MATCH_FAILED) - return NULL; - - memset (&addr, 0, sizeof (struct in_addr)); - - /* Lookup interface. */ - peer = rip2PeerLookup (v, name, length, &addr, exact); - if (! peer) - return NULL; - - switch (v->magic) - { - case RIP2PEERADDRESS: - *val_len = sizeof (struct in_addr); - return (u_char *) &peer->addr; - - case RIP2PEERDOMAIN: - *val_len = 2; - return (u_char *) &domain; - - case RIP2PEERLASTUPDATE: + static struct in_addr addr; + static int domain = 0; + static int version; + /* static time_t uptime; */ + + struct rip_peer *peer; + + if (smux_header_table(v, name, length, exact, val_len, write_method) + == MATCH_FAILED) + return NULL; + + memset(&addr, 0, sizeof(struct in_addr)); + + /* Lookup interface. */ + peer = rip2PeerLookup(v, name, length, &addr, exact); + if (!peer) + return NULL; + + switch (v->magic) { + case RIP2PEERADDRESS: + *val_len = sizeof(struct in_addr); + return (u_char *)&peer->addr; + + case RIP2PEERDOMAIN: + *val_len = 2; + return (u_char *)&domain; + + case RIP2PEERLASTUPDATE: #if 0 /* We don't know the SNMP agent startup time. We have two choices here: * - assume ripd startup time equals SNMP agent startup time @@ -563,53 +550,47 @@ rip2PeerTable (struct variable *v, oid name[], size_t *length, uptime = peer->uptime; /* now - snmp_agent_startup - peer->uptime */ return (u_char *) &uptime; #else - return (u_char *) NULL; + return (u_char *)NULL; #endif - case RIP2PEERVERSION: - *val_len = sizeof (int); - version = peer->version; - return (u_char *) &version; + case RIP2PEERVERSION: + *val_len = sizeof(int); + version = peer->version; + return (u_char *)&version; - case RIP2PEERRCVBADPACKETS: - *val_len = sizeof (int); - return (u_char *) &peer->recv_badpackets; + case RIP2PEERRCVBADPACKETS: + *val_len = sizeof(int); + return (u_char *)&peer->recv_badpackets; - case RIP2PEERRCVBADROUTES: - *val_len = sizeof (int); - return (u_char *) &peer->recv_badroutes; + case RIP2PEERRCVBADROUTES: + *val_len = sizeof(int); + return (u_char *)&peer->recv_badroutes; - default: - return NULL; - - } - return NULL; + default: + return NULL; + } + return NULL; } /* Register RIPv2-MIB. */ -static int -rip_snmp_init (struct thread_master *master) +static int rip_snmp_init(struct thread_master *master) { - rip_ifaddr_table = route_table_init (); + rip_ifaddr_table = route_table_init(); - smux_init (master); - REGISTER_MIB("mibII/rip", rip_variables, variable, rip_oid); - return 0; + smux_init(master); + REGISTER_MIB("mibII/rip", rip_variables, variable, rip_oid); + return 0; } -static int -rip_snmp_module_init (void) +static int rip_snmp_module_init(void) { - hook_register(rip_ifaddr_add, rip_snmp_ifaddr_add); - hook_register(rip_ifaddr_del, rip_snmp_ifaddr_del); + hook_register(rip_ifaddr_add, rip_snmp_ifaddr_add); + hook_register(rip_ifaddr_del, rip_snmp_ifaddr_del); - hook_register(frr_late_init, rip_snmp_init); - return 0; + hook_register(frr_late_init, rip_snmp_init); + return 0; } -FRR_MODULE_SETUP( - .name = "ripd_snmp", - .version = FRR_VERSION, - .description = "ripd AgentX SNMP module", - .init = rip_snmp_module_init, -) +FRR_MODULE_SETUP(.name = "ripd_snmp", .version = FRR_VERSION, + .description = "ripd AgentX SNMP module", + .init = rip_snmp_module_init, ) |