我有一个基于simple_switch_13的RYU应用程序,该应用程序运行良好,已得到增强,可以处理多个开关。我认为最好在其中添加一些交互性,所以在 init 上,我产生了一个线程,该线程将接受来自控制台的输入,并执行诸如列出附加交换机的数据路径ID之类的操作。当我实现生成开关功能请求的命令时,就会出现问题。
我使用具有run()方法的类实现了控制台线程(从threading.Thread派生)。在此类的 init 方法中,我传递了对其父级的引用,即SimpleSwitch13类对象。
在父级SimpleSwitch13类中,我实现了一种方法,该方法生成OFPFeaturesRequest消息,然后调用send_msg()将其发送到交换机/数据路径。
控制台线程通过其对父级的引用来调用此方法,我希望该方法会将功能请求发送到交换机,然后,也在父级中的EventOFPSwitchFeatures处理程序将被调用以报告来自交换机的响应
相反,发生的是,当我在请求中调用“ send_msg()”时,出现错误“无法切换到其他线程”-最重要的是,该开关断开连接,然后重新连接。
据我所知,尽管我使用SimpleSwitch13类中的例程来生成该线程,但我生成的用于创建我的小控制台例程的线程并不受它的ryu-manager或其中的某些其他黑魔法的控制。功能要求,它会使事情变得井井有条。
这里是否有关于发送此请求的见解?恐怕我在这里遇到了某种上下文问题,对于管理多个开关的实现,我并不完全了解。