On Thu, Jun 16, 2022 at 07:15:51PM +0200, Claudio Jeker wrote:
> Not much holds us back to switch kroute_find() to use a struct bgpd_addr
> as prefix argument. Only the match code needs some adoption.
> I created applymask() for this which works on bgpd_addrs like
> inet4applymask works on in_addrs.
> 
> I also switched a simple case in session.c over to applymask().
> There is another one in bgpctl which I will send out once this is in.

ok

A nit and a question below.

[...]

> +kroute_find(struct ktable *kt, const struct bgpd_addr *prefix,
> +    uint8_t prefixlen, uint8_t prio)
>  {
>       struct kroute_node      s;
>       struct kroute_node      *kn, *tmp;
>  
> -     s.r.prefix.s_addr = prefix;
> +     s.r.prefix= prefix->v4;

Missing space before =.

[...]

> Index: util.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/util.c,v
> retrieving revision 1.64
> diff -u -p -r1.64 util.c
> --- util.c    16 Jun 2022 15:33:05 -0000      1.64
> +++ util.c    16 Jun 2022 16:50:47 -0000
> @@ -783,6 +783,26 @@ inet6applymask(struct in6_addr *dest, co
>               dest->s6_addr[i] = src->s6_addr[i] & mask.s6_addr[i];
>  }
>  
> +void
> +applymask(struct bgpd_addr *dest, const struct bgpd_addr *src, int prefixlen)
> +{
> +     struct bgpd_addr tmp;
> +
> +     /* use temporary storage in case src and dest point to same struct */
> +     tmp = *src;

While I'm fine with doing it this way, why is this tmp dance needed? I
would have thought that both inet4applymask() and inet6applymask() work
fine if src and dest point to the same struct. bgpctl's parse.y assumes
that this is the case.

> +     switch (src->aid) {
> +     case AID_INET:
> +     case AID_VPN_IPv4:
> +             inet4applymask(&tmp.v4, &src->v4, prefixlen);
> +             break;
> +     case AID_INET6:
> +     case AID_VPN_IPv6:
> +             inet6applymask(&tmp.v6, &src->v6, prefixlen);
> +             break;
> +     }
> +     *dest = tmp;
> +}
> +
>  /* address family translation functions */
>  const struct aid aid_vals[AID_MAX] = AID_VALS;
>  
> 

Reply via email to