diff options
author | ke ge - Sun Microsystems - Beijing China <Kevin.Ge@Sun.COM> | 2010-02-26 14:35:02 +0800 |
---|---|---|
committer | ke ge - Sun Microsystems - Beijing China <Kevin.Ge@Sun.COM> | 2010-02-26 14:35:02 +0800 |
commit | 9469b38fa64cb68eac7cc7f4b7595b0de1fb77d6 (patch) | |
tree | fb67201cc7ad1a5acc23b97a166f09c787b241e3 /usr/src/uts | |
parent | 6ba597c56d749c61b4f783157f63196d7b2445f0 (diff) | |
download | illumos-gate-9469b38fa64cb68eac7cc7f4b7595b0de1fb77d6.tar.gz |
6919407 no longer able to configure IPv6 for ibd with x86 systems
Diffstat (limited to 'usr/src/uts')
-rw-r--r-- | usr/src/uts/common/io/ib/clients/ibd/ibd.c | 19 | ||||
-rw-r--r-- | usr/src/uts/common/sys/ib/clients/ibd/ibd.h | 12 |
2 files changed, 27 insertions, 4 deletions
diff --git a/usr/src/uts/common/io/ib/clients/ibd/ibd.c b/usr/src/uts/common/io/ib/clients/ibd/ibd.c index d734527364..b3a39a2efc 100644 --- a/usr/src/uts/common/io/ib/clients/ibd/ibd.c +++ b/usr/src/uts/common/io/ib/clients/ibd/ibd.c @@ -4946,6 +4946,8 @@ ibd_start(ibd_state_t *state) ibd_h2n_mac(&state->id_macaddr, IBD_MAC_ADDR_RC + state->id_qpnum, state->id_sgid.gid_prefix, state->id_sgid.gid_guid); + ibd_h2n_mac(&state->rc_macaddr_loopback, state->id_qpnum, + state->id_sgid.gid_prefix, state->id_sgid.gid_guid); } else { ibd_h2n_mac(&state->id_macaddr, state->id_qpnum, state->id_sgid.gid_prefix, state->id_sgid.gid_guid); @@ -6867,10 +6869,19 @@ ibd_process_rx(ibd_state_t *state, ibd_rwqe_t *rwqe, ibt_wc_t *wc) phdr->ib_grh.ipoib_sqpn = htonl(wc->wc_qpn); /* if it is loop back packet, just drop it. */ - if (bcmp(&phdr->ib_grh.ipoib_sqpn, &state->id_macaddr, - IPOIB_ADDRL) == 0) { - freemsg(mp); - return (NULL); + if (state->id_enable_rc) { + if (bcmp(&phdr->ib_grh.ipoib_sqpn, + &state->rc_macaddr_loopback, + IPOIB_ADDRL) == 0) { + freemsg(mp); + return (NULL); + } + } else { + if (bcmp(&phdr->ib_grh.ipoib_sqpn, &state->id_macaddr, + IPOIB_ADDRL) == 0) { + freemsg(mp); + return (NULL); + } } ovbcopy(&phdr->ib_grh.ipoib_sqpn, &phdr->ib_src, diff --git a/usr/src/uts/common/sys/ib/clients/ibd/ibd.h b/usr/src/uts/common/sys/ib/clients/ibd/ibd.h index eaf2a66190..cb8bcc2e0d 100644 --- a/usr/src/uts/common/sys/ib/clients/ibd/ibd.h +++ b/usr/src/uts/common/sys/ib/clients/ibd/ibd.h @@ -818,6 +818,18 @@ typedef struct ibd_state_s { int rc_mtu; uint32_t rc_tx_max_sqseg; + /* + * In IPoIB over Reliable Connected mode, its mac address is added + * an "IBD_MAC_ADDR_RC" prefix. But for loopback filter in function + * ibd_process_rx(), the input mac address should not include the + * "IBD_MAC_ADDR_RC" prefix. + * + * So, we introduce the rc_macaddr_loopback for the loopback filter in + * IPoIB over Reliable Connected mode. + * + * rc_macaddr_loopback = id_macaddr excludes "IBD_MAC_ADDR_RC" prefix. + */ + ipoib_mac_t rc_macaddr_loopback; ibt_srv_hdl_t rc_listen_hdl; ibt_sbind_hdl_t rc_listen_bind; |