freebsd-nq/sys/netinet6
Alexander V. Chernikov 12cb7521c2 Remove LLE read lock from IPv6 fast path.
LLE structure is mostly unchanged during its lifecycle: there are only 2
things relevant for fast path lookup code:
1) link-level address change. Since r286722, these updates are performed
  under AFDATA WLOCK.
2) Some sort of feedback indicating that this particular entry is used so
  we send NS to perform reachability verification instead of expiring entry.
  The only signal that is needed from fast path is something like binary
  yes/no.
The latter is solved by the following changes:

Special r_skip_req (introduced in D3688) value is used for fast path feedback.
  It is read lockless by fast path, but updated under req_mutex mutex. If this
  field is non-zero, then fast path will acquire lock and set it back to 0.

After transitioning to STALE state, callout timer is armed to run each
  V_nd6_delay seconds to make sure that if packet was transmitted at the start
  of given interval, we would be able to switch to PROBE state in V_nd6_delay
  seconds as user expects.
(in STALE state) timer is rescheduled until original V_nd6_gctimer expires
  keeping lle in STALE state (remaining timer value stored in lle_remtime).
(in STALE state) timer is rescheduled if packet was transmitted less that
  V_nd6_delay seconds ago to make sure we transition to PROBE state exactly
  after V_n6_delay seconds.

As a result, all packets towards lle in REACHABLE/STALE/PROBE states are handled
  by fast path without acquiring lle read lock.

Differential Revision:		https://reviews.freebsd.org/D3780
2015-12-13 07:39:49 +00:00
..
dest6.c
frag6.c [netinet6]: Create a new IPv6 netisr which expects the frames to have been verified. 2015-11-06 23:07:43 +00:00
icmp6.c Make in_arpinput(), inp_lookup_mcast_ifp(), icmp_reflect(), 2015-12-09 11:14:27 +00:00
icmp6.h
in6_cksum.c Fix the checksum computation for UDPLite/IPv6. This requires the 2014-10-02 10:32:24 +00:00
in6_fib.c Make in_arpinput(), inp_lookup_mcast_ifp(), icmp_reflect(), 2015-12-09 11:14:27 +00:00
in6_fib.h Merge helper fib* functions used for basic lookups. 2015-12-08 10:50:03 +00:00
in6_gif.c Use correct lookup key for gif route lookups. 2015-12-09 22:09:33 +00:00
in6_ifattach.c Remove IN6_IFF_NOPFX. This flag was no longer used. 2015-09-10 06:08:42 +00:00
in6_ifattach.h
in6_mcast.c Make in_arpinput(), inp_lookup_mcast_ifp(), icmp_reflect(), 2015-12-09 11:14:27 +00:00
in6_pcb.c Decompose TCP INP_INFO lock to increase short-lived TCP connections scalability: 2015-08-03 12:13:54 +00:00
in6_pcb.h Make in6_pcblookup_hash_locked and in6_pcbladdr static. 2014-09-10 13:17:35 +00:00
in6_pcbgroup.c Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
in6_proto.c Renove faith(4) and faithd(8) from base. It looks like industry 2014-11-09 21:33:01 +00:00
in6_rmx.c Rename rt_foreach_fib() to rt_foreach_fib_walk(). 2015-08-10 20:50:31 +00:00
in6_rss.c [netinet6]: Create a new IPv6 netisr which expects the frames to have been verified. 2015-11-06 23:07:43 +00:00
in6_rss.h Implement RSS hashing/re-hashing for IPv6 ingress packets. 2015-08-29 07:14:29 +00:00
in6_src.c Make in_arpinput(), inp_lookup_mcast_ifp(), icmp_reflect(), 2015-12-09 11:14:27 +00:00
in6_var.h - Remove SIOCGDRLST_IN6 and SIOCGPRLST_IN6. These are quite old APIs and 2015-09-10 06:31:24 +00:00
in6.c Remove LLE read lock from IPv6 fast path. 2015-12-13 07:39:49 +00:00
in6.h [netinet6]: Create a new IPv6 netisr which expects the frames to have been verified. 2015-11-06 23:07:43 +00:00
ip6_ecn.h
ip6_forward.c Bring back the ability of passing cached route via nd6_output_ifp(). 2015-11-15 16:02:22 +00:00
ip6_gre.c Extern declarations in C files loses compile-time checking that 2014-12-25 21:32:37 +00:00
ip6_id.c
ip6_input.c Overhaul if_enc(4) and make it loadable in run-time. 2015-11-25 07:31:59 +00:00
ip6_ipsec.c Take extra reference to security policy before calling crypto_dispatch(). 2015-09-30 08:16:33 +00:00
ip6_ipsec.h Remove flag/flags argument from the following functions: 2014-12-11 18:35:34 +00:00
ip6_mroute.c Simplify ip[6] simploop: 2015-08-08 15:58:35 +00:00
ip6_mroute.h o Make net.inet6.ip6.mif6table return special API structure, that doesn't 2015-04-06 22:12:18 +00:00
ip6_output.c Bring back the ability of passing cached route via nd6_output_ifp(). 2015-11-15 16:02:22 +00:00
ip6_var.h [netinet6]: Create a new IPv6 netisr which expects the frames to have been verified. 2015-11-06 23:07:43 +00:00
ip6.h
ip6protosw.h Merge 'struct ip6protosw' and 'struct protosw' into one. Now we have 2014-08-08 01:57:15 +00:00
mld6_var.h - Rename 'struct mld_ifinfo' into 'struct mld_ifsoftc', since it really 2015-02-19 22:37:01 +00:00
mld6.c mld_v2_dispatch_general_query() is used by mld_fasttimo_vnet() to send 2015-12-01 11:17:41 +00:00
mld6.h
nd6_nbr.c Remove LLE read lock from IPv6 fast path. 2015-12-13 07:39:49 +00:00
nd6_rtr.c Add new rt_foreach_fib_walk_del() function for deleting route entries 2015-11-30 05:51:14 +00:00
nd6.c Remove LLE read lock from IPv6 fast path. 2015-12-13 07:39:49 +00:00
nd6.h Bring back the ability of passing cached route via nd6_output_ifp(). 2015-11-15 16:02:22 +00:00
pim6_var.h Remove more constants related to static sysctl nodes. The MAXID constants 2014-02-25 18:44:33 +00:00
pim6.h
raw_ip6.c Do not count security policy violation twice. 2014-12-11 19:20:13 +00:00
raw_ip6.h
route6.c
scope6_var.h Merge helper fib* functions used for basic lookups. 2015-12-08 10:50:03 +00:00
scope6.c Merge helper fib* functions used for basic lookups. 2015-12-08 10:50:03 +00:00
sctp6_usrreq.c Fix the allocation of outgoing streams: 2015-12-06 16:17:57 +00:00
sctp6_var.h
send.c Free mbuf in case of error. 2013-12-17 10:53:17 +00:00
send.h
tcp6_var.h
udp6_usrreq.c Compare mbuf pointer to NULL rather than to 0. 2015-09-21 12:53:26 +00:00
udp6_var.h Add support for UDP-Lite protocol (RFC 3828) to IPv4 and IPv6 stacks. 2014-04-07 01:53:03 +00:00