Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Dec 2008 18:27:21 -0800
From:      "Li, Qing" <qing.li@bluecoat.com>
To:        "Tijl Coosemans" <tijl@ulyssis.org>, "Qing Li" <qingli@freebsd.org>
Cc:        freebsd-net@freebsd.org, freebsd-current@freebsd.org
Subject:   RE: HEADSUP: arp-v2 has been committed
Message-ID:  <B583FBF374231F4A89607B4D08578A4302A8B8BE@bcs-mail03.internal.cacheflow.com>
In-Reply-To: <200812221621.40722.tijl@ulyssis.org>
References:  <20081221125120.GO23166@droso.net> <rqtxfXiOI/zU%2BmZivn3AictW17c@TVy1gMAmSsiP9GTg//ziIjLy%2Bsk> <B583FBF374231F4A89607B4D08578A431442EB@bcs-mail03.internal.cacheflow.com> <200812221621.40722.tijl@ulyssis.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Tijl,

Good questions and see my comments below.

>=20
> I'm looking into the Wine case, but don't have any experience with the
> implementation of routing tables, so I need to have a few things
> spelled out.
>=20
> Wine currently uses:
>=20
>  int mib[] =3D {CTL_NET, PF_ROUTE, 0, AF_INET, NET_RT_FLAGS,
RTF_LLINFO};
>=20
> I take it this returns all the entries which have the RTF_LLINFO flag
> set? And to make this compile on CURRENT I have to change this into:
>=20
> #ifdef RTF_LLINFO
>  int mib[] =3D {CTL_NET, PF_ROUTE, 0, AF_INET, NET_RT_FLAGS,
RTF_LLINFO};
> #else
>  int mib[] =3D {CTL_NET, PF_ROUTE, 0, AF_INET, NET_RT_FLAGS, 0};
> #endif
>=20
> Is AF_INET really the correct address family? What about AF_LINK and
> AF_ARP? Is using NET_RT_FLAGS with flags mask 0 exactly the same as
> using NET_RT_DUMP?
>=20

AF_INET is the correct address family, which indicates the L2=20
information (a.k.a RTF_LLINFO previously) should be retrieved from
the IPv4 ARP table. If the AF family were instead AF_INET6, then the
L2 information would be coming from the ND6 cache.=20

NET_RT_DUMP walks the entire routing tree. Specifying specific flags
and using the NET_RT_FLAGS opcode retrieves routing entries that have
those bits set.

NET_RT_FLAGS with mask 0 is an indication to the kernel the L2 table=20
should be retrieved.=20

I am glad you asked these questions because after re-examining my code,=20
I realized I could make slight optimization and also need to perform=20
additional check against erroneous input.=20


>=20
> Also, at some other place, Wine wants to retrieve gateway entries and
> it uses:
>=20
>  int mib[6] =3D {CTL_NET, PF_ROUTE, 0, PF_INET, NET_RT_DUMP, 0};
>                                      ^ this should be AF_INET I think
>=20
> After that it runs over all entries counting only those which have
> RTF_GATEWAY set and RTF_MULTICAST unset. Is the output of this
> different now in CURRENT?
>

No, the output of this command is still the same. NET_RT_DUMP obtains
the entire L3 table and filtering for RTF_GATEWAY non-multicast
routes have the same semantics. Those flags never apply to L2 entries.

-- Qing







Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B583FBF374231F4A89607B4D08578A4302A8B8BE>