This diff changes some parts of eigrpd to use the new ibuf API.
There is one ibuf_seek() left in packet.c since the changes done to the
header there are not as trivial as in any other daemon. So that part I
left out for now. The suggested changes on the other hand are simple.

Again if someone uses eigrpd please test.
-- 
:wq Claudio

Index: packet.c
===================================================================
RCS file: /cvs/src/usr.sbin/eigrpd/packet.c,v
retrieving revision 1.20
diff -u -p -r1.20 packet.c
--- packet.c    19 Jan 2021 11:49:26 -0000      1.20
+++ packet.c    26 Jun 2023 10:21:00 -0000
@@ -172,12 +172,11 @@ send_packet(struct eigrp_iface *ei, stru
                eigrp_hdr->ack_num = htonl(nbr->recv_seq);
                rtp_ack_stop_timer(nbr);
        }
-       if (flags) {
-               eigrp_hdr->flags = ntohl(eigrp_hdr->flags) | flags;
-               eigrp_hdr->flags = htonl(eigrp_hdr->flags);
-       }
+       if (flags)
+               eigrp_hdr->flags |= htonl(flags);
+       
        eigrp_hdr->chksum = 0;
-       eigrp_hdr->chksum = in_cksum(buf->buf, ibuf_size(buf));
+       eigrp_hdr->chksum = in_cksum(ibuf_data(buf), ibuf_size(buf));
 
        /* log packet being sent */
        if (eigrp_hdr->opcode != EIGRP_OPC_HELLO) {
Index: tlv.c
===================================================================
RCS file: /cvs/src/usr.sbin/eigrpd/tlv.c,v
retrieving revision 1.16
diff -u -p -r1.16 tlv.c
--- tlv.c       3 Nov 2021 13:48:46 -0000       1.16
+++ tlv.c       16 Jun 2023 10:24:17 -0000
@@ -19,6 +19,7 @@
 #include <sys/types.h>
 #include <sys/utsname.h>
 
+#include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -51,13 +52,14 @@ gen_parameter_tlv(struct ibuf *buf, stru
 int
 gen_sequence_tlv(struct ibuf *buf, struct seq_addr_head *seq_addr_list)
 {
-       struct tlv               tlv, *tlvp;
+       struct tlv               tlv;
        struct seq_addr_entry   *sa;
        uint8_t                  alen;
        uint16_t                 len = TLV_HDR_LEN;
-       size_t                   original_size = ibuf_size(buf);
+       size_t                   off;
 
        tlv.type = htons(TLV_TYPE_SEQ);
+       off = ibuf_size(buf) + offsetof(struct tlv, length);
        if (ibuf_add(buf, &tlv, sizeof(tlv))) {
                log_warn("%s: ibuf_add failed", __func__);
                return (-1);
@@ -85,9 +87,8 @@ gen_sequence_tlv(struct ibuf *buf, struc
        }
 
        /* adjust tlv length */
-       if ((tlvp = ibuf_seek(buf, original_size, sizeof(*tlvp))) == NULL)
-                fatalx("gen_sequence_tlv: buf_seek failed");
-       tlvp->length = htons(len);
+       if (ibuf_set_n16(buf, off, len) == -1)
+                fatalx("gen_sequence_tlv: buf_set_n16 failed");
 
        return (0);
 }
@@ -158,13 +159,13 @@ len_route_tlv(struct rinfo *ri)
 int
 gen_route_tlv(struct ibuf *buf, struct rinfo *ri)
 {
-       struct tlv               tlv, *tlvp;
+       struct tlv               tlv;
        struct in_addr           addr;
        struct classic_metric    metric;
        struct classic_emetric   emetric;
        uint16_t                 tlvlen;
        uint8_t                  pflen;
-       size_t                   original_size = ibuf_size(buf);
+       size_t                   off;
 
        switch (ri->af) {
        case AF_INET:
@@ -189,6 +190,7 @@ gen_route_tlv(struct ibuf *buf, struct r
        }
        tlv.type = htons(tlv.type);
 
+       off = ibuf_size(buf) + offsetof(struct tlv, length);
        if (ibuf_add(buf, &tlv, sizeof(tlv)))
                return (-1);
        tlvlen = TLV_HDR_LEN;
@@ -251,9 +253,8 @@ gen_route_tlv(struct ibuf *buf, struct r
        tlvlen += sizeof(pflen) + pflen;
 
        /* adjust tlv length */
-       if ((tlvp = ibuf_seek(buf, original_size, sizeof(*tlvp))) == NULL)
-                fatalx("gen_route_tlv: buf_seek failed");
-       tlvp->length = htons(tlvlen);
+       if (ibuf_set_n16(buf, off, tlvlen) == -1)
+                fatalx("gen_route_tlv: buf_set_n16 failed");
 
        return (0);
 }

Reply via email to