]> git.proxmox.com Git - mirror_frr.git/blobdiff - ldpd/address.c
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / ldpd / address.c
index 584240de8495514150703b1029a9f3e21810307a..107eb5d78096c28ac93fdbed3e93388cfd44ef27 100644 (file)
@@ -1,19 +1,8 @@
+// SPDX-License-Identifier: ISC
 /*     $OpenBSD$ */
 
 /*
  * Copyright (c) 2009 Michele Marchetto <michele@openbsd.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
 #include <zebra.h>
@@ -67,7 +56,7 @@ send_address(struct nbr *nbr, int af, struct if_addr_head *addr_list,
                fatalx("send_address: unknown af");
        }
 
-       while ((if_addr = LIST_FIRST(addr_list)) != NULL) {
+       while (LIST_FIRST(addr_list) != NULL) {
                /*
                 * Send as many addresses as possible - respect the session's
                 * negotiated maximum pdu length.
@@ -83,11 +72,13 @@ send_address(struct nbr *nbr, int af, struct if_addr_head *addr_list,
                if ((buf = ibuf_open(size)) == NULL)
                        fatal(__func__);
 
-               err |= gen_ldp_hdr(buf, size);
+               SET_FLAG(err, gen_ldp_hdr(buf, size));
                size -= LDP_HDR_SIZE;
-               err |= gen_msg_hdr(buf, msg_type, size);
+               SET_FLAG(err, gen_msg_hdr(buf, msg_type, size));
                size -= LDP_MSG_SIZE;
-               err |= gen_address_list_tlv(buf, af, addr_list, tlv_addr_count);
+               SET_FLAG(err, gen_address_list_tlv(buf, af, addr_list, tlv_addr_count));
+               (void)size;
+
                if (err) {
                        address_list_clr(addr_list);
                        ibuf_free(buf);
@@ -98,6 +89,7 @@ send_address(struct nbr *nbr, int af, struct if_addr_head *addr_list,
                        log_msg_address(1, msg_type, nbr, af, &if_addr->addr);
 
                        LIST_REMOVE(if_addr, entry);
+                       assert(if_addr != LIST_FIRST(addr_list));
                        free(if_addr);
                        if (--tlv_addr_count == 0)
                                break;
@@ -160,18 +152,19 @@ send_mac_withdrawal(struct nbr *nbr, struct map *fec, uint8_t *mac)
        size = LDP_HDR_SIZE + LDP_MSG_SIZE + ADDR_LIST_SIZE + len_fec_tlv(fec) +
            TLV_HDR_SIZE;
        if (mac)
-               size += ETHER_ADDR_LEN;
+               size += ETH_ALEN;
 
        if ((buf = ibuf_open(size)) == NULL)
                fatal(__func__);
 
        err = gen_ldp_hdr(buf, size);
        size -= LDP_HDR_SIZE;
-       err |= gen_msg_hdr(buf, MSG_TYPE_ADDRWITHDRAW, size);
-       size -= LDP_MSG_SIZE;
-       err |= gen_address_list_tlv(buf, AF_INET, NULL, 0);
-       err |= gen_fec_tlv(buf, fec);
-       err |= gen_mac_list_tlv(buf, mac);
+
+       SET_FLAG(err, gen_msg_hdr(buf, MSG_TYPE_ADDRWITHDRAW, size));
+       SET_FLAG(err, gen_address_list_tlv(buf, AF_INET, NULL, 0));
+       SET_FLAG(err, gen_fec_tlv(buf, fec));
+       SET_FLAG(err, gen_mac_list_tlv(buf, mac));
+
        if (err) {
                ibuf_free(buf);
                return;
@@ -350,12 +343,14 @@ gen_address_list_tlv(struct ibuf *buf, int af, struct if_addr_head *addr_list,
        }
        alt.length = htons(sizeof(alt.family) + addr_size * tlv_addr_count);
 
-       err |= ibuf_add(buf, &alt, sizeof(alt));
+       SET_FLAG(err, ibuf_add(buf, &alt, sizeof(alt)));
+
        if (addr_list == NULL)
                return (err);
 
        LIST_FOREACH(if_addr, addr_list, entry) {
-               err |= ibuf_add(buf, &if_addr->addr, addr_size);
+               SET_FLAG(err, ibuf_add(buf, &if_addr->addr, addr_size));
+
                if (--tlv_addr_count == 0)
                        break;
        }
@@ -372,10 +367,10 @@ gen_mac_list_tlv(struct ibuf *buf, uint8_t *mac)
        memset(&tlv, 0, sizeof(tlv));
        tlv.type = htons(TLV_TYPE_MAC_LIST);
        if (mac)
-               tlv.length = htons(ETHER_ADDR_LEN);
+               tlv.length = htons(ETH_ALEN);
        err = ibuf_add(buf, &tlv, sizeof(tlv));
        if (mac)
-               err |= ibuf_add(buf, mac, ETHER_ADDR_LEN);
+               SET_FLAG(err, ibuf_add(buf, mac, ETH_ALEN));
 
        return (err);
 }
@@ -400,6 +395,7 @@ address_list_clr(struct if_addr_head *addr_list)
 
        while ((if_addr = LIST_FIRST(addr_list)) != NULL) {
                LIST_REMOVE(if_addr, entry);
+               assert(if_addr != LIST_FIRST(addr_list));
                free(if_addr);
        }
 }
@@ -408,8 +404,8 @@ static void
 log_msg_address(int out, uint16_t msg_type, struct nbr *nbr, int af,
     union ldpd_addr *addr)
 {
-       debug_msg(out, "%s: lsr-id %s, address %s", msg_name(msg_type),
-           inet_ntoa(nbr->id), log_addr(af, addr));
+       debug_msg(out, "%s: lsr-id %pI4, address %s", msg_name(msg_type),
+           &nbr->id, log_addr(af, addr));
 }
 
 static void
@@ -417,7 +413,7 @@ log_msg_mac_withdrawal(int out, struct nbr *nbr, uint8_t *mac)
 {
        char buf[ETHER_ADDR_STRLEN];
 
-       debug_msg(out, "mac withdrawal: lsr-id %s, mac %s", inet_ntoa(nbr->id),
+       debug_msg(out, "mac withdrawal: lsr-id %pI4, mac %s", &nbr->id,
            (mac) ? prefix_mac2str((struct ethaddr *)mac, buf, sizeof(buf)) :
            "wildcard");
 }