]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Implement SNMP BGP4V2-MIB (bgp4V2PeerEventTimesTable)
authorDonatas Abraitis <donatas@opensourcerouting.org>
Thu, 1 Dec 2022 11:26:19 +0000 (13:26 +0200)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Mon, 12 Dec 2022 19:28:54 +0000 (21:28 +0200)
```
$ snmpwalk -c public -v1 localhost .1.3.6.1.3.5.1.1.4.1
iso.3.6.1.3.5.1.1.4.1.1.1.4.192.168.10.64 = Gauge32: 0
iso.3.6.1.3.5.1.1.4.1.1.1.4.192.168.10.65 = Gauge32: 18
iso.3.6.1.3.5.1.1.4.1.1.2.16.42.2.71.128.1.35.0.0.0.0.0.0.0.0.0.2 = Gauge32: 0
iso.3.6.1.3.5.1.1.4.1.1.2.16.42.12.47.7.72.150.6.102.0.0.0.0.0.0.177.121 = Gauge32: 0
iso.3.6.1.3.5.1.1.4.1.1.2.16.42.12.47.7.72.150.6.102.0.0.0.0.0.0.177.128 = Gauge32: 0
iso.3.6.1.3.5.1.1.4.1.2.1.4.192.168.10.64 = Gauge32: 0
iso.3.6.1.3.5.1.1.4.1.2.1.4.192.168.10.65 = Gauge32: 17
iso.3.6.1.3.5.1.1.4.1.2.2.16.42.2.71.128.1.35.0.0.0.0.0.0.0.0.0.2 = Gauge32: 0
iso.3.6.1.3.5.1.1.4.1.2.2.16.42.12.47.7.72.150.6.102.0.0.0.0.0.0.177.121 = Gauge32: 0
iso.3.6.1.3.5.1.1.4.1.2.2.16.42.12.47.7.72.150.6.102.0.0.0.0.0.0.177.128 = Gauge32: 0
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
bgpd/bgp_snmp_bgp4v2.c

index 1be28e0b2d05f6e33d655f2f419b7be9998b73a9..f1a664bc4b4a9339b8884673b2b9a16d34f70084 100644 (file)
@@ -380,6 +380,40 @@ static uint8_t *bgpv2PeerErrorsTable(struct variable *v, oid name[],
        return NULL;
 }
 
+static uint8_t *bgpv2PeerEventTimesTable(struct variable *v, oid name[],
+                                        size_t *length, int exact,
+                                        size_t *var_len,
+                                        WriteMethod **write_method)
+{
+       struct peer *peer;
+       struct ipaddr addr = {};
+
+       if (smux_header_table(v, name, length, exact, var_len, write_method) ==
+           MATCH_FAILED)
+               return NULL;
+
+       peer = bgpv2PeerTable_lookup(v, name, length, exact, &addr);
+       if (!peer)
+               return NULL;
+
+       switch (v->magic) {
+       case BGP4V2_PEER_FSM_ESTABLISHED_TIME:
+               if (!peer->uptime)
+                       return SNMP_INTEGER(0);
+               else
+                       return SNMP_INTEGER(monotime(NULL) - peer->uptime);
+       case BGP4V2_PEER_PEER_IN_UPDATES_ELAPSED_TIME:
+               if (!peer->update_time)
+                       return SNMP_INTEGER(0);
+               else
+                       return SNMP_INTEGER(monotime(NULL) - peer->update_time);
+       default:
+               break;
+       }
+
+       return NULL;
+}
+
 static struct variable bgpv2_variables[] = {
        /* bgp4V2PeerEntry */
        {BGP4V2_PEER_INSTANCE,
@@ -671,6 +705,31 @@ static struct variable bgpv2_variables[] = {
         bgpv2PeerErrorsTable,
         6,
         {1, 3, 1, BGP4V2_PEER_LAST_ERROR_SENT_DATA, 2, 16}},
+       /* bgp4V2PeerEventTimesEntry */
+       {BGP4V2_PEER_FSM_ESTABLISHED_TIME,
+        ASN_UNSIGNED,
+        RONLY,
+        bgpv2PeerEventTimesTable,
+        6,
+        {1, 4, 1, BGP4V2_PEER_FSM_ESTABLISHED_TIME, 1, 4}},
+       {BGP4V2_PEER_FSM_ESTABLISHED_TIME,
+        ASN_UNSIGNED,
+        RONLY,
+        bgpv2PeerEventTimesTable,
+        6,
+        {1, 4, 1, BGP4V2_PEER_FSM_ESTABLISHED_TIME, 2, 16}},
+       {BGP4V2_PEER_PEER_IN_UPDATES_ELAPSED_TIME,
+        ASN_UNSIGNED,
+        RONLY,
+        bgpv2PeerEventTimesTable,
+        6,
+        {1, 4, 1, BGP4V2_PEER_PEER_IN_UPDATES_ELAPSED_TIME, 1, 4}},
+       {BGP4V2_PEER_PEER_IN_UPDATES_ELAPSED_TIME,
+        ASN_UNSIGNED,
+        RONLY,
+        bgpv2PeerEventTimesTable,
+        6,
+        {1, 4, 1, BGP4V2_PEER_PEER_IN_UPDATES_ELAPSED_TIME, 2, 16}},
 };
 
 int bgp_snmp_bgp4v2_init(struct thread_master *tm)