X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd.h;h=d31844aefdae551b1e771d0a825c19c34158090a;hb=1e9be60bbabe179f5233217384f1daec757c17c7;hp=d8cd7ec0e82667a14af0df9fb32de6fbfababcda;hpb=5c1d3fc93d91384bbac29adf01074fa4375317ea;p=elogind.git diff --git a/src/network/networkd.h b/src/network/networkd.h index d8cd7ec0e..d31844aef 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -33,8 +33,11 @@ #include "rtnl-util.h" #include "hashmap.h" #include "list.h" +#include "set.h" #include "condition-util.h" +#define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU + typedef struct NetDev NetDev; typedef struct Network Network; typedef struct Link Link; @@ -130,11 +133,12 @@ struct Network { LIST_HEAD(Address, static_addresses); LIST_HEAD(Route, static_routes); - Address *dns; Hashmap *addresses_by_section; Hashmap *routes_by_section; + Set *dns; + LIST_FIELDS(Network, networks); }; @@ -148,6 +152,7 @@ struct Address { char *label; struct in_addr broadcast; + struct ifa_cacheinfo cinfo; union { struct in_addr in; @@ -180,10 +185,12 @@ struct Route { }; 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_MAX, _LINK_STATE_INVALID = -1 @@ -196,8 +203,10 @@ struct Link { char *ifname; char *state_file; struct ether_addr mac; + struct udev_device *udev_device; unsigned flags; + uint8_t operstate; Network *network; @@ -240,10 +249,10 @@ void manager_free(Manager *m); int manager_load_config(Manager *m); bool manager_should_reload(Manager *m); -int manager_udev_enumerate_links(Manager *m); -int manager_udev_listen(Manager *m); +int manager_rtnl_enumerate_links(Manager *m); 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); @@ -261,7 +270,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(NetDev*, netdev_free); #define _cleanup_netdev_free_ _cleanup_(netdev_freep) int netdev_get(Manager *manager, const char *name, NetDev **ret); -int netdev_set_ifindex(NetDev *netdev, int ifindex); +int netdev_set_ifindex(NetDev *netdev, sd_rtnl_message *newlink); int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t cb); const char *netdev_kind_to_string(NetDevKind d) _const_; @@ -286,7 +295,9 @@ void network_free(Network *network); DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free); #define _cleanup_network_free_ _cleanup_(network_freep) -int network_get(Manager *manager, struct udev_device *device, 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_bridge(const char *unit, const char *filename, unsigned line, @@ -332,6 +343,7 @@ 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_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); DEFINE_TRIVIAL_CLEANUP_FUNC(Address*, address_free); @@ -355,14 +367,14 @@ int config_parse_label(const char *unit, const char *filename, unsigned line, /* Link */ -int link_new(Manager *manager, struct udev_device *device, Link **ret); void link_free(Link *link); int link_get(Manager *m, int ifindex, Link **ret); -int link_add(Manager *manager, struct udev_device *device, Link **ret); -int link_configure(Link *link); +int link_add(Manager *manager, sd_rtnl_message *message, Link **ret); int link_update(Link *link, sd_rtnl_message *message); +int link_initialized(Link *link, struct udev_device *device); + int link_save(Link *link); const char* link_state_to_string(LinkState s) _const_;