Download raw body.
check INP_IPV6 in callee
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?
> 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));
> }
>
> /*
check INP_IPV6 in callee