]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: make CAN devices go through LINK_STATE_CONFIGURING
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 20 May 2019 06:59:44 +0000 (15:59 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 22 May 2019 08:58:46 +0000 (17:58 +0900)
src/network/networkd-can.c
src/network/networkd-link.c
src/network/networkd-link.h

index 2df0e888f09580d0a8065567272a8c219243947d..5755df57bd70f3a4d2112c9b56f032eeec0d14ad 100644 (file)
@@ -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)) {
index bf8afc84cdbd7d0e2bb7d66f0cff21a664c93599..ce913d777b52608fb4281ba730288a29ff255a35 100644 (file)
@@ -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)
index cc4cd07075509855fb0eab9aa2475c28dcbea2d7..cf7206a6ff51ffbd6d3fdfee9ac9400ba87e36a9 100644 (file)
@@ -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);