X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd.h;h=3e4e1f2ba6d929c0518ae5b477674a8f288f1fe4;hp=cff0136bcce176ccddfc464d3506494d7b3cb682;hb=091a364c802e34a58f3260c9cb5db9b75c62215c;hpb=69a93e7db47addc4495a6ec9dc0fc74092a6ebee diff --git a/src/network/networkd.h b/src/network/networkd.h index cff0136bc..3e4e1f2ba 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -68,6 +68,9 @@ typedef enum NetDevKind { NETDEV_KIND_BOND, NETDEV_KIND_VLAN, NETDEV_KIND_MACVLAN, + NETDEV_KIND_IPIP, + NETDEV_KIND_GRE, + NETDEV_KIND_SIT, _NETDEV_KIND_MAX, _NETDEV_KIND_INVALID = -1 } NetDevKind; @@ -76,6 +79,7 @@ typedef enum NetDevState { NETDEV_STATE_FAILED, NETDEV_STATE_CREATING, NETDEV_STATE_READY, + NETDEV_STATE_LINGER, _NETDEV_STATE_MAX, _NETDEV_STATE_INVALID = -1, } NetDevState; @@ -93,7 +97,8 @@ struct NetDev { Condition *match_arch; char *description; - char *name; + char *ifname; + size_t mtu; NetDevKind kind; uint64_t vlanid; @@ -102,6 +107,11 @@ struct NetDev { int ifindex; NetDevState state; + unsigned tunnel_ttl; + unsigned tunnel_tos; + struct in_addr tunnel_local; + struct in_addr tunnel_remote; + LIST_HEAD(netdev_enslave_callback, callbacks); }; @@ -123,6 +133,7 @@ struct Network { char *description; NetDev *bridge; NetDev *bond; + NetDev *tunnel; Hashmap *vlans; Hashmap *macvlans; bool dhcp; @@ -139,7 +150,7 @@ struct Network { Hashmap *addresses_by_section; Hashmap *routes_by_section; - Set *dns; + LIST_HEAD(Address, dns); LIST_FIELDS(Network, networks); }; @@ -161,7 +172,7 @@ struct Address { struct in6_addr in6; } in_addr; - LIST_FIELDS(Address, static_addresses); + LIST_FIELDS(Address, addresses); }; struct Route { @@ -183,7 +194,7 @@ struct Route { struct in6_addr in6; } dst_addr; - LIST_FIELDS(Route, static_routes); + LIST_FIELDS(Route, routes); }; typedef enum LinkState { @@ -194,6 +205,7 @@ typedef enum LinkState { LINK_STATE_CONFIGURED, LINK_STATE_UNMANAGED, LINK_STATE_FAILED, + LINK_STATE_LINGER, _LINK_STATE_MAX, _LINK_STATE_INVALID = -1 } LinkState; @@ -220,6 +232,8 @@ struct Link { unsigned route_messages; unsigned enslaving; + LIST_HEAD(Address, addresses); + sd_dhcp_client *dhcp_client; sd_dhcp_lease *dhcp_lease; char *lease_file; @@ -244,6 +258,7 @@ struct Manager { LIST_HEAD(Network, networks); usec_t network_dirs_ts_usec; + struct kmod_ctx *kmod_ctx; }; extern const char* const network_dirs[]; @@ -262,7 +277,6 @@ int manager_rtnl_listen(Manager *m); int manager_udev_listen(Manager *m); int manager_bus_listen(Manager *m); -int manager_update_resolv_conf(Manager *m); int manager_save(Manager *m); DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free); @@ -271,6 +285,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free); /* NetDev */ int netdev_load(Manager *manager); +void netdev_drop(NetDev *netdev); NetDev *netdev_unref(NetDev *netdev); NetDev *netdev_ref(NetDev *netdev); @@ -281,6 +296,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(NetDev*, netdev_unref); int netdev_get(Manager *manager, const char *name, NetDev **ret); int netdev_set_ifindex(NetDev *netdev, sd_rtnl_message *newlink); int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t cb); +int netdev_create_tunnel(Link *link, sd_rtnl_message_handler_t callback); const char *netdev_kind_to_string(NetDevKind d) _const_; NetDevKind netdev_kind_from_string(const char *d) _pure_; @@ -313,6 +329,28 @@ 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_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_tunnel_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); + /* gperf */ const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, unsigned length); @@ -342,6 +380,7 @@ void address_free(Address *address); int address_configure(Address *address, Link *link, sd_rtnl_message_handler_t callback); int address_update(Address *address, Link *link, sd_rtnl_message_handler_t callback); int address_drop(Address *address, Link *link, sd_rtnl_message_handler_t callback); +bool address_equal(Address *a1, Address *a2); DEFINE_TRIVIAL_CLEANUP_FUNC(Address*, address_free); #define _cleanup_address_free_ _cleanup_(address_freep) @@ -368,8 +407,10 @@ 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); @@ -385,7 +426,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_unref); /* 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, link->ifname, ##__VA_ARGS__) +#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__) @@ -396,16 +437,16 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_unref); /* More macros which append INTERFACE= to the message */ -#define log_full_netdev(level, netdev, fmt, ...) log_meta_object(level, __FILE__, __LINE__, __func__, "INTERFACE=", netdev->name, "%s: " fmt, netdev->name, ##__VA_ARGS__) +#define log_full_netdev(level, netdev, fmt, ...) log_meta_object(level, __FILE__, __LINE__, __func__, "INTERFACE=", netdev->ifname, "%*s: " fmt, IFNAMSIZ, netdev->ifname, ##__VA_ARGS__) #define log_debug_netdev(netdev, ...) log_full_netdev(LOG_DEBUG, netdev, ##__VA_ARGS__) #define log_info_netdev(netdev, ...) log_full_netdev(LOG_INFO, netdev, ##__VA_ARGS__) #define log_notice_netdev(netdev, ...) log_full_netdev(LOG_NOTICE, netdev, ##__VA_ARGS__) #define log_warning_netdev(netdev, ...) log_full_netdev(LOG_WARNING, netdev,## __VA_ARGS__) #define log_error_netdev(netdev, ...) log_full_netdev(LOG_ERR, netdev, ##__VA_ARGS__) -#define log_struct_netdev(level, netdev, ...) log_struct(level, "INTERFACE=%s", netdev->name, __VA_ARGS__) +#define log_struct_netdev(level, netdev, ...) log_struct(level, "INTERFACE=%s", netdev->ifname, __VA_ARGS__) -#define NETDEV(netdev) "INTERFACE=%s", netdev->name +#define NETDEV(netdev) "INTERFACE=%s", netdev->ifname #define ADDRESS_FMT_VAL(address) \ (address).s_addr & 0xFF, \ ((address).s_addr >> 8) & 0xFF, \