diff options
author | Yi Zou <yi.zou@intel.com> | 2012-04-20 15:16:49 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-05-10 03:59:26 -0400 |
commit | d227f029c2e1e7c226372a6c11969d33ed146f6f (patch) | |
tree | 651fb19e5e4de2aaa7ef148d9d3222500af5cc2e /drivers/scsi/fcoe | |
parent | 949e71f17d9a5c59fa7b02cce3b548384bff1c92 (diff) |
[SCSI] libfcoe: fix VN2VN N_Port_ID Beacon source MAC
FC-BB-6 v1.04 7.9.8.14 N_Port_ID Beacon:
"A N_Port_ID Beacon is multicast and uses the VN_Port MAC address as source
address."
Currently, libfcoe is using ENode MAC, this seems ok and functionality wise
not a problem in my back to back testing setup, however, just fix this to
make libfcoe VN2VN support more spec compliant.
Signed-off-by: Yi Zou <yi.zou@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/fcoe')
-rw-r--r-- | drivers/scsi/fcoe/fcoe_ctlr.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c index 249a106888d9..5a4c7250aa77 100644 --- a/drivers/scsi/fcoe/fcoe_ctlr.c +++ b/drivers/scsi/fcoe/fcoe_ctlr.c | |||
@@ -1883,7 +1883,13 @@ static void fcoe_ctlr_vn_send(struct fcoe_ctlr *fip, | |||
1883 | frame = (struct fip_frame *)skb->data; | 1883 | frame = (struct fip_frame *)skb->data; |
1884 | memset(frame, 0, len); | 1884 | memset(frame, 0, len); |
1885 | memcpy(frame->eth.h_dest, dest, ETH_ALEN); | 1885 | memcpy(frame->eth.h_dest, dest, ETH_ALEN); |
1886 | memcpy(frame->eth.h_source, fip->ctl_src_addr, ETH_ALEN); | 1886 | |
1887 | if (sub == FIP_SC_VN_BEACON) { | ||
1888 | hton24(frame->eth.h_source, FIP_VN_FC_MAP); | ||
1889 | hton24(frame->eth.h_source + 3, fip->port_id); | ||
1890 | } else { | ||
1891 | memcpy(frame->eth.h_source, fip->ctl_src_addr, ETH_ALEN); | ||
1892 | } | ||
1887 | frame->eth.h_proto = htons(ETH_P_FIP); | 1893 | frame->eth.h_proto = htons(ETH_P_FIP); |
1888 | 1894 | ||
1889 | frame->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER); | 1895 | frame->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER); |