]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-netlink-manual.c
2 This file is part of systemd.
4 Copyright 2014 Susant Sahani
6 systemd is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or
9 (at your option) any later version.
11 systemd is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 #include <arpa/inet.h>
24 #include <linux/if_tunnel.h>
26 #include "sd-netlink.h"
31 static int load_module(const char *mod_name
) {
33 struct kmod_list
*list
= NULL
, *l
;
36 ctx
= kmod_new(NULL
, NULL
);
42 r
= kmod_module_new_from_lookup(ctx
, mod_name
, &list
);
46 kmod_list_foreach(l
, list
) {
47 struct kmod_module
*mod
= kmod_module_get_module(l
);
49 r
= kmod_module_probe_insert_module(mod
, 0, NULL
, NULL
, NULL
, NULL
);
55 kmod_module_unref(mod
);
58 kmod_module_unref_list(list
);
64 static int test_tunnel_configure(sd_netlink
*rtnl
) {
66 sd_netlink_message
*m
, *n
;
67 struct in_addr local
, remote
;
69 /* skip test if module cannot be loaded */
70 r
= load_module("ipip");
72 return EXIT_TEST_SKIP
;
75 return EXIT_TEST_SKIP
;
78 assert_se(sd_rtnl_message_new_link(rtnl
, &m
, RTM_NEWLINK
, 0) >= 0);
81 assert_se(sd_netlink_message_append_string(m
, IFLA_IFNAME
, "ipip-tunnel") >= 0);
82 assert_se(sd_netlink_message_append_u32(m
, IFLA_MTU
, 1234)>= 0);
84 assert_se(sd_netlink_message_open_container(m
, IFLA_LINKINFO
) >= 0);
86 assert_se(sd_netlink_message_open_container_union(m
, IFLA_INFO_DATA
, "ipip") >= 0);
88 inet_pton(AF_INET
, "192.168.21.1", &local
.s_addr
);
89 assert_se(sd_netlink_message_append_u32(m
, IFLA_IPTUN_LOCAL
, local
.s_addr
) >= 0);
91 inet_pton(AF_INET
, "192.168.21.2", &remote
.s_addr
);
92 assert_se(sd_netlink_message_append_u32(m
, IFLA_IPTUN_REMOTE
, remote
.s_addr
) >= 0);
94 assert_se(sd_netlink_message_close_container(m
) >= 0);
95 assert_se(sd_netlink_message_close_container(m
) >= 0);
97 assert_se(sd_netlink_call(rtnl
, m
, -1, 0) == 1);
99 assert_se((m
= sd_netlink_message_unref(m
)) == NULL
);
101 r
= load_module("sit");
103 return EXIT_TEST_SKIP
;
106 assert_se(sd_rtnl_message_new_link(rtnl
, &n
, RTM_NEWLINK
, 0) >= 0);
109 assert_se(sd_netlink_message_append_string(n
, IFLA_IFNAME
, "sit-tunnel") >= 0);
110 assert_se(sd_netlink_message_append_u32(n
, IFLA_MTU
, 1234)>= 0);
112 assert_se(sd_netlink_message_open_container(n
, IFLA_LINKINFO
) >= 0);
114 assert_se(sd_netlink_message_open_container_union(n
, IFLA_INFO_DATA
, "sit") >= 0);
116 assert_se(sd_netlink_message_append_u8(n
, IFLA_IPTUN_PROTO
, IPPROTO_IPIP
) >= 0);
118 inet_pton(AF_INET
, "192.168.21.3", &local
.s_addr
);
119 assert_se(sd_netlink_message_append_u32(n
, IFLA_IPTUN_LOCAL
, local
.s_addr
) >= 0);
121 inet_pton(AF_INET
, "192.168.21.4", &remote
.s_addr
);
122 assert_se(sd_netlink_message_append_u32(n
, IFLA_IPTUN_REMOTE
, remote
.s_addr
) >= 0);
124 assert_se(sd_netlink_message_close_container(n
) >= 0);
125 assert_se(sd_netlink_message_close_container(n
) >= 0);
127 assert_se(sd_netlink_call(rtnl
, n
, -1, 0) == 1);
129 assert_se((n
= sd_netlink_message_unref(n
)) == NULL
);
134 int main(int argc
, char *argv
[]) {
138 assert_se(sd_netlink_open(&rtnl
) >= 0);
141 r
= test_tunnel_configure(rtnl
);
143 assert_se((rtnl
= sd_netlink_unref(rtnl
)) == NULL
);