On Thu, 23 Jan 2014 11:27:14 -0800 James Yu <ypyu2011 at gmail.com> wrote:
> Hi Daniel, > > Untagged traffic could be looped back. I am doing a one-directional loop > back. In the Frame tabe of the StreamBlock editor, I did the following > stream1: > destination address: MAC address of the receiving port of the guest > VM. (obtained from the debug print out when l2fwd is started, or ifconfig > before l2fwd is started) > stream2: > destination address: MAC address of the sending port of the guest VM > (obtained from the debug print out when l2fwd is started, or ifconfig > before l2fwd is started) > > > The only thing I add is to tag both the SR-IOV VF ports on the host with > the same tag using ip command and add that tag number as the VID to the > Spirent streams. After that that traffic can reach l2fwd which reported > forwarded the packets on the periodic printout. However the packets did not > reach the Spirent. > > Also it is exercising rte_ixgbevf_pmd codes as indicated during starting > l2fwd. > > EAL: Master core 0 is ready (tid=b77ab7d0) > > EAL: Core 1 is ready (tid=adffeb70) > > EAL: probe driver: 8086:100e rte_em_pmd > > EAL: probe driver: 8086:100e rte_em_pmd > > *EAL: probe driver: 8086:10ed rte_ixgbevf_pmd* > I wonder do I have to change any codes in the DPDK library or call certain > routines to setup the VLAN in the DPDK stack during starting the l2fwd ? > > > Were you able to send VLAN traffic from your iXia and looped back to your > iXia ? > > > Thanks > > James > > > > > On Thu, Jan 23, 2014 at 12:45 AM, Daniel Kaminsky < > daniel.kaminsky at infinitelocality.com> wrote: > > > Hi James, > > > > Did you try a non-tagged traffic? I suspect this is the limitation of the > > l2fwd or the requirements of Spirent. From my experience with Ixia, the L2 > > forward device must implement the ARP protocol (at least a subset of it). > > > > Also, notice that the l2fwd example sets the destination MAC address to > > "02:00:00:00:00:xx" which the Spirent might doesn't like. > > > > Daniel > > > > > > On Thu, Jan 23, 2014 at 7:08 AM, James Yu <ypyu2011 at gmail.com> wrote: > > > >> I could not pass tagged traffic through the l2fwd program running inside a > >> CentOS VM. The l2fwd program reported sending out all the packets received > >> from one port to the other port. But the outside Spirent tester could not > >> receive a packet at all. I am wondering maybe the tagged packets are > >> dropped somewhere in the rte_em_pmd or in the DPDK library. Anyone knows > >> how to pass/send VLAN traffic through the DPDK ? > >> > >> With tagged SR-IOV ports, Spirent and guest VM CentOS could ping each > >> other > >> without using DPDK. Once I used DPDK 1.3.1r2, I encountered issues with > >> sending out tagged packets out of DPDK to the host. > >> > >> I have done the following: > >> > >> On RHEL6.1 host > >> 1. setup the VLAN using "ip link set eth2 vf 0 vlan 3" for port 1 and "ip > >> link set eth3 vf 0 vlan 3" for port 2 > >> [root at cent64x64-137189 ~]# ip link show eth2 > >> 96: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP > >> qlen > >> 1000 > >> link/ether 90:e2:ba:2e:af:f0 brd ff:ff:ff:ff:ff:ff > >> vf 0 MAC 52:54:00:f9:9a:90, vlan 3 > >> [root at cent64x64-137189 ~]# ip link show eth3 > >> 98: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP > >> qlen > >> 1000 > >> link/ether 90:e2:ba:2e:af:f1 brd ff:ff:ff:ff:ff:ff > >> vf 0 MAC 52:54:00:30:37:98, vlan 3 > >> > >> 2. virsh configure SR-IOV hostdev > >> <interface type='hostdev' managed='yes'> > >> <mac address='52:54:00:f9:9a:90'/> > >> <source> > >> <address type='pci' domain='0x0000' bus='0x1a' slot='0x10' > >> function='0x0'/> > >> </source> > >> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' > >> function='0x0'/> > >> </interface> > >> <interface type='hostdev' managed='yes'> > >> <mac address='52:54:00:30:37:98'/> > >> <source> > >> <address type='pci' domain='0x0000' bus='0x1a' slot='0x10' > >> function='0x1'/> > >> </source> > >> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' > >> function='0x0'/> > >> </interface> > >> > >> [root at cent64x64-137189 ~]# lspci |grep Eth > >> 1a:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ > >> Network Connection (rev 01) > >> 1a:00.1 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ > >> Network Connection (rev 01) > >> 1a:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller > >> Virtual Function (rev 01) > >> 1a:10.1 Ethernet controller: Intel Corporation 82599 Ethernet Controller > >> Virtual Function (rev 01) > >> > >> > >> On guest VM > >> 1. check all the ports are started up and check their corresponding port > >> type. Use the two SR-IOV ports with device type as ixgbevf for l2fwd > >> [root at VirtualADX ~]# lspci |grep Eth > >> 00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet > >> Controller (rev 03) > >> 00:07.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet > >> Controller (rev 03) > >> 00:08.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller > >> Virtual Function (rev 01) > >> 00:09.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller > >> Virtual Function (rev 01) > >> 00:0a.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet > >> Controller (rev 03) > >> > >> 2. run this command: > >> /root/l2fwd -c 3 -n 1 -b 000:00:03.0 -b 000:00:07.0 -b > >> 000:00:0a.0 -- -q 1 -p 3 > >> > >> Although the l2fwd forwards all received tagged packets, the Spirent > >> tester did not receive any packet at all. > >> > > > > The VLAN offload bit in the mbuf is different for TX and RX. Probably would work with something like this: diff --git a/examples/l2fwd/main.c b/examples/l2fwd/main.c index 05ef330..70dbf85 100644 --- a/examples/l2fwd/main.c +++ b/examples/l2fwd/main.c @@ -289,6 +289,9 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid) /* src addr */ ether_addr_copy(&l2fwd_ports_eth_addr[dst_port], ð->s_addr); + if (m->ol_flags & PKT_RX_VLAN_PKT) + m->ol_flags |= PKT_TX_VLAN_PKT; + l2fwd_send_packet(m, (uint8_t) dst_port); }