]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ripngd: move "ripng_enable_if" to the ripng structure
authorRenato Westphal <renato@opensourcerouting.org>
Fri, 4 Jan 2019 21:08:10 +0000 (19:08 -0200)
committerRenato Westphal <renato@opensourcerouting.org>
Fri, 18 Jan 2019 18:15:41 +0000 (16:15 -0200)
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
ripngd/ripng_interface.c
ripngd/ripngd.c
ripngd/ripngd.h

index 4d14fbab649290301604d853d2173e7782560426..fff727ffd2c0c843d72f7b4ef3888a702ac1717e 100644 (file)
@@ -446,9 +446,6 @@ int ripng_interface_address_delete(int command, struct zclient *zclient,
        return 0;
 }
 
-/* RIPng enable interface vector. */
-vector ripng_enable_if;
-
 /* RIPng enable network table. */
 struct agg_table *ripng_enable_network;
 
@@ -558,14 +555,16 @@ static int ripng_enable_if_lookup(const char *ifname)
        unsigned int i;
        char *str;
 
-       for (i = 0; i < vector_active(ripng_enable_if); i++)
-               if ((str = vector_slot(ripng_enable_if, i)) != NULL)
+       if (!ripng)
+               return -1;
+
+       for (i = 0; i < vector_active(ripng->enable_if); i++)
+               if ((str = vector_slot(ripng->enable_if, i)) != NULL)
                        if (strcmp(str, ifname) == 0)
                                return i;
        return -1;
 }
 
-/* Add interface to ripng_enable_if. */
 int ripng_enable_if_add(const char *ifname)
 {
        int ret;
@@ -574,14 +573,13 @@ int ripng_enable_if_add(const char *ifname)
        if (ret >= 0)
                return NB_ERR_INCONSISTENCY;
 
-       vector_set(ripng_enable_if, strdup(ifname));
+       vector_set(ripng->enable_if, strdup(ifname));
 
        ripng_enable_apply_all();
 
        return NB_OK;
 }
 
-/* Delete interface from ripng_enable_if. */
 int ripng_enable_if_delete(const char *ifname)
 {
        int index;
@@ -591,9 +589,9 @@ int ripng_enable_if_delete(const char *ifname)
        if (index < 0)
                return NB_ERR_INCONSISTENCY;
 
-       str = vector_slot(ripng_enable_if, index);
+       str = vector_slot(ripng->enable_if, index);
        free(str);
-       vector_unset(ripng_enable_if, index);
+       vector_unset(ripng->enable_if, index);
 
        ripng_enable_apply_all();
 
@@ -753,11 +751,11 @@ void ripng_clean_network()
                        agg_unlock_node(rn);
                }
 
-       /* ripng_enable_if */
-       for (i = 0; i < vector_active(ripng_enable_if); i++)
-               if ((str = vector_slot(ripng_enable_if, i)) != NULL) {
+       /* ripng->enable_if */
+       for (i = 0; i < vector_active(ripng->enable_if); i++)
+               if ((str = vector_slot(ripng->enable_if, i)) != NULL) {
                        free(str);
-                       vector_slot(ripng_enable_if, i) = NULL;
+                       vector_slot(ripng->enable_if, i) = NULL;
                }
 }
 
@@ -864,8 +862,8 @@ int ripng_network_write(struct vty *vty)
                }
 
        /* Write enable interface. */
-       for (i = 0; i < vector_active(ripng_enable_if); i++)
-               if ((ifname = vector_slot(ripng_enable_if, i)) != NULL)
+       for (i = 0; i < vector_active(ripng->enable_if); i++)
+               if ((ifname = vector_slot(ripng->enable_if, i)) != NULL)
                        vty_out(vty, "    %s\n", ifname);
 
        return 0;
@@ -939,9 +937,6 @@ void ripng_if_init()
        /* RIPng enable network init. */
        ripng_enable_network = agg_table_init();
 
-       /* RIPng enable interface init. */
-       ripng_enable_if = vector_init(1);
-
        /* RIPng passive interface. */
        Vripng_passive_interface = vector_init(1);
 
index 13e3606946514b169ceb78c0be7ca7eabe2f2d78..d54217d121fd2e36451ec1f2752ac6d5602f8ca2 100644 (file)
@@ -1803,8 +1803,9 @@ int ripng_create(int socket)
        ripng->ibuf = stream_new(RIPNG_MAX_PACKET_SIZE * 5);
        ripng->obuf = stream_new(RIPNG_MAX_PACKET_SIZE);
 
-       /* Initialize RIPng routig table. */
+       /* Initialize RIPng data structures. */
        ripng->table = agg_table_init();
+       ripng->enable_if = vector_init(1);
 
        /* Distribute list install. */
        ripng->distribute_ctx = distribute_list_ctx_create(
@@ -2461,6 +2462,7 @@ void ripng_clean()
 
        ripng_clean_network();
        ripng_passive_interface_clean();
+       vector_free(ripng->enable_if);
        ripng_offset_clean();
        ripng_interface_clean();
        ripng_redistribute_clean();
index 1db7a83b114ad052b585c345b45b66c7d452c3e6..af2f65eb46079ae54a54720f7e56a10ff2dc8db9 100644 (file)
@@ -25,6 +25,7 @@
 #include <zclient.h>
 #include <vty.h>
 #include <distribute.h>
+#include <vector.h>
 
 #include "ripng_memory.h"
 
@@ -107,6 +108,9 @@ struct ripng {
        /* RIPng routing information base. */
        struct agg_table *table;
 
+       /* RIPng enabled interfaces. */
+       vector enable_if;
+
        /* RIPng threads. */
        struct thread *t_read;
        struct thread *t_write;