This is a follow-up to use more of the new ibuf API to write the mrt message.

This removes all of the DUMP_XYZ macros and replaces them with
ibuf_add_nX() calls. Also unify the error handling by using
goto fail; in all cases and use a more generic log_warn() there once.
-- 
:wq Claudio

Index: mrt.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/mrt.c,v
retrieving revision 1.115
diff -u -p -r1.115 mrt.c
--- mrt.c       12 Jul 2023 14:45:42 -0000      1.115
+++ mrt.c       13 Jul 2023 07:57:23 -0000
@@ -46,44 +46,6 @@ int mrt_dump_hdr_se(struct ibuf **, stru
 int mrt_dump_hdr_rde(struct ibuf **, uint16_t type, uint16_t, uint32_t);
 int mrt_open(struct mrt *, time_t);
 
-#define DUMP_BYTE(x, b)                                                        
\
-       do {                                                            \
-               u_char          t = (b);                                \
-               if (ibuf_add((x), &t, sizeof(t)) == -1) {               \
-                       log_warn("mrt_dump1: ibuf_add error");          \
-                       goto fail;                                      \
-               }                                                       \
-       } while (0)
-
-#define DUMP_SHORT(x, s)                                               \
-       do {                                                            \
-               uint16_t        t;                                      \
-               t = htons((s));                                         \
-               if (ibuf_add((x), &t, sizeof(t)) == -1) {               \
-                       log_warn("mrt_dump2: ibuf_add error");          \
-                       goto fail;                                      \
-               }                                                       \
-       } while (0)
-
-#define DUMP_LONG(x, l)                                                        
\
-       do {                                                            \
-               uint32_t        t;                                      \
-               t = htonl((l));                                         \
-               if (ibuf_add((x), &t, sizeof(t)) == -1) {               \
-                       log_warn("mrt_dump3: ibuf_add error");          \
-                       goto fail;                                      \
-               }                                                       \
-       } while (0)
-
-#define DUMP_NLONG(x, l)                                               \
-       do {                                                            \
-               uint32_t        t = (l);                                \
-               if (ibuf_add((x), &t, sizeof(t)) == -1) {               \
-                       log_warn("mrt_dump4: ibuf_add error");          \
-                       goto fail;                                      \
-               }                                                       \
-       } while (0)
-
 #define RDEIDX         0
 #define SEIDX          1
 #define TYPE2IDX(x)    ((x == MRT_TABLE_DUMP ||                        \
@@ -248,13 +210,16 @@ mrt_dump_state(struct mrt *mrt, uint16_t
            2 * sizeof(short), 0) == -1)
                return;
 
-       DUMP_SHORT(buf, old_state);
-       DUMP_SHORT(buf, new_state);
+       if (ibuf_add_n16(buf, old_state) == -1)
+               goto fail;
+       if (ibuf_add_n16(buf, new_state) == -1)
+               goto fail;
 
        ibuf_close(&mrt->wbuf, buf);
        return;
 
 fail:
+       log_warn("%s: ibuf error", __func__);
        ibuf_free(buf);
 }
 
