]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_cmd.c
Merge pull request #1298 from opensourcerouting/iface-rb-tree
[mirror_frr.git] / pimd / pim_cmd.c
index ed1d6a8195e828c01db9543f29049ec00adeada2..a9239c28354714a29c2b757ba58e476d4441d96e 100644 (file)
@@ -214,7 +214,6 @@ static void pim_show_assert(struct pim_instance *pim, struct vty *vty)
 {
        struct pim_interface *pim_ifp;
        struct pim_ifchannel *ch;
-       struct listnode *if_node;
        struct interface *ifp;
        time_t now;
 
@@ -223,7 +222,7 @@ static void pim_show_assert(struct pim_instance *pim, struct vty *vty)
        vty_out(vty,
                "Interface Address         Source          Group           State  Winner          Uptime   Timer\n");
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), if_node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
                if (!pim_ifp)
                        continue;
@@ -263,7 +262,6 @@ static void pim_show_assert_internal_helper(struct vty *vty,
 static void pim_show_assert_internal(struct pim_instance *pim, struct vty *vty)
 {
        struct pim_interface *pim_ifp;
-       struct listnode *if_node;
        struct pim_ifchannel *ch;
        struct interface *ifp;
 
@@ -275,7 +273,7 @@ static void pim_show_assert_internal(struct pim_instance *pim, struct vty *vty)
 
        vty_out(vty,
                "Interface Address         Source          Group           CA  eCA ATD eATD\n");
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), if_node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
                if (!pim_ifp)
                        continue;
@@ -317,14 +315,13 @@ static void pim_show_assert_metric_helper(struct vty *vty,
 static void pim_show_assert_metric(struct pim_instance *pim, struct vty *vty)
 {
        struct pim_interface *pim_ifp;
-       struct listnode *if_node;
        struct pim_ifchannel *ch;
        struct interface *ifp;
 
        vty_out(vty,
                "Interface Address         Source          Group           RPT Pref Metric Address        \n");
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), if_node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
                if (!pim_ifp)
                        continue;
@@ -379,7 +376,6 @@ static void pim_show_assert_winner_metric_helper(struct vty *vty,
 static void pim_show_assert_winner_metric(struct pim_instance *pim,
                                          struct vty *vty)
 {
-       struct listnode *if_node;
        struct pim_interface *pim_ifp;
        struct pim_ifchannel *ch;
        struct interface *ifp;
@@ -387,7 +383,7 @@ static void pim_show_assert_winner_metric(struct pim_instance *pim,
        vty_out(vty,
                "Interface Address         Source          Group           RPT Pref Metric Address        \n");
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), if_node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
                if (!pim_ifp)
                        continue;
@@ -467,7 +463,6 @@ static void pim_show_membership_helper(struct vty *vty,
 static void pim_show_membership(struct pim_instance *pim, struct vty *vty,
                                u_char uj)
 {
-       struct listnode *if_node;
        struct pim_interface *pim_ifp;
        struct pim_ifchannel *ch;
        struct interface *ifp;
@@ -477,7 +472,7 @@ static void pim_show_membership(struct pim_instance *pim, struct vty *vty,
 
        json = json_object_new_object();
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), if_node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
                if (!pim_ifp)
                        continue;
@@ -585,7 +580,6 @@ static void pim_print_ifp_flags(struct vty *vty, struct interface *ifp,
 static void igmp_show_interfaces(struct pim_instance *pim, struct vty *vty,
                                 u_char uj)
 {
-       struct listnode *node;
        struct interface *ifp;
        time_t now;
        json_object *json = NULL;
@@ -599,7 +593,7 @@ static void igmp_show_interfaces(struct pim_instance *pim, struct vty *vty,
                vty_out(vty,
                        "Interface  State          Address  V  Querier  Query Timer    Uptime\n");
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                struct pim_interface *pim_ifp;
                struct listnode *sock_node;
                struct igmp_sock *igmp;
@@ -666,7 +660,6 @@ static void igmp_show_interfaces_single(struct pim_instance *pim,
 {
        struct igmp_sock *igmp;
        struct interface *ifp;
-       struct listnode *node;
        struct listnode *sock_node;
        struct pim_interface *pim_ifp;
        char uptime[10];
@@ -690,7 +683,7 @@ static void igmp_show_interfaces_single(struct pim_instance *pim,
 
        now = pim_time_monotonic_sec();
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
 
                if (!pim_ifp)
@@ -866,7 +859,6 @@ static void igmp_show_interfaces_single(struct pim_instance *pim,
 
 static void igmp_show_interface_join(struct pim_instance *pim, struct vty *vty)
 {
-       struct listnode *node;
        struct interface *ifp;
        time_t now;
 
@@ -875,7 +867,7 @@ static void igmp_show_interface_join(struct pim_instance *pim, struct vty *vty)
        vty_out(vty,
                "Interface Address         Source          Group           Socket Uptime  \n");
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                struct pim_interface *pim_ifp;
                struct listnode *join_node;
                struct igmp_join *ij;
@@ -922,7 +914,6 @@ static void pim_show_interfaces_single(struct pim_instance *pim,
        struct in_addr ifaddr;
        struct interface *ifp;
        struct listnode *neighnode;
-       struct listnode *node;
        struct listnode *upnode;
        struct pim_interface *pim_ifp;
        struct pim_neighbor *neigh;
@@ -956,7 +947,7 @@ static void pim_show_interfaces_single(struct pim_instance *pim,
        if (uj)
                json = json_object_new_object();
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
 
                if (!pim_ifp)
@@ -1324,7 +1315,6 @@ static void pim_show_interfaces(struct pim_instance *pim, struct vty *vty,
                                u_char uj)
 {
        struct interface *ifp;
-       struct listnode *node;
        struct listnode *upnode;
        struct pim_interface *pim_ifp;
        struct pim_upstream *up;
@@ -1337,7 +1327,7 @@ static void pim_show_interfaces(struct pim_instance *pim, struct vty *vty,
 
        json = json_object_new_object();
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
 
                if (!pim_ifp)
@@ -1419,7 +1409,6 @@ static void pim_show_interface_traffic(struct pim_instance *pim,
 {
        struct interface *ifp = NULL;
        struct pim_interface *pim_ifp = NULL;
-       struct listnode *node = NULL;
        json_object *json = NULL;
        json_object *json_row = NULL;
 
@@ -1437,7 +1426,7 @@ static void pim_show_interface_traffic(struct pim_instance *pim,
                        "---------------------------------------------------------------------------------------------------------------\n");
        }
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
 
                if (!pim_ifp)
@@ -1500,7 +1489,6 @@ static void pim_show_interface_traffic_single(struct pim_instance *pim,
 {
        struct interface *ifp = NULL;
        struct pim_interface *pim_ifp = NULL;
-       struct listnode *node = NULL;
        json_object *json = NULL;
        json_object *json_row = NULL;
        uint8_t found_ifname = 0;
@@ -1519,7 +1507,7 @@ static void pim_show_interface_traffic_single(struct pim_instance *pim,
                        "---------------------------------------------------------------------------------------------------------------\n");
        }
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                if (strcmp(ifname, ifp->name))
                        continue;
 
@@ -1664,7 +1652,6 @@ static void pim_show_join_helper(struct vty *vty,
 
 static void pim_show_join(struct pim_instance *pim, struct vty *vty, u_char uj)
 {
-       struct listnode *if_node;
        struct pim_interface *pim_ifp;
        struct pim_ifchannel *ch;
        struct interface *ifp;
@@ -1679,7 +1666,7 @@ static void pim_show_join(struct pim_instance *pim, struct vty *vty, u_char uj)
                vty_out(vty,
                        "Interface Address         Source          Group           State      Uptime   Expire Prune\n");
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), if_node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
                if (!pim_ifp)
                        continue;
@@ -1699,7 +1686,6 @@ static void pim_show_join(struct pim_instance *pim, struct vty *vty, u_char uj)
 static void pim_show_neighbors_single(struct pim_instance *pim, struct vty *vty,
                                      const char *neighbor, u_char uj)
 {
-       struct listnode *node;
        struct listnode *neighnode;
        struct interface *ifp;
        struct pim_interface *pim_ifp;
@@ -1725,7 +1711,7 @@ static void pim_show_neighbors_single(struct pim_instance *pim, struct vty *vty,
        if (uj)
                json = json_object_new_object();
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
 
                if (!pim_ifp)
@@ -2111,7 +2097,6 @@ static void pim_show_state(struct pim_instance *pim, struct vty *vty,
 static void pim_show_neighbors(struct pim_instance *pim, struct vty *vty,
                               u_char uj)
 {
-       struct listnode *node;
        struct listnode *neighnode;
        struct interface *ifp;
        struct pim_interface *pim_ifp;
@@ -2133,7 +2118,7 @@ static void pim_show_neighbors(struct pim_instance *pim, struct vty *vty,
                        "Interface         Neighbor    Uptime  Holdtime  DR Pri\n");
        }
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
 
                if (!pim_ifp)
@@ -2194,13 +2179,12 @@ static void pim_show_neighbors(struct pim_instance *pim, struct vty *vty,
 static void pim_show_neighbors_secondary(struct pim_instance *pim,
                                         struct vty *vty)
 {
-       struct listnode *node;
        struct interface *ifp;
 
        vty_out(vty,
                "Interface Address         Neighbor        Secondary      \n");
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                struct pim_interface *pim_ifp;
                struct in_addr ifaddr;
                struct listnode *neighnode;
@@ -2517,7 +2501,6 @@ static void pim_show_join_desired_helper(struct pim_instance *pim,
 static void pim_show_join_desired(struct pim_instance *pim, struct vty *vty,
                                  u_char uj)
 {
-       struct listnode *if_node;
        struct pim_interface *pim_ifp;
        struct pim_ifchannel *ch;
        struct interface *ifp;
@@ -2531,7 +2514,7 @@ static void pim_show_join_desired(struct pim_instance *pim, struct vty *vty,
                        "Interface Source          Group           LostAssert Joins PimInclude JoinDesired EvalJD\n");
 
        /* scan per-interface (S,G) state */
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), if_node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
                if (!pim_ifp)
                        continue;
@@ -2812,7 +2795,6 @@ static void pim_show_nexthop(struct pim_instance *pim, struct vty *vty)
 static void igmp_show_groups(struct pim_instance *pim, struct vty *vty,
                             u_char uj)
 {
-       struct listnode *ifnode;
        struct interface *ifp;
        time_t now;
        json_object *json = NULL;
@@ -2828,7 +2810,7 @@ static void igmp_show_groups(struct pim_instance *pim, struct vty *vty,
                        "Interface Address         Group           Mode Timer    Srcs V Uptime  \n");
 
        /* scan interfaces */
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), ifnode, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                struct pim_interface *pim_ifp = ifp->info;
                struct listnode *sock_node;
                struct igmp_sock *igmp;
@@ -2934,14 +2916,13 @@ static void igmp_show_groups(struct pim_instance *pim, struct vty *vty,
 static void igmp_show_group_retransmission(struct pim_instance *pim,
                                           struct vty *vty)
 {
-       struct listnode *ifnode;
        struct interface *ifp;
 
        vty_out(vty,
                "Interface Address         Group           RetTimer Counter RetSrcs\n");
 
        /* scan interfaces */
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), ifnode, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                struct pim_interface *pim_ifp = ifp->info;
                struct listnode *sock_node;
                struct igmp_sock *igmp;
@@ -2999,7 +2980,6 @@ static void igmp_show_group_retransmission(struct pim_instance *pim,
 
 static void igmp_show_sources(struct pim_instance *pim, struct vty *vty)
 {
-       struct listnode *ifnode;
        struct interface *ifp;
        time_t now;
 
@@ -3009,7 +2989,7 @@ static void igmp_show_sources(struct pim_instance *pim, struct vty *vty)
                "Interface Address         Group           Source          Timer Fwd Uptime  \n");
 
        /* scan interfaces */
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), ifnode, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                struct pim_interface *pim_ifp = ifp->info;
                struct listnode *sock_node;
                struct igmp_sock *igmp;
@@ -3076,14 +3056,13 @@ static void igmp_show_sources(struct pim_instance *pim, struct vty *vty)
 static void igmp_show_source_retransmission(struct pim_instance *pim,
                                            struct vty *vty)
 {
-       struct listnode *ifnode;
        struct interface *ifp;
 
        vty_out(vty,
                "Interface Address         Group           Source          Counter\n");
 
        /* scan interfaces */
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), ifnode, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                struct pim_interface *pim_ifp = ifp->info;
                struct listnode *sock_node;
                struct igmp_sock *igmp;
@@ -3135,29 +3114,20 @@ static void igmp_show_source_retransmission(struct pim_instance *pim,
 
 static void clear_igmp_interfaces(struct pim_instance *pim)
 {
-       struct listnode *ifnode;
-       struct listnode *ifnextnode;
        struct interface *ifp;
 
-       for (ALL_LIST_ELEMENTS(vrf_iflist(pim->vrf_id), ifnode, ifnextnode,
-                              ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp)
                pim_if_addr_del_all_igmp(ifp);
-       }
 
-       for (ALL_LIST_ELEMENTS(vrf_iflist(pim->vrf_id), ifnode, ifnextnode,
-                              ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp)
                pim_if_addr_add_all(ifp);
-       }
 }
 
 static void clear_pim_interfaces(struct pim_instance *pim)
 {
-       struct listnode *ifnode;
-       struct listnode *ifnextnode;
        struct interface *ifp;
 
-       for (ALL_LIST_ELEMENTS(vrf_iflist(pim->vrf_id), ifnode, ifnextnode,
-                              ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                if (ifp->info) {
                        pim_neighbor_delete_all(ifp, "interface cleared");
                }
@@ -3311,16 +3281,13 @@ DEFUN (clear_ip_pim_interface_traffic,
 {
        int idx = 2;
        struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx);
-       struct listnode *ifnode = NULL;
-       struct listnode *ifnextnode = NULL;
        struct interface *ifp = NULL;
        struct pim_interface *pim_ifp = NULL;
 
        if (!vrf)
                return CMD_WARNING;
 
-       for (ALL_LIST_ELEMENTS(vrf_iflist(vrf->vrf_id), ifnode, ifnextnode,
-                              ifp)) {
+       FOR_ALL_INTERFACES (vrf, ifp) {
                pim_ifp = ifp->info;
 
                if (!pim_ifp)
@@ -4330,7 +4297,6 @@ DEFUN (show_ip_pim_interface_traffic,
 
 static void show_multicast_interfaces(struct pim_instance *pim, struct vty *vty)
 {
-       struct listnode *node;
        struct interface *ifp;
 
        vty_out(vty, "\n");
@@ -4338,7 +4304,7 @@ static void show_multicast_interfaces(struct pim_instance *pim, struct vty *vty)
        vty_out(vty,
                "Interface Address            ifi Vif  PktsIn PktsOut    BytesIn   BytesOut\n");
 
-       for (ALL_LIST_ELEMENTS_RO(vrf_iflist(pim->vrf_id), node, ifp)) {
+       FOR_ALL_INTERFACES (pim->vrf, ifp) {
                struct pim_interface *pim_ifp;
                struct in_addr ifaddr;
                struct sioc_vif_req vreq;