1 /* SPDX-License-Identifier: GPL-2.0 */
4 #include <linux/unistd.h>
8 #include <linux/if_ether.h>
10 #include <linux/if_packet.h>
11 #include <arpa/inet.h>
14 static inline int open_raw_sock(const char *name
)
16 struct sockaddr_ll sll
;
19 sock
= socket(PF_PACKET
, SOCK_RAW
| SOCK_NONBLOCK
| SOCK_CLOEXEC
, htons(ETH_P_ALL
));
21 printf("cannot create raw socket\n");
25 memset(&sll
, 0, sizeof(sll
));
26 sll
.sll_family
= AF_PACKET
;
27 sll
.sll_ifindex
= if_nametoindex(name
);
28 sll
.sll_protocol
= htons(ETH_P_ALL
);
29 if (bind(sock
, (struct sockaddr
*)&sll
, sizeof(sll
)) < 0) {
30 printf("bind to %s: %s\n", name
, strerror(errno
));