Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/samples/bpf/sock_example.h
25924 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#include <stdlib.h>
3
#include <stdio.h>
4
#include <linux/unistd.h>
5
#include <unistd.h>
6
#include <string.h>
7
#include <errno.h>
8
#include <linux/if_ether.h>
9
#include <net/if.h>
10
#include <linux/if_packet.h>
11
#include <arpa/inet.h>
12
13
static inline int open_raw_sock(const char *name)
14
{
15
struct sockaddr_ll sll;
16
int sock;
17
18
sock = socket(PF_PACKET, SOCK_RAW | SOCK_NONBLOCK | SOCK_CLOEXEC, htons(ETH_P_ALL));
19
if (sock < 0) {
20
printf("cannot create raw socket\n");
21
return -1;
22
}
23
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));
30
close(sock);
31
return -1;
32
}
33
34
return sock;
35
}
36
37