Trying to support RoCEv2 in our product. We have a particular network configuration where we segregate traffic using internal vlans. Incoming traffic comes on a particular internal vlan (let’s say vlan-10), and we expect outgoing traffic to go over an external vlan (vlan-id different from that of internal vlan. let’s say vlan-500).
gid table has the correct mapping…, and IP’s in the packet is also right. i.e.,
CLIENT-FACING-CLUSTER-IP → vlan-500
INTERNAL-IP → vlan-10
For Reliable connection Ack’s, looks like firmware is not using gid table to set vlan-id in the Ack. Looks to be a bug. Can anyone confirm? Any workaround?
For reference, gid table is set in kernel (mlx5_core_roce_gid_set) using this structure.
struct mlx5_ifc_roce_addr_layout_bits {
u8 source_l3_address[16][0x8];
u8 reserved_at_80[0x3];
u8 vlan_valid[0x1];
u8 vlan_id[0xc];
u8 source_mac_47_32[0x10];
u8 source_mac_31_0[0x20];
u8 reserved_at_c0[0x14];
u8 roce_l3_type[0x4];
u8 roce_version[0x8];
u8 reserved_at_e0[0x20];
};
For eg., for above vlan-id’s, incoming packet has
src-ip: CLIENT-IP
dest-ip: CLIENT-FACING-CLUSTER-IP
vlan-id: 10
My expectation is that RC Ack be built as:
src-ip: CLIENT-FACING-CLUSTER-IP
dest-ip: CLIENT-IP
vlan-id: 500