mirror of
https://github.com/opnsense/src.git
synced 2026-05-17 03:29:43 -04:00
Before that, the logic besides lle_create() was the following:
return existing if found, create if not. This behaviour was error-prone
since we had to deal with 'sudden' static<>dynamic lle changes.
This commit fixes bunch of different issues like:
- refcount leak when lle is converted to static.
Simple check case:
console 1:
while true;
do for i in `arp -an|awk '$4~/incomp/{print$2}'|tr -d '()'`;
do arp -s $i 00:22:44:66:88:00 ; arp -d $i;
done;
done
console 2:
ping -f any-dead-host-in-L2
console 3:
# watch for memory consumption:
vmstat -m | awk '$1~/lltable/{print$2}'
- possible problems in arptimer() / nd6_timer() when dropping/reacquiring
lock.
New logic explicitly handles use-or-create cases in every lla_create
user. Basically, most of the changes are purely mechanical. However,
we explicitly avoid using existing lle's for interface/static LLE records.
* While here, call lle_event handlers on all real table lle change.
* Create lltable_free_entry() calling existing per-lltable
lle_free_t callback for entry deletion
|
||
|---|---|---|
| .. | ||
| dest6.c | ||
| frag6.c | ||
| icmp6.c | ||
| icmp6.h | ||
| in6.c | ||
| in6.h | ||
| in6_cksum.c | ||
| in6_gif.c | ||
| in6_ifattach.c | ||
| in6_ifattach.h | ||
| in6_mcast.c | ||
| in6_pcb.c | ||
| in6_pcb.h | ||
| in6_pcbgroup.c | ||
| in6_proto.c | ||
| in6_rmx.c | ||
| in6_rss.c | ||
| in6_rss.h | ||
| in6_src.c | ||
| in6_var.h | ||
| ip6.h | ||
| ip6_ecn.h | ||
| ip6_forward.c | ||
| ip6_gre.c | ||
| ip6_id.c | ||
| ip6_input.c | ||
| ip6_ipsec.c | ||
| ip6_ipsec.h | ||
| ip6_mroute.c | ||
| ip6_mroute.h | ||
| ip6_output.c | ||
| ip6_var.h | ||
| ip6protosw.h | ||
| mld6.c | ||
| mld6.h | ||
| mld6_var.h | ||
| nd6.c | ||
| nd6.h | ||
| nd6_nbr.c | ||
| nd6_rtr.c | ||
| pim6.h | ||
| pim6_var.h | ||
| raw_ip6.c | ||
| raw_ip6.h | ||
| route6.c | ||
| scope6.c | ||
| scope6_var.h | ||
| sctp6_usrreq.c | ||
| sctp6_var.h | ||
| send.c | ||
| send.h | ||
| tcp6_var.h | ||
| udp6_usrreq.c | ||
| udp6_var.h | ||