]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/networkd.h
networkd: store netmask and mac address explicitly
[thirdparty/systemd.git] / src / network / networkd.h
CommitLineData
f579559b
TG
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3/***
4 This file is part of systemd.
5
6 Copyright 2013 Tom Gundersen <teg@jklm.no>
7
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.
12
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.
17
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/>.
20***/
21
22#pragma once
23
24#include <arpa/inet.h>
25#include <linux/rtnetlink.h>
26
27#include "sd-event.h"
28#include "sd-rtnl.h"
29#include "udev.h"
30
31#include "rtnl-util.h"
32#include "hashmap.h"
33#include "list.h"
34
35typedef struct Network Network;
36typedef struct Link Link;
37typedef struct Address Address;
38typedef struct Route Route;
39typedef struct Manager Manager;
40
41struct Network {
42 Manager *manager;
43
44 char *filename;
45
46 struct ether_addr *match_mac;
47 char *match_path;
48 char *match_driver;
49 char *match_type;
50 char *match_name;
51
52 char *description;
53
54 LIST_HEAD(Address, addresses);
55 LIST_HEAD(Route, routes);
56
57 LIST_FIELDS(Network, networks);
58};
59
60struct Address {
61 Network *network;
62
63 unsigned char family;
64 unsigned char prefixlen;
65 char *label;
66
8cd11a0f
TG
67 struct in_addr netmask;
68
f579559b
TG
69 union {
70 struct in_addr in;
71 struct in6_addr in6;
72 } in_addr;
73
74 LIST_FIELDS(Address, addresses);
75};
76
77struct Route {
78 Network *network;
79
80 unsigned char family;
81
82 union {
83 struct in_addr in;
84 struct in6_addr in6;
85 } in_addr;
86
87 LIST_FIELDS(Route, routes);
88};
89
90struct Link {
91 Manager *manager;
92
93 int ifindex;
8cd11a0f 94 struct ether_addr mac;
f579559b
TG
95
96 unsigned flags;
97
98 Network *network;
99};
100
101struct Manager {
102 sd_rtnl *rtnl;
103 sd_event *event;
104 struct udev *udev;
105 struct udev_monitor *udev_monitor;
106 sd_event_source *udev_event_source;
107
108 Hashmap *links;
109 LIST_HEAD(Network, networks);
110
111 char **network_dirs;
112 usec_t network_dirs_ts_usec;
113};
114
115/* Manager */
116
117int manager_new(Manager **ret);
118void manager_free(Manager *m);
119
120int manager_udev_enumerate_links(Manager *m);
121int manager_udev_listen(Manager *m);
122
123DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
124#define _cleanup_manager_free_ _cleanup_(manager_freep)
125
126/* Network */
127
128int network_load(Manager *manager);
129bool network_should_reload(Manager *manager);
130
131void network_free(Network *network);
132
133DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
134#define _cleanup_network_free_ _cleanup_(network_freep)
135
136int network_get(Manager *manager, struct udev_device *device, Network **ret);
137int network_apply(Manager *manager, Network *network, Link *link);
138
139const struct ConfigPerfItem* network_gperf_lookup(const char *key, unsigned length);
140
141/* Route */
142int route_new(Network *network, Route **ret);
143void route_free(Route *route);
144int route_configure(Manager *manager, Route *route, Link *link);
145
146DEFINE_TRIVIAL_CLEANUP_FUNC(Route*, route_free);
147#define _cleanup_route_free_ _cleanup_(route_freep)
148
149int config_parse_gateway(const char *unit, const char *filename, unsigned line,
150 const char *section, const char *lvalue, int ltype,
151 const char *rvalue, void *data, void *userdata);
152
153/* Address */
154int address_new(Network *network, Address **ret);
155void address_free(Address *address);
156int address_configure(Manager *manager, Address *address, Link *link);
157
158DEFINE_TRIVIAL_CLEANUP_FUNC(Address*, address_free);
159#define _cleanup_address_free_ _cleanup_(address_freep)
160
161int config_parse_address(const char *unit, const char *filename, unsigned line,
162 const char *section, const char *lvalue, int ltype,
163 const char *rvalue, void *data, void *userdata);
164
165/* Link */
166
167int link_new(Manager *manager, struct udev_device *device, Link **ret);
168void link_free(Link *link);
169int link_add(Manager *manager, struct udev_device *device);
170int link_up(Manager *manager, Link *link);
171
172DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_free);
173#define _cleanup_link_free_ _cleanup_(link_freep)