> struct nsh_hdr { > ovs_be16 ver_flags_ttl_len; > uint8_t mdtype; > uint8_t np; > ovs_16aligned_be32 path_hdr; > union { > struct nsh_md1_ctx md1; > struct nsh_md2_tlv md2; > }; > }; >
The second member of the union should be a variable length array [] of struct nsh_md2_tlv struct nsh_hdr { ovs_be16 ver_flags_ttl_len; uint8_t mdtype; uint8_t np; ovs_16aligned_be32 path_hdr; union { struct nsh_md1_ctx md1; struct nsh_md2_tlv md2[]; }; }; That was the original design before Ben removed it due to missing support in Microsoft compiler. For the Kernel datapath we should go back to that. I wonder about the possible 16-bit alignment of the 32-bit fields, though. How is that handled in the kernel? Also struct nsh_md1_ctx has 32-bit members, which might not be 32-bit aligned in the packet. BR, Jan