Использование кода DPDK VLAN с использованием memcpy приводит к повреждению данных - PullRequest
0 голосов
/ 14 сентября 2018

Код полосы VLAN для исходящих пакетов GTP приводит к повреждению исходного IP-адреса ac150569.После удаления тега VLAN (4 байта) исходный IP-адрес в пакете становится ac150000, что неверно.

Дамп пакета перед удалением тега VLAN:

0ca402e8 deb15254 00b3fb19 81000873 08004500 002a00fc 00003e11 bf42ac15 05690a5f 00aa0868 08680016 001c3202 000600

Код для полосы VLAN:

memcpy((rte_pktmbuf_mtod(m, unsigned char *)+12),(rte_pktmbuf_mtod(m, unsigned char *)+16),m->pkt.data_len-16);

Дамп пакета после удаления тега VLAN:

0ca402e8 deb15254 00b3fb19 08004500 002a00fc 00003e11 bf42ac15 00000a5f 00aa0868 08680016 001c3202 1bdb0000 0000004e 00000e00

Подскажите, пожалуйста, как добавляется 0000 вместо 0569 для IP-адреса источника в измененном пакете после тега vlan.устранен?Какую модификацию нужно сделать?

1 Ответ

0 голосов
/ 14 сентября 2018

Посмотрите на rte_vlan_strip () Функция DPDK.По сути, он делает то, что вам нужно, таким образом:

/* Copy ether header over rather than moving whole packet */
memmove(rte_pktmbuf_adj(m, sizeof(struct vlan_hdr)),
        eh, 2 * ETHER_ADDR_LEN);

В случае, если вам понадобится еще более быстрое решение, некоторые сетевые адаптеры могут выделять теги VLAN для вас.Посмотрите на флаг DEV_RX_OFFLOAD_VLAN_STRIP , который мы можем передать в функцию rte_eth_dev_configure () .

...