freebsd-nq/sys/netinet6
Bjoern A. Zeeb 000c42faf3 ip6_output: use new routing KPI when not passed a cached route
Implement the equivalent of r347375 (IPv4) for the IPv6 output path.
In IPv6 we get passed a cached route (and inp) by udp6_output()
depending on whether we acquired a write lock on the INP.
In case we neither bind nor connect a first UDP packet would come in
with a cached route (wlocked) and all further packets would not.
In case we bind and do not connect we never write-lock the inp.

When we do not pass in a cached route, rather than providing the
storage for a route locally and pass it over the old lookup code
and down the stack, use the new route lookup KPI and acquire all
details we need to send the packet.

Compared to the IPv4 code the IPv6 code has a couple of possible
complications: given an option with a routing hdr/caching route there,
and path mtu (ro_pmtu) case which now equally has to deal with the
possibility of having a route which is NULL passed in, and the
fwd_tag in case a firewall changes the next hop (something to
factor out in the future).

Sponsored by:	Netflix
Reviewed by:	glebius
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D23886
2020-03-03 11:32:47 +00:00
..
dest6.c Fix m_pullup() problem after removing PULLDOWN_TESTs and KAME EXT_*macros. 2019-12-01 00:22:04 +00:00
frag6.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
icmp6.c Bring back redirect route expiration. 2020-01-22 13:53:18 +00:00
icmp6.h
in6_cksum.c
in6_fib.c in6_fib: return nh_ia in the ext interface as we do for IPv4 2020-03-03 09:50:33 +00:00
in6_fib.h in6_fib: return nh_ia in the ext interface as we do for IPv4 2020-03-03 09:50:33 +00:00
in6_gif.c Mechanically substitute assertion of in_epoch(net_epoch_preempt) to 2020-01-15 05:45:27 +00:00
in6_ifattach.c Don't cover in6_ifattach() with network epoch, as it may call into 2019-10-13 04:25:16 +00:00
in6_ifattach.h
in6_jail.c Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
in6_mcast.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
in6_pcb.c Fix race when accepting TCP connections. 2020-01-12 17:52:32 +00:00
in6_pcb.h Fix race when accepting TCP connections. 2020-01-12 17:52:32 +00:00
in6_pcbgroup.c
in6_proto.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
in6_rmx.c Bring back redirect route expiration. 2020-01-22 13:53:18 +00:00
in6_rss.c
in6_rss.h
in6_src.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
in6_var.h Bring back redirect route expiration. 2020-01-22 13:53:18 +00:00
in6.c Introduce NET_EPOCH_CALL() macro and use it everywhere where we free 2020-01-15 06:05:20 +00:00
in6.h Convert all IPv4 and IPv6 multicast memberships into using a STAILQ 2019-06-25 11:54:41 +00:00
ip6_ecn.h
ip6_fastfwd.c fib6_rte_to_nh_*: return a link-local gw address with scope embedded 2020-03-03 09:45:16 +00:00
ip6_forward.c Add a missing include of opt_sctp.h. 2019-10-12 22:58:33 +00:00
ip6_gre.c Introduce NET_EPOCH_CALL() macro and use it everywhere where we free 2020-01-15 06:05:20 +00:00
ip6_id.c ip6_randomflowlabel: Avoid blocking if random(4) is not available 2019-04-23 17:18:20 +00:00
ip6_input.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
ip6_mroute.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
ip6_mroute.h
ip6_output.c ip6_output: use new routing KPI when not passed a cached route 2020-03-03 11:32:47 +00:00
ip6_var.h frag6: replace KAME hand-rolled queues with queue(9) TAILQs 2019-10-23 23:01:18 +00:00
ip6.h
ip6protosw.h
ip_fw_nat64.h Reapply r345274 with build fixes for 32-bit architectures. 2019-03-19 10:57:03 +00:00
ip_fw_nptv6.h Add ability to use dynamic external prefix in ipfw_nptv6 module. 2018-11-12 11:20:59 +00:00
mld6_var.h icmpv6: Fix mbuf change in mld 2019-11-18 21:59:47 +00:00
mld6.c mld6: initialize oifp to avoid bogus results/panics in edge cases 2020-02-28 11:16:41 +00:00
mld6.h
nd6_nbr.c Fix m_pullup() problem after removing PULLDOWN_TESTs and KAME EXT_*macros. 2019-12-01 00:22:04 +00:00
nd6_rtr.c nd6_rtr: constantly use __func__ for nd6log() 2020-01-12 17:41:09 +00:00
nd6.c nd6: sysctl 2019-11-19 21:08:18 +00:00
nd6.h nd6_rtr: make nd6_prefix_onlink() static 2020-01-12 16:58:21 +00:00
pim6_var.h Rework IP encapsulation handling code. 2018-06-05 20:51:01 +00:00
pim6.h
raw_ip6.c Make ip6_output() and ip_output() require network epoch. 2020-01-22 05:51:22 +00:00
raw_ip6.h
route6.c Fix m_pullup() problem after removing PULLDOWN_TESTs and KAME EXT_*macros. 2019-12-01 00:22:04 +00:00
scope6_var.h Constify argument of in6_getscope(). 2018-06-05 20:54:29 +00:00
scope6.c Mechanical cleanup of epoch(9) usage in network stack. 2019-01-09 01:11:19 +00:00
sctp6_usrreq.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (14 of many) 2020-02-24 10:47:18 +00:00
sctp6_var.h Whitespace changes due to changes in ident. 2018-07-19 20:16:33 +00:00
send.c Use the new VNET_DEFINE_STATIC macro when we are defining static VNET 2018-07-24 16:35:52 +00:00
send.h
tcp6_var.h
udp6_usrreq.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
udp6_var.h