[PATCH] resolve byte order mess in ip_input/ip_output/pfil(9)
Alexander V. Chernikov
melifaro at FreeBSD.org
Fri Oct 5 13:50:30 UTC 2012
On 05.10.2012 15:47, Gleb Smirnoff wrote:
> Hello,
>
> once the pfil(9) API was introduced in FreeBSD, our main packet filter,
> the ipfw(4) worked in host byte order, that's why the pfil(9) API was
> violated: the AF_INET hooks were entered with packet in host byte order.
>
> Moreover, when we put packets into the NETISR_IP queue, we put them
> in different byte order: those that have M_FASTFWD_OURS flag are in
> host byte order, while all others are in net.
divert and ng_ipfw are another places where we play these games, too.
>
> Attached patch does the following:
>
> - all packets in NETISR_IP queue are in net byte order
> - ip_input() is entered in net byte order and converts packet
> to host byte order right _after_ processing pfil(9) hooks
> - ip_output() is entered in host byte order and converts packet
> to net byte order right _before_ processing pfil(9) hooks
> - ip_fragment() accepts and emits packet in net byte order
> - ip_forward(), ip_mloopback() use host byte order (untouched actually)
> - ip_fastforward() no longer modifies packet at all (except ip_ttl)
> - swapping of byte order there and back removed from the following modules:
> pf(4), ipfw(4), enc(4), if_bridge(4)
> - swapping of byte order added to ipfilter(4), based on __FreeBSD_version
> - __FreeBSD_version bumped
> - manual page updated
That's great!
Unified approach for host/network fields in entire kernel will help
greatly in making/debugging complex (netgraph, pfil or divert) paths.
Additionally, this is a good step to make mbuf entirely r/o (which can
help in some cases like transparent firewalling, for example).
>
>
>
> _______________________________________________
> freebsd-net at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"
>
--
WBR, Alexander
More information about the freebsd-net
mailing list