Search code examples
clinuxsocketsethernet

Receive Ethernet packets in Linux with several Ethtypes in C


I want to receive ethernet packets from socket in Linux, but only those, which have one of two custom Ethtype values. As I know, if only 1 ethtype should be received, it's possible to specify this value while creating socket like this

int socket = socket(PF_PACKET, SOCK_RAW, htons(ETHERTYPE_CUSTOM_1);

But what if I have 2 different ethtypes? Should I use 2 sockets or write some custom filter? Or is there some any simple way?


Solution

  • Create two sockets, one for each ethertype. Then you can use select() or epoll() to wait for packets on either socket at the same time.