mirror of
https://github.com/systemd/systemd.git
synced 2025-03-09 12:58:26 +03:00
networkd: split up networkd.h into per-object header files
No functional changes, just moving definitions into separate header files.
This commit is contained in:
parent
f6b8196f7c
commit
fc2f9534d0
53
Makefile.am
53
Makefile.am
@ -5167,41 +5167,48 @@ libnetworkd_core_la_SOURCES = \
|
||||
src/libsystemd-network/network-internal.h \
|
||||
src/network/networkd.h \
|
||||
src/network/networkd-link.h \
|
||||
src/network/networkd-netdev.h \
|
||||
src/network/networkd-netdev-tunnel.h \
|
||||
src/network/networkd-netdev-veth.h \
|
||||
src/network/networkd-netdev-vxlan.h \
|
||||
src/network/networkd-netdev-vlan.h \
|
||||
src/network/networkd-netdev-macvlan.h \
|
||||
src/network/networkd-netdev-ipvlan.h \
|
||||
src/network/networkd-netdev-dummy.h \
|
||||
src/network/networkd-netdev-tuntap.h \
|
||||
src/network/networkd-netdev-bond.h \
|
||||
src/network/networkd-netdev-bridge.h \
|
||||
src/network/networkd-netdev.c \
|
||||
src/network/networkd-netdev-tunnel.c \
|
||||
src/network/networkd-netdev-veth.c \
|
||||
src/network/networkd-netdev-vxlan.c \
|
||||
src/network/networkd-netdev-vlan.c \
|
||||
src/network/networkd-netdev-macvlan.c \
|
||||
src/network/networkd-netdev-ipvlan.c \
|
||||
src/network/networkd-netdev-dummy.c \
|
||||
src/network/networkd-netdev-tuntap.c \
|
||||
src/network/networkd-netdev-bond.c \
|
||||
src/network/networkd-netdev-bridge.c \
|
||||
src/network/networkd-link.c \
|
||||
src/network/networkd-netdev.h \
|
||||
src/network/networkd-netdev.c \
|
||||
src/network/networkd-netdev-tunnel.h \
|
||||
src/network/networkd-netdev-tunnel.c \
|
||||
src/network/networkd-netdev-veth.h \
|
||||
src/network/networkd-netdev-veth.c \
|
||||
src/network/networkd-netdev-vxlan.h \
|
||||
src/network/networkd-netdev-vxlan.c \
|
||||
src/network/networkd-netdev-vlan.h \
|
||||
src/network/networkd-netdev-vlan.c \
|
||||
src/network/networkd-netdev-macvlan.h \
|
||||
src/network/networkd-netdev-macvlan.c \
|
||||
src/network/networkd-netdev-ipvlan.h \
|
||||
src/network/networkd-netdev-ipvlan.c \
|
||||
src/network/networkd-netdev-dummy.h \
|
||||
src/network/networkd-netdev-dummy.c \
|
||||
src/network/networkd-netdev-tuntap.h \
|
||||
src/network/networkd-netdev-tuntap.c \
|
||||
src/network/networkd-netdev-bond.h \
|
||||
src/network/networkd-netdev-bond.c \
|
||||
src/network/networkd-netdev-bridge.h \
|
||||
src/network/networkd-netdev-bridge.c \
|
||||
src/network/networkd-link-bus.c \
|
||||
src/network/networkd-ipv4ll.c \
|
||||
src/network/networkd-dhcp4.c \
|
||||
src/network/networkd-dhcp6.c \
|
||||
src/network/networkd-network.h \
|
||||
src/network/networkd-network.c \
|
||||
src/network/networkd-network-bus.c \
|
||||
src/network/networkd-address.h \
|
||||
src/network/networkd-address.c \
|
||||
src/network/networkd-route.h \
|
||||
src/network/networkd-route.c \
|
||||
src/network/networkd-manager.c \
|
||||
src/network/networkd-manager-bus.c \
|
||||
src/network/networkd-fdb.h \
|
||||
src/network/networkd-fdb.c \
|
||||
src/network/networkd-address-pool.c
|
||||
src/network/networkd-address-pool.h \
|
||||
src/network/networkd-address-pool.c \
|
||||
src/network/networkd-util.h \
|
||||
src/network/networkd-util.c
|
||||
|
||||
nodist_libnetworkd_core_la_SOURCES = \
|
||||
src/network/networkd-network-gperf.c \
|
||||
|
@ -19,9 +19,8 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-link.h"
|
||||
#include "networkd-address-pool.h"
|
||||
|
||||
int address_pool_new(
|
||||
Manager *m,
|
||||
|
43
src/network/networkd-address-pool.h
Normal file
43
src/network/networkd-address-pool.h
Normal file
@ -0,0 +1,43 @@
|
||||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2014 Lennart Poettering
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
typedef struct AddressPool AddressPool;
|
||||
|
||||
#include "networkd.h"
|
||||
|
||||
struct AddressPool {
|
||||
Manager *manager;
|
||||
|
||||
int family;
|
||||
unsigned prefixlen;
|
||||
|
||||
union in_addr_union in_addr;
|
||||
|
||||
LIST_FIELDS(AddressPool, address_pools);
|
||||
};
|
||||
|
||||
int address_pool_new(Manager *m, AddressPool **ret, int family, const union in_addr_union *u, unsigned prefixlen);
|
||||
int address_pool_new_from_string(Manager *m, AddressPool **ret, int family, const char *p, unsigned prefixlen);
|
||||
void address_pool_free(AddressPool *p);
|
||||
|
||||
int address_pool_acquire(AddressPool *p, unsigned prefixlen, union in_addr_union *found);
|
@ -25,8 +25,10 @@
|
||||
#include "util.h"
|
||||
#include "conf-parser.h"
|
||||
#include "firewall-util.h"
|
||||
#include "netlink-util.h"
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-link.h"
|
||||
#include "networkd-address.h"
|
||||
|
||||
static void address_init(Address *address) {
|
||||
assert(address);
|
||||
|
73
src/network/networkd-address.h
Normal file
73
src/network/networkd-address.h
Normal file
@ -0,0 +1,73 @@
|
||||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2013 Tom Gundersen <teg@jklm.no>
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "in-addr-util.h"
|
||||
|
||||
typedef struct Address Address;
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-network.h"
|
||||
#include "networkd-link.h"
|
||||
|
||||
#define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU
|
||||
|
||||
struct Address {
|
||||
Network *network;
|
||||
unsigned section;
|
||||
|
||||
int family;
|
||||
unsigned char prefixlen;
|
||||
unsigned char scope;
|
||||
uint32_t flags;
|
||||
char *label;
|
||||
|
||||
struct in_addr broadcast;
|
||||
struct ifa_cacheinfo cinfo;
|
||||
|
||||
union in_addr_union in_addr;
|
||||
union in_addr_union in_addr_peer;
|
||||
|
||||
bool ip_masquerade_done;
|
||||
|
||||
LIST_FIELDS(Address, addresses);
|
||||
};
|
||||
|
||||
int address_new_static(Network *network, unsigned section, Address **ret);
|
||||
int address_new_dynamic(Address **ret);
|
||||
void address_free(Address *address);
|
||||
int address_configure(Address *address, Link *link, sd_netlink_message_handler_t callback);
|
||||
int address_update(Address *address, Link *link, sd_netlink_message_handler_t callback);
|
||||
int address_drop(Address *address, Link *link, sd_netlink_message_handler_t callback);
|
||||
int address_establish(Address *address, Link *link);
|
||||
int address_release(Address *address, Link *link);
|
||||
bool address_equal(Address *a1, Address *a2);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(Address*, address_free);
|
||||
#define _cleanup_address_free_ _cleanup_(address_freep)
|
||||
|
||||
int config_parse_address(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_broadcast(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_label(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
@ -22,10 +22,12 @@
|
||||
#include <net/if.h>
|
||||
#include <net/ethernet.h>
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-link.h"
|
||||
#include "conf-parser.h"
|
||||
#include "util.h"
|
||||
#include "netlink-util.h"
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-fdb.h"
|
||||
|
||||
/* create a new FDB entry or get an existing one. */
|
||||
int fdb_entry_new_static(Network *const network,
|
||||
|
47
src/network/networkd-fdb.h
Normal file
47
src/network/networkd-fdb.h
Normal file
@ -0,0 +1,47 @@
|
||||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright (C) 2014 Intel Corporation. All rights reserved.
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
typedef struct FdbEntry FdbEntry;
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-network.h"
|
||||
|
||||
struct FdbEntry {
|
||||
Network *network;
|
||||
unsigned section;
|
||||
|
||||
struct ether_addr *mac_addr;
|
||||
uint16_t vlan_id;
|
||||
|
||||
LIST_FIELDS(FdbEntry, static_fdb_entries);
|
||||
};
|
||||
|
||||
int fdb_entry_new_static(Network *const network, const unsigned section, FdbEntry **ret);
|
||||
void fdb_entry_free(FdbEntry *fdb_entry);
|
||||
int fdb_entry_configure(Link *const link, FdbEntry *const fdb_entry);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(FdbEntry*, fdb_entry_free);
|
||||
#define _cleanup_fdbentry_free_ _cleanup_(fdb_entry_freep)
|
||||
|
||||
int config_parse_fdb_hwaddr(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_fdb_vlan_id(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
@ -29,8 +29,10 @@
|
||||
#include "socket-util.h"
|
||||
#include "bus-util.h"
|
||||
#include "udev-util.h"
|
||||
#include "netlink-util.h"
|
||||
#include "dhcp-lease-internal.h"
|
||||
#include "network-internal.h"
|
||||
|
||||
#include "networkd-link.h"
|
||||
#include "networkd-netdev.h"
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
@ -19,11 +21,16 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <endian.h>
|
||||
|
||||
#include "networkd.h"
|
||||
#include "sd-dhcp-client.h"
|
||||
#include "sd-dhcp-server.h"
|
||||
#include "sd-ipv4ll.h"
|
||||
#include "sd-icmp6-nd.h"
|
||||
#include "sd-dhcp6-client.h"
|
||||
#include "sd-lldp.h"
|
||||
|
||||
typedef struct Link Link;
|
||||
|
||||
typedef enum LinkState {
|
||||
LINK_STATE_PENDING,
|
||||
@ -38,6 +45,21 @@ typedef enum LinkState {
|
||||
_LINK_STATE_INVALID = -1
|
||||
} LinkState;
|
||||
|
||||
typedef enum LinkOperationalState {
|
||||
LINK_OPERSTATE_OFF,
|
||||
LINK_OPERSTATE_NO_CARRIER,
|
||||
LINK_OPERSTATE_DORMANT,
|
||||
LINK_OPERSTATE_CARRIER,
|
||||
LINK_OPERSTATE_DEGRADED,
|
||||
LINK_OPERSTATE_ROUTABLE,
|
||||
_LINK_OPERSTATE_MAX,
|
||||
_LINK_OPERSTATE_INVALID = -1
|
||||
} LinkOperationalState;
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-network.h"
|
||||
#include "networkd-address.h"
|
||||
|
||||
struct Link {
|
||||
Manager *manager;
|
||||
|
||||
@ -131,6 +153,9 @@ bool link_dhcp6_enabled(Link *link);
|
||||
const char* link_state_to_string(LinkState s) _const_;
|
||||
LinkState link_state_from_string(const char *s) _pure_;
|
||||
|
||||
const char* link_operstate_to_string(LinkOperationalState s) _const_;
|
||||
LinkOperationalState link_operstate_from_string(const char *s) _pure_;
|
||||
|
||||
extern const sd_bus_vtable link_vtable[];
|
||||
|
||||
int link_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
|
||||
|
@ -22,20 +22,20 @@
|
||||
#include <sys/socket.h>
|
||||
#include <linux/if.h>
|
||||
|
||||
#include "sd-netlink.h"
|
||||
#include "sd-daemon.h"
|
||||
|
||||
#include "conf-parser.h"
|
||||
#include "path-util.h"
|
||||
#include "networkd.h"
|
||||
#include "networkd-netdev.h"
|
||||
#include "networkd-link.h"
|
||||
#include "libudev-private.h"
|
||||
#include "udev-util.h"
|
||||
#include "netlink-util.h"
|
||||
#include "bus-util.h"
|
||||
#include "def.h"
|
||||
#include "virt.h"
|
||||
#include "set.h"
|
||||
|
||||
#include "sd-netlink.h"
|
||||
#include "sd-daemon.h"
|
||||
#include "networkd.h"
|
||||
|
||||
/* use 8 MB for receive socket kernel queue. */
|
||||
#define RCVBUF_SIZE (8*1024*1024)
|
||||
@ -845,37 +845,3 @@ int manager_address_pool_acquire(Manager *m, int family, unsigned prefixlen, uni
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *address_family_boolean_to_string(AddressFamilyBoolean b) {
|
||||
if (b == ADDRESS_FAMILY_YES ||
|
||||
b == ADDRESS_FAMILY_NO)
|
||||
return yes_no(b == ADDRESS_FAMILY_YES);
|
||||
|
||||
if (b == ADDRESS_FAMILY_IPV4)
|
||||
return "ipv4";
|
||||
if (b == ADDRESS_FAMILY_IPV6)
|
||||
return "ipv6";
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
AddressFamilyBoolean address_family_boolean_from_string(const char *s) {
|
||||
int r;
|
||||
|
||||
/* Make this a true superset of a boolean */
|
||||
|
||||
r = parse_boolean(s);
|
||||
if (r > 0)
|
||||
return ADDRESS_FAMILY_YES;
|
||||
if (r == 0)
|
||||
return ADDRESS_FAMILY_NO;
|
||||
|
||||
if (streq(s, "ipv4"))
|
||||
return ADDRESS_FAMILY_IPV4;
|
||||
if (streq(s, "ipv6"))
|
||||
return ADDRESS_FAMILY_IPV6;
|
||||
|
||||
return _ADDRESS_FAMILY_BOOLEAN_INVALID;
|
||||
}
|
||||
|
||||
DEFINE_CONFIG_PARSE_ENUM(config_parse_address_family_boolean, address_family_boolean, AddressFamilyBoolean, "Failed to parse option");
|
||||
|
@ -1,5 +1,7 @@
|
||||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
@ -19,7 +21,7 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#pragma once
|
||||
#include "in-addr-util.h"
|
||||
|
||||
typedef struct Bond Bond;
|
||||
|
||||
|
@ -21,15 +21,18 @@
|
||||
|
||||
#include <net/if.h>
|
||||
|
||||
#include "networkd-netdev.h"
|
||||
#include "networkd-link.h"
|
||||
#include "network-internal.h"
|
||||
#include "conf-files.h"
|
||||
#include "conf-parser.h"
|
||||
#include "list.h"
|
||||
#include "siphash24.h"
|
||||
#include "netlink-util.h"
|
||||
#include "network-internal.h"
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-netdev.h"
|
||||
|
||||
const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX] = {
|
||||
|
||||
[NETDEV_KIND_BRIDGE] = &bridge_vtable,
|
||||
[NETDEV_KIND_BOND] = &bond_vtable,
|
||||
[NETDEV_KIND_VLAN] = &vlan_vtable,
|
||||
|
@ -21,11 +21,14 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "networkd.h"
|
||||
#include "list.h"
|
||||
|
||||
typedef struct NetDev NetDev;
|
||||
typedef struct NetDevVTable NetDevVTable;
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-link.h"
|
||||
|
||||
typedef struct netdev_join_callback netdev_join_callback;
|
||||
|
||||
struct netdev_join_callback {
|
||||
|
@ -26,11 +26,11 @@
|
||||
#include "conf-parser.h"
|
||||
#include "util.h"
|
||||
#include "hostname-util.h"
|
||||
#include "networkd.h"
|
||||
#include "networkd-netdev.h"
|
||||
#include "networkd-link.h"
|
||||
#include "network-internal.h"
|
||||
#include "dns-domain.h"
|
||||
#include "network-internal.h"
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-network.h"
|
||||
|
||||
static int network_load_one(Manager *manager, const char *filename) {
|
||||
_cleanup_network_free_ Network *network = NULL;
|
||||
@ -635,57 +635,6 @@ static const char* const dhcp_client_identifier_table[_DHCP_CLIENT_ID_MAX] = {
|
||||
DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(dhcp_client_identifier, DCHPClientIdentifier);
|
||||
DEFINE_CONFIG_PARSE_ENUM(config_parse_dhcp_client_identifier, dhcp_client_identifier, DCHPClientIdentifier, "Failed to parse client identifier type");
|
||||
|
||||
static const char* const resolve_support_table[_RESOLVE_SUPPORT_MAX] = {
|
||||
[RESOLVE_SUPPORT_NO] = "no",
|
||||
[RESOLVE_SUPPORT_YES] = "yes",
|
||||
[RESOLVE_SUPPORT_RESOLVE] = "resolve",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP(resolve_support, ResolveSupport);
|
||||
|
||||
int config_parse_resolve(
|
||||
const char* unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
unsigned section_line,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
ResolveSupport *resolve = data;
|
||||
int k;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(resolve);
|
||||
|
||||
/* Our enum shall be a superset of booleans, hence first try
|
||||
* to parse as boolean, and then as enum */
|
||||
|
||||
k = parse_boolean(rvalue);
|
||||
if (k > 0)
|
||||
*resolve = RESOLVE_SUPPORT_YES;
|
||||
else if (k == 0)
|
||||
*resolve = RESOLVE_SUPPORT_NO;
|
||||
else {
|
||||
ResolveSupport s;
|
||||
|
||||
s = resolve_support_from_string(rvalue);
|
||||
if (s < 0){
|
||||
log_syntax(unit, LOG_ERR, filename, line, -s, "Failed to parse %s option, ignoring: %s", lvalue, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
*resolve = s;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_ipv6token(
|
||||
const char* unit,
|
||||
const char *filename,
|
||||
@ -729,40 +678,6 @@ int config_parse_ipv6token(
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_address_family_boolean_with_kernel(
|
||||
const char* unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
unsigned section_line,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
AddressFamilyBoolean *fwd = data, s;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(data);
|
||||
|
||||
s = address_family_boolean_from_string(rvalue);
|
||||
if (s < 0) {
|
||||
if (streq(rvalue, "kernel"))
|
||||
s = _ADDRESS_FAMILY_BOOLEAN_INVALID;
|
||||
else {
|
||||
log_syntax(unit, LOG_ERR, filename, line, s, "Failed to parse IPForwarding option, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
*fwd = s;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char* const ipv6_privacy_extensions_table[_IPV6_PRIVACY_EXTENSIONS_MAX] = {
|
||||
[IPV6_PRIVACY_EXTENSIONS_NO] = "no",
|
||||
[IPV6_PRIVACY_EXTENSIONS_PREFER_PUBLIC] = "prefer-public",
|
||||
|
171
src/network/networkd-network.h
Normal file
171
src/network/networkd-network.h
Normal file
@ -0,0 +1,171 @@
|
||||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2013 Tom Gundersen <teg@jklm.no>
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include "condition.h"
|
||||
|
||||
typedef struct Network Network;
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-netdev.h"
|
||||
#include "networkd-address.h"
|
||||
#include "networkd-route.h"
|
||||
#include "networkd-fdb.h"
|
||||
#include "networkd-util.h"
|
||||
|
||||
#define DHCP_ROUTE_METRIC 1024
|
||||
#define IPV4LL_ROUTE_METRIC 2048
|
||||
|
||||
typedef enum DCHPClientIdentifier {
|
||||
DHCP_CLIENT_ID_MAC,
|
||||
DHCP_CLIENT_ID_DUID,
|
||||
_DHCP_CLIENT_ID_MAX,
|
||||
_DHCP_CLIENT_ID_INVALID = -1,
|
||||
} DCHPClientIdentifier;
|
||||
|
||||
typedef enum IPv6PrivacyExtensions {
|
||||
/* The values map to the kernel's /proc/sys/net/ipv6/conf/xxx/use_tempaddr values */
|
||||
IPV6_PRIVACY_EXTENSIONS_NO,
|
||||
IPV6_PRIVACY_EXTENSIONS_PREFER_PUBLIC,
|
||||
IPV6_PRIVACY_EXTENSIONS_YES, /* aka prefer-temporary */
|
||||
_IPV6_PRIVACY_EXTENSIONS_MAX,
|
||||
_IPV6_PRIVACY_EXTENSIONS_INVALID = -1,
|
||||
} IPv6PrivacyExtensions;
|
||||
|
||||
struct Network {
|
||||
Manager *manager;
|
||||
|
||||
char *filename;
|
||||
char *name;
|
||||
|
||||
struct ether_addr *match_mac;
|
||||
char **match_path;
|
||||
char **match_driver;
|
||||
char **match_type;
|
||||
char **match_name;
|
||||
|
||||
Condition *match_host;
|
||||
Condition *match_virt;
|
||||
Condition *match_kernel;
|
||||
Condition *match_arch;
|
||||
|
||||
char *description;
|
||||
|
||||
NetDev *bridge;
|
||||
NetDev *bond;
|
||||
Hashmap *stacked_netdevs;
|
||||
|
||||
/* DHCP Client Support */
|
||||
AddressFamilyBoolean dhcp;
|
||||
DCHPClientIdentifier dhcp_client_identifier;
|
||||
char *dhcp_vendor_class_identifier;
|
||||
char *hostname;
|
||||
bool dhcp_dns;
|
||||
bool dhcp_ntp;
|
||||
bool dhcp_mtu;
|
||||
bool dhcp_hostname;
|
||||
bool dhcp_domains;
|
||||
bool dhcp_sendhost;
|
||||
bool dhcp_broadcast;
|
||||
bool dhcp_critical;
|
||||
bool dhcp_routes;
|
||||
bool dhcp_timezone;
|
||||
unsigned dhcp_route_metric;
|
||||
|
||||
/* DHCP Server Support */
|
||||
bool dhcp_server;
|
||||
char *dhcp_server_timezone;
|
||||
bool dhcp_server_emit_timezone;
|
||||
usec_t dhcp_server_default_lease_time_usec, dhcp_server_max_lease_time_usec;
|
||||
|
||||
/* IPV4LL Support */
|
||||
AddressFamilyBoolean link_local;
|
||||
bool ipv4ll_route;
|
||||
|
||||
/* Bridge Support */
|
||||
bool use_bpdu;
|
||||
bool hairpin;
|
||||
bool fast_leave;
|
||||
bool allow_port_to_be_root;
|
||||
bool unicast_flood;
|
||||
unsigned cost;
|
||||
|
||||
AddressFamilyBoolean ip_forward;
|
||||
bool ip_masquerade;
|
||||
|
||||
union in_addr_union ipv6_token;
|
||||
IPv6PrivacyExtensions ipv6_privacy_extensions;
|
||||
|
||||
struct ether_addr *mac;
|
||||
unsigned mtu;
|
||||
|
||||
bool lldp;
|
||||
|
||||
LIST_HEAD(Address, static_addresses);
|
||||
LIST_HEAD(Route, static_routes);
|
||||
LIST_HEAD(FdbEntry, static_fdb_entries);
|
||||
|
||||
Hashmap *addresses_by_section;
|
||||
Hashmap *routes_by_section;
|
||||
Hashmap *fdb_entries_by_section;
|
||||
|
||||
bool wildcard_domain;
|
||||
char **domains, **dns, **ntp, **bind_carrier;
|
||||
|
||||
ResolveSupport llmnr;
|
||||
|
||||
LIST_FIELDS(Network, networks);
|
||||
};
|
||||
|
||||
void network_free(Network *network);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
|
||||
#define _cleanup_network_free_ _cleanup_(network_freep)
|
||||
|
||||
int network_load(Manager *manager);
|
||||
|
||||
int network_get_by_name(Manager *manager, const char *name, Network **ret);
|
||||
int network_get(Manager *manager, struct udev_device *device, const char *ifname, const struct ether_addr *mac, Network **ret);
|
||||
int network_apply(Manager *manager, Network *network, Link *link);
|
||||
|
||||
int config_parse_netdev(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_domains(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_tunnel(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_dhcp(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_dhcp_client_identifier(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_ipv6token(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_ipv6_privacy_extensions(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_hostname(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_timezone(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
/* Legacy IPv4LL support */
|
||||
int config_parse_ipv4ll(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, unsigned length);
|
||||
|
||||
extern const sd_bus_vtable network_vtable[];
|
||||
|
||||
int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
|
||||
int network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
|
||||
|
||||
const char* ipv6_privacy_extensions_to_string(IPv6PrivacyExtensions i) _const_;
|
||||
IPv6PrivacyExtensions ipv6_privacy_extensions_from_string(const char *s) _pure_;
|
@ -19,12 +19,12 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-link.h"
|
||||
|
||||
#include "util.h"
|
||||
#include "conf-parser.h"
|
||||
#include "netlink-util.h"
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-route.h"
|
||||
|
||||
int route_new_static(Network *network, unsigned section, Route **ret) {
|
||||
_cleanup_route_free_ Route *route = NULL;
|
||||
|
60
src/network/networkd-route.h
Normal file
60
src/network/networkd-route.h
Normal file
@ -0,0 +1,60 @@
|
||||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2013 Tom Gundersen <teg@jklm.no>
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
typedef struct Route Route;
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-network.h"
|
||||
|
||||
struct Route {
|
||||
Network *network;
|
||||
unsigned section;
|
||||
|
||||
int family;
|
||||
unsigned char dst_prefixlen;
|
||||
unsigned char src_prefixlen;
|
||||
unsigned char scope;
|
||||
uint32_t metrics;
|
||||
unsigned char protocol; /* RTPROT_* */
|
||||
|
||||
union in_addr_union in_addr;
|
||||
union in_addr_union dst_addr;
|
||||
union in_addr_union src_addr;
|
||||
union in_addr_union prefsrc_addr;
|
||||
|
||||
LIST_FIELDS(Route, routes);
|
||||
};
|
||||
|
||||
int route_new_static(Network *network, unsigned section, Route **ret);
|
||||
int route_new_dynamic(Route **ret, unsigned char rtm_protocol);
|
||||
void route_free(Route *route);
|
||||
int route_configure(Route *route, Link *link, sd_netlink_message_handler_t callback);
|
||||
int route_drop(Route *route, Link *link, sd_netlink_message_handler_t callback);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(Route*, route_free);
|
||||
#define _cleanup_route_free_ _cleanup_(route_freep)
|
||||
|
||||
int config_parse_gateway(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_destination(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_route_priority(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_route_scope(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
144
src/network/networkd-util.c
Normal file
144
src/network/networkd-util.c
Normal file
@ -0,0 +1,144 @@
|
||||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2013 Tom Gundersen <teg@jklm.no>
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include "util.h"
|
||||
#include "conf-parser.h"
|
||||
|
||||
#include "networkd-util.h"
|
||||
|
||||
const char *address_family_boolean_to_string(AddressFamilyBoolean b) {
|
||||
if (b == ADDRESS_FAMILY_YES ||
|
||||
b == ADDRESS_FAMILY_NO)
|
||||
return yes_no(b == ADDRESS_FAMILY_YES);
|
||||
|
||||
if (b == ADDRESS_FAMILY_IPV4)
|
||||
return "ipv4";
|
||||
if (b == ADDRESS_FAMILY_IPV6)
|
||||
return "ipv6";
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
AddressFamilyBoolean address_family_boolean_from_string(const char *s) {
|
||||
int r;
|
||||
|
||||
/* Make this a true superset of a boolean */
|
||||
|
||||
r = parse_boolean(s);
|
||||
if (r > 0)
|
||||
return ADDRESS_FAMILY_YES;
|
||||
if (r == 0)
|
||||
return ADDRESS_FAMILY_NO;
|
||||
|
||||
if (streq(s, "ipv4"))
|
||||
return ADDRESS_FAMILY_IPV4;
|
||||
if (streq(s, "ipv6"))
|
||||
return ADDRESS_FAMILY_IPV6;
|
||||
|
||||
return _ADDRESS_FAMILY_BOOLEAN_INVALID;
|
||||
}
|
||||
|
||||
DEFINE_CONFIG_PARSE_ENUM(config_parse_address_family_boolean, address_family_boolean, AddressFamilyBoolean, "Failed to parse option");
|
||||
|
||||
int config_parse_address_family_boolean_with_kernel(
|
||||
const char* unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
unsigned section_line,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
AddressFamilyBoolean *fwd = data, s;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(data);
|
||||
|
||||
s = address_family_boolean_from_string(rvalue);
|
||||
if (s < 0) {
|
||||
if (streq(rvalue, "kernel"))
|
||||
s = _ADDRESS_FAMILY_BOOLEAN_INVALID;
|
||||
else {
|
||||
log_syntax(unit, LOG_ERR, filename, line, s, "Failed to parse IPForwarding= option, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
*fwd = s;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char* const resolve_support_table[_RESOLVE_SUPPORT_MAX] = {
|
||||
[RESOLVE_SUPPORT_NO] = "no",
|
||||
[RESOLVE_SUPPORT_YES] = "yes",
|
||||
[RESOLVE_SUPPORT_RESOLVE] = "resolve",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP(resolve_support, ResolveSupport);
|
||||
|
||||
int config_parse_resolve(
|
||||
const char* unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
unsigned section_line,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
ResolveSupport *resolve = data;
|
||||
int k;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(resolve);
|
||||
|
||||
/* Our enum shall be a superset of booleans, hence first try
|
||||
* to parse as boolean, and then as enum */
|
||||
|
||||
k = parse_boolean(rvalue);
|
||||
if (k > 0)
|
||||
*resolve = RESOLVE_SUPPORT_YES;
|
||||
else if (k == 0)
|
||||
*resolve = RESOLVE_SUPPORT_NO;
|
||||
else {
|
||||
ResolveSupport s;
|
||||
|
||||
s = resolve_support_from_string(rvalue);
|
||||
if (s < 0){
|
||||
log_syntax(unit, LOG_ERR, filename, line, -s, "Failed to parse %s= option, ignoring: %s", lvalue, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
*resolve = s;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
52
src/network/networkd-util.h
Normal file
52
src/network/networkd-util.h
Normal file
@ -0,0 +1,52 @@
|
||||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2013 Tom Gundersen <teg@jklm.no>
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include "macro.h"
|
||||
|
||||
typedef enum AddressFamilyBoolean {
|
||||
/* This is a bitmask, though it usually doesn't feel that way! */
|
||||
ADDRESS_FAMILY_NO = 0,
|
||||
ADDRESS_FAMILY_IPV4 = 1,
|
||||
ADDRESS_FAMILY_IPV6 = 2,
|
||||
ADDRESS_FAMILY_YES = 3,
|
||||
_ADDRESS_FAMILY_BOOLEAN_MAX,
|
||||
_ADDRESS_FAMILY_BOOLEAN_INVALID = -1,
|
||||
} AddressFamilyBoolean;
|
||||
|
||||
typedef enum ResolveSupport {
|
||||
RESOLVE_SUPPORT_NO,
|
||||
RESOLVE_SUPPORT_YES,
|
||||
RESOLVE_SUPPORT_RESOLVE,
|
||||
_RESOLVE_SUPPORT_MAX,
|
||||
_RESOLVE_SUPPORT_INVALID = -1,
|
||||
} ResolveSupport;
|
||||
|
||||
int config_parse_resolve(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_address_family_boolean(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_address_family_boolean_with_kernel(const char* unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
const char* resolve_support_to_string(ResolveSupport i) _const_;
|
||||
ResolveSupport resolve_support_from_string(const char *s) _pure_;
|
||||
|
||||
const char *address_family_boolean_to_string(AddressFamilyBoolean b) _const_;
|
||||
AddressFamilyBoolean address_family_boolean_from_string(const char *s) _const_;
|
@ -26,217 +26,17 @@
|
||||
#include "sd-event.h"
|
||||
#include "sd-netlink.h"
|
||||
#include "sd-bus.h"
|
||||
#include "sd-dhcp-client.h"
|
||||
#include "sd-dhcp-server.h"
|
||||
#include "sd-ipv4ll.h"
|
||||
#include "sd-icmp6-nd.h"
|
||||
#include "sd-dhcp6-client.h"
|
||||
#include "udev.h"
|
||||
#include "sd-lldp.h"
|
||||
|
||||
#include "netlink-util.h"
|
||||
#include "hashmap.h"
|
||||
#include "list.h"
|
||||
#include "set.h"
|
||||
#include "condition.h"
|
||||
#include "in-addr-util.h"
|
||||
|
||||
#define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU
|
||||
#define DHCP_ROUTE_METRIC 1024
|
||||
#define IPV4LL_ROUTE_METRIC 2048
|
||||
|
||||
typedef struct NetDev NetDev;
|
||||
typedef struct Network Network;
|
||||
typedef struct Link Link;
|
||||
typedef struct Address Address;
|
||||
typedef struct Route Route;
|
||||
typedef struct Manager Manager;
|
||||
typedef struct AddressPool AddressPool;
|
||||
typedef struct FdbEntry FdbEntry;
|
||||
|
||||
typedef enum AddressFamilyBoolean {
|
||||
/* This is a bitmask, though it usually doesn't feel that way! */
|
||||
ADDRESS_FAMILY_NO = 0,
|
||||
ADDRESS_FAMILY_IPV4 = 1,
|
||||
ADDRESS_FAMILY_IPV6 = 2,
|
||||
ADDRESS_FAMILY_YES = 3,
|
||||
_ADDRESS_FAMILY_BOOLEAN_MAX,
|
||||
_ADDRESS_FAMILY_BOOLEAN_INVALID = -1,
|
||||
} AddressFamilyBoolean;
|
||||
|
||||
typedef enum ResolveSupport {
|
||||
RESOLVE_SUPPORT_NO,
|
||||
RESOLVE_SUPPORT_YES,
|
||||
RESOLVE_SUPPORT_RESOLVE,
|
||||
_RESOLVE_SUPPORT_MAX,
|
||||
_RESOLVE_SUPPORT_INVALID = -1,
|
||||
} ResolveSupport;
|
||||
|
||||
typedef enum LinkOperationalState {
|
||||
LINK_OPERSTATE_OFF,
|
||||
LINK_OPERSTATE_NO_CARRIER,
|
||||
LINK_OPERSTATE_DORMANT,
|
||||
LINK_OPERSTATE_CARRIER,
|
||||
LINK_OPERSTATE_DEGRADED,
|
||||
LINK_OPERSTATE_ROUTABLE,
|
||||
_LINK_OPERSTATE_MAX,
|
||||
_LINK_OPERSTATE_INVALID = -1
|
||||
} LinkOperationalState;
|
||||
|
||||
typedef enum DCHPClientIdentifier {
|
||||
DHCP_CLIENT_ID_MAC,
|
||||
DHCP_CLIENT_ID_DUID,
|
||||
_DHCP_CLIENT_ID_MAX,
|
||||
_DHCP_CLIENT_ID_INVALID = -1,
|
||||
} DCHPClientIdentifier;
|
||||
|
||||
typedef enum IPv6PrivacyExtensions {
|
||||
/* The values map to the kernel's /proc/sys/net/ipv6/conf/xxx/use_tempaddr values */
|
||||
IPV6_PRIVACY_EXTENSIONS_NO,
|
||||
IPV6_PRIVACY_EXTENSIONS_PREFER_PUBLIC,
|
||||
IPV6_PRIVACY_EXTENSIONS_YES, /* aka prefer-temporary */
|
||||
_IPV6_PRIVACY_EXTENSIONS_MAX,
|
||||
_IPV6_PRIVACY_EXTENSIONS_INVALID = -1,
|
||||
} IPv6PrivacyExtensions;
|
||||
|
||||
struct FdbEntry {
|
||||
Network *network;
|
||||
unsigned section;
|
||||
|
||||
struct ether_addr *mac_addr;
|
||||
uint16_t vlan_id;
|
||||
|
||||
LIST_FIELDS(FdbEntry, static_fdb_entries);
|
||||
};
|
||||
|
||||
struct Network {
|
||||
Manager *manager;
|
||||
|
||||
char *filename;
|
||||
char *name;
|
||||
|
||||
struct ether_addr *match_mac;
|
||||
char **match_path;
|
||||
char **match_driver;
|
||||
char **match_type;
|
||||
char **match_name;
|
||||
|
||||
Condition *match_host;
|
||||
Condition *match_virt;
|
||||
Condition *match_kernel;
|
||||
Condition *match_arch;
|
||||
|
||||
char *description;
|
||||
NetDev *bridge;
|
||||
NetDev *bond;
|
||||
Hashmap *stacked_netdevs;
|
||||
AddressFamilyBoolean dhcp;
|
||||
DCHPClientIdentifier dhcp_client_identifier;
|
||||
char *dhcp_vendor_class_identifier;
|
||||
char *hostname;
|
||||
bool dhcp_dns;
|
||||
bool dhcp_ntp;
|
||||
bool dhcp_mtu;
|
||||
bool dhcp_hostname;
|
||||
bool dhcp_domains;
|
||||
bool dhcp_sendhost;
|
||||
bool dhcp_broadcast;
|
||||
bool dhcp_critical;
|
||||
bool dhcp_routes;
|
||||
bool dhcp_timezone;
|
||||
unsigned dhcp_route_metric;
|
||||
AddressFamilyBoolean link_local;
|
||||
bool ipv4ll_route;
|
||||
union in_addr_union ipv6_token;
|
||||
|
||||
bool dhcp_server;
|
||||
char *dhcp_server_timezone;
|
||||
bool dhcp_server_emit_timezone;
|
||||
usec_t dhcp_server_default_lease_time_usec, dhcp_server_max_lease_time_usec;
|
||||
|
||||
bool use_bpdu;
|
||||
bool hairpin;
|
||||
bool fast_leave;
|
||||
bool allow_port_to_be_root;
|
||||
bool unicast_flood;
|
||||
unsigned cost;
|
||||
|
||||
AddressFamilyBoolean ip_forward;
|
||||
bool ip_masquerade;
|
||||
|
||||
IPv6PrivacyExtensions ipv6_privacy_extensions;
|
||||
|
||||
struct ether_addr *mac;
|
||||
unsigned mtu;
|
||||
|
||||
bool lldp;
|
||||
|
||||
LIST_HEAD(Address, static_addresses);
|
||||
LIST_HEAD(Route, static_routes);
|
||||
LIST_HEAD(FdbEntry, static_fdb_entries);
|
||||
|
||||
Hashmap *addresses_by_section;
|
||||
Hashmap *routes_by_section;
|
||||
Hashmap *fdb_entries_by_section;
|
||||
|
||||
bool wildcard_domain;
|
||||
char **domains, **dns, **ntp, **bind_carrier;
|
||||
|
||||
ResolveSupport llmnr;
|
||||
|
||||
LIST_FIELDS(Network, networks);
|
||||
};
|
||||
|
||||
struct Address {
|
||||
Network *network;
|
||||
unsigned section;
|
||||
|
||||
int family;
|
||||
unsigned char prefixlen;
|
||||
unsigned char scope;
|
||||
uint32_t flags;
|
||||
char *label;
|
||||
|
||||
struct in_addr broadcast;
|
||||
struct ifa_cacheinfo cinfo;
|
||||
|
||||
union in_addr_union in_addr;
|
||||
union in_addr_union in_addr_peer;
|
||||
|
||||
bool ip_masquerade_done;
|
||||
|
||||
LIST_FIELDS(Address, addresses);
|
||||
};
|
||||
|
||||
struct Route {
|
||||
Network *network;
|
||||
unsigned section;
|
||||
|
||||
int family;
|
||||
unsigned char dst_prefixlen;
|
||||
unsigned char src_prefixlen;
|
||||
unsigned char scope;
|
||||
uint32_t metrics;
|
||||
unsigned char protocol; /* RTPROT_* */
|
||||
|
||||
union in_addr_union in_addr;
|
||||
union in_addr_union dst_addr;
|
||||
union in_addr_union src_addr;
|
||||
union in_addr_union prefsrc_addr;
|
||||
|
||||
LIST_FIELDS(Route, routes);
|
||||
};
|
||||
|
||||
struct AddressPool {
|
||||
Manager *manager;
|
||||
|
||||
int family;
|
||||
unsigned prefixlen;
|
||||
|
||||
union in_addr_union in_addr;
|
||||
|
||||
LIST_FIELDS(AddressPool, address_pools);
|
||||
};
|
||||
#include "networkd-network.h"
|
||||
#include "networkd-address-pool.h"
|
||||
#include "networkd-link.h"
|
||||
#include "networkd-util.h"
|
||||
|
||||
struct Manager {
|
||||
sd_netlink *rtnl;
|
||||
@ -287,183 +87,3 @@ int manager_address_pool_acquire(Manager *m, int family, unsigned prefixlen, uni
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
|
||||
#define _cleanup_manager_free_ _cleanup_(manager_freep)
|
||||
|
||||
/* Network */
|
||||
|
||||
int network_load(Manager *manager);
|
||||
|
||||
void network_free(Network *network);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
|
||||
#define _cleanup_network_free_ _cleanup_(network_freep)
|
||||
|
||||
int network_get_by_name(Manager *manager, const char *name, Network **ret);
|
||||
int network_get(Manager *manager, struct udev_device *device,
|
||||
const char *ifname, const struct ether_addr *mac,
|
||||
Network **ret);
|
||||
int network_apply(Manager *manager, Network *network, Link *link);
|
||||
|
||||
int config_parse_netdev(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
int config_parse_domains(const char *unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
unsigned section_line,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata);
|
||||
|
||||
int config_parse_tunnel(const char *unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
unsigned section_line,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata);
|
||||
|
||||
extern const sd_bus_vtable network_vtable[];
|
||||
|
||||
int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
|
||||
int network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
|
||||
|
||||
/* gperf */
|
||||
const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, unsigned length);
|
||||
|
||||
/* Route */
|
||||
int route_new_static(Network *network, unsigned section, Route **ret);
|
||||
int route_new_dynamic(Route **ret, unsigned char rtm_protocol);
|
||||
void route_free(Route *route);
|
||||
int route_configure(Route *route, Link *link, sd_netlink_message_handler_t callback);
|
||||
int route_drop(Route *route, Link *link, sd_netlink_message_handler_t callback);
|
||||
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(Route*, route_free);
|
||||
#define _cleanup_route_free_ _cleanup_(route_freep)
|
||||
|
||||
int config_parse_gateway(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
int config_parse_destination(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
int config_parse_route_priority(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
int config_parse_route_scope(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
/* Address */
|
||||
int address_new_static(Network *network, unsigned section, Address **ret);
|
||||
int address_new_dynamic(Address **ret);
|
||||
void address_free(Address *address);
|
||||
int address_configure(Address *address, Link *link, sd_netlink_message_handler_t callback);
|
||||
int address_update(Address *address, Link *link, sd_netlink_message_handler_t callback);
|
||||
int address_drop(Address *address, Link *link, sd_netlink_message_handler_t callback);
|
||||
int address_establish(Address *address, Link *link);
|
||||
int address_release(Address *address, Link *link);
|
||||
bool address_equal(Address *a1, Address *a2);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(Address*, address_free);
|
||||
#define _cleanup_address_free_ _cleanup_(address_freep)
|
||||
|
||||
int config_parse_address(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
int config_parse_broadcast(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
int config_parse_label(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
/* Forwarding database table. */
|
||||
int fdb_entry_configure(Link *const link, FdbEntry *const fdb_entry);
|
||||
void fdb_entry_free(FdbEntry *fdb_entry);
|
||||
int fdb_entry_new_static(Network *const network, const unsigned section, FdbEntry **ret);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(FdbEntry*, fdb_entry_free);
|
||||
#define _cleanup_fdbentry_free_ _cleanup_(fdb_entry_freep)
|
||||
|
||||
int config_parse_fdb_hwaddr(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
int config_parse_fdb_vlan_id(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
/* DHCP support */
|
||||
|
||||
int config_parse_dhcp(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_dhcp_client_identifier(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
/* IPv4LL support (legacy) */
|
||||
|
||||
int config_parse_ipv4ll(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
/* IPv6 support */
|
||||
int config_parse_ipv6token(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
/* Resolve protocols support */
|
||||
|
||||
const char* resolve_support_to_string(ResolveSupport i) _const_;
|
||||
ResolveSupport resolve_support_from_string(const char *s) _pure_;
|
||||
|
||||
int config_parse_resolve(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
/* Address Pool */
|
||||
|
||||
int address_pool_new(Manager *m, AddressPool **ret, int family, const union in_addr_union *u, unsigned prefixlen);
|
||||
int address_pool_new_from_string(Manager *m, AddressPool **ret, int family, const char *p, unsigned prefixlen);
|
||||
void address_pool_free(AddressPool *p);
|
||||
|
||||
int address_pool_acquire(AddressPool *p, unsigned prefixlen, union in_addr_union *found);
|
||||
|
||||
const char *address_family_boolean_to_string(AddressFamilyBoolean b) _const_;
|
||||
AddressFamilyBoolean address_family_boolean_from_string(const char *s) _const_;
|
||||
|
||||
int config_parse_address_family_boolean(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
/* IPForwarding parser */
|
||||
int config_parse_address_family_boolean_with_kernel(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
/* Operational State */
|
||||
|
||||
const char* link_operstate_to_string(LinkOperationalState s) _const_;
|
||||
LinkOperationalState link_operstate_from_string(const char *s) _pure_;
|
||||
|
||||
/* IPv6 privacy extensions support */
|
||||
|
||||
const char* ipv6_privacy_extensions_to_string(IPv6PrivacyExtensions i) _const_;
|
||||
IPv6PrivacyExtensions ipv6_privacy_extensions_from_string(const char *s) _pure_;
|
||||
|
||||
int config_parse_ipv6_privacy_extensions(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
|
||||
/* Hostname */
|
||||
int config_parse_hostname(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
int config_parse_timezone(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
Loading…
x
Reference in New Issue
Block a user