DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev]  Passing VLAN traffic via l2fwd
@ 2014-01-23  5:08 James Yu
  2014-01-23  8:45 ` Daniel Kaminsky
  0 siblings, 1 reply; 6+ messages in thread
From: James Yu @ 2014-01-23  5:08 UTC (permalink / raw)
  To: dev

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.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] Passing VLAN traffic via l2fwd
  2014-01-23  5:08 [dpdk-dev] Passing VLAN traffic via l2fwd James Yu
@ 2014-01-23  8:45 ` Daniel Kaminsky
  2014-01-23 19:27   ` James Yu
  0 siblings, 1 reply; 6+ messages in thread
From: Daniel Kaminsky @ 2014-01-23  8:45 UTC (permalink / raw)
  To: James Yu; +Cc: dev

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.
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] Passing VLAN traffic via l2fwd
  2014-01-23  8:45 ` Daniel Kaminsky
@ 2014-01-23 19:27   ` James Yu
  2014-01-23 21:43     ` Stephen Hemminger
  0 siblings, 1 reply; 6+ messages in thread
From: James Yu @ 2014-01-23 19:27 UTC (permalink / raw)
  To: Daniel Kaminsky; +Cc: dev

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.
>>
>
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] Passing VLAN traffic via l2fwd
  2014-01-23 19:27   ` James Yu
@ 2014-01-23 21:43     ` Stephen Hemminger
  2014-01-24  6:07       ` James Yu
  0 siblings, 1 reply; 6+ messages in thread
From: Stephen Hemminger @ 2014-01-23 21:43 UTC (permalink / raw)
  To: James Yu; +Cc: dev

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);
 }
 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] Passing VLAN traffic via l2fwd
  2014-01-23 21:43     ` Stephen Hemminger
@ 2014-01-24  6:07       ` James Yu
  2014-01-28  3:13         ` James Yu
  0 siblings, 1 reply; 6+ messages in thread
From: James Yu @ 2014-01-24  6:07 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev

Stephen,

I added that to the l2fwd main.c and it is still not received by the
Spirent. I obtained the stat using rte_eth_stats_get() and printout the
following when I send only one VLAN pkt
ipackets: increased by 1
opackets: no change (pkt not sent out by the device)
ierrors, oerrors, otxerror, otxdiscard: all 0

The same thing with 10 packets which increase 10 ipackets counts.

I found out that the rte_eth_stats_get() obtains the stats from
ixgbevf_dev_stats_get(). Is this expected for SR-IOV that uses
ixgbe_ethdev.c ?
If that's correct, I think this tells me that the tagged packet is received
by the VF PMD codes but not sent out and has no error or packets dropped.

So it was not sent out of the VF PMD. But why there is not error or packet
dropped. Where did it go ? I am trying to find out where it got dropped and
how to fix it.

I tried DPDK1.5.2r1. It exhibits the same issue even with the patch.

Thanks

James



On Thu, Jan 23, 2014 at 1:43 PM, Stephen Hemminger <
stephen@networkplumber.org> wrote:

> 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);
>  }
>
>
>
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] Passing VLAN traffic via l2fwd
  2014-01-24  6:07       ` James Yu
@ 2014-01-28  3:13         ` James Yu
  0 siblings, 0 replies; 6+ messages in thread
From: James Yu @ 2014-01-28  3:13 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev

Some more discovery.

That flag PKT_TX_VLAN_PKT eventually send the following command to the
chips (ixgbe_xmit_pkts(), tx_desc_vlan_flags_to_cmdtype()) . Is this
actually adding a VLAN tag during tx ?



#define IXGBE_ADVTXD_DCMD_VLE           IXGBE_TXD_CMD_VLE  /* VLAN pkt
enable */

#define IXGBE_TXD_CMD_VLE       0x40000000 /* Add VLAN tag */

After I intentionally remove the tag before sending out the traffic, the
Spirent can receive tagged packets. I am not sure the DPDK codes is adding
a tag.  I think the ixgbevf on the host is adding VLAN tag based on the
configured tag ID.

Is this expected ? How can I configure the host to not add tag since
traffic from the VM is already tagged. Otherwise it becomes double tagged.

Thanks

James


On Fri, Jan 24, 2014 at 6:07 AM, James Yu <ypyu2011@gmail.com> wrote:

> Stephen,
>
> I added that to the l2fwd main.c and it is still not received by the
> Spirent. I obtained the stat using rte_eth_stats_get() and printout the
> following when I send only one VLAN pkt
> ipackets: increased by 1
> opackets: no change (pkt not sent out by the device)
> ierrors, oerrors, otxerror, otxdiscard: all 0
>
> The same thing with 10 packets which increase 10 ipackets counts.
>
> I found out that the rte_eth_stats_get() obtains the stats from
> ixgbevf_dev_stats_get(). Is this expected for SR-IOV that uses
> ixgbe_ethdev.c ?
> If that's correct, I think this tells me that the tagged packet is
> received by the VF PMD codes but not sent out and has no error or packets
> dropped.
>
> So it was not sent out of the VF PMD. But why there is not error or packet
> dropped. Where did it go ? I am trying to find out where it got dropped and
> how to fix it.
>
> I tried DPDK1.5.2r1. It exhibits the same issue even with the patch.
>
> Thanks
>
> James
>
>
>
> On Thu, Jan 23, 2014 at 1:43 PM, Stephen Hemminger <
> stephen@networkplumber.org> wrote:
>
>> 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);
>>  }
>>
>>
>>
>>
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-01-28  3:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-23  5:08 [dpdk-dev] Passing VLAN traffic via l2fwd James Yu
2014-01-23  8:45 ` Daniel Kaminsky
2014-01-23 19:27   ` James Yu
2014-01-23 21:43     ` Stephen Hemminger
2014-01-24  6:07       ` James Yu
2014-01-28  3:13         ` James Yu

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).