[SCSI] fcoe libfcoe: use correct FC-MAP for VN2VN mode
In VN2VN mode, map_dest means to use the default VN2VN OUI. Change code that uses the default FCoE OUI to use the one set in the fcoe_ctlr struct. Signed-off-by: Joe Eykholt <jeykholt@cisco.com> Signed-off-by: Robert Love <robert.w.love@intel.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
committed by
James Bottomley
parent
5554345bc5
commit
cd229e42eb
@@ -1534,11 +1534,9 @@ int fcoe_xmit(struct fc_lport *lport, struct fc_frame *fp)
|
|||||||
/* fill up mac and fcoe headers */
|
/* fill up mac and fcoe headers */
|
||||||
eh = eth_hdr(skb);
|
eh = eth_hdr(skb);
|
||||||
eh->h_proto = htons(ETH_P_FCOE);
|
eh->h_proto = htons(ETH_P_FCOE);
|
||||||
|
memcpy(eh->h_dest, fcoe->ctlr.dest_addr, ETH_ALEN);
|
||||||
if (fcoe->ctlr.map_dest)
|
if (fcoe->ctlr.map_dest)
|
||||||
fc_fcoe_set_mac(eh->h_dest, fh->fh_d_id);
|
memcpy(eh->h_dest + 3, fh->fh_d_id, 3);
|
||||||
else
|
|
||||||
/* insert GW address */
|
|
||||||
memcpy(eh->h_dest, fcoe->ctlr.dest_addr, ETH_ALEN);
|
|
||||||
|
|
||||||
if (unlikely(fcoe->ctlr.flogi_oxid != FC_XID_UNKNOWN))
|
if (unlikely(fcoe->ctlr.flogi_oxid != FC_XID_UNKNOWN))
|
||||||
memcpy(eh->h_source, fcoe->ctlr.ctl_src_addr, ETH_ALEN);
|
memcpy(eh->h_source, fcoe->ctlr.ctl_src_addr, ETH_ALEN);
|
||||||
|
@@ -152,6 +152,20 @@ static inline int fcoe_ctlr_fcf_usable(struct fcoe_fcf *fcf)
|
|||||||
return (fcf->flags & flags) == flags;
|
return (fcf->flags & flags) == flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fcoe_ctlr_map_dest() - Set flag and OUI for mapping destination addresses
|
||||||
|
* @fip: The FCoE controller
|
||||||
|
*/
|
||||||
|
static void fcoe_ctlr_map_dest(struct fcoe_ctlr *fip)
|
||||||
|
{
|
||||||
|
if (fip->mode == FIP_MODE_VN2VN)
|
||||||
|
hton24(fip->dest_addr, FIP_VN_FC_MAP);
|
||||||
|
else
|
||||||
|
hton24(fip->dest_addr, FIP_DEF_FC_MAP);
|
||||||
|
hton24(fip->dest_addr + 3, 0);
|
||||||
|
fip->map_dest = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fcoe_ctlr_init() - Initialize the FCoE Controller instance
|
* fcoe_ctlr_init() - Initialize the FCoE Controller instance
|
||||||
* @fip: The FCoE controller to initialize
|
* @fip: The FCoE controller to initialize
|
||||||
@@ -345,7 +359,7 @@ static void fcoe_ctlr_reset(struct fcoe_ctlr *fip)
|
|||||||
fip->port_ka_time = 0;
|
fip->port_ka_time = 0;
|
||||||
fip->sol_time = 0;
|
fip->sol_time = 0;
|
||||||
fip->flogi_oxid = FC_XID_UNKNOWN;
|
fip->flogi_oxid = FC_XID_UNKNOWN;
|
||||||
fip->map_dest = 0;
|
fcoe_ctlr_map_dest(fip);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -573,11 +587,11 @@ int fcoe_ctlr_els_send(struct fcoe_ctlr *fip, struct fc_lport *lport,
|
|||||||
fip->flogi_count++;
|
fip->flogi_count++;
|
||||||
if (fip->flogi_count < 3)
|
if (fip->flogi_count < 3)
|
||||||
goto drop;
|
goto drop;
|
||||||
fip->map_dest = 1;
|
fcoe_ctlr_map_dest(fip);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (fip->state == FIP_ST_NON_FIP)
|
if (fip->state == FIP_ST_NON_FIP)
|
||||||
fip->map_dest = 1;
|
fcoe_ctlr_map_dest(fip);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fip->state == FIP_ST_NON_FIP)
|
if (fip->state == FIP_ST_NON_FIP)
|
||||||
@@ -1411,6 +1425,7 @@ static void fcoe_ctlr_timer_work(struct work_struct *work)
|
|||||||
"Fibre-Channel Forwarder MAC %pM\n",
|
"Fibre-Channel Forwarder MAC %pM\n",
|
||||||
fip->lp->host->host_no, sel->fcf_mac);
|
fip->lp->host->host_no, sel->fcf_mac);
|
||||||
memcpy(fip->dest_addr, sel->fcf_mac, ETH_ALEN);
|
memcpy(fip->dest_addr, sel->fcf_mac, ETH_ALEN);
|
||||||
|
fip->map_dest = 0;
|
||||||
fip->port_ka_time = jiffies +
|
fip->port_ka_time = jiffies +
|
||||||
msecs_to_jiffies(FIP_VN_KA_PERIOD);
|
msecs_to_jiffies(FIP_VN_KA_PERIOD);
|
||||||
fip->ctlr_ka_time = jiffies + sel->fka_period;
|
fip->ctlr_ka_time = jiffies + sel->fka_period;
|
||||||
@@ -1527,7 +1542,7 @@ int fcoe_ctlr_recv_flogi(struct fcoe_ctlr *fip, struct fc_lport *lport,
|
|||||||
* Otherwise we use the FCoE gateway addr
|
* Otherwise we use the FCoE gateway addr
|
||||||
*/
|
*/
|
||||||
if (!compare_ether_addr(sa, (u8[6])FC_FCOE_FLOGI_MAC)) {
|
if (!compare_ether_addr(sa, (u8[6])FC_FCOE_FLOGI_MAC)) {
|
||||||
fip->map_dest = 1;
|
fcoe_ctlr_map_dest(fip);
|
||||||
} else {
|
} else {
|
||||||
memcpy(fip->dest_addr, sa, ETH_ALEN);
|
memcpy(fip->dest_addr, sa, ETH_ALEN);
|
||||||
fip->map_dest = 0;
|
fip->map_dest = 0;
|
||||||
@@ -2426,6 +2441,7 @@ static void fcoe_ctlr_vn_timeout(struct fcoe_ctlr *fip)
|
|||||||
new_port_id = fip->port_id;
|
new_port_id = fip->port_id;
|
||||||
hton24(mac, FIP_VN_FC_MAP);
|
hton24(mac, FIP_VN_FC_MAP);
|
||||||
hton24(mac + 3, new_port_id);
|
hton24(mac + 3, new_port_id);
|
||||||
|
fcoe_ctlr_map_dest(fip);
|
||||||
fip->update_mac(fip->lp, mac);
|
fip->update_mac(fip->lp, mac);
|
||||||
fcoe_ctlr_vn_send_claim(fip);
|
fcoe_ctlr_vn_send_claim(fip);
|
||||||
next_time = jiffies + msecs_to_jiffies(FIP_VN_ANN_WAIT);
|
next_time = jiffies + msecs_to_jiffies(FIP_VN_ANN_WAIT);
|
||||||
|
Reference in New Issue
Block a user