HomeFreeBSD

pf: remove the last hand-rolled IPv6 extension header loop

Description

pf: remove the last hand-rolled IPv6 extension header loop

Replace the IPv6 header walking loop in pf_test_state_icmp() with
the common function pf_walk_header6(). For that, pf_walk_header6()
can now extract both the information wether it is a fragment and
the final protocol if it is the first fragment. This allows to
match the icmp6 too big packet of a first fragment to the reassembled
packet's state. This is neccesary if a refragmented fragment is
to big for the Path-MTU.
Note that pd.proto contains the real protocol number for the first
fragment and IPPROTO_FRAGMENT for later fragments. pd.virtual_protocol
is set to PF_VPROTO_FRAGMENT for all fragments.
ok mcbride@

Obtained from: OpenBSD, bluhm <bluhm@openbsd.org>, 90b3c57e94
Sponsored by: Rubicon Communications, LLC ("Netgate")
Differential Revision: https://reviews.freebsd.org/D46931

Details

Provenance
kpAuthored on Sep 30 2024, 2:59 PM
Differential Revision
D46931: pf: remove the last hand-rolled IPv6 extension header loop
Parents
rG25e0f8f99f54: pf: convert DIOCGETRULESETS to netlink
Branches
Unknown
Tags
Unknown