From: Yu Watanabe Date: Mon, 20 May 2019 06:59:44 +0000 (+0900) Subject: network: make CAN devices go through LINK_STATE_CONFIGURING X-Git-Tag: v243-rc1~388^2~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=af9ba57aa2b734bfef7f1fc277e43d8c4bd6d8eb;p=thirdparty%2Fsystemd.git network: make CAN devices go through LINK_STATE_CONFIGURING --- diff --git a/src/network/networkd-can.c b/src/network/networkd-can.c index 2df0e888f09..5755df57bd7 100644 --- a/src/network/networkd-can.c +++ b/src/network/networkd-can.c @@ -198,6 +198,8 @@ static int link_down_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link int link_configure_can(Link *link) { int r; + link_set_state(link, LINK_STATE_CONFIGURING); + if (streq_ptr(link->kind, "can")) { /* The CAN interface must be down to configure bitrate, etc... */ if ((link->flags & IFF_UP)) { diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index bf8afc84cdb..ce913d777b5 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -77,6 +77,9 @@ static bool link_dhcp6_enabled(Link *link) { if (link->network->bond) return false; + if (STRPTR_IN_SET(link->kind, "can", "vcan")) + return false; + if (manager_sysctl_ipv6_enabled(link->manager) == 0) return false; @@ -95,6 +98,9 @@ static bool link_dhcp4_enabled(Link *link) { if (link->network->bond) return false; + if (STRPTR_IN_SET(link->kind, "can", "vcan")) + return false; + return link->network->dhcp & ADDRESS_FAMILY_IPV4; } @@ -110,6 +116,9 @@ static bool link_dhcp4_server_enabled(Link *link) { if (link->network->bond) return false; + if (STRPTR_IN_SET(link->kind, "can", "vcan")) + return false; + return link->network->dhcp_server; } @@ -122,7 +131,7 @@ bool link_ipv4ll_enabled(Link *link) { if (!link->network) return false; - if (STRPTR_IN_SET(link->kind, "vrf", "wireguard", "ipip", "gre", "ip6gre", "ip6tnl", "sit", "vti", "vti6")) + if (STRPTR_IN_SET(link->kind, "vrf", "wireguard", "ipip", "gre", "ip6gre", "ip6tnl", "sit", "vti", "vti6", "can", "vcan")) return false; /* L3 or L3S mode do not support ARP. */ @@ -144,7 +153,7 @@ bool link_ipv4ll_fallback_enabled(Link *link) { if (!link->network) return false; - if (STRPTR_IN_SET(link->kind, "vrf", "wireguard", "ipip", "gre", "ip6gre", "ip6tnl", "sit", "vti", "vti6")) + if (STRPTR_IN_SET(link->kind, "vrf", "wireguard", "ipip", "gre", "ip6gre", "ip6tnl", "sit", "vti", "vti6", "can", "vcan")) return false; /* L3 or L3S mode do not support ARP. */ @@ -169,7 +178,7 @@ static bool link_ipv6ll_enabled(Link *link) { if (!link->network) return false; - if (STRPTR_IN_SET(link->kind, "vrf", "wireguard", "ipip", "gre", "sit", "vti")) + if (STRPTR_IN_SET(link->kind, "vrf", "wireguard", "ipip", "gre", "sit", "vti", "can", "vcan")) return false; if (link->network->bond) @@ -193,6 +202,9 @@ static bool link_ipv6_enabled(Link *link) { if (manager_sysctl_ipv6_enabled(link->manager) == 0) return false; + if (STRPTR_IN_SET(link->kind, "can", "vcan")) + return false; + /* DHCPv6 client will not be started if no IPv6 link-local address is configured. */ return link_ipv6ll_enabled(link) || network_has_static_ipv6_addresses(link->network); } @@ -665,7 +677,7 @@ int link_get(Manager *m, int ifindex, Link **ret) { return 0; } -static void link_set_state(Link *link, LinkState state) { +void link_set_state(Link *link, LinkState state) { assert(link); if (link->state == state) diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index cc4cd070755..cf7206a6ff5 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -144,6 +144,7 @@ int link_down(Link *link, link_netlink_message_handler_t callback); void link_enter_failed(Link *link); int link_initialized(Link *link, sd_device *device); +void link_set_state(Link *link, LinkState state); void link_check_ready(Link *link); void link_update_operstate(Link *link, bool also_update_bond_master);