@@ -330,39 +295,48 @@ mrt_attr_dump(struct ibuf *buf, struct r
                        return (-1);
                if (!v2) {
                        if (aid2afi(nexthop->aid, &afi, &safi))
-                               return (-1);
-                       DUMP_SHORT(nhbuf, afi);
-                       DUMP_BYTE(nhbuf, safi);
+                               goto fail;
+                       if (ibuf_add_n16(nhbuf, afi) == -1)
+                               goto fail;
+                       if (ibuf_add_n8(nhbuf, safi) == -1)
+                               goto fail;
                }
                switch (nexthop->aid) {
                case AID_INET6:
-                       DUMP_BYTE(nhbuf, sizeof(struct in6_addr));
+                       if (ibuf_add_n8(nhbuf, sizeof(struct in6_addr)) == -1)
+                               goto fail;
                        if (ibuf_add(nhbuf, &nexthop->v6,
                            sizeof(struct in6_addr)) == -1)
                                goto fail;
                        break;
                case AID_VPN_IPv4:
-                       DUMP_BYTE(nhbuf, sizeof(uint64_t) +
-                           sizeof(struct in_addr));
-                       DUMP_NLONG(nhbuf, 0);   /* set RD to 0 */
-                       DUMP_NLONG(nhbuf, 0);
-                       DUMP_NLONG(nhbuf, nexthop->v4.s_addr);
+                       if (ibuf_add_n8(nhbuf, sizeof(uint64_t) +
+                           sizeof(struct in_addr)) == -1)
+                               goto fail;
+                       if (ibuf_add_n64(nhbuf, 0) == -1) /* set RD to 0 */
+                               goto fail;
+                       if (ibuf_add(nhbuf, &nexthop->v4,
+                           sizeof(nexthop->v4)) == -1)
+                               goto fail;
                        break;
                case AID_VPN_IPv6:
-                       DUMP_BYTE(nhbuf, sizeof(uint64_t) +
-                           sizeof(struct in6_addr));
-                       DUMP_NLONG(nhbuf, 0);   /* set RD to 0 */
-                       DUMP_NLONG(nhbuf, 0);
-                       if (ibuf_add(nhbuf, &nexthop->v6,
+                       if (ibuf_add_n8(nhbuf, sizeof(uint64_t) +
                            sizeof(struct in6_addr)) == -1)
                                goto fail;
+                       if (ibuf_add_n64(nhbuf, 0) == -1) /* set RD to 0 */
+                               goto fail;
+                       if (ibuf_add(nhbuf, &nexthop->v6,
+                           sizeof(nexthop->v6)) == -1)
+                               goto fail;
                        break;
                }
                if (!v2)
-                       DUMP_BYTE(nhbuf, 0);
+                       if (ibuf_add_n8(nhbuf, 0) == -1)
+                               goto fail;
                if (attr_writebuf(buf, ATTR_OPTIONAL, ATTR_MP_REACH_NLRI,
-                   nhbuf->buf, ibuf_size(nhbuf)) == -1) {
+                   ibuf_data(nhbuf), ibuf_size(nhbuf)) == -1) {
 fail:
+                       log_warn("%s: ibuf error", __func__);
                        ibuf_free(nhbuf);
                        return (-1);
                }
@@ -399,22 +373,21 @@ mrt_dump_entry_mp(struct mrt *mrt, struc
        }
 
        if (mrt_attr_dump(buf, prefix_aspath(p), prefix_communities(p),
-           NULL, 0) == -1) {
-               log_warnx("mrt_dump_entry_mp: mrt_attr_dump error");
+           NULL, 0) == -1)
                goto fail;
-       }
        len = ibuf_size(buf);
 
        if ((h2buf = ibuf_dynamic(MRT_BGP4MP_IPv4_HEADER_SIZE +
            MRT_BGP4MP_IPv4_ENTRY_SIZE, MRT_BGP4MP_IPv6_HEADER_SIZE +
-           MRT_BGP4MP_IPv6_ENTRY_SIZE + MRT_BGP4MP_MAX_PREFIXLEN)) == NULL) {
-               log_warn("mrt_dump_entry_mp: ibuf_dynamic");
+           MRT_BGP4MP_IPv6_ENTRY_SIZE + MRT_BGP4MP_MAX_PREFIXLEN)) == NULL)
                goto fail;
-       }
 
-       DUMP_SHORT(h2buf, peer->conf.local_short_as);
-       DUMP_SHORT(h2buf, peer->short_as);
-       DUMP_SHORT(h2buf, /* ifindex */ 0);
+       if (ibuf_add_n16(h2buf, peer->conf.local_short_as) == -1)
+               goto fail;
+       if (ibuf_add_n16(h2buf, peer->short_as) == -1)
+               goto fail;
+       if (ibuf_add_n16(h2buf, /* ifindex */ 0) == -1)
+               goto fail;
 
        /* XXX is this for peer self? */
        aid = peer->remote_addr.aid == AID_UNSPEC ? p->pt->aid :
@@ -422,30 +395,37 @@ mrt_dump_entry_mp(struct mrt *mrt, struc
        switch (aid) {
        case AID_INET:
        case AID_VPN_IPv4:
-               DUMP_SHORT(h2buf, AFI_IPv4);
-               DUMP_NLONG(h2buf, peer->local_v4_addr.v4.s_addr);
-               DUMP_NLONG(h2buf, peer->remote_addr.v4.s_addr);
+               if (ibuf_add_n16(h2buf, AFI_IPv4) == -1)
+                       goto fail;
+               if (ibuf_add(h2buf, &peer->local_v4_addr.v4,
+                   sizeof(peer->local_v4_addr.v4)) == -1 ||
+                   ibuf_add(h2buf, &peer->remote_addr.v4,
+                   sizeof(peer->remote_addr.v4)) == -1)
+                       goto fail;
                break;
        case AID_INET6:
        case AID_VPN_IPv6:
-               DUMP_SHORT(h2buf, AFI_IPv6);
+               if (ibuf_add_n16(h2buf, AFI_IPv6) == -1)
+                       goto fail;
                if (ibuf_add(h2buf, &peer->local_v6_addr.v6,
-                   sizeof(struct in6_addr)) == -1 ||
+                   sizeof(peer->local_v6_addr.v6)) == -1 ||
                    ibuf_add(h2buf, &peer->remote_addr.v6,
-                   sizeof(struct in6_addr)) == -1) {
-                       log_warn("mrt_dump_entry_mp: ibuf_add error");
+                   sizeof(peer->remote_addr.v6)) == -1)
                        goto fail;
