Насколько я знаю ответ не OpenFlow не поддерживает эту концепцию не говоря уже о Чумку. Pox может сказать, что коммутатор генерирует пакет, но нет записи таблицы потоков с действием отправки этого другого пакета здесь.
Возможным способом это может быть реализовано следующим образом, хотя:
Match по протоколу TCP и номер порта имеют два действия. Действие номер один отправляет пакет, номер действия 2 отправляет пакет в некоторую резервную таблицу для таблиц потоков.
В этой таблице есть действие для изменения пакета для отправки этого фиктивного пакета. Вы не могли создать конкретный, но вы могли бы сказать, что изменить IP-адрес назначения на какое-то бессмысленное значение или установить какую-то бессмысленную VLAN как своего рода маркер sudo.
Edit: Пользователя просил разъяснить, что я имел в виду запасного стола, так что я постараюсь найти оспу команды, чтобы показать процесс, который я планировал использовать. Прежде всего, я бы предложил this wiki для многих основных команд для оспы, которые немного устарели, а в некоторых случаях ошибочны, но во всем это очень полезно.
При указании запасной таблицы я говорю о концепции, в которой включен openflow 1.3, который говорит, что все таблицы потоков не должны быть единственным списком для обработки. Вместо этого все пакеты могут перейти в таблицу 0 для обработки, а затем, если действие указывает, что оно может отправить пакет, чтобы сказать таблицу 5 для расширенной обработки или более целенаправленную обработку, основанную на найденной таблице 0. Это позволяет использовать более гибкие действия, вы можете представить эту новую концепцию как таблицу таблиц или массив 2d, где конечные элементы являются элементами таблицы потоков. Извините, что слово-стол придумал много, я бы хотел, чтобы они выбрали другое слово для этой концепции.
Pox по умолчанию не поддерживает эту концепцию, так как использует OpenFlow1.0, но есть расширение, которое позволяет ему и более подробную информацию об этом можно найти here. Некоторые из важных частей можно найти ниже.
# Turn on Nicira packet_ins
msg = nx.nx_packet_in_format()
event.connection.send(msg)
# Turn on ability to specify table in flow_mods
msg = nx.nx_flow_mod_table_id()
event.connection.send(msg)
msg = nx.nx_flow_mod()
msg.priority = 1 # Low priority
msg.actions.append(of.ofp_action_output(port = of.OFPP_CONTROLLER))
msg.actions.append(nx.nx_action_resubmit.resubmit_table(table = 1))
event.connection.send(msg)
msg = nx.nx_flow_mod()
msg.table_id = 1
msg.priority = 1 # Low priority
msg.actions.append(of.ofp_action_output(port = of.OFPP_FLOOD))
event.connection.send(msg)
В этом примере мульти поддержки таблицы включена, то поток добавляется который посылает все пакеты в контроллер и в таблице 1, из таблицы 1 там есть поток, который говорит, что все пакеты FLOOD. Надеюсь, это даст вам общее представление о том, как они работают.
Если вы еще не знаете, как редактировать пакеты с помощью оспы, то пример действия, который может быть добавлен в список действий для изменения целевого MAC-адреса, будет следующим.
ofp_action_dl_addr.set_dst(EthAddr("01:02:03:04:05:06"))
Для ВЛС метод, который я предложил ранее вы могли бы сделать
msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=1234))
Arduic, спасибо! Я думаю, что понимаю основную идею вашего предложения по внедрению, однако я смущен тем, что вы подразумеваете под «некоторой запасной таблицей для таблиц потоков». Не могли бы вы уточнить для меня? – renopos
Я отредактировал сообщение, чтобы содержать краткое пояснение к концепциям нескольких таблиц в OpenFlow/Pox. Как и некоторый пример кода, который поможет вам попробовать и реализовать то, что я предлагаю. – arduic
Это здорово, спасибо. У меня было ощущение, что вы, возможно, говорите о Никире, - это то, о чем я вкратце рассмотрел после прочтения вашего первоначального ответа прошлой ночью, но мне придется еще раз изучить его. Является ли приведенным вами примером конкретную реализацию, которую вы предложили, или просто пример? Можно ли установить правило на одну таблицу, которая отправляет пакет как есть, а затем переслать пакет в другую таблицу, которая затем редактирует заголовок VLAN и пересылает его как манекен? Могу ли я установить еще одно правило на каждом коммутаторе, указав, что все пакеты с этим идентификатором VLAN отбрасываются? – renopos