Hi, I'd like to improve ospfd's logging when sending a packet fails.
I got a debug output from a ospfd user which contains "send packet: error ...". I guess ospfd failed to send an ls ack. With below diff applied it would be clear which packet could not be sent and to which neighbor. OK? Remi Index: database.c =================================================================== RCS file: /cvs/src/usr.sbin/ospfd/database.c,v retrieving revision 1.33 diff -u -p -r1.33 database.c --- database.c 18 Feb 2016 15:33:24 -0000 1.33 +++ database.c 13 Jul 2019 14:08:10 -0000 @@ -43,7 +43,6 @@ send_db_description(struct nbr *nbr) struct db_dscrp_hdr dd_hdr; struct lsa_entry *le, *nle; struct ibuf *buf; - int ret = 0; u_int8_t bits = 0; if ((buf = ibuf_open(nbr->iface->mtu - sizeof(struct ip))) == NULL) @@ -66,8 +65,7 @@ send_db_description(struct nbr *nbr) log_debug("send_db_description: neighbor ID %s: " "cannot send packet in state %s", inet_ntoa(nbr->id), nbr_state_name(nbr->state)); - ret = -1; - goto done; + goto fail; case NBR_STA_XSTRT: bits |= OSPF_DBD_MS | OSPF_DBD_M | OSPF_DBD_I; nbr->dd_more = 1; @@ -150,12 +148,13 @@ send_db_description(struct nbr *nbr) goto fail; /* transmit packet */ - ret = send_packet(nbr->iface, buf, &dst); -done: + if (send_packet(nbr->iface, buf, &dst) == -1) + goto fail; + ibuf_free(buf); - return (ret); + return (0); fail: - log_warn("send_db_description"); + log_warn("%s", __func__); ibuf_free(buf); return (-1); } Index: hello.c =================================================================== RCS file: /cvs/src/usr.sbin/ospfd/hello.c,v retrieving revision 1.22 diff -u -p -r1.22 hello.c --- hello.c 22 Feb 2018 07:42:38 -0000 1.22 +++ hello.c 13 Jul 2019 14:03:27 -0000 @@ -41,7 +41,6 @@ send_hello(struct iface *iface) struct hello_hdr hello; struct nbr *nbr; struct ibuf *buf; - int ret; dst.sin_family = AF_INET; dst.sin_len = sizeof(struct sockaddr_in); @@ -103,11 +102,13 @@ send_hello(struct iface *iface) if (auth_gen(buf, iface)) goto fail; - ret = send_packet(iface, buf, &dst); + if (send_packet(iface, buf, &dst) == -1) + goto fail; + ibuf_free(buf); - return (ret); + return (0); fail: - log_warn("send_hello"); + log_warn("%s", __func__); ibuf_free(buf); return (-1); } Index: lsack.c =================================================================== RCS file: /cvs/src/usr.sbin/ospfd/lsack.c,v retrieving revision 1.21 diff -u -p -r1.21 lsack.c --- lsack.c 25 Oct 2014 03:23:49 -0000 1.21 +++ lsack.c 13 Jul 2019 14:04:59 -0000 @@ -59,7 +59,6 @@ int send_ls_ack(struct iface *iface, struct in_addr addr, struct ibuf *buf) { struct sockaddr_in dst; - int ret; /* update authentication and calculate checksum */ if (auth_gen(buf, iface)) { @@ -71,8 +70,11 @@ send_ls_ack(struct iface *iface, struct dst.sin_len = sizeof(struct sockaddr_in); dst.sin_addr.s_addr = addr.s_addr; - ret = send_packet(iface, buf, &dst); - return (ret); + if (send_packet(iface, buf, &dst) == -1) { + log_warn("%s", __func__); + return (-1); + } + return (0); } int Index: lsreq.c =================================================================== RCS file: /cvs/src/usr.sbin/ospfd/lsreq.c,v retrieving revision 1.20 diff -u -p -r1.20 lsreq.c --- lsreq.c 17 Jan 2013 09:02:22 -0000 1.20 +++ lsreq.c 13 Jul 2019 14:04:00 -0000 @@ -37,7 +37,6 @@ send_ls_req(struct nbr *nbr) struct ls_req_hdr ls_req_hdr; struct lsa_entry *le, *nle; struct ibuf *buf; - int ret; if ((buf = ibuf_open(nbr->iface->mtu - sizeof(struct ip))) == NULL) fatal("send_ls_req"); @@ -80,12 +79,13 @@ send_ls_req(struct nbr *nbr) if (auth_gen(buf, nbr->iface)) goto fail; - ret = send_packet(nbr->iface, buf, &dst); + if (send_packet(nbr->iface, buf, &dst) == -1) + goto fail; ibuf_free(buf); - return (ret); + return (0); fail: - log_warn("send_ls_req"); + log_warn("%s", __func__); ibuf_free(buf); return (-1); } Index: lsupdate.c =================================================================== RCS file: /cvs/src/usr.sbin/ospfd/lsupdate.c,v retrieving revision 1.45 diff -u -p -r1.45 lsupdate.c --- lsupdate.c 26 Dec 2016 17:38:14 -0000 1.45 +++ lsupdate.c 13 Jul 2019 14:07:11 -0000 @@ -210,7 +210,6 @@ send_ls_update(struct ibuf *buf, struct u_int32_t nlsa) { struct sockaddr_in dst; - int ret; nlsa = htonl(nlsa); memcpy(ibuf_seek(buf, sizeof(struct ospf_hdr), sizeof(nlsa)), @@ -224,12 +223,13 @@ send_ls_update(struct ibuf *buf, struct dst.sin_len = sizeof(struct sockaddr_in); dst.sin_addr.s_addr = addr.s_addr; - ret = send_packet(iface, buf, &dst); + if (send_packet(iface, buf, &dst) == -1) + goto fail; ibuf_free(buf); - return (ret); + return (0); fail: - log_warn("send_ls_update"); + log_warn("%s", __func__); ibuf_free(buf); return (-1); } Index: packet.c =================================================================== RCS file: /cvs/src/usr.sbin/ospfd/packet.c,v retrieving revision 1.31 diff -u -p -r1.31 packet.c --- packet.c 25 Oct 2014 03:23:49 -0000 1.31 +++ packet.c 13 Jul 2019 14:38:45 -0000 @@ -96,8 +96,8 @@ send_packet(struct iface *iface, struct return (-1); if (sendmsg(iface->fd, &msg, 0) == -1) { - log_warn("send_packet: error sending packet on interface %s", - iface->name); + log_warn("%s: error sending packet to %s on interface %s", + __func__, inet_ntoa(ip_hdr.ip_dst), iface->name); return (-1); }