[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