Skip to content
This repository was archived by the owner on Dec 18, 2025. It is now read-only.

Latest commit

 

History

History
81 lines (63 loc) · 3.83 KB

File metadata and controls

81 lines (63 loc) · 3.83 KB

testovoe

TODO

  • Make sure you run doca_flow_*_destroy for everything that need s to have it.

Постановка задачи

На сетевой карте создаются два SF, в них создаются eth порты, забрасываются в отдельные netns. Нужно организовать L3 связанность между ними, один SF - префикс 2001:db8::1/56, второй - 2001:db8:2::/56. Остальной (не попадающий по dst ip) трафик должен дропаться.

Зачем это нужно и как относится к SDN?

Все современные облака имеют L3 Only сеть, виртуалки/контейнеры имеют связанность только через IPv4/IPv6, соответственно они находятся в L2 сегменте, где есть только виртуалка/контейнер и некстхоп (виртуальный роутер), который через LPM направляет трафик куда надо. В пределах одной ноды будет делаться просто форвард в другую SF, а если виртуалка/контейнер уже на другой ноде, то трафик будет передаваться через ipip overlay с SRv6 controlplane.

Виртуалки у нас будут подключаться к NIC через SF vnet (vDPA) порт, трафик будет уходить сразу в железо. Это что-то наподобие SR-IOV (VF), но немного другое.

Подробнее

В первую очередь, необходимо реализовать минималистичные, безопасные, highlevel обёртки над низкоуровневыми примитивами DOCA Flow, basic/lpm pipe и энтри для них, ну и actions для свопа mac адресов.

Поверх этого уже реализовать L3 Forwarding, нужно определять порт, с которого пришёл пакет, на основании этого определять тенант -> форвардать в LPM пайп тенанта, там уже в энтри форвардит в порт с action на swap мак адресов.

Мак адреса статические - 52:ed:ed:ed:ed:ed со стороны некстхопа, 52:ec:ec:ec:ec:ec со стороны SF, ARP/ND не нужен.

Желательно реализовать ttl decrement, пример есть в doca-samples - flow_modify_header. Кейс с TTL=0/1 можно пока не учитывать.

Использовать нужно switch режим, в isolated режиме и ставить fwd_miss в drop руками. Ну и NIC переводить в esw_multiport (mpesw) режим желательно сразу, ибо именно так в проде оно и будет.

Также большим плюсом будет реализация динамического добавления/изменения настроек оффлоада - создание/удаление пайпов, добавление/удаление entries в них.

Условный путь трафика

vm/netns
˅
virtio-net nic
˅
vdpa
˅
hardware sf
˅
(doca flow) switch port
˅
(doca flow) basic decision (by port) pipe (determine tenant)
˅
(doca flow) lpm pipe (for tenant)
˅
(doca flow) forward to port with mac swap action
˅
hardware sf
˅
vdpa
˅
virtio-net nic
˅
another vm/netns

Полезные ссылки