Почему OpenFlow выбирает правило с более низким приоритетом?

Если эти два правила установлены на коммутаторе, какое из них следует выполнять в соответствии со спецификациями коммутатора OpenFlow? OVS выполняет первое, хотя второе имеет более высокий приоритет:

Первое правило:

cookie=0x20000002000000,
duration=14647.575s,
table=0,
n_packets=1297621,
n_bytes=145897910,
idle_timeout=65535,
priority=1,
udp,
in_port=3,
dl_src=02:6d:f3:c1:b4:7b,
dl_dst=02:54:ab:ce:ba:0f,
nw_src=10.10.10.6,
nw_dst=10.10.10.1,
tp_src=46329,
tp_dst=1000
actions=output:1

Второе правило:

cookie=0xa000004039d1ae,
duration=164.680s,
table=0,
n_packets=0,
n_bytes=0,
send_flow_rem
priority=9999,
udp,
in_port=ANY,
nw_src=10.10.10.6,
nw_dst=10.10.10.1,
tp_dst=1000
actions=set_field:10.10.10.6->ip_src,
output:1

person mnmp    schedule 26.05.2018    source источник
comment
Будет ли у вас такое же поведение, если вы опустите in_port=ANY во втором правиле? Я никогда не видел, чтобы его использовали для сопоставления пакетов, только для сопоставления правил (например, в ovs-ofctl del-flows).   -  person pchaigno    schedule 26.05.2018
comment
Вы можете быть правы! На самом деле у меня есть два других правила точно таким же образом, но in_port не подходит для них, и они правильно совпадают. Почему кто-то может вызвать такую ​​​​проблему?   -  person mnmp    schedule 26.05.2018
comment
@pchaigno, вы были правы, я удалил ЛЮБОЙ из in_port и заменил его точными номерами портов, и теперь он работает!   -  person mnmp    schedule 29.05.2018
comment
Рад, что смог помочь! Я превратил это в полноценный ответ для других пользователей, сталкивающихся с той же проблемой.   -  person pchaigno    schedule 29.05.2018


Ответы (1)


Хотя в настоящее время это не задокументировано, ANY в качестве значения для in_port следует использовать только для модификаций потока (удаления) и запросов статистики потока. Чтобы сопоставлять пакеты независимо от их порта, вы можете просто удалить in_port=ANY из своего правила OpenFlow.


Это поведение не задокументировано, но несколько мест в исходный код упоминает об этом. Во-первых, OFPP_ANY определяется как синоним OFPP_NONE . Комментарий выше упоминает что его следует использовать только для соответствия правилам OpenFlow. Наконец, комментарий к OFPP_NONE определению утверждает, что OFPP_NONE означает Not associated with any port.

Я думаю, что это должно быть должным образом задокументировано, иначе ovs-ofctl следует отклонить это значение при неправильном использовании. Я подниму вопрос в списке рассылки ovs-dev и буду обновлять этот пост в зависимости от ответа.

person pchaigno    schedule 29.05.2018