network: make CAN devices go through LINK_STATE_CONFIGURING

This commit is contained in:
Yu Watanabe 2019-05-20 15:59:44 +09:00
parent 671dacdf0c
commit af9ba57aa2
3 changed files with 19 additions and 4 deletions

View 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)) {

View 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)

View 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);