From 9469b38fa64cb68eac7cc7f4b7595b0de1fb77d6 Mon Sep 17 00:00:00 2001 From: ke ge - Sun Microsystems - Beijing China Date: Fri, 26 Feb 2010 14:35:02 +0800 Subject: 6919407 no longer able to configure IPv6 for ibd with x86 systems --- usr/src/uts/common/io/ib/clients/ibd/ibd.c | 19 +++++++++++++++---- usr/src/uts/common/sys/ib/clients/ibd/ibd.h | 12 ++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) (limited to 'usr/src') 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; -- cgit v1.2.3