попытка сгенерировать OFPFeaturesRequest в RYU приводит к ошибке потока - PullRequest
0 голосов
/ 29 октября 2018

У меня есть приложение RYU, основанное на simple_switch_13, которое хорошо работает, улучшено для работы с несколькими коммутаторами. Я решил, что было бы неплохо добавить к нему некоторую интерактивность, поэтому на init я создаю поток, который будет принимать входные данные с консоли, и выполняю такие действия, как перечисление идентификаторов пути к данным подключенных коммутаторов. Проблема возникает, когда я реализую команду, которая генерирует запрос функций коммутатора.

Я реализовал консольный поток (производный от threading.Thread) с помощью класса, который имеет метод run (). В методе init этого класса я передаю ссылку на его родителя, который является объектом класса SimpleSwitch13.

В родительском классе SimpleSwitch13 я реализовал метод, который генерирует сообщение OFPFeaturesRequest, а затем вызывает send_msg () для отправки его в switch / datapath.

Поток консоли вызывает этот метод посредством ссылки на родительский объект, который, как я ожидал, отправит запрос функций коммутатору, и после этого будет вызван обработчик EventOFPSwitchFeatures, также в родительском объекте, для сообщения ответа от коммутатора. .

Вместо этого происходит то, что когда я вызываю send_msg () с запросом, я получаю сообщение об ошибке «не могу переключиться на другой поток» - и, кроме того, коммутатор отключается, а затем повторно подключается.

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

Есть какие-нибудь идеи относительно отправки этого запроса? Боюсь, у меня возникла проблема контекста, которую я не совсем понимаю относительно реализации для управления несколькими коммутаторами.

...