opnsense-src/sys/netinet6
Bjoern A. Zeeb c1131de6f1 frag6: properly handle atomic fragments according to RFCs.
RFC 8200 says:
	"If the fragment is a whole datagram (that is, both the Fragment
         Offset field and the M flag are zero), then it does not need
         any further reassembly and should be processed as a fully
         reassembled packet (i.e., updating Next Header, adjust Payload
         Length, removing the Fragment header, etc.).  .."

That means we should remove the fragment header and make all the adjustments
rather than just skipping over the fragment header.  The difference should
be noticeable in that a properly handled atomic fragment triggering an ICMPv6
message at an upper layer (e.g. dest unreach, unreachable port) will not
include the fragment header.

Update the test cases to also test for an unfragmentable part.  That is
needed so that the next header is properly updated (not just lengths).

MFC after:	3 weeks
Sponsored by:	Netflix
Differential Revision:	https://reviews.freebsd.org/D22155
2019-11-08 14:36:44 +00:00
..
dest6.c netinet*: variable cleanup 2019-11-07 18:29:51 +00:00
frag6.c frag6: properly handle atomic fragments according to RFCs. 2019-11-08 14:36:44 +00:00
icmp6.c Remove unnecessary recursive epoch enter via INP_INFO_RLOCK 2019-11-07 20:43:12 +00:00
icmp6.h
in6.c in6ifa_llaonifp() is never called from fast path, so do not require 2019-10-14 15:33:53 +00:00
in6.h
in6_cksum.c
in6_fib.c
in6_fib.h
in6_gif.c
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
in6_mcast.c
in6_pcb.c Since r353292 on input path we are always in network epoch, when 2019-11-07 20:49:56 +00:00
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_fastfwd.c
ip6_forward.c Add a missing include of opt_sctp.h. 2019-10-12 22:58:33 +00:00
ip6_gre.c
ip6_id.c
ip6_input.c netinet*: variable cleanup 2019-11-07 18:29:51 +00:00
ip6_mroute.c netinet*: variable cleanup 2019-11-07 18:29:51 +00:00
ip6_mroute.h
ip6_output.c
ip6_var.h frag6: replace KAME hand-rolled queues with queue(9) TAILQs 2019-10-23 23:01:18 +00:00
ip6protosw.h
ip_fw_nat64.h
ip_fw_nptv6.h
mld6.c netinet*: variable cleanup 2019-11-07 18:29:51 +00:00
mld6.h
mld6_var.h
nd6.c In nd6_timer() enter the network epoch earlier. The defrouter_del() may 2019-11-04 17:35:37 +00:00
nd6.h
nd6_nbr.c netinet*: variable cleanup 2019-11-07 18:29:51 +00:00
nd6_rtr.c netinet*: variable cleanup 2019-11-07 18:29:51 +00:00
pim6.h
pim6_var.h
raw_ip6.c Remove unnecessary recursive epoch enter via INP_INFO_RLOCK 2019-11-07 20:40:44 +00:00
raw_ip6.h
route6.c netinet*: variable cleanup 2019-11-07 18:29:51 +00:00
scope6.c
scope6_var.h
sctp6_usrreq.c Ensure that the flags indicating IPv4/IPv6 are not changed by failing 2019-10-24 20:05:10 +00:00
sctp6_var.h
send.c
send.h
tcp6_var.h
udp6_usrreq.c Now with epoch synchronized PCB lookup tables we can greatly simplify 2019-11-07 21:01:36 +00:00
udp6_var.h