1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4 This file is part of systemd.
6 Copyright 2013 Tom Gundersen <teg@jklm.no>
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
24 #include <arpa/inet.h>
25 #include <linux/rtnetlink.h>
31 #include "rtnl-util.h"
35 typedef struct Network Network;
36 typedef struct Link Link;
37 typedef struct Address Address;
38 typedef struct Route Route;
39 typedef struct Manager Manager;
46 struct ether_addr *match_mac;
54 LIST_HEAD(Address, addresses);
55 LIST_HEAD(Route, routes);
57 LIST_FIELDS(Network, networks);
64 unsigned char prefixlen;
72 LIST_FIELDS(Address, addresses);
85 LIST_FIELDS(Route, routes);
102 struct udev_monitor *udev_monitor;
103 sd_event_source *udev_event_source;
106 LIST_HEAD(Network, networks);
109 usec_t network_dirs_ts_usec;
114 int manager_new(Manager **ret);
115 void manager_free(Manager *m);
117 int manager_udev_enumerate_links(Manager *m);
118 int manager_udev_listen(Manager *m);
120 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
121 #define _cleanup_manager_free_ _cleanup_(manager_freep)
125 int network_load(Manager *manager);
126 bool network_should_reload(Manager *manager);
128 void network_free(Network *network);
130 DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
131 #define _cleanup_network_free_ _cleanup_(network_freep)
133 int network_get(Manager *manager, struct udev_device *device, Network **ret);
134 int network_apply(Manager *manager, Network *network, Link *link);
136 const struct ConfigPerfItem* network_gperf_lookup(const char *key, unsigned length);
139 int route_new(Network *network, Route **ret);
140 void route_free(Route *route);
141 int route_configure(Manager *manager, Route *route, Link *link);
143 DEFINE_TRIVIAL_CLEANUP_FUNC(Route*, route_free);
144 #define _cleanup_route_free_ _cleanup_(route_freep)
146 int config_parse_gateway(const char *unit, const char *filename, unsigned line,
147 const char *section, const char *lvalue, int ltype,
148 const char *rvalue, void *data, void *userdata);
151 int address_new(Network *network, Address **ret);
152 void address_free(Address *address);
153 int address_configure(Manager *manager, Address *address, Link *link);
155 DEFINE_TRIVIAL_CLEANUP_FUNC(Address*, address_free);
156 #define _cleanup_address_free_ _cleanup_(address_freep)
158 int config_parse_address(const char *unit, const char *filename, unsigned line,
159 const char *section, const char *lvalue, int ltype,
160 const char *rvalue, void *data, void *userdata);
164 int link_new(Manager *manager, struct udev_device *device, Link **ret);
165 void link_free(Link *link);
166 int link_add(Manager *manager, struct udev_device *device);
167 int link_up(Manager *manager, Link *link);
169 DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_free);
170 #define _cleanup_link_free_ _cleanup_(link_freep)