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>
13 static inline int open_raw_sock(const char *name
)
15 struct sockaddr_ll sll
;
18 sock
= socket(PF_PACKET
, SOCK_RAW
| SOCK_NONBLOCK
| SOCK_CLOEXEC
, htons(ETH_P_ALL
));
20 printf("cannot create raw socket\n");
24 memset(&sll
, 0, sizeof(sll
));
25 sll
.sll_family
= AF_PACKET
;
26 sll
.sll_ifindex
= if_nametoindex(name
);
27 sll
.sll_protocol
= htons(ETH_P_ALL
);
28 if (bind(sock
, (struct sockaddr
*)&sll
, sizeof(sll
)) < 0) {
29 printf("bind to %s: %s\n", name
, strerror(errno
));