Thread (1 message) 1 message, 1 author, 2003-09-16

Re: [netfilter-core] Re: skb linearization

From: Rusty Russell <hidden>
Date: 2003-09-16 02:58:53

In message <1063662564.1358.19.camel@localhost> you write:
I got the large linearization patch from Rusty. At first look I noticed
that it could be a large work for IPv6, BCF the extension headers.
At netfilter6 we inspect these headers in ip6_target.c, ip6t_LOG.c and
the extension header matches.
So, my real questions. Could you check some files for me?

- net/ipv6/ah6.c:ipv6_clear_mutable_options()
	this function uses the skb as a linear one w/o skb_copy_bits or
	skb_linearize. Am I right?
Well, yes, but this is at output, and current code always produces a
linear header (the data may be non-linear for zero-copy though).  I
tried not to rely on this in netfilter hooks, in case it changes
later.
- net/ipv6/ah6.c
	where are these functions called? Before or after the netfilter 
	hooks?

Best guesses follow based on a little grepping.  Dave/Alexey will
correct me if this is wrong 8)

ah6_output called as a dst->output function, so after
NF_IP6_POST_ROUTING.

ah6_input called from xfrm6_rcv, called from ip6_input_finish, so
after NF_IP6_LOCAL_IN.
- net/ipv6/esp6.c
	mainly the same functions as ah6.c, but this file uses 	skb_copy_bits!
It's an input function, so can't assume linear beyond the header.
Header is pulled in ip6_input_finish, although I feel it should be
done in ip6_input itself so the netfilter hook gets a linear header,
but there's IPv6 header wierdness here (multuple handlers as it
iterates through the headers) which I think makes the current ordering
reasonable.
- net/ipv6/exthdrs.c:ipv6_invert_rthdr()
	this function manipulates/modifies the routing addresses in an
	extension header. It uses the skb as a linear one w/o checks or
	linearization. Am I right? (This extension header can be far 	from the
main IPv6 header and this header can contain lot of IPv6 	addresses in a
chain.)
Headers are linearized in ip6_input_finish IIUC.
- net/ipv6/exthdrs.c:ipv6_skip_exthdr()
	it is a nice solution with linearization of the required areas 	only.
It can be a good solution to use in the extension header based matches.
Yes, that is a good plan.
The whole function could be used in the 	ip6_targt.c:ip6_packet_match()
to get the real next level value. 	(Currently I have added a similar
function into that function.)
	Do you see any chance to export this function into the 	namespace?
Hmm, they look similar, but different enough that merging them might
not be worthwhile: you already use ipv6_ext_hdr().  You'd have to try
it and see if it gets uglier or prettier.
The 3rd problem is the ip6t_LOG.c, but I think that we stole the
solution from ipt_LOG.c, as usual :)
Good idea.

Cheers,
Rusty.
--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help