3
3
* iprouteadddel - Add or delete direct route to a local IP address
5
* Copyright © 2015-2018 Teddy Hogeborn
6
* Copyright © 2015-2018 Björn Påhlsson
8
* This file is part of Mandos.
10
* Mandos is free software: you can redistribute it and/or modify it
11
* under the terms of the GNU General Public License as published by
12
* the Free Software Foundation, either version 3 of the License, or
13
* (at your option) any later version.
15
* Mandos is distributed in the hope that it will be useful, but
5
* Copyright © 2015 Teddy Hogeborn
6
* Copyright © 2015 Björn Påhlsson
8
* This program is free software: you can redistribute it and/or
9
* modify it under the terms of the GNU General Public License as
10
* published by the Free Software Foundation, either version 3 of the
11
* License, or (at your option) any later version.
13
* This program is distributed in the hope that it will be useful, but
16
14
* WITHOUT ANY WARRANTY; without even the implied warranty of
17
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
16
* General Public License for more details.
20
18
* You should have received a copy of the GNU General Public License
21
* along with Mandos. If not, see <http://www.gnu.org/licenses/>.
19
* along with this program. If not, see
20
* <http://www.gnu.org/licenses/>.
23
22
* Contact the authors at <mandos@recompile.se>.
26
#define _GNU_SOURCE /* program_invocation_short_name */
25
#define _GNU_SOURCE /* asprintf(),
26
program_invocation_short_name */
27
#include <iso646.h> /* not, or, and */
27
28
#include <stdbool.h> /* bool, false, true */
28
#include <stdio.h> /* fprintf(), stderr, FILE, vfprintf */
29
#include <errno.h> /* program_invocation_short_name,
30
errno, perror(), EINVAL, ENOMEM */
29
#include <stdio.h> /* vfprintf(), stderr, stdout */
31
30
#include <stdarg.h> /* va_list, va_start */
32
#include <stdlib.h> /* EXIT_SUCCESS */
31
#include <errno.h> /* perror(), errno,
32
program_invocation_short_name */
33
33
#include <argp.h> /* struct argp_option, error_t, struct
34
argp_state, ARGP_KEY_ARG,
35
argp_usage(), ARGP_KEY_END,
36
ARGP_ERR_UNKNOWN, struct argp,
38
#include <sysexits.h> /* EX_USAGE, EX_OSERR */
39
#include <netinet/ip.h> /* sa_family_t, AF_INET6, AF_INET */
34
argp_state, struct argp,
35
argp_parse(), ARGP_KEY_ARG,
36
ARGP_KEY_END, ARGP_ERR_UNKNOWN */
40
37
#include <inttypes.h> /* PRIdMAX, intmax_t */
38
#include <sysexits.h> /* EX_OSERR */
42
#include <netlink/netlink.h> /* struct nl_addr, nl_addr_parse(),
46
#include <netlink/route/route.h> /* struct rtnl_route,
49
rtnl_route_set_family(),
50
rtnl_route_set_protocol(),
52
rtnl_route_set_scope(),
54
rtnl_route_set_type(),
57
rtnl_route_set_table(),
59
rtnl_route_nh_alloc(),
60
rtnl_route_nh_set_ifindex(),
61
rtnl_route_add_nexthop(),
65
rtnl_route_nh_free() */
66
#include <netlink/socket.h> /* struct nl_sock, nl_socket_alloc(),
67
nl_connect(), nl_socket_free() */
68
#include <netlink/route/link.h> /* rtnl_link_get_kernel(),
69
rtnl_link_get_ifindex(),
40
/* #include <linux/netlink.h> */
41
/* #include <netlink/netlink.h> */
42
/* #include <netlink/socket.h> */
43
#include <netlink/netlink.h>
44
#include <netlink/socket.h>
45
#include <netlink/cache.h>
46
#include <netlink/route/link.h> /* libnl xxx */
47
#include <netlink/route/route.h> /* libnl xxx */
72
49
bool debug = false;
73
50
const char *argp_program_version = "mandos-client-iprouteadddel " VERSION;