-               }
                break;
        default:
                log_warnx("king bula found new AF %d in %s", aid, __func__);
                goto fail;
        }
 
-       DUMP_SHORT(h2buf, 0);           /* view */
-       DUMP_SHORT(h2buf, 1);           /* status */
+       if (ibuf_add_n16(h2buf, 0) == -1)               /* view */
+               goto fail;
+       if (ibuf_add_n16(h2buf, 1) == -1)               /* status */
+               goto fail;
        /* originated timestamp */
-       DUMP_LONG(h2buf, time(NULL) - (getmonotime() - p->lastchange));
+       if (ibuf_add_n32(h2buf, time(NULL) - (getmonotime() -
+           p->lastchange)) == -1)
+               goto fail;
 
        n = prefix_nexthop(p);
        if (n == NULL) {
@@ -457,59 +437,75 @@ mrt_dump_entry_mp(struct mrt *mrt, struc
 
        switch (p->pt->aid) {
        case AID_INET:
-               DUMP_SHORT(h2buf, AFI_IPv4);    /* afi */
-               DUMP_BYTE(h2buf, SAFI_UNICAST); /* safi */
-               DUMP_BYTE(h2buf, 4);            /* nhlen */
-               DUMP_NLONG(h2buf, nh->v4.s_addr);       /* nexthop */
+               if (ibuf_add_n16(h2buf, AFI_IPv4) == -1)        /* afi */
+                       goto fail;
+               if (ibuf_add_n8(h2buf, SAFI_UNICAST) == -1)     /* safi */
+                       goto fail;
+               if (ibuf_add_n8(h2buf, 4) == -1)                /* nhlen */
+                       goto fail;
+               if (ibuf_add(h2buf, &nh->v4, sizeof(nh->v4)) == -1)
+                       goto fail;
                break;
        case AID_INET6:
-               DUMP_SHORT(h2buf, AFI_IPv6);    /* afi */
-               DUMP_BYTE(h2buf, SAFI_UNICAST); /* safi */
-               DUMP_BYTE(h2buf, 16);           /* nhlen */
-               if (ibuf_add(h2buf, &nh->v6, sizeof(struct in6_addr)) == -1) {
-                       log_warn("mrt_dump_entry_mp: ibuf_add error");
+               if (ibuf_add_n16(h2buf, AFI_IPv6) == -1)        /* afi */
+                       goto fail;
+               if (ibuf_add_n8(h2buf, SAFI_UNICAST) == -1)     /* safi */
+                       goto fail;
+               if (ibuf_add_n8(h2buf, 16) == -1)               /* nhlen */
+                       goto fail;
+               if (ibuf_add(h2buf, &nh->v6, sizeof(nh->v6)) == -1)
                        goto fail;
-               }
                break;
        case AID_VPN_IPv4:
-               DUMP_SHORT(h2buf, AFI_IPv4);    /* afi */
-               DUMP_BYTE(h2buf, SAFI_MPLSVPN); /* safi */
-               DUMP_BYTE(h2buf, sizeof(uint64_t) + sizeof(struct in_addr));
-               DUMP_NLONG(h2buf, 0);   /* set RD to 0 */
-               DUMP_NLONG(h2buf, 0);
-               DUMP_NLONG(h2buf, nh->v4.s_addr);       /* nexthop */
+               if (ibuf_add_n16(h2buf, AFI_IPv4) == -1)        /* afi */
+                       goto fail;
+               if (ibuf_add_n8(h2buf, SAFI_MPLSVPN) == -1)     /* safi */
+                       goto fail;
+               if (ibuf_add_n8(h2buf, sizeof(uint64_t) +
+                   sizeof(struct in_addr)) == -1)
+                       goto fail;
+               if (ibuf_add_n64(h2buf, 0) == -1)       /* set RD to 0 */
+                       goto fail;
+               if (ibuf_add(h2buf, &nh->v4, sizeof(nh->v4)) == -1)
+                       goto fail;
                break;
        case AID_VPN_IPv6:
-               DUMP_SHORT(h2buf, AFI_IPv6);    /* afi */
-               DUMP_BYTE(h2buf, SAFI_MPLSVPN); /* safi */
-               DUMP_BYTE(h2buf, sizeof(uint64_t) + sizeof(struct in6_addr));
-               DUMP_NLONG(h2buf, 0);   /* set RD to 0 */
-               DUMP_NLONG(h2buf, 0);
-               if (ibuf_add(h2buf, &nh->v6, sizeof(struct in6_addr)) == -1) {
-                       log_warn("mrt_dump_entry_mp: ibuf_add error");
+               if (ibuf_add_n16(h2buf, AFI_IPv6) == -1)        /* afi */
+                       goto fail;
+               if (ibuf_add_n8(h2buf, SAFI_MPLSVPN) == -1)     /* safi */
+                       goto fail;
+               if (ibuf_add_n8(h2buf, sizeof(uint64_t) +
+                   sizeof(struct in6_addr)) == -1)
+                       goto fail;
+               if (ibuf_add_n64(h2buf, 0) == -1)       /* set RD to 0 */
+                       goto fail;
+               if (ibuf_add(h2buf, &nh->v6, sizeof(nh->v6)) == -1)
                        goto fail;
-               }
                break;
        case AID_FLOWSPECv4:
        case AID_FLOWSPECv6:
-               if (p->pt->aid == AID_FLOWSPECv4)
-                       DUMP_SHORT(h2buf, AFI_IPv4);    /* afi */
-               else
-                       DUMP_SHORT(h2buf, AFI_IPv6);    /* afi */
-               DUMP_BYTE(h2buf, SAFI_FLOWSPEC);        /* safi */
-               DUMP_BYTE(h2buf, 0);                    /* nhlen */
+               if (p->pt->aid == AID_FLOWSPECv4) {
+                       if (ibuf_add_n16(h2buf, AFI_IPv4) == -1) /* afi */
+                               goto fail;
+               } else {
+                       if (ibuf_add_n16(h2buf, AFI_IPv6) == -1) /* afi */
+                               goto fail;
+               }
+               if (ibuf_add_n8(h2buf, SAFI_FLOWSPEC) == -1)    /* safi */
+                       goto fail;
+               if (ibuf_add_n8(h2buf, 0) == -1)                /* nhlen */
+                       goto fail;
                break;
        default:
                log_warnx("king bula found new AF in %s", __func__);
                goto fail;
        }
 
-       if (pt_writebuf(h2buf, p->pt, 0, 0, 0) == -1) {
-               log_warnx("%s: pt_writebuf error", __func__);
+       if (pt_writebuf(h2buf, p->pt, 0, 0, 0) == -1)
                goto fail;
-       }
 
-       DUMP_SHORT(h2buf, len);
+       if (ibuf_add_n16(h2buf, len) == -1)
+               goto fail;
        len += ibuf_size(h2buf);
 
        if (mrt_dump_hdr_rde(&hbuf, MSG_PROTOCOL_BGP4MP, BGP4MP_ENTRY,
@@ -523,6 +519,7 @@ mrt_dump_entry_mp(struct mrt *mrt, struc
        return (len + MRT_HEADER_SIZE);
 
 fail:
+       log_warn("%s: ibuf error", __func__);
        ibuf_free(hbuf);
        ibuf_free(h2buf);
        ibuf_free(buf);
@@ -570,40 +567,47 @@ mrt_dump_entry(struct mrt *mrt, struct p
                return (-1);
        }
 
-       DUMP_SHORT(hbuf, 0);
-       DUMP_SHORT(hbuf, snum);
+       if (ibuf_add_n16(hbuf, 0) == -1)
+               goto fail;
+       if (ibuf_add_n16(hbuf, snum) == -1)
+               goto fail;
 
        pt_getaddr(p->pt, &addr);
        switch (p->pt->aid) {
        case AID_INET:
-               DUMP_NLONG(hbuf, addr.v4.s_addr);
+               if (ibuf_add(hbuf, &addr.v4, sizeof(addr.v4)) == -1)
+                       goto fail;
                break;
        case AID_INET6:
-               if (ibuf_add(hbuf, &addr.v6, sizeof(struct in6_addr)) == -1) {
-                       log_warn("mrt_dump_entry: ibuf_add error");
+               if (ibuf_add(hbuf, &addr.v6, sizeof(addr.v6)) == -1)
                        goto fail;
-               }
                break;
        }
-       DUMP_BYTE(hbuf, p->pt->prefixlen);
+       if (ibuf_add_n8(hbuf, p->pt->prefixlen) == -1)
+               goto fail;
 
-       DUMP_BYTE(hbuf, 1);             /* state */
+       if (ibuf_add_n8(hbuf, 1) == -1)         /* state */
+               goto fail;
        /* originated timestamp */
-       DUMP_LONG(hbuf, time(NULL) - (getmonotime() - p->lastchange));
+       if (ibuf_add_n32(hbuf, time(NULL) - (getmonotime() -
+           p->lastchange)) == -1)
+               goto fail;
        switch (p->pt->aid) {
        case AID_INET:
-               DUMP_NLONG(hbuf, peer->remote_addr.v4.s_addr);
+               if (ibuf_add(hbuf, &peer->remote_addr.v4,
+                   sizeof(peer->remote_addr.v4)) == -1)
+                       goto fail;
                break;
        case AID_INET6:
                if (ibuf_add(hbuf, &peer->remote_addr.v6,
-                   sizeof(struct in6_addr)) == -1) {
-                       log_warn("mrt_dump_entry: ibuf_add error");
+                   sizeof(peer->remote_addr.v6)) == -1)
                        goto fail;
-               }
                break;
        }
-       DUMP_SHORT(hbuf, peer->short_as);
-       DUMP_SHORT(hbuf, len);
+       if (ibuf_add_n16(hbuf, peer->short_as) == -1)
+               goto fail;
+       if (ibuf_add_n16(hbuf, len) == -1)
+               goto fail;
 
        ibuf_close(&mrt->wbuf, hbuf);
        ibuf_close(&mrt->wbuf, buf);
@@ -611,6 +615,7 @@ mrt_dump_entry(struct mrt *mrt, struct p
        return (len + MRT_HEADER_SIZE);
 
 fail:
+       log_warn("%s: ibuf error", __func__);
        ibuf_free(hbuf);
        ibuf_free(buf);
        return (-1);
@@ -621,9 +626,9 @@ mrt_dump_entry_v2_rib(struct rib_entry *
     uint16_t *np, uint16_t *app)
 {
        struct bgpd_addr addr;
-       struct ibuf *buf, **bp;
+       struct ibuf *buf = NULL, **bp;
+       struct ibuf *tbuf = NULL;
        struct prefix *p;
-       size_t len;
        int addpath;
 
        *np = 0;
@@ -632,7 +637,6 @@ mrt_dump_entry_v2_rib(struct rib_entry *
        TAILQ_FOREACH(p, &re->prefix_h, entry.list.rib) {
                struct nexthop          *nexthop;
                struct bgpd_addr        *nh;
-               struct ibuf             *tbuf;
 
                addpath = peer_has_add_path(prefix_peer(p), re->prefix->aid,
                    CAPA_AP_RECV);
@@ -645,10 +649,8 @@ mrt_dump_entry_v2_rib(struct rib_entry *
                        *np += 1;
                }
                if ((buf = *bp) == NULL) {
-                       if ((buf = ibuf_dynamic(0, UINT_MAX)) == NULL) {
-                               log_warn("%s: ibuf_dynamic", __func__);
+                       if ((buf = ibuf_dynamic(0, UINT_MAX)) == NULL)
                                goto fail;
-                       }
                        *bp = buf;
                }
 
@@ -660,37 +662,36 @@ mrt_dump_entry_v2_rib(struct rib_entry *
                } else
                        nh = &nexthop->exit_nexthop;
 
-               DUMP_SHORT(buf, prefix_peer(p)->mrt_idx);
+               if (ibuf_add_n16(buf, prefix_peer(p)->mrt_idx) == -1)
+                       goto fail;
                /* originated timestamp */
-               DUMP_LONG(buf, time(NULL) - (getmonotime() - p->lastchange));
+               if (ibuf_add_n32(buf, time(NULL) - (getmonotime() -
+                   p->lastchange)) == -1)
+                       goto fail;
 
                /* RFC8050: path-id if add-path is used */
                if (addpath)
-                       DUMP_LONG(buf, p->path_id);
+                       if (ibuf_add_n32(buf, p->path_id) == -1)
+                               goto fail;
 
-               if ((tbuf = ibuf_dynamic(0, MAX_PKTSIZE)) == NULL) {
-                       log_warn("%s: ibuf_dynamic", __func__);
+               if ((tbuf = ibuf_dynamic(0, MAX_PKTSIZE)) == NULL)
                        goto fail;
-               }
                if (mrt_attr_dump(tbuf, prefix_aspath(p), prefix_communities(p),
-                   nh, 1) == -1) {
-                       log_warnx("%s: mrt_attr_dump error", __func__);
-                       ibuf_free(tbuf);
+                   nh, 1) == -1)
                        goto fail;
-               }
-               len = ibuf_size(tbuf);
-               DUMP_SHORT(buf, (uint16_t)len);
-               if (ibuf_add_buf(buf, tbuf) == -1) {
-                       log_warn("%s: ibuf_add_buf error", __func__);
-                       ibuf_free(tbuf);
+               if (ibuf_add_n16(buf, ibuf_size(tbuf)) == -1)
+                       goto fail;
+               if (ibuf_add_buf(buf, tbuf) == -1)
                        goto fail;
-               }
                ibuf_free(tbuf);
+               tbuf = NULL;
        }
 
        return 0;
 
 fail:
+       log_warn("%s: ibuf error", __func__);
+       ibuf_free(tbuf);
        return -1;
 }
 
@@ -728,15 +729,15 @@ mrt_dump_entry_v2(struct mrt *mrt, struc
                aid2afi(re->prefix->aid, &afi, &safi);
 
                /* first add 3-bytes AFI/SAFI */
-               DUMP_SHORT(pbuf, afi);
-               DUMP_BYTE(pbuf, safi);
+               if (ibuf_add_n16(pbuf, afi) == -1)
+                       goto fail;
+               if (ibuf_add_n8(pbuf, safi) == -1)
+                       goto fail;
                break;
        }
 
-       if (pt_writebuf(pbuf, re->prefix, 0, 0, 0) == -1) {
-               log_warnx("%s: pt_writebuf error", __func__);
+       if (pt_writebuf(pbuf, re->prefix, 0, 0, 0) == -1)
                goto fail;
-       }
 
        hlen = sizeof(snum) + sizeof(nump) + ibuf_size(pbuf);
 
@@ -749,12 +750,12 @@ mrt_dump_entry_v2(struct mrt *mrt, struc
                    len) == -1)
                        goto fail;
 
-               DUMP_LONG(hbuf, snum);
-               if (ibuf_add_buf(hbuf, pbuf) == -1) {
-                       log_warn("%s: ibuf_add_buf error", __func__);
+               if (ibuf_add_n32(hbuf, snum) == -1)
+                       goto fail;
+               if (ibuf_add_buf(hbuf, pbuf) == -1)
+                       goto fail;
+               if (ibuf_add_n16(hbuf, nump) == -1)
                        goto fail;
-               }
-               DUMP_SHORT(hbuf, nump);
 
                ibuf_close(&mrt->wbuf, hbuf);
                ibuf_close(&mrt->wbuf, nbuf);
@@ -768,12 +769,12 @@ mrt_dump_entry_v2(struct mrt *mrt, struc
                    len) == -1)
                        goto fail;
 
-               DUMP_LONG(hbuf, snum);
-               if (ibuf_add_buf(hbuf, pbuf) == -1) {
-                       log_warn("%s: ibuf_add_buf error", __func__);
+               if (ibuf_add_n32(hbuf, snum) == -1)
+                       goto fail;
+               if (ibuf_add_buf(hbuf, pbuf) == -1)
+                       goto fail;
+               if (ibuf_add_n16(hbuf, apnump) == -1)
                        goto fail;
-               }
-               DUMP_SHORT(hbuf, apnump);
 
                ibuf_close(&mrt->wbuf, hbuf);
                ibuf_close(&mrt->wbuf, apbuf);
@@ -784,6 +785,7 @@ mrt_dump_entry_v2(struct mrt *mrt, struc
        ibuf_free(pbuf);
        return (0);
 fail:
+       log_warn("%s: ibuf error", __func__);
        ibuf_free(apbuf);
        ibuf_free(nbuf);
        ibuf_free(hbuf);
@@ -824,31 +826,27 @@ mrt_dump_v2_hdr(struct mrt *mrt, struct 
                return (-1);
        }
 
-       DUMP_NLONG(buf, conf->bgpid);
+       if (ibuf_add(buf, &conf->bgpid, sizeof(conf->bgpid)) == -1)
+               goto fail;
        nlen = strlen(mrt->rib);
        if (nlen > 0)
                nlen += 1;
-       DUMP_SHORT(buf, nlen);
-       if (ibuf_add(buf, mrt->rib, nlen) == -1) {
-               log_warn("%s: ibuf_add error", __func__);
+       if (ibuf_add_n16(buf, nlen) == -1)
+               goto fail;
+       if (ibuf_add(buf, mrt->rib, nlen) == -1)
                goto fail;
-       }
 
        off = ibuf_size(buf);
-       if (ibuf_add_zero(buf, sizeof(nump)) == -1) {
-               log_warn("%s: ibuf_add_zero error", __func__);
+       if (ibuf_add_zero(buf, sizeof(nump)) == -1)
                goto fail;
-       }
        arg.nump = 0;
        arg.buf = buf;
        peer_foreach(mrt_dump_v2_hdr_peer, &arg);
        if (arg.nump == -1)
                goto fail;
 
-       if (ibuf_set_n16(buf, off, arg.nump) == -1) {
-               log_warn("%s: ibuf_set_n16 error", __func__);
+       if (ibuf_set_n16(buf, off, arg.nump) == -1)
                goto fail;
-       }
 
        len = ibuf_size(buf);
        if (mrt_dump_hdr_rde(&hbuf, MSG_TABLE_DUMP_V2,
@@ -860,6 +858,7 @@ mrt_dump_v2_hdr(struct mrt *mrt, struct 
 
        return (0);
 fail:
+       log_warn("%s: ibuf error", __func__);
        ibuf_free(hbuf);
        ibuf_free(buf);
        return (-1);
@@ -875,35 +874,41 @@ mrt_dump_peer(struct ibuf *buf, struct r
        if (peer->remote_addr.aid == AID_INET6)
                type |= MRT_DUMP_V2_PEER_BIT_I;
 
-       DUMP_BYTE(buf, type);
-       DUMP_LONG(buf, peer->remote_bgpid);
+       if (ibuf_add_n8(buf, type) == -1)
+               goto fail;
+       if (ibuf_add_n32(buf, peer->remote_bgpid) == -1)
+               goto fail;
 
        switch (peer->remote_addr.aid) {
        case AID_INET:
-               DUMP_NLONG(buf, peer->remote_addr.v4.s_addr);
+               if (ibuf_add(buf, &peer->remote_addr.v4,
+                   sizeof(peer->remote_addr.v4)) == -1)
+                       goto fail;
                break;
        case AID_INET6:
                if (ibuf_add(buf, &peer->remote_addr.v6,
-                   sizeof(struct in6_addr)) == -1) {
-                       log_warn("mrt_dump_peer: ibuf_add error");
+                   sizeof(peer->remote_addr.v6)) == -1)
                        goto fail;
-               }
                break;
        case AID_UNSPEC: /* XXX special handling for peerself? */
-               DUMP_NLONG(buf, 0);
+               if (ibuf_add_n32(buf, 0) == -1)
+                       goto fail;
                break;
        default:
                log_warnx("king bula found new AF in %s", __func__);
                goto fail;
        }
 
-       if (peer->capa.as4byte)
-               DUMP_LONG(buf, peer->conf.remote_as);
-       else
-               DUMP_SHORT(buf, peer->short_as);
-
+       if (peer->capa.as4byte) {
+               if (ibuf_add_n32(buf, peer->conf.remote_as) == -1)
+                       goto fail;
+       } else {
+               if (ibuf_add_n16(buf, peer->short_as) == -1)
+                       goto fail;
+       }
        return (0);
 fail:
+       log_warn("%s: ibuf error", __func__);
        return (-1);
 }
 
@@ -953,9 +958,12 @@ mrt_dump_hdr_se(struct ibuf ** bp, struc
 
        clock_gettime(CLOCK_REALTIME, &time);
 
-       DUMP_LONG(*bp, time.tv_sec);
-       DUMP_SHORT(*bp, type);
-       DUMP_SHORT(*bp, subtype);
+       if (ibuf_add_n32(*bp, time.tv_sec) == -1)
+               goto fail;
+       if (ibuf_add_n16(*bp, type) == -1)
+               goto fail;
+       if (ibuf_add_n16(*bp, subtype) == -1)
+               goto fail;
 
        switch (peer->local.aid) {
        case AID_INET:
@@ -981,56 +989,67 @@ mrt_dump_hdr_se(struct ibuf ** bp, struc
                goto fail;
        }
 
-       DUMP_LONG(*bp, len);
+       if (ibuf_add_n32(*bp, len) == -1)
+               goto fail;
        /* millisecond field use by the _ET format */
-       DUMP_LONG(*bp, time.tv_nsec / 1000);
+       if (ibuf_add_n32(*bp, time.tv_nsec / 1000) == -1)
+               goto fail;
 
        if (subtype == BGP4MP_STATE_CHANGE_AS4 ||
            subtype == BGP4MP_MESSAGE_AS4 ||
            subtype == BGP4MP_MESSAGE_AS4_ADDPATH) {
                if (!swap)
-                       DUMP_LONG(*bp, peer->conf.local_as);
-               DUMP_LONG(*bp, peer->conf.remote_as);
+                       if (ibuf_add_n32(*bp, peer->conf.local_as) == -1)
+                               goto fail;
+               if (ibuf_add_n32(*bp, peer->conf.remote_as) == -1)
+                       goto fail;
                if (swap)
-                       DUMP_LONG(*bp, peer->conf.local_as);
+                       if (ibuf_add_n32(*bp, peer->conf.local_as) == -1)
+                               goto fail;
        } else {
                if (!swap)
-                       DUMP_SHORT(*bp, peer->conf.local_short_as);
-               DUMP_SHORT(*bp, peer->short_as);
+                       if (ibuf_add_n16(*bp, peer->conf.local_short_as) == -1)
+                               goto fail;
+               if (ibuf_add_n16(*bp, peer->short_as) == -1)
+                       goto fail;
                if (swap)
-                       DUMP_SHORT(*bp, peer->conf.local_short_as);
+                       if (ibuf_add_n16(*bp, peer->conf.local_short_as) == -1)
+                               goto fail;
        }
 
-       DUMP_SHORT(*bp, /* ifindex */ 0);
+       if (ibuf_add_n16(*bp, /* ifindex */ 0) == -1)
+               goto fail;
 
        switch (peer->local.aid) {
        case AID_INET:
-               DUMP_SHORT(*bp, AFI_IPv4);
+               if (ibuf_add_n16(*bp, AFI_IPv4) == -1)
+                       goto fail;
                if (!swap)
-                       DUMP_NLONG(*bp, peer->local.v4.s_addr);
-               DUMP_NLONG(*bp, peer->remote.v4.s_addr);
+                       if (ibuf_add(*bp, &peer->local.v4,
+                           sizeof(peer->local.v4)) == -1)
+                               goto fail;
+               if (ibuf_add(*bp, &peer->remote.v4,
+                   sizeof(peer->remote.v4)) == -1)
+                       goto fail;
                if (swap)
-                       DUMP_NLONG(*bp, peer->local.v4.s_addr);
+                       if (ibuf_add(*bp, &peer->local.v4,
+                           sizeof(peer->local.v4)) == -1)
+                               goto fail;
                break;
        case AID_INET6:
-               DUMP_SHORT(*bp, AFI_IPv6);
+               if (ibuf_add_n16(*bp, AFI_IPv6) == -1)
+                       goto fail;
                if (!swap)
                        if (ibuf_add(*bp, &peer->local.v6,
-                           sizeof(struct in6_addr)) == -1) {
-                               log_warn("mrt_dump_hdr_se: ibuf_add error");
+                           sizeof(peer->local.v6)) == -1)
                                goto fail;
-                       }
                if (ibuf_add(*bp, &peer->remote.v6,
-                   sizeof(struct in6_addr)) == -1) {
-                       log_warn("mrt_dump_hdr_se: ibuf_add error");
+                   sizeof(peer->remote.v6)) == -1)
                        goto fail;
-               }
                if (swap)
                        if (ibuf_add(*bp, &peer->local.v6,
-                           sizeof(struct in6_addr)) == -1) {
-                               log_warn("mrt_dump_hdr_se: ibuf_add error");
+                           sizeof(peer->local.v6)) == -1)
                                goto fail;
-                       }
                break;
        }
 
