On Mon, Mar 21, 2016 at 02:29:46PM +0100, Martin Pieuchot wrote:
> When the caller of arplookup() asked for a proxy'd ARP entry, make
> sure the entry returned by rtalloc(9) is indeed "published".
>
> This is currently always true for ARP entries added with arp(8) but
> it is not the case if you add your own entry with the 33rd bit set
> but without setting RTF_ANNOUNCE.
>
> It is also not the case with ART.
>
> Since the 33rd bit trick is an implementation detail of the current
> routing table, which I'm doing differently with ART, let's check for
> the correct flag.
>
> ok?
OK bluhm@
>
> Index: netinet/if_ether.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/if_ether.c,v
> retrieving revision 1.202
> diff -u -p -r1.202 if_ether.c
> --- netinet/if_ether.c 7 Mar 2016 11:00:36 -0000 1.202
> +++ netinet/if_ether.c 21 Mar 2016 13:22:33 -0000
> @@ -696,6 +696,12 @@ arplookup(u_int32_t addr, int create, in
> rtfree(rt);
> return (NULL);
> }
> +
> + if (proxy && !ISSET(rt->rt_flags, RTF_ANNOUNCE)) {
> + rtfree(rt);
> + return (NULL);
> + }
> +
> return (rt);
> }
>