예제 #1
0
파일: slave.c 프로젝트: qipengzhang/linux
static int dsa_slave_port_attr_set(struct net_device *dev,
				   struct switchdev_attr *attr)
{
	int ret = 0;

	switch (attr->id) {
	case SWITCHDEV_ATTR_PORT_STP_STATE:
		if (attr->trans == SWITCHDEV_TRANS_COMMIT)
			ret = dsa_slave_stp_update(dev, attr->u.stp_state);
		break;
	default:
		ret = -EOPNOTSUPP;
		break;
	}

	return ret;
}
예제 #2
0
파일: slave.c 프로젝트: andy-shev/linux
static int dsa_slave_bridge_port_leave(struct net_device *dev)
{
	struct dsa_slave_priv *p = netdev_priv(dev);
	struct dsa_switch *ds = p->parent;
	int ret = -EOPNOTSUPP;


	if (ds->drv->port_leave_bridge)
		ret = ds->drv->port_leave_bridge(ds, p->port,
						 dsa_slave_br_port_mask(ds, p->bridge_dev));

	p->bridge_dev = NULL;

	/* Port left the bridge, put in BR_STATE_DISABLED by the bridge layer,
	 * so allow it to be in BR_STATE_FORWARDING to be kept functional
	 */
	dsa_slave_stp_update(dev, BR_STATE_FORWARDING);

	return ret;
}