On Thursday 04 October 2012 21:30:24 you wrote:
However we need the mac address of the neighbouring station that sent the OGM. But we are not sure how to go about retrieving the mac address which is part of the ethernet mac header at the beginning of the frame.
You don't have this information when you receive the data through an UDP socket (this is one of the reasons why all development is now done in batman- adv). What you can do is to rewrite the batmand socket handling stuff using PF_PACKET. Small hint: you should use BPF to reduce the amount of packets received by userspace since your HW doesn't look really powerful. Even better hint: BPF codes can be created using tcpdump. Here an example for udp port 4305:
$ tcpdump -dd 'ip and udp and port 4305' { 0x28, 0, 0, 0x0000000c }, { 0x15, 0, 10, 0x00000800 }, { 0x30, 0, 0, 0x00000017 }, { 0x15, 0, 8, 0x00000011 }, { 0x28, 0, 0, 0x00000014 }, { 0x45, 6, 0, 0x00001fff }, { 0xb1, 0, 0, 0x0000000e }, { 0x48, 0, 0, 0x0000000e }, { 0x15, 2, 0, 0x000010d1 }, { 0x48, 0, 0, 0x00000010 }, { 0x15, 0, 1, 0x000010d1 }, { 0x6, 0, 0, 0x0000ffff }, { 0x6, 0, 0, 0x00000000 },
This code has to be attached to the "PF_PACKET, SOCK_RAW"-socket using setsockopt's SO_ATTACH_FILTER.
The packets can be received using recvmsg (don't forget to use MSG_TRUNC or you will get problems to differentiate different packets. Your biggest problem will be the handling of fragmented IP packets... but you should not get them when you listen for these broadcast announcements.
Kind regards, Sven