Loading net/hsr/hsr_device.c +28 −9 Original line number Diff line number Diff line Loading @@ -46,31 +46,36 @@ static void __hsr_set_operstate(struct net_device *dev, int transition) } } void hsr_set_operstate(struct net_device *hsr_dev, struct net_device *slave1, struct net_device *slave2) static void hsr_set_operstate(struct net_device *hsr_dev, bool has_carrier) { if (!is_admin_up(hsr_dev)) { __hsr_set_operstate(hsr_dev, IF_OPER_DOWN); return; } if (is_slave_up(slave1) || is_slave_up(slave2)) if (has_carrier) __hsr_set_operstate(hsr_dev, IF_OPER_UP); else __hsr_set_operstate(hsr_dev, IF_OPER_LOWERLAYERDOWN); } void hsr_set_carrier(struct net_device *hsr_dev, struct net_device *slave1, struct net_device *slave2) static bool hsr_check_carrier(struct hsr_priv *hsr) { if (is_slave_up(slave1) || is_slave_up(slave2)) netif_carrier_on(hsr_dev); bool has_carrier; has_carrier = (is_slave_up(hsr->slave[0]) || is_slave_up(hsr->slave[1])); if (has_carrier) netif_carrier_on(hsr->dev); else netif_carrier_off(hsr_dev); netif_carrier_off(hsr->dev); return has_carrier; } void hsr_check_announce(struct net_device *hsr_dev, int old_operstate) static void hsr_check_announce(struct net_device *hsr_dev, unsigned char old_operstate) { struct hsr_priv *hsr; Loading @@ -89,6 +94,20 @@ void hsr_check_announce(struct net_device *hsr_dev, int old_operstate) del_timer(&hsr->announce_timer); } void hsr_check_carrier_and_operstate(struct hsr_priv *hsr) { unsigned char old_operstate; bool has_carrier; /* netif_stacked_transfer_operstate() cannot be used here since * it doesn't set IF_OPER_LOWERLAYERDOWN (?) */ old_operstate = hsr->dev->operstate; has_carrier = hsr_check_carrier(hsr); hsr_set_operstate(hsr->dev, has_carrier); hsr_check_announce(hsr->dev, old_operstate); } int hsr_get_max_mtu(struct hsr_priv *hsr) { Loading net/hsr/hsr_device.h +1 −5 Original line number Diff line number Diff line Loading @@ -18,11 +18,7 @@ void hsr_dev_setup(struct net_device *dev); int hsr_dev_finalize(struct net_device *hsr_dev, struct net_device *slave[2], unsigned char multicast_spec); void hsr_set_operstate(struct net_device *hsr_dev, struct net_device *slave1, struct net_device *slave2); void hsr_set_carrier(struct net_device *hsr_dev, struct net_device *slave1, struct net_device *slave2); void hsr_check_announce(struct net_device *hsr_dev, int old_operstate); void hsr_check_carrier_and_operstate(struct hsr_priv *hsr); bool is_hsr_master(struct net_device *dev); int hsr_get_max_mtu(struct hsr_priv *hsr); Loading net/hsr/hsr_main.c +1 −8 Original line number Diff line number Diff line Loading @@ -91,7 +91,6 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event, { struct net_device *slave, *other_slave; struct hsr_priv *hsr; int old_operstate; int mtu_max; int res; struct net_device *dev; Loading @@ -115,13 +114,7 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event, case NETDEV_UP: /* Administrative state DOWN */ case NETDEV_DOWN: /* Administrative state UP */ case NETDEV_CHANGE: /* Link (carrier) state changes */ old_operstate = hsr->dev->operstate; hsr_set_carrier(hsr->dev, slave, other_slave); /* netif_stacked_transfer_operstate() cannot be used here since * it doesn't set IF_OPER_LOWERLAYERDOWN (?) */ hsr_set_operstate(hsr->dev, slave, other_slave); hsr_check_announce(hsr->dev, old_operstate); hsr_check_carrier_and_operstate(hsr); break; case NETDEV_CHANGEADDR: Loading Loading
net/hsr/hsr_device.c +28 −9 Original line number Diff line number Diff line Loading @@ -46,31 +46,36 @@ static void __hsr_set_operstate(struct net_device *dev, int transition) } } void hsr_set_operstate(struct net_device *hsr_dev, struct net_device *slave1, struct net_device *slave2) static void hsr_set_operstate(struct net_device *hsr_dev, bool has_carrier) { if (!is_admin_up(hsr_dev)) { __hsr_set_operstate(hsr_dev, IF_OPER_DOWN); return; } if (is_slave_up(slave1) || is_slave_up(slave2)) if (has_carrier) __hsr_set_operstate(hsr_dev, IF_OPER_UP); else __hsr_set_operstate(hsr_dev, IF_OPER_LOWERLAYERDOWN); } void hsr_set_carrier(struct net_device *hsr_dev, struct net_device *slave1, struct net_device *slave2) static bool hsr_check_carrier(struct hsr_priv *hsr) { if (is_slave_up(slave1) || is_slave_up(slave2)) netif_carrier_on(hsr_dev); bool has_carrier; has_carrier = (is_slave_up(hsr->slave[0]) || is_slave_up(hsr->slave[1])); if (has_carrier) netif_carrier_on(hsr->dev); else netif_carrier_off(hsr_dev); netif_carrier_off(hsr->dev); return has_carrier; } void hsr_check_announce(struct net_device *hsr_dev, int old_operstate) static void hsr_check_announce(struct net_device *hsr_dev, unsigned char old_operstate) { struct hsr_priv *hsr; Loading @@ -89,6 +94,20 @@ void hsr_check_announce(struct net_device *hsr_dev, int old_operstate) del_timer(&hsr->announce_timer); } void hsr_check_carrier_and_operstate(struct hsr_priv *hsr) { unsigned char old_operstate; bool has_carrier; /* netif_stacked_transfer_operstate() cannot be used here since * it doesn't set IF_OPER_LOWERLAYERDOWN (?) */ old_operstate = hsr->dev->operstate; has_carrier = hsr_check_carrier(hsr); hsr_set_operstate(hsr->dev, has_carrier); hsr_check_announce(hsr->dev, old_operstate); } int hsr_get_max_mtu(struct hsr_priv *hsr) { Loading
net/hsr/hsr_device.h +1 −5 Original line number Diff line number Diff line Loading @@ -18,11 +18,7 @@ void hsr_dev_setup(struct net_device *dev); int hsr_dev_finalize(struct net_device *hsr_dev, struct net_device *slave[2], unsigned char multicast_spec); void hsr_set_operstate(struct net_device *hsr_dev, struct net_device *slave1, struct net_device *slave2); void hsr_set_carrier(struct net_device *hsr_dev, struct net_device *slave1, struct net_device *slave2); void hsr_check_announce(struct net_device *hsr_dev, int old_operstate); void hsr_check_carrier_and_operstate(struct hsr_priv *hsr); bool is_hsr_master(struct net_device *dev); int hsr_get_max_mtu(struct hsr_priv *hsr); Loading
net/hsr/hsr_main.c +1 −8 Original line number Diff line number Diff line Loading @@ -91,7 +91,6 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event, { struct net_device *slave, *other_slave; struct hsr_priv *hsr; int old_operstate; int mtu_max; int res; struct net_device *dev; Loading @@ -115,13 +114,7 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event, case NETDEV_UP: /* Administrative state DOWN */ case NETDEV_DOWN: /* Administrative state UP */ case NETDEV_CHANGE: /* Link (carrier) state changes */ old_operstate = hsr->dev->operstate; hsr_set_carrier(hsr->dev, slave, other_slave); /* netif_stacked_transfer_operstate() cannot be used here since * it doesn't set IF_OPER_LOWERLAYERDOWN (?) */ hsr_set_operstate(hsr->dev, slave, other_slave); hsr_check_announce(hsr->dev, old_operstate); hsr_check_carrier_and_operstate(hsr); break; case NETDEV_CHANGEADDR: Loading