void hsr_set_carrier(struct net_device *hsr_dev, struct net_device *slave1, struct net_device *slave2) { if (is_slave_up(slave1) || is_slave_up(slave2)) netif_carrier_on(hsr_dev); else netif_carrier_off(hsr_dev); }
void hsr_set_operstate(struct net_device *hsr_dev, struct net_device *slave1, struct net_device *slave2) { if (!is_admin_up(hsr_dev)) { __hsr_set_operstate(hsr_dev, IF_OPER_DOWN); return; } if (is_slave_up(slave1) || is_slave_up(slave2)) __hsr_set_operstate(hsr_dev, IF_OPER_UP); else __hsr_set_operstate(hsr_dev, IF_OPER_LOWERLAYERDOWN); }
static int hsr_dev_open(struct net_device *dev) { struct hsr_priv *hsr; struct hsr_port *port; char designation; hsr = netdev_priv(dev); designation = '\0'; rcu_read_lock(); hsr_for_each_port(hsr, port) { if (port->type == HSR_PT_MASTER) continue; switch (port->type) { case HSR_PT_SLAVE_A: designation = 'A'; break; case HSR_PT_SLAVE_B: designation = 'B'; break; default: designation = '?'; } if (!is_slave_up(port->dev)) netdev_warn(dev, "Slave %c (%s) is not up; please bring it up to get a fully working HSR network\n", designation, port->dev->name); } rcu_read_unlock(); if (designation == '\0') netdev_warn(dev, "No slave devices configured\n"); return 0; }
static int hsr_dev_open(struct net_device *dev) { struct hsr_priv *hsr_priv; int i; char *slave_name; hsr_priv = netdev_priv(dev); for (i = 0; i < HSR_MAX_SLAVE; i++) { if (hsr_priv->slave[i]) slave_name = hsr_priv->slave[i]->name; else slave_name = "null"; if (!is_slave_up(hsr_priv->slave[i])) netdev_warn(dev, "Slave %c (%s) is not up; please bring it up to get a working HSR network\n", 'A' + i, slave_name); } return 0; }
static bool hsr_check_carrier(struct hsr_port *master) { struct hsr_port *port; bool has_carrier; has_carrier = false; rcu_read_lock(); hsr_for_each_port(master->hsr, port) if ((port->type != HSR_PT_MASTER) && is_slave_up(port->dev)) { has_carrier = true; break; } rcu_read_unlock(); if (has_carrier) netif_carrier_on(master->dev); else netif_carrier_off(master->dev); return has_carrier; }