diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | src/network/networkd-address-pool.c | 1 | ||||
-rw-r--r-- | src/network/networkd-address.c | 1 | ||||
-rw-r--r-- | src/network/networkd-link.c | 2 | ||||
-rw-r--r-- | src/network/networkd-link.h | 128 | ||||
-rw-r--r-- | src/network/networkd-manager.c | 1 | ||||
-rw-r--r-- | src/network/networkd-netdev-tunnel.c | 1 | ||||
-rw-r--r-- | src/network/networkd-netdev-vxlan.c | 1 | ||||
-rw-r--r-- | src/network/networkd-netdev.c | 1 | ||||
-rw-r--r-- | src/network/networkd-network.c | 1 | ||||
-rw-r--r-- | src/network/networkd-route.c | 1 | ||||
-rw-r--r-- | src/network/networkd.h | 89 | ||||
-rw-r--r-- | src/network/test-network-tables.c | 1 |
13 files changed, 139 insertions, 90 deletions
diff --git a/Makefile.am b/Makefile.am index 9100ff6a93..6fbfc59244 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4941,6 +4941,7 @@ libsystemd_networkd_core_la_CFLAGS = \ libsystemd_networkd_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 \ diff --git a/src/network/networkd-address-pool.c b/src/network/networkd-address-pool.c index 8abf82e18c..7ad11c6177 100644 --- a/src/network/networkd-address-pool.c +++ b/src/network/networkd-address-pool.c @@ -22,6 +22,7 @@ #include <arpa/inet.h> #include "networkd.h" +#include "networkd-link.h" int address_pool_new( Manager *m, diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index ae87b83524..e595cd6e94 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -22,6 +22,7 @@ #include <net/if.h> #include "networkd.h" +#include "networkd-link.h" #include "utf8.h" #include "util.h" diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 62533c1666..49bfdf029a 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -23,7 +23,7 @@ #include <linux/if.h> #include <unistd.h> -#include "networkd.h" +#include "networkd-link.h" #include "networkd-netdev.h" #include "libudev-private.h" #include "udev-util.h" diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h new file mode 100644 index 0000000000..9f54c8c391 --- /dev/null +++ b/src/network/networkd-link.h @@ -0,0 +1,128 @@ +/*-*- 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/>. +***/ + +#pragma once + +#include "networkd.h" + +typedef enum LinkState { + LINK_STATE_INITIALIZING, + LINK_STATE_ENSLAVING, + LINK_STATE_SETTING_ADDRESSES, + LINK_STATE_SETTING_ROUTES, + LINK_STATE_CONFIGURED, + LINK_STATE_UNMANAGED, + LINK_STATE_FAILED, + LINK_STATE_LINGER, + _LINK_STATE_MAX, + _LINK_STATE_INVALID = -1 +} LinkState; + +typedef enum LinkOperationalState { + LINK_OPERSTATE_UNKNOWN, + LINK_OPERSTATE_DORMANT, + LINK_OPERSTATE_CARRIER, + LINK_OPERSTATE_DEGRADED, + LINK_OPERSTATE_ROUTABLE, + _LINK_OPERSTATE_MAX, + _LINK_OPERSTATE_INVALID = -1 +} LinkOperationalState; + +struct Link { + Manager *manager; + + int n_ref; + + int ifindex; + char *ifname; + char *state_file; + struct ether_addr mac; + uint32_t mtu; + struct udev_device *udev_device; + + unsigned flags; + uint8_t kernel_operstate; + + Network *network; + + LinkState state; + LinkOperationalState operstate; + + unsigned addr_messages; + unsigned route_messages; + unsigned enslaving; + + LIST_HEAD(Address, addresses); + + sd_dhcp_client *dhcp_client; + sd_dhcp_lease *dhcp_lease; + char *lease_file; + uint16_t original_mtu; + sd_ipv4ll *ipv4ll; + + LIST_HEAD(Address, pool_addresses); + + sd_dhcp_server *dhcp_server; + + sd_icmp6_nd *icmp6_router_discovery; + sd_dhcp6_client *dhcp6_client; +}; + +Link *link_unref(Link *link); +Link *link_ref(Link *link); +int link_get(Manager *m, int ifindex, Link **ret); +int link_add(Manager *manager, sd_rtnl_message *message, Link **ret); +void link_drop(Link *link); + +int link_update(Link *link, sd_rtnl_message *message); +int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *userdata); + +int link_initialized(Link *link, struct udev_device *device); + +int link_save(Link *link); + +bool link_has_carrier(unsigned flags, uint8_t operstate); + +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_; + +DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_unref); +#define _cleanup_link_unref_ _cleanup_(link_unrefp) + +/* Macros which append INTERFACE= to the message */ + +#define log_full_link(level, link, fmt, ...) log_meta_object(level, __FILE__, __LINE__, __func__, "INTERFACE=", link->ifname, "%-*s: " fmt, IFNAMSIZ, link->ifname, ##__VA_ARGS__) +#define log_debug_link(link, ...) log_full_link(LOG_DEBUG, link, ##__VA_ARGS__) +#define log_info_link(link, ...) log_full_link(LOG_INFO, link, ##__VA_ARGS__) +#define log_notice_link(link, ...) log_full_link(LOG_NOTICE, link, ##__VA_ARGS__) +#define log_warning_link(link, ...) log_full_link(LOG_WARNING, link, ##__VA_ARGS__) +#define log_error_link(link, ...) log_full_link(LOG_ERR, link, ##__VA_ARGS__) + +#define log_struct_link(level, link, ...) log_struct(level, "INTERFACE=%s", link->ifname, __VA_ARGS__) + +#define ADDRESS_FMT_VAL(address) \ + (address).s_addr & 0xFF, \ + ((address).s_addr >> 8) & 0xFF, \ + ((address).s_addr >> 16) & 0xFF, \ + (address).s_addr >> 24 diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 28d72617dd..586842eefc 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -26,6 +26,7 @@ #include "path-util.h" #include "networkd.h" #include "networkd-netdev.h" +#include "networkd-link.h" #include "network-internal.h" #include "libudev-private.h" #include "udev-util.h" diff --git a/src/network/networkd-netdev-tunnel.c b/src/network/networkd-netdev-tunnel.c index 5d5913186d..174fe234fd 100644 --- a/src/network/networkd-netdev-tunnel.c +++ b/src/network/networkd-netdev-tunnel.c @@ -27,6 +27,7 @@ #include "sd-rtnl.h" #include "networkd-netdev-tunnel.h" +#include "networkd-link.h" #include "network-internal.h" #include "util.h" #include "missing.h" diff --git a/src/network/networkd-netdev-vxlan.c b/src/network/networkd-netdev-vxlan.c index 215c117291..326ac547a3 100644 --- a/src/network/networkd-netdev-vxlan.c +++ b/src/network/networkd-netdev-vxlan.c @@ -25,6 +25,7 @@ #include "sd-rtnl.h" #include "networkd-netdev-vxlan.h" +#include "networkd-link.h" #include "missing.h" static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_rtnl_message *m) { diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c index 4a6f6e3475..825b86d2a7 100644 --- a/src/network/networkd-netdev.c +++ b/src/network/networkd-netdev.c @@ -22,6 +22,7 @@ #include <net/if.h> #include "networkd-netdev.h" +#include "networkd-link.h" #include "network-internal.h" #include "path-util.h" #include "conf-files.h" diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 056e063f26..e326b3664e 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -24,6 +24,7 @@ #include "networkd.h" #include "networkd-netdev.h" +#include "networkd-link.h" #include "network-internal.h" #include "path-util.h" #include "conf-files.h" diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 77c2daddc5..aead4fbb9e 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -22,6 +22,7 @@ #include <net/if.h> #include "networkd.h" +#include "networkd-link.h" #include "utf8.h" #include "util.h" diff --git a/src/network/networkd.h b/src/network/networkd.h index d5c229cf46..29b7c82a97 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -152,69 +152,6 @@ struct Route { LIST_FIELDS(Route, routes); }; -typedef enum LinkState { - LINK_STATE_INITIALIZING, - LINK_STATE_ENSLAVING, - LINK_STATE_SETTING_ADDRESSES, - LINK_STATE_SETTING_ROUTES, - LINK_STATE_CONFIGURED, - LINK_STATE_UNMANAGED, - LINK_STATE_FAILED, - LINK_STATE_LINGER, - _LINK_STATE_MAX, - _LINK_STATE_INVALID = -1 -} LinkState; - -typedef enum LinkOperationalState { - LINK_OPERSTATE_UNKNOWN, - LINK_OPERSTATE_DORMANT, - LINK_OPERSTATE_CARRIER, - LINK_OPERSTATE_DEGRADED, - LINK_OPERSTATE_ROUTABLE, - _LINK_OPERSTATE_MAX, - _LINK_OPERSTATE_INVALID = -1 -} LinkOperationalState; - -struct Link { - Manager *manager; - - int n_ref; - - int ifindex; - char *ifname; - char *state_file; - struct ether_addr mac; - uint32_t mtu; - struct udev_device *udev_device; - - unsigned flags; - uint8_t kernel_operstate; - - Network *network; - - LinkState state; - LinkOperationalState operstate; - - unsigned addr_messages; - unsigned route_messages; - unsigned enslaving; - - LIST_HEAD(Address, addresses); - - sd_dhcp_client *dhcp_client; - sd_dhcp_lease *dhcp_lease; - char *lease_file; - uint16_t original_mtu; - sd_ipv4ll *ipv4ll; - - LIST_HEAD(Address, pool_addresses); - - sd_dhcp_server *dhcp_server; - - sd_icmp6_nd *icmp6_router_discovery; - sd_dhcp6_client *dhcp6_client; -}; - struct AddressPool { Manager *manager; @@ -358,32 +295,6 @@ 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); -/* Link */ - -Link *link_unref(Link *link); -Link *link_ref(Link *link); -int link_get(Manager *m, int ifindex, Link **ret); -int link_add(Manager *manager, sd_rtnl_message *message, Link **ret); -void link_drop(Link *link); - -int link_update(Link *link, sd_rtnl_message *message); -int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *userdata); - -int link_initialized(Link *link, struct udev_device *device); - -int link_save(Link *link); - -bool link_has_carrier(unsigned flags, uint8_t operstate); - -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_; - -DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_unref); -#define _cleanup_link_unref_ _cleanup_(link_unrefp) - /* DHCP support */ const char* dhcp_support_to_string(DHCPSupport i) _const_; diff --git a/src/network/test-network-tables.c b/src/network/test-network-tables.c index 6f6bb37fc4..4d55434f03 100644 --- a/src/network/test-network-tables.c +++ b/src/network/test-network-tables.c @@ -1,4 +1,5 @@ #include "networkd.h" +#include "networkd-link.h" #include "networkd-netdev-bond.h" #include "networkd-netdev-macvlan.h" #include "dhcp6-internal.h" |