Мостовый трафик не достигает некоторых портов

1. Да, использовать диапазон с 0или""(= false, никогда не совпадать с )конечным условием:

awk ', 0'

где — ваше условие, которое может быть любым выражением, кроме другого диапазона.

Условие запуска будет не оцениваться снова после первого совпадения:

$ seq 1 6 | awk '
   function check(){ print "checking", $0; return $1 == 3 }
   check(), 0
'
checking 1
checking 2
checking 3
3
4
5
6

2. Если вам не нравятся диапазоны, вы можете, конечно, просто сделать все это C -как не -неуклюже, выводя все строки явно после того, как условие было выполнено:

seq 1 6 | awk '$1==3 { do print; while (getline > 0) }'

3. Еще одно решение, согласно стандарту POSIX, должно работать с обычными файлами с возможностью поиска (, а не с конвейерами! ), но на самом деле не работает с большинством реализаций awk, было бы полагаться на то, что awk устанавливает указатель файла на конец последней записи при выходе, поскольку все утилиты POSIX должны:

seq 1 6 > file
{ awk '$1 == 3 { print; exit }'; cat; } < file

IMLE работает только с awk/ nawkот Solaris, но не с gawk, mawkили "единственным истинным awk" из *BSD.


4. Наконец, вы можете написать свой собственный конечный автомат (например. установив флаг, а затем проверив его)--на медленном языке высокого уровня, который уже обеспечивает хороший упрощенный интерфейс для него --, но это что-то слишком тупое, чтобы на нем останавливаться.

2
08.09.2020, 19:08
1 ответ

На самом деле проблема заключалась в VxLAN. Существует автоматизированный процесс добавления широковещательных записей в fdb для удаленного конца туннеля VxLAN (, напримерbridge fdb append 00:00:00:00:00:00 dst <remote ip> dev vxlan1); этот процесс по ошибке также добавлял локальный IP-адрес в качестве конечной точки VxLAN.

Таким образом, когда DHCP-запрос был отправлен с интерфейса veth, одноадресная запись fdb будет добавлена ​​для MAC-адреса интерфейса veth (исходного MAC-адреса в кадре DHCP )в таблицу переадресации портов моста. Затем кадр будет залит на все порты моста. Интерфейс VxLAN отправит кадр через туннель на удаленный компьютер, но он также также отправит его самому себе. Когда он «получит» этот кадр, он будет скопирован на мост, и мост увидит кадр с этого MAC-адреса, поступающий на порт VxLAN; он соответствующим образом обновит свою таблицу переадресации портов, записав порт VxLAN как способ достижения MAC-адреса интерфейса veth.

Когда придет ответ DHCP, мост проверит его, увидит MAC-адрес veth-интерфейса, сверится с таблицей переадресации портов, увидит, что в последний раз он видел этот MAC-адрес, поступающий от порта VxLAN, и отправит его по пути к Порт VxLAN. Он никогда не достигнет ветеринарного порта.

Что сделало эту ветку для меня, так это то, что установка времени устаревания моста на 0 «решила» проблему, потому что тогда мост будет пересылать каждый пакет на каждый порт. Хотя я, вероятно, должен был заметить дополнительную запись fdb.

1
18.03.2021, 23:06

Теги

Похожие вопросы