From af9ba57aa2b734bfef7f1fc277e43d8c4bd6d8eb Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 20 May 2019 15:59:44 +0900 Subject: [PATCH] network: make CAN devices go through LINK_STATE_CONFIGURING --- src/network/networkd-can.c | 2 ++ src/network/networkd-link.c | 20 ++++++++++++++++---- src/network/networkd-link.h | 1 + 3 files changed, 19 insertions(+), 4 deletions(-) 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); -- 2.47.3