]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_snmp.c
Merge pull request #5703 from ton31337/feature/limit_outgoing_prefixes
[mirror_frr.git] / bgpd / bgp_snmp.c
index d539fad5107b5bfe32d9d0d17cd0b247219d1a15..f31f8cd31bdb5beeb8572c88087f17f1d56b8504 100644 (file)
@@ -46,7 +46,7 @@
 
 /* BGP TRAP. */
 #define BGPESTABLISHED                 1
-#define BGPBACKWARDTRANSITION          2       
+#define BGPBACKWARDTRANSITION          2
 
 /* BGP MIB bgpVersion. */
 #define BGPVERSION                           0
@@ -715,7 +715,8 @@ static struct bgp_path_info *bgp4PathAttrLookup(struct variable *v, oid name[],
                if (rn) {
                        bgp_unlock_node(rn);
 
-                       for (path = rn->info; path; path = path->next)
+                       for (path = bgp_node_get_bgp_path_info(rn); path;
+                            path = path->next)
                                if (sockunion_same(&path->peer->su, &su))
                                        return path;
                }
@@ -762,7 +763,8 @@ static struct bgp_path_info *bgp4PathAttrLookup(struct variable *v, oid name[],
                do {
                        min = NULL;
 
-                       for (path = rn->info; path; path = path->next) {
+                       for (path = bgp_node_get_bgp_path_info(rn); path;
+                            path = path->next) {
                                if (path->peer->su.sin.sin_family == AF_INET
                                    && ntohl(paddr.s_addr)
                                               < ntohl(path->peer->su.sin
@@ -892,17 +894,20 @@ static int bgpTrapEstablished(struct peer *peer)
        struct in_addr addr;
        oid index[sizeof(oid) * IN_ADDR_SIZE];
 
+       /* Check if this peer just went to Established */
+       if ((peer->last_major_event != OpenConfirm) || !(peer_established(peer)))
+               return 0;
+
        ret = inet_aton(peer->host, &addr);
        if (ret == 0)
                return 0;
 
        oid_copy_addr(index, &addr, IN_ADDR_SIZE);
 
-       smux_trap(bgp_variables, sizeof bgp_variables / sizeof(struct variable),
-                 bgp_trap_oid, sizeof bgp_trap_oid / sizeof(oid), bgp_oid,
+       smux_trap(bgp_variables, array_size(bgp_variables), bgp_trap_oid,
+                 array_size(bgp_trap_oid), bgp_oid,
                  sizeof bgp_oid / sizeof(oid), index, IN_ADDR_SIZE,
-                 bgpTrapList, sizeof bgpTrapList / sizeof(struct trap_object),
-                 BGPESTABLISHED);
+                 bgpTrapList, array_size(bgpTrapList), BGPESTABLISHED);
        return 0;
 }
 
@@ -918,11 +923,10 @@ static int bgpTrapBackwardTransition(struct peer *peer)
 
        oid_copy_addr(index, &addr, IN_ADDR_SIZE);
 
-       smux_trap(bgp_variables, sizeof bgp_variables / sizeof(struct variable),
-                 bgp_trap_oid, sizeof bgp_trap_oid / sizeof(oid), bgp_oid,
+       smux_trap(bgp_variables, array_size(bgp_variables), bgp_trap_oid,
+                 array_size(bgp_trap_oid), bgp_oid,
                  sizeof bgp_oid / sizeof(oid), index, IN_ADDR_SIZE,
-                 bgpTrapList, sizeof bgpTrapList / sizeof(struct trap_object),
-                 BGPBACKWARDTRANSITION);
+                 bgpTrapList, array_size(bgpTrapList), BGPBACKWARDTRANSITION);
        return 0;
 }
 
@@ -935,7 +939,7 @@ static int bgp_snmp_init(struct thread_master *tm)
 
 static int bgp_snmp_module_init(void)
 {
-       hook_register(peer_established, bgpTrapEstablished);
+       hook_register(peer_status_changed, bgpTrapEstablished);
        hook_register(peer_backward_transition, bgpTrapBackwardTransition);
        hook_register(frr_late_init, bgp_snmp_init);
        return 0;