From: Yu Watanabe Date: Thu, 12 Aug 2021 05:10:45 +0000 (+0900) Subject: network: introduce a helper function netdev_is_stacked_and_independent() X-Git-Tag: v250-rc1~831^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=798e5dc8ae9051da827f45c1920a2a40562cd083;p=thirdparty%2Fsystemd.git network: introduce a helper function netdev_is_stacked_and_independent() --- diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index c3ab6aecdb8..ebd99a4c8d9 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -167,6 +167,42 @@ bool netdev_is_managed(NetDev *netdev) { return hashmap_get(netdev->manager->netdevs, netdev->ifname) == netdev; } +static bool netdev_is_stacked_and_independent(NetDev *netdev) { + assert(netdev); + + if (!IN_SET(netdev_get_create_type(netdev), NETDEV_CREATE_STACKED, NETDEV_CREATE_AFTER_CONFIGURED)) + return false; + + switch (netdev->kind) { + case NETDEV_KIND_ERSPAN: + return ERSPAN(netdev)->independent; + case NETDEV_KIND_GRE: + return GRE(netdev)->independent; + case NETDEV_KIND_GRETAP: + return GRETAP(netdev)->independent; + case NETDEV_KIND_IP6GRE: + return IP6GRE(netdev)->independent; + case NETDEV_KIND_IP6GRETAP: + return IP6GRETAP(netdev)->independent; + case NETDEV_KIND_IP6TNL: + return IP6TNL(netdev)->independent; + case NETDEV_KIND_IPIP: + return IPIP(netdev)->independent; + case NETDEV_KIND_SIT: + return SIT(netdev)->independent; + case NETDEV_KIND_VTI: + return VTI(netdev)->independent; + case NETDEV_KIND_VTI6: + return VTI6(netdev)->independent; + case NETDEV_KIND_VXLAN: + return VXLAN(netdev)->independent; + case NETDEV_KIND_XFRM: + return XFRM(netdev)->independent; + default: + return false; + } +} + static void netdev_detach_from_manager(NetDev *netdev) { if (netdev->ifname && netdev->manager) hashmap_remove(netdev->manager->netdevs, netdev->ifname); @@ -671,7 +707,6 @@ int link_request_to_crate_stacked_netdev(Link *link, NetDev *netdev) { int netdev_load_one(Manager *manager, const char *filename) { _cleanup_(netdev_unrefp) NetDev *netdev_raw = NULL, *netdev = NULL; const char *dropin_dirname; - bool independent = false; int r; assert(manager); @@ -792,48 +827,7 @@ int netdev_load_one(Manager *manager, const char *filename) { return r; } - switch (netdev->kind) { - case NETDEV_KIND_IPIP: - independent = IPIP(netdev)->independent; - break; - case NETDEV_KIND_GRE: - independent = GRE(netdev)->independent; - break; - case NETDEV_KIND_GRETAP: - independent = GRETAP(netdev)->independent; - break; - case NETDEV_KIND_IP6GRE: - independent = IP6GRE(netdev)->independent; - break; - case NETDEV_KIND_IP6GRETAP: - independent = IP6GRETAP(netdev)->independent; - break; - case NETDEV_KIND_SIT: - independent = SIT(netdev)->independent; - break; - case NETDEV_KIND_VTI: - independent = VTI(netdev)->independent; - break; - case NETDEV_KIND_VTI6: - independent = VTI6(netdev)->independent; - break; - case NETDEV_KIND_IP6TNL: - independent = IP6TNL(netdev)->independent; - break; - case NETDEV_KIND_ERSPAN: - independent = ERSPAN(netdev)->independent; - break; - case NETDEV_KIND_XFRM: - independent = XFRM(netdev)->independent; - break; - case NETDEV_KIND_VXLAN: - independent = VXLAN(netdev)->independent; - break; - default: - break; - } - - if (independent) { + if (netdev_is_stacked_and_independent(netdev)) { r = netdev_create(netdev, NULL, NULL); if (r < 0) return r;