NDIS_STATUS status;\r
uint32_t i, j = 1;\r
ULONG DataOffset = 0; \r
- uint32_t offset = sizeof(eth_hdr_t);\r
+ uint32_t EthHeaderOffset = sizeof(eth_hdr_t);\r
+ static const EthIPoIBHeaderOffset = EthHeaderOffset - sizeof(ipoib_hdr_t);\r
\r
PERF_DECLARE( SendCopy );\r
\r
****************************/\r
\r
p_desc->send_wr[0].local_ds[j].vaddr = \r
- p_sgl->Elements[0].Address.QuadPart + lso_header_size;\r
+ p_sgl->Elements[0].Address.QuadPart + lso_header_size + DataOffset + EthIPoIBHeaderOffset;\r
p_desc->send_wr[0].local_ds[j].length = \r
- p_sgl->Elements[0].Length - lso_header_size;\r
+ p_sgl->Elements[0].Length - lso_header_size - DataOffset - EthIPoIBHeaderOffset;\r
p_desc->send_wr[0].local_ds[j].lkey = s_buf->p_port->ib_mgr.lkey;\r
/* Set the number of data segments. */\r
p_desc->send_wr[0].wr.num_ds = 1;\r
return NDIS_STATUS_SUCCESS;\r
} \r
}\r
- else while( offset )\r
+ else while( EthHeaderOffset )\r
{\r
- if( p_sgl->Elements[i].Length <= offset )\r
+ if( p_sgl->Elements[i].Length <= EthHeaderOffset )\r
{\r
- offset -= p_sgl->Elements[i++].Length;\r
+ EthHeaderOffset -= p_sgl->Elements[i++].Length;\r
}\r
else\r
{\r
p_desc->send_wr[0].local_ds[j].vaddr =\r
- p_sgl->Elements[i].Address.QuadPart + offset + DataOffset;\r
+ p_sgl->Elements[i].Address.QuadPart + EthHeaderOffset + DataOffset;\r
p_desc->send_wr[0].local_ds[j].length =\r
- p_sgl->Elements[i].Length - offset - DataOffset;\r
+ p_sgl->Elements[i].Length - EthHeaderOffset - DataOffset;\r
p_desc->send_wr[0].local_ds[j].lkey = s_buf->p_port->ib_mgr.lkey;\r
i++;\r
j++;\r