X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=src%2Fnetwork%2Fnetdev%2Fnetdev.h;h=57fabbef40ddfc36bfb63a991a3c90294a6a560a;hb=d61e4c5b6e312020b22aca5acd3765df1ce61f27;hp=d6524da0f3ba611e11c2181d380ad6bb08f2c2be;hpb=c1642d7bf809314a9836ec940c89c556e7bf7043;p=thirdparty%2Fsystemd.git diff --git a/src/network/netdev/netdev.h b/src/network/netdev/netdev.h index d6524da0f3b..57fabbef40d 100644 --- a/src/network/netdev/netdev.h +++ b/src/network/netdev/netdev.h @@ -24,6 +24,7 @@ typedef enum NetDevKind { NETDEV_KIND_MACVLAN, NETDEV_KIND_MACVTAP, NETDEV_KIND_IPVLAN, + NETDEV_KIND_IPVTAP, NETDEV_KIND_VXLAN, NETDEV_KIND_IPIP, NETDEV_KIND_GRE, @@ -46,7 +47,11 @@ typedef enum NetDevKind { NETDEV_KIND_NETDEVSIM, NETDEV_KIND_FOU, NETDEV_KIND_ERSPAN, + NETDEV_KIND_L2TP, + NETDEV_KIND_MACSEC, + NETDEV_KIND_NLMON, _NETDEV_KIND_MAX, + _NETDEV_KIND_TUNNEL, /* Used by config_parse_stacked_netdev() */ _NETDEV_KIND_INVALID = -1 } NetDevKind; @@ -64,6 +69,7 @@ typedef enum NetDevCreateType { NETDEV_CREATE_INDEPENDENT, NETDEV_CREATE_MASTER, NETDEV_CREATE_STACKED, + NETDEV_CREATE_AFTER_CONFIGURED, _NETDEV_CREATE_MAX, _NETDEV_CREATE_INVALID = -1, } NetDevCreateType; @@ -78,11 +84,7 @@ typedef struct NetDev { char *filename; - Condition *match_host; - Condition *match_virt; - Condition *match_kernel_cmdline; - Condition *match_kernel_version; - Condition *match_arch; + LIST_HEAD(Condition, conditions); NetDevState state; NetDevKind kind; @@ -122,11 +124,17 @@ typedef struct NetDevVTable { /* create netdev, if not done via rtnl */ int (*create)(NetDev *netdev); + /* create netdev after link is fully configured */ + int (*create_after_configured)(NetDev *netdev, Link *link); + /* perform additional configuration after netdev has been createad */ int (*post_create)(NetDev *netdev, Link *link, sd_netlink_message *message); /* verify that compulsory configuration options were specified */ int (*config_verify)(NetDev *netdev, const char *filename); + + /* Generate MAC address or not When MACAddress= is not specified. */ + bool generate_mac; } NetDevVTable; extern const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX]; @@ -161,10 +169,19 @@ int netdev_get(Manager *manager, const char *name, NetDev **ret); int netdev_set_ifindex(NetDev *netdev, sd_netlink_message *newlink); int netdev_get_mac(const char *ifname, struct ether_addr **ret); int netdev_join(NetDev *netdev, Link *link, link_netlink_message_handler_t cb); +int netdev_join_after_configured(NetDev *netdev, Link *link, link_netlink_message_handler_t callback); const char *netdev_kind_to_string(NetDevKind d) _const_; NetDevKind netdev_kind_from_string(const char *d) _pure_; +static inline NetDevCreateType netdev_get_create_type(NetDev *netdev) { + assert(netdev); + assert(NETDEV_VTABLE(netdev)); + + return NETDEV_VTABLE(netdev)->create_type; +} + + CONFIG_PARSER_PROTOTYPE(config_parse_netdev_kind); /* gperf */