提交 1c5e0809 编写于 作者: M Moni Shoua 提交者: Doug Ledford

IB/core: Set correct payload length for RoCEv2 over IPv6

For GSI QP traffic, the count of the udp header bytes was missing from
the IPv6 header, fix that.

Fixes: 25f40220 ('IB/core: Initialize UD header structure with IP
                     and UDP headers')
Signed-off-by: NMoni Shoua <monis@mellanox.com>
Signed-off-by: NDoug Ledford <dledford@redhat.com>
上级 01581fb8
...@@ -322,6 +322,8 @@ int ib_ud_header_init(int payload_bytes, ...@@ -322,6 +322,8 @@ int ib_ud_header_init(int payload_bytes,
int immediate_present, int immediate_present,
struct ib_ud_header *header) struct ib_ud_header *header)
{ {
size_t udp_bytes = udp_present ? IB_UDP_BYTES : 0;
grh_present = grh_present && !ip_version; grh_present = grh_present && !ip_version;
memset(header, 0, sizeof *header); memset(header, 0, sizeof *header);
...@@ -353,7 +355,8 @@ int ib_ud_header_init(int payload_bytes, ...@@ -353,7 +355,8 @@ int ib_ud_header_init(int payload_bytes,
if (ip_version == 6 || grh_present) { if (ip_version == 6 || grh_present) {
header->grh.ip_version = 6; header->grh.ip_version = 6;
header->grh.payload_length = header->grh.payload_length =
cpu_to_be16((IB_BTH_BYTES + cpu_to_be16((udp_bytes +
IB_BTH_BYTES +
IB_DETH_BYTES + IB_DETH_BYTES +
payload_bytes + payload_bytes +
4 + /* ICRC */ 4 + /* ICRC */
...@@ -362,8 +365,6 @@ int ib_ud_header_init(int payload_bytes, ...@@ -362,8 +365,6 @@ int ib_ud_header_init(int payload_bytes,
} }
if (ip_version == 4) { if (ip_version == 4) {
int udp_bytes = udp_present ? IB_UDP_BYTES : 0;
header->ip4.ver = 4; /* version 4 */ header->ip4.ver = 4; /* version 4 */
header->ip4.hdr_len = 5; /* 5 words */ header->ip4.hdr_len = 5; /* 5 words */
header->ip4.tot_len = header->ip4.tot_len =
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册