X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd.h;h=9f3a5ea9d5992b68971dfe618285efe2cfc38454;hb=e331e24649213f2e093e16e4d3d64ee823dfc375;hp=b36590e2d6ca70779a92cd096c4d639799028a60;hpb=cb9fc36a1211967e8c58b0502a26c42552ac8060;p=elogind.git diff --git a/src/network/networkd.h b/src/network/networkd.h index b36590e2d..9f3a5ea9d 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -55,10 +55,11 @@ typedef struct AddressPool AddressPool; typedef struct FdbEntry FdbEntry; typedef enum AddressFamilyBoolean { - ADDRESS_FAMILY_NO, - ADDRESS_FAMILY_YES, - ADDRESS_FAMILY_IPV4, - ADDRESS_FAMILY_IPV6, + /* 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; @@ -71,6 +72,17 @@ typedef enum LLMNRSupport { _LLMNR_SUPPORT_INVALID = -1, } LLMNRSupport; +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; + struct FdbEntry { Network *network; unsigned section; @@ -120,8 +132,8 @@ struct Network { unsigned cost; + AddressFamilyBoolean ip_forward; bool ip_masquerade; - bool ip_forward; struct ether_addr *mac; unsigned mtu; @@ -160,7 +172,7 @@ struct Address { union in_addr_union in_addr; union in_addr_union in_addr_peer; - bool ip_forward_done; + bool ip_masquerade_done; LIST_FIELDS(Address, addresses); }; @@ -198,12 +210,17 @@ struct AddressPool { struct Manager { sd_rtnl *rtnl; sd_event *event; + sd_event_source *bus_retry_event_source; sd_bus *bus; + sd_bus_slot *prepare_for_sleep_slot; struct udev *udev; struct udev_monitor *udev_monitor; sd_event_source *udev_event_source; + bool enumerating; + char *state_file; + LinkOperationalState operational_state; Hashmap *links; Hashmap *netdevs; @@ -217,6 +234,8 @@ extern const char* const network_dirs[]; /* Manager */ +extern const sd_bus_vtable manager_vtable[]; + int manager_new(Manager **ret); void manager_free(Manager *m); @@ -226,10 +245,7 @@ bool manager_should_reload(Manager *m); int manager_rtnl_enumerate_links(Manager *m); int manager_rtnl_enumerate_addresses(Manager *m); -int manager_rtnl_listen(Manager *m); -int manager_udev_listen(Manager *m); -int manager_bus_listen(Manager *m); - +int manager_send_changed(Manager *m, const char *property, ...) _sentinel_; int manager_save(Manager *m); int manager_address_pool_acquire(Manager *m, int family, unsigned prefixlen, union in_addr_union *found); @@ -391,3 +407,10 @@ int address_pool_acquire(AddressPool *p, unsigned prefixlen, union in_addr_union 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); + +/* Opeartional State */ + +const char* link_operstate_to_string(LinkOperationalState s) _const_; +LinkOperationalState link_operstate_from_string(const char *s) _pure_;