]> git.proxmox.com Git - mirror_frr.git/blobdiff - ripd/rip_snmp.c
Merge pull request #5925 from volta-networks/synchronous_client
[mirror_frr.git] / ripd / rip_snmp.c
index 45bb2e377a289278bf679cb03c21194e571a637c..be222c7a5fc5faa72d308a38973c69e428ee3a46 100644 (file)
@@ -88,14 +88,14 @@ static oid rip_oid[] = {RIPV2MIB};
 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 uint8_t *rip2Globals(struct variable *, oid[], size_t *, int, size_t *,
+                           WriteMethod **);
+static uint8_t *rip2IfStatEntry(struct variable *, oid[], size_t *, int,
+                               size_t *, WriteMethod **);
+static uint8_t *rip2IfConfAddress(struct variable *, oid[], size_t *, int,
+                                 size_t *, WriteMethod **);
+static uint8_t *rip2PeerTable(struct variable *, oid[], size_t *, int, size_t *,
+                             WriteMethod **);
 
 static struct variable rip_variables[] = {
        /* RIP Global Counters. */
@@ -152,25 +152,28 @@ static struct variable rip_variables[] = {
 
 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 uint8_t *rip2Globals(struct variable *v, oid name[], size_t *length,
+                           int exact, size_t *var_len,
+                           WriteMethod **write_method)
 {
+       struct rip *rip;
+
        if (smux_header_generic(v, name, length, exact, var_len, write_method)
            == MATCH_FAILED)
                return NULL;
 
+       rip = rip_lookup_by_vrf_id(VRF_DEFAULT);
+       if (!rip)
+               return NULL;
+
        /* Retrun global counter. */
        switch (v->magic) {
        case RIP2GLOBALROUTECHANGES:
-               return SNMP_INTEGER(rip_global_route_changes);
-               break;
+               return SNMP_INTEGER(rip->counters.route_changes);
        case RIP2GLOBALQUERIES:
-               return SNMP_INTEGER(rip_global_queries);
-               break;
+               return SNMP_INTEGER(rip->counters.queries);
        default:
                return NULL;
-               break;
        }
        return NULL;
 }
@@ -207,7 +210,7 @@ static int rip_snmp_ifaddr_del(struct connected *ifc)
        if (!rn)
                return 0;
        i = rn->info;
-       if (rn && !strncmp(i->name, ifp->name, INTERFACE_NAMSIZ)) {
+       if (!strncmp(i->name, ifp->name, INTERFACE_NAMSIZ)) {
                rn->info = NULL;
                route_unlock_node(rn);
                route_unlock_node(rn);
@@ -281,9 +284,14 @@ static struct rip_peer *rip2PeerLookup(struct variable *v, oid name[],
                                       size_t *length, struct in_addr *addr,
                                       int exact)
 {
+       struct rip *rip;
        int len;
        struct rip_peer *peer;
 
+       rip = rip_lookup_by_vrf_id(VRF_DEFAULT);
+       if (!rip)
+               return NULL;
+
        if (exact) {
                /* Check the length. */
                if (*length - v->namelen != sizeof(struct in_addr) + 1)
@@ -291,7 +299,7 @@ static struct rip_peer *rip2PeerLookup(struct variable *v, oid name[],
 
                oid2in_addr(name + v->namelen, sizeof(struct in_addr), addr);
 
-               peer = rip_peer_lookup(addr);
+               peer = rip_peer_lookup(rip, addr);
 
                if (peer->domain
                    == (int)name[v->namelen + sizeof(struct in_addr)])
@@ -306,7 +314,7 @@ static struct rip_peer *rip2PeerLookup(struct variable *v, oid name[],
                oid2in_addr(name + v->namelen, len, addr);
 
                len = *length - v->namelen;
-               peer = rip_peer_lookup(addr);
+               peer = rip_peer_lookup(rip, addr);
                if (peer) {
                        if ((len < (int)sizeof(struct in_addr) + 1)
                            || (peer->domain
@@ -321,7 +329,7 @@ static struct rip_peer *rip2PeerLookup(struct variable *v, oid name[],
                                return peer;
                        }
                }
-               peer = rip_peer_lookup_next(addr);
+               peer = rip_peer_lookup_next(rip, addr);
 
                if (!peer)
                        return NULL;
@@ -336,9 +344,9 @@ static struct rip_peer *rip2PeerLookup(struct variable *v, oid name[],
        return NULL;
 }
 
-static u_char *rip2IfStatEntry(struct variable *v, oid name[], size_t *length,
-                              int exact, size_t *var_len,
-                              WriteMethod **write_method)
+static uint8_t *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;
@@ -362,23 +370,22 @@ static u_char *rip2IfStatEntry(struct variable *v, oid name[], size_t *length,
        switch (v->magic) {
        case RIP2IFSTATADDRESS:
                return SNMP_IPADDRESS(addr);
-               break;
        case RIP2IFSTATRCVBADPACKETS:
                *var_len = sizeof(long);
-               return (u_char *)&ri->recv_badpackets;
+               return (uint8_t *)&ri->recv_badpackets;
 
        case RIP2IFSTATRCVBADROUTES:
                *var_len = sizeof(long);
-               return (u_char *)&ri->recv_badroutes;
+               return (uint8_t *)&ri->recv_badroutes;
 
        case RIP2IFSTATSENTUPDATES:
                *var_len = sizeof(long);
-               return (u_char *)&ri->sent_updates;
+               return (uint8_t *)&ri->sent_updates;
 
        case RIP2IFSTATSTATUS:
                *var_len = sizeof(long);
                v->type = ASN_INTEGER;
-               return (u_char *)&valid;
+               return (uint8_t *)&valid;
 
        default:
                return NULL;
@@ -402,10 +409,10 @@ static long rip2IfConfSend(struct rip_interface *ri)
                return ripVersion2;
        else if (ri->ri_send & RIPv1)
                return ripVersion1;
-       else if (rip) {
-               if (rip->version_send == RIPv2)
+       else if (ri->rip) {
+               if (ri->rip->version_send == RIPv2)
                        return ripVersion2;
-               else if (rip->version_send == RIPv1)
+               else if (ri->rip->version_send == RIPv1)
                        return ripVersion1;
        }
        return doNotSend;
@@ -423,7 +430,7 @@ static long rip2IfConfReceive(struct rip_interface *ri)
        if (!ri->running)
                return doNotReceive;
 
-       recvv = (ri->ri_receive == RI_RIP_UNSPEC) ? rip->version_recv
+       recvv = (ri->ri_receive == RI_RIP_UNSPEC) ? ri->rip->version_recv
                                                  : ri->ri_receive;
        if (recvv == RI_RIP_VERSION_1_AND_2)
                return rip1OrRip2;
@@ -435,15 +442,15 @@ static long rip2IfConfReceive(struct rip_interface *ri)
                return doNotReceive;
 }
 
-static u_char *rip2IfConfAddress(struct variable *v, oid name[], size_t *length,
-                                int exact, size_t *val_len,
-                                WriteMethod **write_method)
+static uint8_t *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;
+       static unsigned int auth = 0;
        struct interface *ifp;
        struct rip_interface *ri;
 
@@ -464,43 +471,43 @@ static u_char *rip2IfConfAddress(struct variable *v, oid name[], size_t *length,
        switch (v->magic) {
        case RIP2IFCONFADDRESS:
                *val_len = sizeof(struct in_addr);
-               return (u_char *)&addr;
+               return (uint8_t *)&addr;
 
        case RIP2IFCONFDOMAIN:
                *val_len = 2;
-               return (u_char *)&domain;
+               return (uint8_t *)&domain;
 
        case RIP2IFCONFAUTHTYPE:
                auth = ri->auth_type;
                *val_len = sizeof(long);
                v->type = ASN_INTEGER;
-               return (u_char *)&auth;
+               return (uint8_t *)&auth;
 
        case RIP2IFCONFAUTHKEY:
                *val_len = 0;
-               return (u_char *)&domain;
+               return (uint8_t *)&domain;
        case RIP2IFCONFSEND:
                config = rip2IfConfSend(ri);
                *val_len = sizeof(long);
                v->type = ASN_INTEGER;
-               return (u_char *)&config;
+               return (uint8_t *)&config;
        case RIP2IFCONFRECEIVE:
                config = rip2IfConfReceive(ri);
                *val_len = sizeof(long);
                v->type = ASN_INTEGER;
-               return (u_char *)&config;
+               return (uint8_t *)&config;
 
        case RIP2IFCONFDEFAULTMETRIC:
                *val_len = sizeof(long);
                v->type = ASN_INTEGER;
-               return (u_char *)&ifp->metric;
+               return (uint8_t *)&ifp->metric;
        case RIP2IFCONFSTATUS:
                *val_len = sizeof(long);
                v->type = ASN_INTEGER;
-               return (u_char *)&valid;
+               return (uint8_t *)&valid;
        case RIP2IFCONFSRCADDRESS:
                *val_len = sizeof(struct in_addr);
-               return (u_char *)&addr;
+               return (uint8_t *)&addr;
 
        default:
                return NULL;
@@ -508,9 +515,9 @@ static u_char *rip2IfConfAddress(struct variable *v, oid name[], size_t *length,
        return NULL;
 }
 
-static u_char *rip2PeerTable(struct variable *v, oid name[], size_t *length,
-                            int exact, size_t *val_len,
-                            WriteMethod **write_method)
+static uint8_t *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;
@@ -533,38 +540,38 @@ static u_char *rip2PeerTable(struct variable *v, oid name[], size_t *length,
        switch (v->magic) {
        case RIP2PEERADDRESS:
                *val_len = sizeof(struct in_addr);
-               return (u_char *)&peer->addr;
+               return (uint8_t *)&peer->addr;
 
        case RIP2PEERDOMAIN:
                *val_len = 2;
-               return (u_char *)&domain;
+               return (uint8_t *)&domain;
 
        case RIP2PEERLASTUPDATE:
-#if 0 
+#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
        * - don't support this variable, at all
        * Currently, we do the latter...
        */
-      *val_len = sizeof (time_t);
+      *val_len = sizeof(time_t);
       uptime = peer->uptime; /* now - snmp_agent_startup - peer->uptime */
-      return (u_char *) &uptime;
+      return (uint8_t *) &uptime;
 #else
-               return (u_char *)NULL;
+               return (uint8_t *)NULL;
 #endif
 
        case RIP2PEERVERSION:
                *val_len = sizeof(int);
                version = peer->version;
-               return (u_char *)&version;
+               return (uint8_t *)&version;
 
        case RIP2PEERRCVBADPACKETS:
                *val_len = sizeof(int);
-               return (u_char *)&peer->recv_badpackets;
+               return (uint8_t *)&peer->recv_badpackets;
 
        case RIP2PEERRCVBADROUTES:
                *val_len = sizeof(int);
-               return (u_char *)&peer->recv_badroutes;
+               return (uint8_t *)&peer->recv_badroutes;
 
        default:
                return NULL;