On Wed, Oct 18, 2023 at 05:19:29PM +0200, Claudio Jeker wrote: > This is a bit overdue. Convert session.c to also use the new ibuf API. > This simplifies some code since there is no need for local variables. > Also kill the struct msg_header and especially msg_open. The are of very > little use. > > Regress passes so I think this should be fine :)
Can't spot anything wrong with the conversion, two log nits below. > -- > :wq Claudio > > Index: session.c > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpd/session.c,v > retrieving revision 1.450 > diff -u -p -r1.450 session.c > --- session.c 17 Oct 2023 17:58:15 -0000 1.450 > +++ session.c 18 Oct 2023 15:09:29 -0000 > @@ -1324,24 +1324,26 @@ session_capa_add(struct ibuf *opb, uint8 > { > int errs = 0; > > - errs += ibuf_add(opb, &capa_code, sizeof(capa_code)); > - errs += ibuf_add(opb, &capa_len, sizeof(capa_len)); > + errs += ibuf_add_n8(opb, capa_code); > + errs += ibuf_add_n8(opb, capa_len); > return (errs); > } > > int > session_capa_add_mp(struct ibuf *buf, uint8_t aid) > { > - uint8_t safi, pad = 0; > uint16_t afi; > + uint8_t safi; > int errs = 0; > > - if (aid2afi(aid, &afi, &safi) == -1) > - fatalx("session_capa_add_mp: bad afi/safi pair"); > - afi = htons(afi); > - errs += ibuf_add(buf, &afi, sizeof(afi)); > - errs += ibuf_add(buf, &pad, sizeof(pad)); > - errs += ibuf_add(buf, &safi, sizeof(safi)); > + if (aid2afi(aid, &afi, &safi) == -1) { > + log_warn("session_capa_add_afi: bad AID"); wrong function name. Should this be log_warn("%s: bad AID", __func__); > + return (-1); > + } > + > + errs += ibuf_add_n16(buf, afi); > + errs += ibuf_add_zero(buf, 1); > + errs += ibuf_add_n8(buf, safi); > > return (errs); > } > @@ -1356,13 +1358,12 @@ session_capa_add_afi(struct peer *p, str > > if (aid2afi(aid, &afi, &safi)) { > log_warn("session_capa_add_afi: bad AID"); use __func__? > - return (1); > + return (-1); fun > } > > - afi = htons(afi); > - errs += ibuf_add(b, &afi, sizeof(afi)); > - errs += ibuf_add(b, &safi, sizeof(safi)); > - errs += ibuf_add(b, &flags, sizeof(flags)); > + errs += ibuf_add_n16(b, afi); > + errs += ibuf_add_n8(b, safi); > + errs += ibuf_add_n8(b, flags); > > return (errs); > } > @@ -1370,21 +1371,19 @@ session_capa_add_afi(struct peer *p, str > struct bgp_msg * > session_newmsg(enum msg_type msgtype, uint16_t len) > { > + u_char marker[MSGSIZE_HEADER_MARKER]; > struct bgp_msg *msg; > - struct msg_header hdr; > struct ibuf *buf; > int errs = 0; > > - memset(&hdr.marker, 0xff, sizeof(hdr.marker)); > - hdr.len = htons(len); > - hdr.type = msgtype; > + memset(marker, 0xff, sizeof(marker)); > > if ((buf = ibuf_open(len)) == NULL) > return (NULL); > > - errs += ibuf_add(buf, &hdr.marker, sizeof(hdr.marker)); > - errs += ibuf_add(buf, &hdr.len, sizeof(hdr.len)); > - errs += ibuf_add(buf, &hdr.type, sizeof(hdr.type)); > + errs += ibuf_add(buf, marker, sizeof(marker)); > + errs += ibuf_add_n16(buf, len); > + errs += ibuf_add_n8(buf, msgtype); > > if (errs || (msg = calloc(1, sizeof(*msg))) == NULL) { > ibuf_free(buf); > @@ -1472,8 +1471,7 @@ session_open(struct peer *p) > { > struct bgp_msg *buf; > struct ibuf *opb; > - struct msg_open msg; > - uint16_t len, optparamlen = 0; > + uint16_t len, optparamlen = 0, holdtime; > uint8_t i, op_type; > int errs = 0, extlen = 0; > int mpcapa = 0; > @@ -1501,10 +1499,8 @@ session_open(struct peer *p) > p->conf.role != ROLE_NONE && > (p->capa.ann.mp[AID_INET] || p->capa.ann.mp[AID_INET6] || > mpcapa == 0)) { > - uint8_t val; > - val = role2capa(p->conf.role); > errs += session_capa_add(opb, CAPA_ROLE, 1); > - errs += ibuf_add(opb, &val, 1); > + errs += ibuf_add_n8(opb, role2capa(p->conf.role)); > } > > /* graceful restart and End-of-RIB marker, RFC 4724 */ > @@ -1520,19 +1516,14 @@ session_open(struct peer *p) > /* Only set the R-flag if no graceful restart is ongoing */ > if (!rst) > hdr |= CAPA_GR_R_FLAG; > - hdr = htons(hdr); > - > errs += session_capa_add(opb, CAPA_RESTART, sizeof(hdr)); > - errs += ibuf_add(opb, &hdr, sizeof(hdr)); > + errs += ibuf_add_n16(opb, hdr); > } > > /* 4-bytes AS numbers, RFC6793 */ > if (p->capa.ann.as4byte) { /* 4 bytes data */ > - uint32_t nas; > - > - nas = htonl(p->conf.local_as); > - errs += session_capa_add(opb, CAPA_AS4BYTE, sizeof(nas)); > - errs += ibuf_add(opb, &nas, sizeof(nas)); > + errs += session_capa_add(opb, CAPA_AS4BYTE, sizeof(uint32_t)); > + errs += ibuf_add_n32(opb, p->conf.local_as); > } > > /* advertisement of multiple paths, RFC7911 */ > @@ -1567,11 +1558,10 @@ session_open(struct peer *p) > } else if (optparamlen + 2 >= 255) { > /* RFC9072: 2 byte length instead of 1 + 3 byte extra header */ > optparamlen += sizeof(op_type) + 2 + 3; > - msg.optparamlen = 255; > + optparamlen = 255; > extlen = 1; > } else { > optparamlen += sizeof(op_type) + 1; > - msg.optparamlen = optparamlen; > } > > len = MSGSIZE_OPEN_MIN + optparamlen; > @@ -1581,40 +1571,33 @@ session_open(struct peer *p) > return; > } > > - msg.version = 4; > - msg.myas = htons(p->conf.local_short_as); > if (p->conf.holdtime) > - msg.holdtime = htons(p->conf.holdtime); > + holdtime = htons(p->conf.holdtime); > else > - msg.holdtime = htons(conf->holdtime); > - msg.bgpid = conf->bgpid; /* is already in network byte order */ > + holdtime = htons(conf->holdtime); > > - errs += ibuf_add(buf->buf, &msg.version, sizeof(msg.version)); > - errs += ibuf_add(buf->buf, &msg.myas, sizeof(msg.myas)); > - errs += ibuf_add(buf->buf, &msg.holdtime, sizeof(msg.holdtime)); > - errs += ibuf_add(buf->buf, &msg.bgpid, sizeof(msg.bgpid)); > - errs += ibuf_add(buf->buf, &msg.optparamlen, 1); > + errs += ibuf_add_n8(buf->buf, 4); > + errs += ibuf_add_n16(buf->buf, p->conf.local_short_as); > + errs += ibuf_add_n16(buf->buf, holdtime); > + /* is already in network byte order */ > + errs += ibuf_add(buf->buf, &conf->bgpid, sizeof(conf->bgpid)); > + errs += ibuf_add_n8(buf->buf, optparamlen); > > if (extlen) { > /* write RFC9072 extra header */ > - uint16_t op_extlen = htons(optparamlen - 3); > - op_type = OPT_PARAM_EXT_LEN; > - errs += ibuf_add(buf->buf, &op_type, 1); > - errs += ibuf_add(buf->buf, &op_extlen, 2); > + errs += ibuf_add_n8(buf->buf, OPT_PARAM_EXT_LEN); > + errs += ibuf_add_n16(buf->buf, optparamlen - 3); > } > > if (optparamlen) { > - op_type = OPT_PARAM_CAPABILITIES; > - errs += ibuf_add(buf->buf, &op_type, sizeof(op_type)); > + errs += ibuf_add_n8(buf->buf, OPT_PARAM_CAPABILITIES); > > optparamlen = ibuf_size(opb); > if (extlen) { > /* RFC9072: 2-byte extended length */ > - uint16_t op_extlen = htons(optparamlen); > - errs += ibuf_add(buf->buf, &op_extlen, 2); > + errs += ibuf_add_n16(buf->buf, optparamlen); > } else { > - uint8_t op_len = optparamlen; > - errs += ibuf_add(buf->buf, &op_len, 1); > + errs += ibuf_add_n8(buf->buf, optparamlen); > } > errs += ibuf_add_buf(buf->buf, opb); > } > @@ -1711,8 +1694,8 @@ session_notification(struct peer *p, uin > return; > } > > - errs += ibuf_add(buf->buf, &errcode, sizeof(errcode)); > - errs += ibuf_add(buf->buf, &subcode, sizeof(subcode)); > + errs += ibuf_add_n8(buf->buf, errcode); > + errs += ibuf_add_n8(buf->buf, subcode); > > if (datalen > 0) > errs += ibuf_add(buf->buf, data, datalen); > @@ -1784,10 +1767,9 @@ session_rrefresh(struct peer *p, uint8_t > return; > } > > - afi = htons(afi); > - errs += ibuf_add(buf->buf, &afi, sizeof(afi)); > - errs += ibuf_add(buf->buf, &subtype, sizeof(subtype)); > - errs += ibuf_add(buf->buf, &safi, sizeof(safi)); > + errs += ibuf_add_n16(buf->buf, afi); > + errs += ibuf_add_n8(buf->buf, subtype); > + errs += ibuf_add_n8(buf->buf, safi); > > if (errs) { > ibuf_free(buf->buf); > Index: session.h > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpd/session.h,v > retrieving revision 1.163 > diff -u -p -r1.163 session.h > --- session.h 16 Oct 2023 10:25:46 -0000 1.163 > +++ session.h 18 Oct 2023 15:08:29 -0000 > @@ -123,21 +123,6 @@ struct bgp_msg { > uint16_t len; > }; > > -struct msg_header { > - u_char marker[MSGSIZE_HEADER_MARKER]; > - uint16_t len; > - uint8_t type; > -}; > - > -struct msg_open { > - struct msg_header header; > - uint32_t bgpid; > - uint16_t myas; > - uint16_t holdtime; > - uint8_t version; > - uint8_t optparamlen; > -}; > - > struct bgpd_sysdep { > uint8_t no_pfkey; > uint8_t no_md5sig; >