Heads up --- Thinking about UDP and tunneling

Randall Stewart rrs at lakerest.net
Thu Dec 11 04:50:42 PST 2008


All:

Ok here is what I have come up with.. going along the
lines of Max's suggestion.. its pretty clean I think.

Comments would be most welcome..

The only thing possibly a bit dodgy is that

1) UDP has no per-protocol block.
2) Instead of creating one, I am using the block pointer in the inp
    as the function pointer for the tunneling.

What this means if we EVERY did add a per protocol structure for
UDP we would need to move the function pointer in there..

The nice thing it does is make it so we have no structural changes to
the code... i.e. complete compatibility... no changes to inp or
other UDP structures :-)


Here is the patch.. please send comments ;-D


-------------- next part --------------
A non-text attachment was scrubbed...
Name: diff_for_udp
Type: application/octet-stream
Size: 2853 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-net/attachments/20081211/b20498e5/diff_for_udp.obj
-------------- next part --------------





On Nov 20, 2008, at 8:50 AM, Max Laier wrote:

> On Thursday 20 November 2008 14:00:11 Randall Stewart wrote:
>> On Nov 19, 2008, at 5:33 PM, Julian Elischer wrote:
>>>> Its not new, its the same ip header..
>>>> Its just you go into the mbuf chain and take out
>>>> the udp header...
>>>
>>> well you can't do that at the socket buffer becasue you've discarded
>>> the IP header. It may not even be in the mbufs you have. (though  
>>> it's
>>> unlikely). After you've processed the UDP part the IP part is gone  
>>> so
>>> you'd need to intercept the packet way earlier and then do your
>>> own UDP processing, (or maybe attach the IP header onto it with a
>>> tag).
>>
>> One would definitely  have to do some work in udp_input() not a lot  
>> from
>> what I can tell... but it would take some work.
>>
>> Maybe  good course is to use the socket(9) stuff, but add an option
>> that can set a "by-pass function" if the socket is udp... right
>> after you establish the INP the packet goes to, if the function is
>> set, you engage the bypass...
>
> This sounds reasonable.  One would only have to replace calls to  
> udp_append in
> udp_input with the by-pass function et voila.  Should be clean  
> enough.  There
> might be some problems with holding the socket lock, though.
>
> For the record, I don't like all the UDP-tunneling madness either,  
> but it
> seems that we are stuck with it ... so we should at least try to  
> come up with
> a somewhat reasonable implementation for this hackery.
>
> -- 
> /"\  Best regards,                      | mlaier at freebsd.org
> \ /  Max Laier                          | ICQ #67774661
> X   http://pf4freebsd.love2party.net/  | mlaier at EFnet
> / \  ASCII Ribbon Campaign              | Against HTML Mail and News
>

------------------------------
Randall Stewart
803-317-4952 (cell)
803-345-0391(direct)



More information about the freebsd-net mailing list