Blame view

samples/bpf/test_probe_write_user_user.c 2.46 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  // SPDX-License-Identifier: GPL-2.0
cf9b1199d   Sargun Dhillon   samples/bpf: Add ...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
  #include <stdio.h>
  #include <assert.h>
  #include <linux/bpf.h>
  #include <unistd.h>
  #include "libbpf.h"
  #include "bpf_load.h"
  #include <sys/socket.h>
  #include <string.h>
  #include <netinet/in.h>
  #include <arpa/inet.h>
  
  int main(int ac, char **argv)
  {
  	int serverfd, serverconnfd, clientfd;
  	socklen_t sockaddr_len;
  	struct sockaddr serv_addr, mapped_addr, tmp_addr;
  	struct sockaddr_in *serv_addr_in, *mapped_addr_in, *tmp_addr_in;
  	char filename[256];
  	char *ip;
  
  	serv_addr_in = (struct sockaddr_in *)&serv_addr;
  	mapped_addr_in = (struct sockaddr_in *)&mapped_addr;
  	tmp_addr_in = (struct sockaddr_in *)&tmp_addr;
  
  	snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
  
  	if (load_bpf_file(filename)) {
  		printf("%s", bpf_log_buf);
  		return 1;
  	}
  
  	assert((serverfd = socket(AF_INET, SOCK_STREAM, 0)) > 0);
  	assert((clientfd = socket(AF_INET, SOCK_STREAM, 0)) > 0);
  
  	/* Bind server to ephemeral port on lo */
  	memset(&serv_addr, 0, sizeof(serv_addr));
  	serv_addr_in->sin_family = AF_INET;
  	serv_addr_in->sin_port = 0;
  	serv_addr_in->sin_addr.s_addr = htonl(INADDR_LOOPBACK);
  
  	assert(bind(serverfd, &serv_addr, sizeof(serv_addr)) == 0);
  
  	sockaddr_len = sizeof(serv_addr);
  	assert(getsockname(serverfd, &serv_addr, &sockaddr_len) == 0);
  	ip = inet_ntoa(serv_addr_in->sin_addr);
  	printf("Server bound to: %s:%d
  ", ip, ntohs(serv_addr_in->sin_port));
  
  	memset(&mapped_addr, 0, sizeof(mapped_addr));
  	mapped_addr_in->sin_family = AF_INET;
  	mapped_addr_in->sin_port = htons(5555);
  	mapped_addr_in->sin_addr.s_addr = inet_addr("255.255.255.255");
d40fc181e   Joe Stringer   samples/bpf: Make...
54
  	assert(!bpf_map_update_elem(map_fd[0], &mapped_addr, &serv_addr, BPF_ANY));
cf9b1199d   Sargun Dhillon   samples/bpf: Add ...
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
  
  	assert(listen(serverfd, 5) == 0);
  
  	ip = inet_ntoa(mapped_addr_in->sin_addr);
  	printf("Client connecting to: %s:%d
  ",
  	       ip, ntohs(mapped_addr_in->sin_port));
  	assert(connect(clientfd, &mapped_addr, sizeof(mapped_addr)) == 0);
  
  	sockaddr_len = sizeof(tmp_addr);
  	ip = inet_ntoa(tmp_addr_in->sin_addr);
  	assert((serverconnfd = accept(serverfd, &tmp_addr, &sockaddr_len)) > 0);
  	printf("Server received connection from: %s:%d
  ",
  	       ip, ntohs(tmp_addr_in->sin_port));
  
  	sockaddr_len = sizeof(tmp_addr);
  	assert(getpeername(clientfd, &tmp_addr, &sockaddr_len) == 0);
  	ip = inet_ntoa(tmp_addr_in->sin_addr);
  	printf("Client's peer address: %s:%d
  ",
  	       ip, ntohs(tmp_addr_in->sin_port));
  
  	/* Is the server's getsockname = the socket getpeername */
  	assert(memcmp(&serv_addr, &tmp_addr, sizeof(struct sockaddr_in)) == 0);
  
  	return 0;
  }