From: Vitaliy Makkoveev Subject: Re: check INP_IPV6 in callee To: Alexander Bluhm Cc: OpenBSD Tech Date: Thu, 18 Jan 2024 19:53:20 +0300 > On 18 Jan 2024, at 18:35, Alexander Bluhm wrote: > > On Fri, Jan 12, 2024 at 12:22:51AM +0100, Alexander Bluhm wrote: >> A bunch of IPv4 funtions call their IPv6 counterpart if INP_IPV6 >> is set for the socket. I would like to use that consistently as >> the code in the caller gets simpler. I think the result is more >> readable and consistent. >> >> ok? > > anyone? > ok mvs >> Index: netinet/in_pcb.c >> =================================================================== >> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_pcb.c,v >> diff -u -p -r1.284 in_pcb.c >> --- netinet/in_pcb.c 9 Jan 2024 19:57:00 -0000 1.284 >> +++ netinet/in_pcb.c 11 Jan 2024 12:43:58 -0000 >> @@ -517,7 +517,7 @@ in_pcbconnect(struct inpcb *inp, struct >> #ifdef INET6 >> if (ISSET(inp->inp_flags, INP_IPV6)) >> return (in6_pcbconnect(inp, nam)); >> -#endif /* INET6 */ >> +#endif >> >> if ((error = in_nam2sin(nam, &sin))) >> return (error); >> @@ -652,6 +652,13 @@ in_setsockaddr(struct inpcb *inp, struct >> { >> struct sockaddr_in *sin; >> >> +#ifdef INET6 >> + if (ISSET(inp->inp_flags, INP_IPV6)) { >> + in6_setsockaddr(inp, nam); >> + return; >> + } >> +#endif >> + >> nam->m_len = sizeof(*sin); >> sin = mtod(nam, struct sockaddr_in *); >> memset(sin, 0, sizeof(*sin)); >> @@ -671,7 +678,7 @@ in_setpeeraddr(struct inpcb *inp, struct >> in6_setpeeraddr(inp, nam); >> return; >> } >> -#endif /* INET6 */ >> +#endif >> >> nam->m_len = sizeof(*sin); >> sin = mtod(nam, struct sockaddr_in *); >> Index: netinet/tcp_usrreq.c >> =================================================================== >> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/tcp_usrreq.c,v >> diff -u -p -r1.227 tcp_usrreq.c >> --- netinet/tcp_usrreq.c 3 Dec 2023 20:24:17 -0000 1.227 >> +++ netinet/tcp_usrreq.c 11 Jan 2024 12:36:37 -0000 >> @@ -502,7 +502,7 @@ tcp_detach(struct socket *so) >> { >> struct inpcb *inp; >> struct tcpcb *otp = NULL, *tp; >> - int error = 0; >> + int error; >> short ostate; >> >> soassertlocked(so); >> @@ -526,7 +526,7 @@ tcp_detach(struct socket *so) >> >> if (otp) >> tcp_trace(TA_USER, ostate, tp, otp, NULL, PRU_DETACH, 0); >> - return (error); >> + return (0); >> } >> >> /* >> @@ -685,26 +685,17 @@ tcp_accept(struct socket *so, struct mbu >> struct inpcb *inp; >> struct tcpcb *tp; >> int error; >> - short ostate; >> >> soassertlocked(so); >> >> if ((error = tcp_sogetpcb(so, &inp, &tp))) >> return (error); >> >> - if (so->so_options & SO_DEBUG) >> - ostate = tp->t_state; >> - >> -#ifdef INET6 >> - if (inp->inp_flags & INP_IPV6) >> - in6_setpeeraddr(inp, nam); >> - else >> -#endif >> - in_setpeeraddr(inp, nam); >> + in_setpeeraddr(inp, nam); >> >> if (so->so_options & SO_DEBUG) >> - tcp_trace(TA_USER, ostate, tp, tp, NULL, PRU_ACCEPT, 0); >> - return (error); >> + tcp_trace(TA_USER, tp->t_state, tp, tp, NULL, PRU_ACCEPT, 0); >> + return (0); >> } >> >> /* >> @@ -994,12 +985,7 @@ tcp_sockaddr(struct socket *so, struct m >> if ((error = tcp_sogetpcb(so, &inp, &tp))) >> return (error); >> >> -#ifdef INET6 >> - if (inp->inp_flags & INP_IPV6) >> - in6_setsockaddr(inp, nam); >> - else >> -#endif >> - in_setsockaddr(inp, nam); >> + in_setsockaddr(inp, nam); >> >> if (so->so_options & SO_DEBUG) >> tcp_trace(TA_USER, tp->t_state, tp, tp, NULL, >> @@ -1019,16 +1005,10 @@ tcp_peeraddr(struct socket *so, struct m >> if ((error = tcp_sogetpcb(so, &inp, &tp))) >> return (error); >> >> -#ifdef INET6 >> - if (inp->inp_flags & INP_IPV6) >> - in6_setpeeraddr(inp, nam); >> - else >> -#endif >> - in_setpeeraddr(inp, nam); >> + in_setpeeraddr(inp, nam); >> >> if (so->so_options & SO_DEBUG) >> - tcp_trace(TA_USER, tp->t_state, tp, tp, NULL, >> - PRU_PEERADDR, 0); >> + tcp_trace(TA_USER, tp->t_state, tp, tp, NULL, PRU_PEERADDR, 0); >> return (0); >> } >> >> Index: netinet/udp_usrreq.c >> =================================================================== >> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/udp_usrreq.c,v >> diff -u -p -r1.313 udp_usrreq.c >> --- netinet/udp_usrreq.c 10 Jan 2024 16:44:30 -0000 1.313 >> +++ netinet/udp_usrreq.c 11 Jan 2024 12:23:30 -0000 >> @@ -936,9 +936,9 @@ udp_output(struct inpcb *inp, struct mbu >> struct in_addr laddr; >> int error = 0; >> >> -#ifdef DIAGNOSTIC >> - if ((inp->inp_flags & INP_IPV6) != 0) >> - panic("IPv6 inpcb to %s", __func__); >> +#ifdef INET6 >> + if (ISSET(inp->inp_flags, INP_IPV6)) >> + return (udp6_output(inp, m, addr, control)); >> #endif >> >> /* >> @@ -1230,7 +1230,6 @@ udp_send(struct socket *so, struct mbuf >> struct mbuf *control) >> { >> struct inpcb *inp = sotoinpcb(so); >> - int error; >> >> soassertlocked(so); >> >> @@ -1265,14 +1264,7 @@ udp_send(struct socket *so, struct mbuf >> } >> #endif >> >> -#ifdef INET6 >> - if (inp->inp_flags & INP_IPV6) >> - error = udp6_output(inp, m, addr, control); >> - else >> -#endif >> - error = udp_output(inp, m, addr, control); >> - >> - return (error); >> + return (udp_output(inp, m, addr, control)); >> } >> >> /* >