On Fri, Sep 02, 2022 at 06:01:20PM +0300, Vitaliy Makkoveev wrote:
> We always call in6_setpeeraddr() and never call in_setpeeraddr() fro the
> inet6 case.

Should we do it the other way around?

By pushing the inet6 case into the callee allows less switches in
the callers.  Instead of adding in6_sockaddr() and in6_peeraddr(),
just call the generic in_...() version.  The difference is only in
in_setsockaddr() and in_setpeeraddr().  They can call the specific
in6_...() implementation.  This reduces code in upper layers.

I did somethin like this a while ago and I think the code in the
caller got cleaner.  Of course this trick only works as long as
in_...() and in6_...() have the same parameters.

bluhm

> Index: sys/netinet/in_pcb.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/in_pcb.c,v
> retrieving revision 1.273
> diff -u -p -r1.273 in_pcb.c
> --- sys/netinet/in_pcb.c      30 Aug 2022 11:53:04 -0000      1.273
> +++ sys/netinet/in_pcb.c      2 Sep 2022 14:59:02 -0000
> @@ -649,13 +649,6 @@ in_setpeeraddr(struct inpcb *inp, struct
>  {
>       struct sockaddr_in *sin;
>  
> -#ifdef INET6
> -     if (sotopf(inp->inp_socket) == PF_INET6) {
> -             in6_setpeeraddr(inp, nam);
> -             return;
> -     }
> -#endif /* INET6 */
> -
>       nam->m_len = sizeof(*sin);
>       sin = mtod(nam, struct sockaddr_in *);
>       memset(sin, 0, sizeof(*sin));

Reply via email to