zoukankan      html  css  js  c++  java
  • [dpdk] 熟悉SDK与初步使用 (四)(L3 Forwarding源码分析)

    接续前节:[dpdk] 熟悉SDK与初步使用 (三)(IP Fragmentation源码分析)

    前文中的最后一个问题,搁置,并没有找到答案。所以继续阅读其他例子的代码,想必定能在其他位置看到答案。

    使用,大致过了一般文档和代码,试运行一下:

    绑定2,3,6,7四颗CPU核心。使用port1,port2. 

    port0/queue0/core2映射在一起。port0/queue1/core3映射在一起。port1/queue0/core6映射在一起。port1/queue1/core7映射在一起。

    与前边的例子相同,依然要在代码级关掉 hw_ip_checksum。

    [root@dpdk build]# ./l3fwd -l2,3,6,7 -- -p 3 --config "(0,0,2),(0,1,3),(1,0,6),(1,1,7)"
    EAL: Detected 8 lcore(s)
    EAL: Probing VFIO support...
    EAL: WARNING: cpu flags constant_tsc=yes nonstop_tsc=no -> using unreliable clock cycles !
    PMD: bnxt_rte_pmd_init() called for (null)
    EAL: PCI device 0000:00:03.0 on NUMA socket -1
    EAL:   probe driver: 1af4:1000 rte_virtio_pmd
    EAL: PCI device 0000:00:04.0 on NUMA socket -1
    EAL:   probe driver: 1af4:1000 rte_virtio_pmd
    EAL: PCI device 0000:00:05.0 on NUMA socket -1
    EAL:   probe driver: 1af4:1000 rte_virtio_pmd
    EAL: PCI device 0000:00:06.0 on NUMA socket -1
    EAL:   probe driver: 1af4:1000 rte_virtio_pmd
    L3FWD: LPM or EM none selected, default LPM on
    Initializing port 0 ... Creating queues: nb_rxq=2 nb_txq=4...  Address:00:00:00:01:00:01, Destination:02:00:00:00:00:00, Allocated mbuf pool on socket 0
    LPM: Adding route 0x01010100 / 24 (0)
    LPM: Adding route 0x02010100 / 24 (1)
    LPM: Adding route IPV6 / 48 (0)
    LPM: Adding route IPV6 / 48 (1)
    Allocated mbuf pool on socket 1
    LPM: Adding route 0x01010100 / 24 (0)
    LPM: Adding route 0x02010100 / 24 (1)
    LPM: Adding route IPV6 / 48 (0)
    LPM: Adding route IPV6 / 48 (1)
    txq=2,0,0 txq=3,1,0 txq=6,2,1 txq=7,3,1 
    Initializing port 1 ... Creating queues: nb_rxq=2 nb_txq=4...  Address:00:00:00:01:00:02, Destination:02:00:00:00:00:01, txq=2,0,0 txq=3,1,0 txq=6,2,1 txq=7,3,1 
    
    Skipping disabled port 2
    
    Initializing rx queues on lcore 2 ... rxq=0,0,0 
    Initializing rx queues on lcore 3 ... rxq=0,1,0 
    Initializing rx queues on lcore 6 ... rxq=1,0,1 
    Initializing rx queues on lcore 7 ... rxq=1,1,1 
    
    port 0 cannot parse packet type, please add --parse-ptype
    EAL: Error - exiting with code: 1
      Cause: ptype check fails
    [root@dpdk build]# 

    以上出现的ERROR,刚好回答了(三)最后留下的疑问。此程序依然依赖硬件来完成packet type的识别。该参数“--parse-ptype”应该是启用了软件识别类型的功能,如下:

    已经可以正常启动了。

    [root@dpdk build]# ./l3fwd -l2,3,6,7 -- -p 3 --config "(0,0,2),(0,1,3),(1,0,6),(1,1,7)" --parse-ptype
    EAL: Detected 8 lcore(s)
    EAL: Probing VFIO support...
    EAL: WARNING: cpu flags constant_tsc=yes nonstop_tsc=no -> using unreliable clock cycles !
    PMD: bnxt_rte_pmd_init() called for (null)
    EAL: PCI device 0000:00:03.0 on NUMA socket -1
    EAL:   probe driver: 1af4:1000 rte_virtio_pmd
    EAL: PCI device 0000:00:04.0 on NUMA socket -1
    EAL:   probe driver: 1af4:1000 rte_virtio_pmd
    EAL: PCI device 0000:00:05.0 on NUMA socket -1
    EAL:   probe driver: 1af4:1000 rte_virtio_pmd
    EAL: PCI device 0000:00:06.0 on NUMA socket -1
    EAL:   probe driver: 1af4:1000 rte_virtio_pmd
    soft parse-ptype is enabled
    L3FWD: LPM or EM none selected, default LPM on
    Initializing port 0 ... Creating queues: nb_rxq=2 nb_txq=4...  Address:00:00:00:01:00:01, Destination:02:00:00:00:00:00, Allocated mbuf pool on socket 0
    LPM: Adding route 0x01010100 / 24 (0)
    LPM: Adding route 0x02010100 / 24 (1)
    LPM: Adding route IPV6 / 48 (0)
    LPM: Adding route IPV6 / 48 (1)
    Allocated mbuf pool on socket 1
    LPM: Adding route 0x01010100 / 24 (0)
    LPM: Adding route 0x02010100 / 24 (1)
    LPM: Adding route IPV6 / 48 (0)
    LPM: Adding route IPV6 / 48 (1)
    txq=2,0,0 txq=3,1,0 txq=6,2,1 txq=7,3,1 
    Initializing port 1 ... Creating queues: nb_rxq=2 nb_txq=4...  Address:00:00:00:01:00:02, Destination:02:00:00:00:00:01, txq=2,0,0 txq=3,1,0 txq=6,2,1 txq=7,3,1 
    
    Skipping disabled port 2
    
    Initializing rx queues on lcore 2 ... rxq=0,0,0 
    Initializing rx queues on lcore 3 ... rxq=0,1,0 
    Initializing rx queues on lcore 6 ... rxq=1,0,1 
    Initializing rx queues on lcore 7 ... rxq=1,1,1 
    
    Port 0: softly parse packet type info
    Port 0: softly parse packet type info
    Port 1: softly parse packet type info
    Port 1: softly parse packet type info
    
    Checking link statusdone
    Port 0 Link Up - speed 10000 Mbps - full-duplex
    Port 1 Link Up - speed 10000 Mbps - full-duplex
    L3FWD: entering main loop on lcore 3
    L3FWD:  -- lcoreid=3 portid=0 rxqueueid=1
    L3FWD: entering main loop on lcore 6
    L3FWD:  -- lcoreid=6 portid=1 rxqueueid=0
    L3FWD: entering main loop on lcore 2
    L3FWD:  -- lcoreid=2 portid=0 rxqueueid=0
    L3FWD: entering main loop on lcore 7
    L3FWD:  -- lcoreid=7 portid=1 rxqueueid=1

    接下来通过对代码的阅读调试,印证一下之前的想法。

    先来一组测试包:

    /home/tong/Data [tong@T7] [16:10]
    > sudo tcpreplay-edit -D 0.0.0.0/0:2.1.1.1/24 -i tap-dpdk-1 -t -L 1 oicq-bak.pcap

    基于代码里写死的路由规则,必要nat成2.1.1.1才能被转发。

    发现了与参数 --parse-ptype 对应的函数:

    rte_eth_add_rx_callback(portid, queueid, l3fwd_lkp.cb_parse_ptype, NULL)

    此回调函数,设置了IP包的类型。

    至此,解答了(三)中留下的问题。

  • 相关阅读:
    2020杭电多校第二场 1006.The Oculus
    2020杭电多校第一场 1005.Fibonacci Sum
    数论——中国剩余定理
    数论——线性同余方程
    数论——乘法逆元
    数论——裴蜀定理
    javascript预解析和作用域
    数组的排序..........加深难度
    值类型和引用类型
    js中的==和===
  • 原文地址:https://www.cnblogs.com/hugetong/p/6171117.html
Copyright © 2011-2022 走看看