fcoe: Update multicast addresses on FIP mode change
When the FIP mode is changed we need to update the multicast addresses to ensure we get the correct frames. Signed-off-by: Hannes Reinecke <hare@suse.com> Acked-by: Johannes Thumshirn <jth@kernel.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
eb44c4e2fe
commit
a87dccc75b
|
@ -115,7 +115,7 @@ static int fcoe_disable(struct net_device *netdev);
|
|||
/* fcoe_syfs control interface handlers */
|
||||
static int fcoe_ctlr_alloc(struct net_device *netdev);
|
||||
static int fcoe_ctlr_enabled(struct fcoe_ctlr_device *cdev);
|
||||
|
||||
static void fcoe_ctlr_mode(struct fcoe_ctlr_device *ctlr_dev);
|
||||
|
||||
static struct fc_seq *fcoe_elsct_send(struct fc_lport *,
|
||||
u32 did, struct fc_frame *,
|
||||
|
@ -146,8 +146,9 @@ static void fcoe_set_vport_symbolic_name(struct fc_vport *);
|
|||
static void fcoe_set_port_id(struct fc_lport *, u32, struct fc_frame *);
|
||||
static void fcoe_fcf_get_vlan_id(struct fcoe_fcf_device *);
|
||||
|
||||
|
||||
static struct fcoe_sysfs_function_template fcoe_sysfs_templ = {
|
||||
.set_fcoe_ctlr_mode = fcoe_ctlr_set_fip_mode,
|
||||
.set_fcoe_ctlr_mode = fcoe_ctlr_mode,
|
||||
.set_fcoe_ctlr_enabled = fcoe_ctlr_enabled,
|
||||
.get_fcoe_ctlr_link_fail = fcoe_ctlr_get_lesb,
|
||||
.get_fcoe_ctlr_vlink_fail = fcoe_ctlr_get_lesb,
|
||||
|
@ -1975,6 +1976,32 @@ static int fcoe_ctlr_enabled(struct fcoe_ctlr_device *cdev)
|
|||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_ctlr_mode() - Switch FIP mode
|
||||
* @cdev: The FCoE Controller that is being modified
|
||||
*
|
||||
* When the FIP mode has been changed we need to update
|
||||
* the multicast addresses to ensure we get the correct
|
||||
* frames.
|
||||
*/
|
||||
static void fcoe_ctlr_mode(struct fcoe_ctlr_device *ctlr_dev)
|
||||
{
|
||||
struct fcoe_ctlr *ctlr = fcoe_ctlr_device_priv(ctlr_dev);
|
||||
struct fcoe_interface *fcoe = fcoe_ctlr_priv(ctlr);
|
||||
|
||||
if (ctlr_dev->mode == FIP_CONN_TYPE_VN2VN &&
|
||||
ctlr->mode != FIP_MODE_VN2VN) {
|
||||
dev_mc_del(fcoe->netdev, FIP_ALL_ENODE_MACS);
|
||||
dev_mc_add(fcoe->netdev, FIP_ALL_VN2VN_MACS);
|
||||
dev_mc_add(fcoe->netdev, FIP_ALL_P2P_MACS);
|
||||
} else if (ctlr->mode != FIP_MODE_FABRIC) {
|
||||
dev_mc_del(fcoe->netdev, FIP_ALL_VN2VN_MACS);
|
||||
dev_mc_del(fcoe->netdev, FIP_ALL_P2P_MACS);
|
||||
dev_mc_add(fcoe->netdev, FIP_ALL_ENODE_MACS);
|
||||
}
|
||||
fcoe_ctlr_set_fip_mode(ctlr_dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* fcoe_destroy() - Destroy a FCoE interface
|
||||
* @netdev : The net_device object the Ethernet interface to create on
|
||||
|
|
Loading…
Reference in New Issue