@@ -1056,9 +1075,12 @@ mrt_dump_hdr_rde(struct ibuf **bp, uint1
 
        clock_gettime(CLOCK_REALTIME, &time);
 
-       DUMP_LONG(*bp, time.tv_sec);
-       DUMP_SHORT(*bp, type);
-       DUMP_SHORT(*bp, subtype);
+       if (ibuf_add_n32(*bp, time.tv_sec) == -1)
+               goto fail;
+       if (ibuf_add_n16(*bp, type) == -1)
+               goto fail;
+       if (ibuf_add_n16(*bp, subtype) == -1)
+               goto fail;
 
        switch (type) {
        case MSG_TABLE_DUMP:
@@ -1070,11 +1092,13 @@ mrt_dump_hdr_rde(struct ibuf **bp, uint1
                        len += MRT_DUMP_HEADER_SIZE_V6;
                        break;
                }
-               DUMP_LONG(*bp, len);
+               if (ibuf_add_n32(*bp, len) == -1)
+                       goto fail;
                break;
        case MSG_PROTOCOL_BGP4MP:
        case MSG_TABLE_DUMP_V2:
-               DUMP_LONG(*bp, len);
+               if (ibuf_add_n32(*bp, len) == -1)
+                       goto fail;
                break;
        default:
                log_warnx("mrt_dump_hdr_rde: unsupported type");

Reply via email to