X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fsystemd.git;a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-link.c;fp=src%2Fnetwork%2Fnetworkd-link.c;h=4df56087198368c7c8142acb28dc1f6ad3b6196d;hp=bc26cd2c3ed622a04c664842809c276c3bc26799;hb=1447dc625a430b0d2c1d59fc87aa91252a04a75a;hpb=838d39af93e16e749ef90acf915a634b380abbf6 diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index bc26cd2c3ed..4df56087198 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include "alloc-util.h" @@ -31,6 +32,7 @@ #include "networkd-manager.h" #include "networkd-ndisc.h" #include "networkd-neighbor.h" +#include "networkd-sriov.h" #include "networkd-radv.h" #include "networkd-routing-policy-rule.h" #include "networkd-wifi.h" @@ -1127,6 +1129,9 @@ void link_check_ready(Link *link) { if (!link->tc_configured) return; + if (!link->sr_iov_configured) + return; + if (link_has_carrier(link) || !link->network->configure_without_carrier) { if (link_ipv4ll_enabled(link, ADDRESS_FAMILY_IPV4) && !link->ipv4ll_address) @@ -2838,6 +2843,28 @@ static int link_configure_traffic_control(Link *link) { return 0; } +static int link_configure_sr_iov(Link *link) { + SRIOV *sr_iov; + Iterator i; + int r; + + link->sr_iov_configured = false; + link->sr_iov_messages = 0; + + ORDERED_HASHMAP_FOREACH(sr_iov, link->network->sr_iov_by_section, i) { + r = sr_iov_configure(link, sr_iov); + if (r < 0) + return r; + } + + if (link->sr_iov_messages == 0) + link->sr_iov_configured = true; + else + log_link_debug(link, "Configuring SR-IOV"); + + return 0; +} + static int link_configure(Link *link) { int r; @@ -2849,6 +2876,10 @@ static int link_configure(Link *link) { if (r < 0) return r; + r = link_configure_sr_iov(link); + if (r < 0) + return r; + if (link->iftype == ARPHRD_CAN) return link_configure_can(link);