dperf icon indicating copy to clipboard operation
dperf copied to clipboard

dperf 如何添加vlan 头?

Open hgkiller opened this issue 2 years ago • 26 comments

dperf 中可以添加像下面这种有vlan 头的配置吗

“pkt = Ether(dst="20:04:0f:68:5d:15")/Dot1Q(vlan=610)/IP(dst="172.16.96.101")”

hgkiller avatar Jul 13 '22 10:07 hgkiller

目前不可以,加这个feature也比较容易,dperf发送的报文都是在cache中的,只要在填cache的时候把这个埋进去就可以了,欢迎提交pr,增加这个feature。 如果是物理网卡,有可能网卡可以帮忙,不用这么麻烦

你可以说说你的测试场景吗

pengjianzhang avatar Jul 13 '22 10:07 pengjianzhang

对,就是物理网卡

hgkiller avatar Jul 13 '22 10:07 hgkiller

可以试试 https://tonydeng.github.io/sdn-handbook/dpdk/offload.html

在DPDK中,在调用发送函数前,必须提前设置mbuf数据结构,设置PKT_TX_VLAN_PKT位,同时将具体的Tag信息写入vlan_tci字段。

pengjianzhang avatar Jul 13 '22 10:07 pengjianzhang

嗯,感觉还是在dperf 中添加一个这个支持比较好

hgkiller avatar Jul 13 '22 10:07 hgkiller

你能支持一下这个feature吗

pengjianzhang avatar Jul 13 '22 11:07 pengjianzhang

我觉得你做起来会更快,O(∩_∩)O哈哈~

hgkiller avatar Jul 13 '22 11:07 hgkiller

我没有物理网卡,我可以写一下,你帮我测可以吗

pengjianzhang avatar Jul 13 '22 11:07 pengjianzhang

这个可以有

hgkiller avatar Jul 13 '22 11:07 hgkiller

邮件联系 [email protected]

pengjianzhang avatar Jul 13 '22 11:07 pengjianzhang

交换机上处理一下就好了吧, dperf实现此功能的必要在哪里呢?

pengjianzhang avatar Jul 14 '22 00:07 pengjianzhang

那不就是要改变交换机的配置吗,有些场景虽然只是改变一点配置,但可能会影响的东西比较多

hgkiller avatar Jul 14 '22 00:07 hgkiller

please test this branch, thanks https://github.com/pengjianzhang/dperf/tree/vlan

config:

vlan vlanID

pengjianzhang avatar Jul 23 '22 13:07 pengjianzhang

在测吗?

pengjianzhang avatar Jul 27 '22 05:07 pengjianzhang

验证了一下,感觉是没发出来。。。

hgkiller avatar Jul 27 '22 09:07 hgkiller

ARP 正常吗,ICMP 正常吗

pengjianzhang avatar Jul 27 '22 09:07 pengjianzhang

先用server模式运行,看看arp,icmp能不能正常工作

pengjianzhang avatar Jul 27 '22 09:07 pengjianzhang

分支弄错了,不好意思,用这个分支: https://github.com/pengjianzhang/dperf/tree/main

pengjianzhang avatar Jul 27 '22 09:07 pengjianzhang

Ok 我重新试一下

hgkiller avatar Jul 27 '22 09:07 hgkiller

在配置文件中加入 一行 vlan VLANID 例子: vlan 123

pengjianzhang avatar Jul 27 '22 09:07 pengjianzhang

没发出来,这怎么看dperf 发出去的包?

hgkiller avatar Jul 27 '22 10:07 hgkiller

把dperf的网关指向客户端,在客户端上抓包 网卡支持vlan卸载吗? 你用的是什么网卡?

pengjianzhang avatar Jul 27 '22 10:07 pengjianzhang

不行,实在发不出来,我还是用trex 吧

hgkiller avatar Jul 29 '22 07:07 hgkiller

这个配置文件,我在192.168.60.1 上抓包,根本抓不到

mode client cpu 0 tx_burst 128 launch_num 10 payload_size 1400 duration 1m vlan 610

protocol tcp flood

cc 1k cps 1k keepalive 1ms

port 0000:41:00.0 192.168.60.2 192.168.60.1 00:50:56:a4:0c:54 client 6.6.234.4 10 server 192.168.60.1 1 listen 80 1

hgkiller avatar Jul 29 '22 07:07 hgkiller

你用的什么网卡 看看网卡是否支持vlan卸载: ethtool -k eth0| grep vlan

pengjianzhang avatar Jul 29 '22 07:07 pengjianzhang

0000:41:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=igb_uio unused=ixgbe,vfio-pci 0000:41:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=igb_uio unused=ixgbe,vfio-pci 0000:43:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=igb_uio unused=ixgbe,vfio-pci 0000:43:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=igb_uio unused=ixgbe,vfio-pci 0000:44:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=igb_uio unused=ixgbe,vfio-pci 0000:44:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=igb_uio unused=ixgbe,vfio-pci

hgkiller avatar Jul 29 '22 07:07 hgkiller

用mode server模式运行 在客户端上ping 接口IP

pengjianzhang avatar Jul 29 '22 07:07 pengjianzhang

这个抓包看了一下,vlan 还是没加上

hgkiller avatar Aug 15 '22 11:08 hgkiller

你们有熟悉DPDK的同事吗,调试一下吧,大概就是看看我开启网卡的vxlan卸载特性设置对不对

pengjianzhang avatar Aug 15 '22 11:08 pengjianzhang

`static inline void work_space_tx_send(struct work_space *ws, struct rte_mbuf *mbuf) { struct tx_queue *queue = &ws->tx_queue;

  if( g_config.vlan_id > 0 ) {
        mbuf->ol_flags |= PKT_TX_VLAN;
        mbuf->vlan_tci = g_config.vlan_id;
        // printf("-> try to insert vlan_id@%d\n", mbuf->vlan_tci);
    }
if (ws->vlan_id) {
    mbuf->ol_flags |= PKT_TX_VLAN;
    mbuf->vlan_tci = ws->vlan_id;
    // printf("try to insert vlan_id@%d\n", mbuf->vlan_tci);
}

net_stats_tx(mbuf);
queue->tx[queue->tail] = mbuf;
queue->tail++;
if (((queue->tail - queue->head) >= queue->tx_burst) || (queue->tail == TX_QUEUE_SIZE)) {
    work_space_tx_flush(ws);
}

}`

调整了一下,没有细看,感觉是vlan 初始化有点问题, 现在可以了

hgkiller avatar Aug 16 '22 05:08 hgkiller

可以发出vlan报文?

pengjianzhang avatar Aug 16 '22 05:08 pengjianzhang