From: Claudio Jeker Subject: bgpd: rtr set TOS and TCP_NODELAY before connect To: tech@openbsd.org Date: Mon, 30 Sep 2024 11:09:03 +0200 Move the setsockopts() for the rtr sockets up before calling connect(). Right now those functions are probably never called because connect() returns EWOULDBLOCK and exits early. Also it makes sense to use the right TOS already for the inital SYN packet. -- :wq Claudio Index: bgpd.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/bgpd.c,v diff -u -p -r1.267 bgpd.c --- bgpd.c 4 Sep 2024 15:06:36 -0000 1.267 +++ bgpd.c 30 Sep 2024 09:04:53 -0000 @@ -1381,6 +1381,29 @@ bgpd_rtr_connect(struct rtr_config *r) return; } + switch (r->remote_addr.aid) { + case AID_INET: + if (setsockopt(ce->fd, IPPROTO_IP, IP_TOS, &pre, sizeof(pre)) == + -1) { + log_warn("rtr %s: setsockopt IP_TOS", r->descr); + return; + } + break; + case AID_INET6: + if (setsockopt(ce->fd, IPPROTO_IPV6, IPV6_TCLASS, &pre, + sizeof(pre)) == -1) { + log_warn("rtr %s: setsockopt IP_TOS", r->descr); + return; + } + break; + } + + if (setsockopt(ce->fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, + sizeof(nodelay)) == -1) { + log_warn("rtr %s: setsockopt TCP_NODELAY", r->descr); + return; + } + if ((sa = addr2sa(&r->local_addr, 0, &len)) != NULL) { if (bind(ce->fd, sa, len) == -1) { log_warn("rtr %s: bind to %s", r->descr, @@ -1402,29 +1425,6 @@ bgpd_rtr_connect(struct rtr_config *r) } TAILQ_INSERT_TAIL(&connect_queue, ce, entry); connect_cnt++; - return; - } - - switch (r->remote_addr.aid) { - case AID_INET: - if (setsockopt(ce->fd, IPPROTO_IP, IP_TOS, &pre, sizeof(pre)) == - -1) { - log_warn("rtr %s: setsockopt IP_TOS", r->descr); - return; - } - break; - case AID_INET6: - if (setsockopt(ce->fd, IPPROTO_IPV6, IPV6_TCLASS, &pre, - sizeof(pre)) == -1) { - log_warn("rtr %s: setsockopt IP_TOS", r->descr); - return; - } - break; - } - - if (setsockopt(ce->fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, - sizeof(nodelay)) == -1) { - log_warn("rtr %s: setsockopt TCP_NODELAY", r->descr); return; }