X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd.h;h=aebb2859206691f7788a495fcfb51b2fa5309589;hb=bbf7c04821a71fec67eaf0e7a34d17afc5913c13;hp=8144031a99d286987181a190ca5dcf21993528c8;hpb=d39edfc72f9296078a18014627bf0a2543b60627;p=elogind.git diff --git a/src/network/networkd.h b/src/network/networkd.h index 8144031a9..aebb28592 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -36,6 +36,8 @@ #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; @@ -150,6 +152,7 @@ struct Address { char *label; struct in_addr broadcast; + struct ifa_cacheinfo cinfo; union { struct in_addr in; @@ -182,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 @@ -201,6 +206,7 @@ struct Link { struct udev_device *udev_device; unsigned flags; + uint8_t operstate; Network *network; @@ -226,6 +232,8 @@ struct Manager { sd_event_source *sigterm_event_source; sd_event_source *sigint_event_source; + char *state_file; + Hashmap *links; Hashmap *netdevs; LIST_HEAD(Network, networks); @@ -243,13 +251,14 @@ 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); +int manager_save(Manager *m); DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free); #define _cleanup_manager_free_ _cleanup_(manager_freep) @@ -289,7 +298,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, @@ -335,6 +346,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); @@ -358,15 +370,18 @@ 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_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); +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_;