DPDK patches and discussions
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: James Yu <ypyu2011@gmail.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] Passing VLAN traffic via l2fwd
Date: Thu, 23 Jan 2014 13:43:56 -0800	[thread overview]
Message-ID: <20140123134356.522e822a@nehalam.linuxnetplumber.net> (raw)
In-Reply-To: <CAFMB=kDokv2B=Gi8vMbovPA+QKeSy-zjhuNP2QJVsTaJ_sedmg@mail.gmail.com>

On Thu, 23 Jan 2014 11:27:14 -0800
James Yu <ypyu2011@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@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@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@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@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@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@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], &eth->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);
 }
 

  reply	other threads:[~2014-01-23 21:42 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-23  5:08 James Yu
2014-01-23  8:45 ` Daniel Kaminsky
2014-01-23 19:27   ` James Yu
2014-01-23 21:43     ` Stephen Hemminger [this message]
2014-01-24  6:07       ` James Yu
2014-01-28  3:13         ` James Yu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140123134356.522e822a@nehalam.linuxnetplumber.net \
    --to=stephen@networkplumber.org \
    --cc=dev@dpdk.org \
    --cc=ypyu2011@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).