X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd.h;h=d09ab61adfa9052f42dffd901f41ff3ebdf2fdf6;hp=11268de70d7198e672df3aef00c7c60e40a45655;hb=3f2650377631aed3bc26fdbc3a2eef6e33cdf7e7;hpb=e1ea665edac17d75fce01b72dadfa3211b60df2c diff --git a/src/network/networkd.h b/src/network/networkd.h index 11268de70..d09ab61ad 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -38,11 +38,12 @@ #include "list.h" #include "set.h" #include "condition-util.h" -#include "socket-util.h" +#include "in-addr-util.h" #define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU #define VXLAN_VID_MAX (1u << 24) - 1 -#define DHCP_STATIC_ROUTE_METRIC 1024 +#define DHCP_ROUTE_METRIC 1024 +#define IPV4LL_ROUTE_METRIC 2048 typedef struct NetDev NetDev; typedef struct Network Network; @@ -52,13 +53,13 @@ typedef struct Route Route; typedef struct Manager Manager; typedef struct AddressPool AddressPool; -typedef struct netdev_enslave_callback netdev_enslave_callback; +typedef struct netdev_join_callback netdev_join_callback; -struct netdev_enslave_callback { +struct netdev_join_callback { sd_rtnl_message_handler_t callback; Link *link; - LIST_FIELDS(netdev_enslave_callback, callbacks); + LIST_FIELDS(netdev_join_callback, callbacks); }; typedef enum MacVlanMode { @@ -70,6 +71,18 @@ typedef enum MacVlanMode { _NETDEV_MACVLAN_MODE_INVALID = -1 } MacVlanMode; +typedef enum BondMode { + NETDEV_BOND_MODE_BALANCE_RR, + NETDEV_BOND_MODE_ACTIVE_BACKUP, + NETDEV_BOND_MODE_BALANCE_XOR, + NETDEV_BOND_MODE_BROADCAST, + NETDEV_BOND_MODE_802_3AD, + NETDEV_BOND_MODE_BALANCE_TLB, + NETDEV_BOND_MODE_BALANCE_ALB, + _NETDEV_BOND_MODE_MAX, + _NETDEV_BOND_MODE_INVALID = -1 +} BondMode; + typedef enum NetDevKind { NETDEV_KIND_BRIDGE, NETDEV_KIND_BOND, @@ -81,6 +94,9 @@ typedef enum NetDevKind { NETDEV_KIND_SIT, NETDEV_KIND_VETH, NETDEV_KIND_VTI, + NETDEV_KIND_DUMMY, + NETDEV_KIND_TUN, + NETDEV_KIND_TAP, _NETDEV_KIND_MAX, _NETDEV_KIND_INVALID = -1 } NetDevKind; @@ -109,6 +125,8 @@ struct NetDev { char *description; char *ifname; char *ifname_peer; + char *user_name; + char *group_name; size_t mtu; struct ether_addr *mac; struct ether_addr *mac_peer; @@ -117,19 +135,25 @@ struct NetDev { uint64_t vlanid; uint64_t vxlanid; int32_t macvlan_mode; + int32_t bond_mode; int ifindex; NetDevState state; bool tunnel_pmtudisc; bool learning; + bool one_queue; + bool multi_queue; + bool packet_info; + unsigned ttl; unsigned tos; - struct in_addr local; - struct in_addr remote; - struct in_addr group; + unsigned char family; + union in_addr_union local; + union in_addr_union remote; + union in_addr_union group; - LIST_HEAD(netdev_enslave_callback, callbacks); + LIST_HEAD(netdev_join_callback, callbacks); }; typedef enum DHCPSupport { @@ -151,6 +175,8 @@ struct Network { char *match_driver; char *match_type; char *match_name; + char *dhcp_vendor_class_identifier; + Condition *match_host; Condition *match_virt; Condition *match_kernel; @@ -169,6 +195,7 @@ struct Network { bool dhcp_mtu; bool dhcp_hostname; bool dhcp_domainname; + bool dhcp_sendhost; bool dhcp_critical; bool dhcp_routes; bool ipv4ll; @@ -200,6 +227,7 @@ struct Address { struct ifa_cacheinfo cinfo; union in_addr_union in_addr; + union in_addr_union in_addr_peer; LIST_FIELDS(Address, addresses); }; @@ -337,6 +365,8 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free); /* NetDev */ +#define VLANID_MAX 4094 + int netdev_load(Manager *manager); void netdev_drop(NetDev *netdev); @@ -348,10 +378,16 @@ 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); +int netdev_join(NetDev *netdev, Link *link, sd_rtnl_message_handler_t cb); +int netdev_create_tunnel(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback); int netdev_create_veth(NetDev *netdev, sd_rtnl_message_handler_t callback); int netdev_create_vxlan(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback); +int netdev_create_vlan(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback); +int netdev_create_macvlan(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback); +int netdev_create_dummy(NetDev *netdev, sd_rtnl_message_handler_t callback); +int netdev_create_tuntap(NetDev *netdev); +int netdev_create_bond(NetDev *netdev, sd_rtnl_message_handler_t callback); + const char *netdev_kind_to_string(NetDevKind d) _const_; NetDevKind netdev_kind_from_string(const char *d) _pure_; @@ -359,10 +395,15 @@ NetDevKind netdev_kind_from_string(const char *d) _pure_; const char *macvlan_mode_to_string(MacVlanMode d) _const_; MacVlanMode macvlan_mode_from_string(const char *d) _pure_; +const char *bond_mode_to_string(BondMode d) _const_; +BondMode bond_mode_from_string(const char *d) _pure_; + int config_parse_netdev_kind(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_macvlan_mode(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_bond_mode(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_netdev_gperf_lookup(const char *key, unsigned length); @@ -428,6 +469,9 @@ int config_parse_destination(const char *unit, const char *filename, unsigned li const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); +int config_parse_route_priority(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); /* Address */ int address_new_static(Network *network, unsigned section, Address **ret); int address_new_dynamic(Address **ret);