#include <iba/ib_al.h>\r
#include "al_dev.h"\r
\r
+#define IS_FULL_MEMBER_PKEY(pkey) (0x8000 & (pkey))\r
\r
typedef enum\r
{\r
}\r
else\r
{\r
- cnt = strlen(partKey) + sprintf(partKey + strlen(partKey),"%s:",tmp);\r
+ sprintf(partKey + strlen(partKey),"%s:",tmp);\r
+ cnt = strlen(partKey);\r
}\r
} \r
\r
}\r
else\r
{\r
- printf("No pkey to add\n");\r
+ printf("Required pkeys already exist\n");\r
retval = 1;\r
}\r
RegCloseKey( reg_handle );\r
sscanf(cmd[i],"0x%x",&input->u.guid_pkey.pkeys[input->u.guid_pkey.pkey_num]);\r
else\r
sscanf(cmd[i],"%x",&input->u.guid_pkey.pkeys[input->u.guid_pkey.pkey_num]);\r
+\r
+ if (! IS_FULL_MEMBER_PKEY(input->u.guid_pkey.pkeys[input->u.guid_pkey.pkey_num]))\r
+ {\r
+ printf("partial member pkey %s is not suported\n",cmd[i]);\r
+ return 0;\r
+ }\r
input->u.guid_pkey.pkey_num++;\r
}\r
return 1;\r
mac_addr_t conf_mac;\r
uint32_t mc_leave_rescan;\r
uint32_t guid_mask;\r
+ uint32_t bc_join_retry;\r
} ipoib_params_t;\r
/*\r
* FIELDS\r
{NDIS_STRING_CONST("RecvRatio"), 1, IPOIB_OFFSET(recv_pool_ratio), IPOIB_SIZE(recv_pool_ratio), 1, 1, 10},\r
{NDIS_STRING_CONST("PayloadMtu"), 1, IPOIB_OFFSET(payload_mtu), IPOIB_SIZE(payload_mtu), 2044, 60, 4092},\r
{NDIS_STRING_CONST("lso"), 0, IPOIB_OFFSET(lso), IPOIB_SIZE(lso), 0, 0, 1},\r
- {NDIS_STRING_CONST("MCLeaveRescan"), 1, IPOIB_OFFSET(mc_leave_rescan), IPOIB_SIZE(mc_leave_rescan), 260, 1, 3600}\r
+ {NDIS_STRING_CONST("MCLeaveRescan"), 1, IPOIB_OFFSET(mc_leave_rescan), IPOIB_SIZE(mc_leave_rescan), 260, 1, 3600},\r
+ {NDIS_STRING_CONST("BCJoinRetry"), 1, IPOIB_OFFSET(bc_join_retry), IPOIB_SIZE(bc_join_retry), 50, 0, 1000}\r
\r
}; \r
\r
CL_ASSERT( p_port->p_adapter->state == IB_PNP_PORT_ADD ||\r
p_port->p_adapter->state == IB_PNP_PORT_DOWN ||\r
p_port->p_adapter->state == IB_PNP_PORT_INIT );\r
- status = __port_get_bcast( p_port );\r
+ if(++p_port->bc_join_retry_cnt < p_port->p_adapter->params.bc_join_retry)\r
+ {\r
+ status = __port_get_bcast( p_port );\r
+ }\r
+ else\r
+ {\r
+ NdisWriteErrorLogEntry( p_port->p_adapter->h_adapter,\r
+ EVENT_IPOIB_BCAST_JOIN, 1, p_mcast_rec->status );\r
+ p_port->bc_join_retry_cnt = 0;\r
+ }\r
}\r
else\r
{\r
return;\r
}\r
cl_obj_unlock( &p_port->obj );\r
-\r
+ p_port->bc_join_retry_cnt = 0;\r
status = __endpt_mgr_add_bcast( p_port, p_mcast_rec );\r
if( status != IB_SUCCESS )\r
{\r
uint16_t pkey_index;\r
KDPC gc_dpc;\r
KTIMER gc_timer;\r
+ uint32_t bc_join_retry_cnt;\r
ipoib_hdr_t hdr[1]; /* Must be last! */\r
\r
} ipoib_port_t;\r
HKR, Ndi\Params\guid_mask, Min, 0, "0"\r
HKR, Ndi\Params\guid_mask, Max, 0, "252"\r
\r
+HKR, Ndi\Params\BCJoinRetry, ParamDesc, 0, "Number of retries connecting to bc"\r
+HKR, Ndi\Params\BCJoinRetry, Type, 0, "dword"\r
+HKR, Ndi\Params\BCJoinRetry, Default, 0, "50"\r
+HKR, Ndi\Params\BCJoinRetry, Optional, 0, "0"\r
+HKR, Ndi\Params\BCJoinRetry, Min, 0, "0"\r
+HKR, Ndi\Params\BCJoinRetry, Max, 0, "1000"\r
+\r
+\r
[IpoibService]\r
DisplayName = %IpoibServiceDispName%\r
ServiceType = 1 ;%SERVICE_KERNEL_DRIVER%\r