tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Use lltable/llentry for NDP
In article <CAKrYomi-jsmwztRhR7ZR2Mf8vRGy3_nZVSFVhVip4ZtnVOPP=g%mail.gmail.com@localhost>,
Ryota Ozaki <ozaki-r%netbsd.org@localhost> wrote:
>Hi,
>
>As I promised somewhere, I'm trying to use
>lltable/llentry, which were introduced for ARP
>while ago, for NDP as well.
>
>Here is a patch:
>http://www.netbsd.org/~ozaki-r/lltable-ndp.diff
>
>
>Unlike ARP case, the old data structure (llinfo_nd6)
>is similar to new one (llentry) and there isn't
>so much radical changes (compared to ARP case).
>
>One noticeable change is for neighbor cache GC
>mechanism that was introduced to prevent IPv6 DoS
>attacks. net.inet6.ip6.neighborgcthresh was the max
>number of caches that we store in the system. After
>introducing lltable/llentry, the value is changed
>to be per-interface basis because lltable/llentry
>stores neighbor caches in each interface separately.
>And the change brings one degradation; the old GC
>mechanism dropped exceeded packets based on LRU
>while the new implementation drops packets in order
>from the beginning of lltable (a hash table + linked
>lists). It would be improved in the future.
>
>Any comments and suggestions are appreciated.
+#ifdef __FreeBSD__
+ IN6_IFADDR_RLOCK();
+ LIST_FOREACH(ia, IN6ADDR_HASH(addr), ia6_hash) {
+#endif
+ for (ia = in6_ifaddr; ia; ia = ia->ia_next) {
That should be:
#ifdef __FreeBSD__
IN6_IFADDR_RLOCK();
LIST_FOREACH(ia, IN6ADDR_HASH(addr), ia6_hash)
#else
for (ia = in6_ifaddr; ia; ia = ia->ia_next)
#endif
{
return (foo) -> return foo
christos
Home |
Main Index |
Thread Index |
Old Index