]> git.puffer.fish Git - mirror/frr.git/commitdiff
vrrpd: fix interface block config writes
authorQuentin Young <qlyoung@cumulusnetworks.com>
Thu, 28 Feb 2019 23:48:09 +0000 (23:48 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Fri, 17 May 2019 00:27:08 +0000 (00:27 +0000)
Improper reuse of list node broke config writes of multiple instances

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
vrrpd/vrrp.c

index 4d4a66b6d1962325e91b16a98dc2664b01e49954..fbc738e30866ea1d416323725f24fd68c6d6bdb0 100644 (file)
@@ -2053,7 +2053,7 @@ void vrrp_if_address_del(struct interface *ifp)
 int vrrp_config_write_interface(struct vty *vty)
 {
        struct list *vrs = hash_to_list(vrrp_vrouters_hash);
-       struct listnode *ln;
+       struct listnode *ln, *ipln;
        struct vrrp_vrouter *vr;
        int writes = 0;
 
@@ -2088,23 +2088,24 @@ int vrrp_config_write_interface(struct vty *vty)
                        vty_out(vty, " vrrp %" PRIu8 " priority %" PRIu8 "\n",
                                vr->vrid, vr->priority);
 
-               ln = NULL;
                struct ipaddr *ip;
 
-               for (ALL_LIST_ELEMENTS_RO(vr->v4->addrs, ln, ip)) {
+               for (ALL_LIST_ELEMENTS_RO(vr->v4->addrs, ipln, ip)) {
                        char ipbuf[INET6_ADDRSTRLEN];
                        ipaddr2str(ip, ipbuf, sizeof(ipbuf));
                        vty_out(vty, " vrrp %" PRIu8 " ip %s\n", vr->vrid,
                                ipbuf);
                        ++writes;
                }
-               for (ALL_LIST_ELEMENTS_RO(vr->v6->addrs, ln, ip)) {
+
+               for (ALL_LIST_ELEMENTS_RO(vr->v6->addrs, ipln, ip)) {
                        char ipbuf[INET6_ADDRSTRLEN];
                        ipaddr2str(ip, ipbuf, sizeof(ipbuf));
                        vty_out(vty, " vrrp %" PRIu8 " ipv6 %s\n", vr->vrid,
                                ipbuf);
                        ++writes;
                }
+               vty_endframe(vty, "!\n");
        }
 
        return writes;