2016-03-19 6 views
1

Можно ли установить правило на переключатель, который инструктирует переключатель сделать следующее:ЧО - Установка правило, гласящее, чтобы отправить фиктивный пакет всякий раз, когда некоторый пакет совпадает с ofp_match

If packet_in is TCP: 
    send (dummy packet) 
    send (packet_in) 
    send (dummy packet) 
else: 
    send (packet_in) 

Ценю что это очень плохой псевдокод, но он должен проиллюстрировать то, что я пытаюсь сделать немного лучше, чем пытаюсь объяснить это.

В основном я пытаюсь исключить передачу TCP-пакетов для проекта, передавая фиктивные пакеты, не требуя, чтобы каждый TCP-пакет отправлялся на контроллер. Я хочу, чтобы коммутатор работал как обычно, но когда он получает TCP-пакет, предназначенный для определенного порта, я хочу, чтобы коммутатор также передавал фиктивный пакет (который я построил) из того же порта, который направлялся в тот же пункт назначения.

Я понимаю, что может быть несколько лучших способов сделать то, что я пытаюсь достичь - я открыт для предложений!

Благодаря

ответ

0

Насколько я знаю ответ не OpenFlow не поддерживает эту концепцию не говоря уже о Чумку. Pox может сказать, что коммутатор генерирует пакет, но нет записи таблицы потоков с действием отправки этого другого пакета здесь.

Возможным способом это может быть реализовано следующим образом, хотя:

  1. Match по протоколу TCP и номер порта имеют два действия. Действие номер один отправляет пакет, номер действия 2 отправляет пакет в некоторую резервную таблицу для таблиц потоков.

  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)) 
+0

Arduic, спасибо! Я думаю, что понимаю основную идею вашего предложения по внедрению, однако я смущен тем, что вы подразумеваете под «некоторой запасной таблицей для таблиц потоков». Не могли бы вы уточнить для меня? – renopos

+0

Я отредактировал сообщение, чтобы содержать краткое пояснение к концепциям нескольких таблиц в OpenFlow/Pox. Как и некоторый пример кода, который поможет вам попробовать и реализовать то, что я предлагаю. – arduic

+0

Это здорово, спасибо. У меня было ощущение, что вы, возможно, говорите о Никире, - это то, о чем я вкратце рассмотрел после прочтения вашего первоначального ответа прошлой ночью, но мне придется еще раз изучить его. Является ли приведенным вами примером конкретную реализацию, которую вы предложили, или просто пример? Можно ли установить правило на одну таблицу, которая отправляет пакет как есть, а затем переслать пакет в другую таблицу, которая затем редактирует заголовок VLAN и пересылает его как манекен? Могу ли я установить еще одно правило на каждом коммутаторе, указав, что все пакеты с этим идентификатором VLAN отбрасываются? – renopos

 Смежные вопросы

  • Нет связанных вопросов^_^