xref: /aosp_15_r20/external/libnl/tests/test-create-geneve.c (revision 4dc78e53d49367fa8e61b07018507c90983a077d)
1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only */
2*4dc78e53SAndroid Build Coastguard Worker 
3*4dc78e53SAndroid Build Coastguard Worker #include "nl-default.h"
4*4dc78e53SAndroid Build Coastguard Worker 
5*4dc78e53SAndroid Build Coastguard Worker #include <linux/netlink.h>
6*4dc78e53SAndroid Build Coastguard Worker 
7*4dc78e53SAndroid Build Coastguard Worker #include <netlink/netlink.h>
8*4dc78e53SAndroid Build Coastguard Worker #include <netlink/route/link.h>
9*4dc78e53SAndroid Build Coastguard Worker #include <netlink/route/link/geneve.h>
10*4dc78e53SAndroid Build Coastguard Worker 
11*4dc78e53SAndroid Build Coastguard Worker #define IPv6 1
12*4dc78e53SAndroid Build Coastguard Worker 
main(int argc,char * argv[])13*4dc78e53SAndroid Build Coastguard Worker int main(int argc, char *argv[])
14*4dc78e53SAndroid Build Coastguard Worker {
15*4dc78e53SAndroid Build Coastguard Worker 	struct rtnl_link *link;
16*4dc78e53SAndroid Build Coastguard Worker 	struct nl_addr *addr;
17*4dc78e53SAndroid Build Coastguard Worker 	struct nl_sock *sk;
18*4dc78e53SAndroid Build Coastguard Worker 	int err;
19*4dc78e53SAndroid Build Coastguard Worker 
20*4dc78e53SAndroid Build Coastguard Worker 	sk = nl_socket_alloc();
21*4dc78e53SAndroid Build Coastguard Worker 	if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) {
22*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err, "Unable to connect socket");
23*4dc78e53SAndroid Build Coastguard Worker 		return err;
24*4dc78e53SAndroid Build Coastguard Worker 	}
25*4dc78e53SAndroid Build Coastguard Worker 
26*4dc78e53SAndroid Build Coastguard Worker 	link = rtnl_link_geneve_alloc();
27*4dc78e53SAndroid Build Coastguard Worker 
28*4dc78e53SAndroid Build Coastguard Worker 	rtnl_link_set_name(link, "gnv123");
29*4dc78e53SAndroid Build Coastguard Worker 
30*4dc78e53SAndroid Build Coastguard Worker 	if ((err = rtnl_link_geneve_set_id(link, 123)) < 0) {
31*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err, "Unable to set GENEVE ID");
32*4dc78e53SAndroid Build Coastguard Worker 		return err;
33*4dc78e53SAndroid Build Coastguard Worker 	}
34*4dc78e53SAndroid Build Coastguard Worker 
35*4dc78e53SAndroid Build Coastguard Worker #if IPv6
36*4dc78e53SAndroid Build Coastguard Worker 	if ((err = nl_addr_parse("2001:0db8:0:f101::1/64", AF_INET6, &addr)) < 0) {
37*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err,  "Unable to parse IPv6 address");
38*4dc78e53SAndroid Build Coastguard Worker 		return err;
39*4dc78e53SAndroid Build Coastguard Worker 	}
40*4dc78e53SAndroid Build Coastguard Worker 	if ((err = rtnl_link_geneve_set_label(link, 123)) < 0) {
41*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err, "Unable to set label");
42*4dc78e53SAndroid Build Coastguard Worker 		return err;
43*4dc78e53SAndroid Build Coastguard Worker 	}
44*4dc78e53SAndroid Build Coastguard Worker 
45*4dc78e53SAndroid Build Coastguard Worker 	if ((err = rtnl_link_geneve_set_udp_zero_csum6_tx(link, 1)) < 0) {
46*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err, "Unable to set skip transmitted UDP checksum");
47*4dc78e53SAndroid Build Coastguard Worker 		return err;
48*4dc78e53SAndroid Build Coastguard Worker 	}
49*4dc78e53SAndroid Build Coastguard Worker 
50*4dc78e53SAndroid Build Coastguard Worker 	if ((err = rtnl_link_geneve_set_udp_zero_csum6_rx(link, 1)) < 0) {
51*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err, "Unable to set skip received UDP checksum");
52*4dc78e53SAndroid Build Coastguard Worker 		return err;
53*4dc78e53SAndroid Build Coastguard Worker 	}
54*4dc78e53SAndroid Build Coastguard Worker #else
55*4dc78e53SAndroid Build Coastguard Worker 	if ((err = nl_addr_parse("10.4.4.4", AF_INET, &addr)) < 0) {
56*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err, "Unable to parse IP address");
57*4dc78e53SAndroid Build Coastguard Worker 		return err;
58*4dc78e53SAndroid Build Coastguard Worker 	}
59*4dc78e53SAndroid Build Coastguard Worker #endif
60*4dc78e53SAndroid Build Coastguard Worker 
61*4dc78e53SAndroid Build Coastguard Worker 	if ((err = rtnl_link_geneve_set_remote(link, addr)) < 0) {
62*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err, "Unable to set remote address");
63*4dc78e53SAndroid Build Coastguard Worker 		return err;
64*4dc78e53SAndroid Build Coastguard Worker 	}
65*4dc78e53SAndroid Build Coastguard Worker 	nl_addr_put(addr);
66*4dc78e53SAndroid Build Coastguard Worker 
67*4dc78e53SAndroid Build Coastguard Worker 	if ((err = rtnl_link_geneve_set_ttl(link, 1)) < 0) {
68*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err, "Unable to set TTL");
69*4dc78e53SAndroid Build Coastguard Worker 		return err;
70*4dc78e53SAndroid Build Coastguard Worker 	}
71*4dc78e53SAndroid Build Coastguard Worker 
72*4dc78e53SAndroid Build Coastguard Worker 	if ((err = rtnl_link_geneve_set_tos(link, 0)) < 0) {
73*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err, "Unable to set ToS");
74*4dc78e53SAndroid Build Coastguard Worker 		return err;
75*4dc78e53SAndroid Build Coastguard Worker 	}
76*4dc78e53SAndroid Build Coastguard Worker 
77*4dc78e53SAndroid Build Coastguard Worker 	if ((err = rtnl_link_geneve_set_port(link, 5060)) < 0) {
78*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err, "Unable to set port");
79*4dc78e53SAndroid Build Coastguard Worker 		return err;
80*4dc78e53SAndroid Build Coastguard Worker 	}
81*4dc78e53SAndroid Build Coastguard Worker 
82*4dc78e53SAndroid Build Coastguard Worker 	if ((err = rtnl_link_add(sk, link, NLM_F_CREATE)) < 0) {
83*4dc78e53SAndroid Build Coastguard Worker 		nl_perror(err, "Unable to add link");
84*4dc78e53SAndroid Build Coastguard Worker 		return err;
85*4dc78e53SAndroid Build Coastguard Worker 	}
86*4dc78e53SAndroid Build Coastguard Worker 
87*4dc78e53SAndroid Build Coastguard Worker 	rtnl_link_put(link);
88*4dc78e53SAndroid Build Coastguard Worker 	nl_close(sk);
89*4dc78e53SAndroid Build Coastguard Worker 
90*4dc78e53SAndroid Build Coastguard Worker 	return 0;
91*4dc78e53SAndroid Build Coastguard Worker }
92