Skip to content
Navigation Menu
Toggle navigation
Sign in
In this repository
All GitHub Enterprise
↵
Jump to
↵
No suggested jump to results
In this repository
All GitHub Enterprise
↵
Jump to
↵
In this organization
All GitHub Enterprise
↵
Jump to
↵
In this repository
All GitHub Enterprise
↵
Jump to
↵
Sign in
Reseting focus
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
mariux64
/
linux
Public
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Issues
2
Pull requests
0
Actions
Projects
0
Wiki
Security
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security
Insights
Files
a3016a2
Breadcrumbs
linux
/
tools
/
testing
/
selftests
/
bpf
/
network_helpers.h
Blame
Blame
Latest commit
History
History
138 lines (123 loc) · 3.95 KB
Breadcrumbs
linux
/
tools
/
testing
/
selftests
/
bpf
/
network_helpers.h
Top
File metadata and controls
Code
Blame
138 lines (123 loc) · 3.95 KB
Raw
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __NETWORK_HELPERS_H #define __NETWORK_HELPERS_H #include <sys/socket.h> #include <sys/types.h> #include <linux/types.h> typedef __u16 __sum16; #include <linux/if_ether.h> #include <linux/if_packet.h> #include <linux/ip.h> #include <linux/ipv6.h> #include <linux/ethtool.h> #include <linux/sockios.h> #include <linux/err.h> #include <netinet/tcp.h> #include <bpf/bpf_endian.h> #include <net/if.h> #define MAGIC_VAL 0x1234 #define NUM_ITER 100000 #define VIP_NUM 5 #define MAGIC_BYTES 123 struct network_helper_opts { int timeout_ms; bool must_fail; int proto; /* +ve: Passed to listen() as-is. * 0: Default when the test does not set * a particular value during the struct init. * It is changed to 1 before passing to listen(). * Most tests only have one on-going connection. * -ve: It is changed to 0 before passing to listen(). * It is useful to force syncookie without * changing the "tcp_syncookies" sysctl from 1 to 2. */ int backlog; int (*post_socket_cb)(int fd, void *opts); void *cb_opts; }; /* ipv4 test vector */ struct ipv4_packet { struct ethhdr eth; struct iphdr iph; struct tcphdr tcp; } __packed; extern struct ipv4_packet pkt_v4; /* ipv6 test vector */ struct ipv6_packet { struct ethhdr eth; struct ipv6hdr iph; struct tcphdr tcp; } __packed; extern struct ipv6_packet pkt_v6; int settimeo(int fd, int timeout_ms); int start_server_str(int family, int type, const char *addr_str, __u16 port, const struct network_helper_opts *opts); int start_server(int family, int type, const char *addr, __u16 port, int timeout_ms); int *start_reuseport_server(int family, int type, const char *addr_str, __u16 port, int timeout_ms, unsigned int nr_listens); int start_server_addr(int type, const struct sockaddr_storage *addr, socklen_t len, const struct network_helper_opts *opts); void free_fds(int *fds, unsigned int nr_close_fds); int client_socket(int family, int type, const struct network_helper_opts *opts); int connect_to_addr(int type, const struct sockaddr_storage *addr, socklen_t len, const struct network_helper_opts *opts); int connect_to_fd(int server_fd, int timeout_ms); int connect_to_fd_opts(int server_fd, int type, const struct network_helper_opts *opts); int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms); int fastopen_connect(int server_fd, const char *data, unsigned int data_len, int timeout_ms); int make_sockaddr(int family, const char *addr_str, __u16 port, struct sockaddr_storage *addr, socklen_t *len); char *ping_command(int family); int get_socket_local_port(int sock_fd); int get_hw_ring_size(char *ifname, struct ethtool_ringparam *ring_param); int set_hw_ring_size(char *ifname, struct ethtool_ringparam *ring_param); struct nstoken; /** * open_netns() - Switch to specified network namespace by name. * * Returns token with which to restore the original namespace * using close_netns(). */ struct nstoken *open_netns(const char *name); void close_netns(struct nstoken *token); int send_recv_data(int lfd, int fd, uint32_t total_bytes); static __u16 csum_fold(__u32 csum) { csum = (csum & 0xffff) + (csum >> 16); csum = (csum & 0xffff) + (csum >> 16); return (__u16)~csum; } static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr, __u32 len, __u8 proto, __wsum csum) { __u64 s = csum; s += (__u32)saddr; s += (__u32)daddr; s += htons(proto + len); s = (s & 0xffffffff) + (s >> 32); s = (s & 0xffffffff) + (s >> 32); return csum_fold((__u32)s); } static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr, __u32 len, __u8 proto, __wsum csum) { __u64 s = csum; int i; for (i = 0; i < 4; i++) s += (__u32)saddr->s6_addr32[i]; for (i = 0; i < 4; i++) s += (__u32)daddr->s6_addr32[i]; s += htons(proto + len); s = (s & 0xffffffff) + (s >> 32); s = (s & 0xffffffff) + (s >> 32); return csum_fold((__u32)s); } #endif
1
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
54
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
You can’t perform that action at this time.