[maybe spam] Re: linux PF_PACKET compatibility

Vlad Galu dudu at dudu.ro
Sat Feb 12 20:16:03 UTC 2011


On Sat, Feb 12, 2011 at 12:28 PM, Da Rock <
freebsd-hackers at herveybayaustralia.com.au> wrote:

> On 02/12/11 19:39, Gary Jennejohn wrote:
>
>> On Fri, 11 Feb 2011 17:19:17 -0800
>> Julian Elischer<julian at freebsd.org>  wrote:
>>
>>
>>
>>> On 2/11/11 4:03 PM, Da Rock wrote:
>>>
>>>
>>>> Unfortunately this software uses this family instead of pcap or bpf.
>>>> So when built it errors.
>>>>
>>>> I guess if I am to use this app I will have to rewrite the way it
>>>> uses the network stack.
>>>>
>>>>
>>> l2tp runs over UDP packets  (port 1701 (like the starship enterprise))
>>> I have no idea why they want raw packets.
>>>
>>>
>>>
>> Ther's a sendarp() routine which uses PF_PACKET to directly access the
>> network driver and bypass the stack.  Lazy Linuxers who have no idea
>> or don't care that other operating systems exist.
>>
>>
>>
> Indeed. Is it possible to leverage another compatible routine? I haven't
> had a look yet as I just read the message, but can I (after checking return
> values and arguments) just drop in another arp routine? Or are they simply
> incompatible across the board?
>
> From what I understand they should all be essentially doing the same thing,
> but I could be wrong on this. Alternatively would I have to basically
> rewrite the arp.c to be posix compatible (for portability)?
>
> Cheers
>

You only need to rewrite the sendarp() routine, using a BPF device
descriptor instead of the PF_PACKET socket descriptor. Take a look at
libdnet[1] and rbootd[2]'s source.

[1] http://libdnet.sf.net/
[2] http://ftp.fr.openbsd.org/pub/OpenBSD/src/usr.sbin/rbootd/

You will need, however, to fill the source with #ifdefs to compensate the
fact that Linux has assigned different names and sizes to the members of
struct ether_header and arphdr (and has a _BSD_SOURCE knob to accomodate
compiling BSD-based software).* *

-- 
Good, fast & cheap. Pick any two.


More information about the freebsd-hackers mailing list