Hi, On 04/25/2016 04:35 AM, zhang.xinghua1 at zte.com.cn wrote: > When using I350 working on SR-IOV mode, we got confused that byte order > of vlan_tci in the VF received packet descriptor is different when the > packet source is different. > > 1) Packets from VF to VF, the byte order is big-endian. (e.g. 0xF00) > 2) Packets from PC to VF, the byte order is little-endian. (e.g. 0xF) > > Below is the testing net-work: > VM0 VM1 PC > VF0 VF1 | > | | | > +------+------+ | > | | > PF | > hypervisor | > SR-IOV NIC | > | | > | VLAN 15 | > +---------switch-------+ > > > We make a breakpoint at the following line of eth_igb_recv_pkts, the > vlan_tci > we observed that everytime. > > uint16_t > eth_igb_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, > uint16_t nb_pkts) > > /* Only valid if PKT_RX_VLAN_PKT set in pkt_flags */ > rxm->vlan_tci = rte_le_to_cpu_16(rxd.wb.upper.vlan);
In rte_mbuf.h, it is specified that these values (vlan_tci and vlan_tci_outer) must be stored in CPU order. It's probably a driver or hardware issue. Note that in linux there is something that looks similar to your issue: http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/igb/igb_main.c#L1278 /* On i350, i354, i210, and i211, loopback VLAN packets * have the tag byte-swapped. */ if (adapter->hw.mac.type >= e1000_i350) set_bit(IGB_RING_FLAG_RX_LB_VLAN_BSWAP, &ring->flags); I think you could check if the same thing is done in the dpdk driver. > -------------------------------------------------------- > ZTE Information Security Notice: The information contained in this mail (and > any attachment transmitted herewith) is privileged and confidential and is > intended for the exclusive use of the addressee(s). If you are not an > intended recipient, any disclosure, reproduction, distribution or other > dissemination or use of the information contained is strictly prohibited. If > you have received this mail in error, please delete it and notify us > immediately. > This notice should be removed in public emails. Regards, Olivier