目前,我正在 Ryu(开源 OpenFlow 控制器)之上编写一个应用程序。
要创建 OF-Config 连接(或 OVSDB 连接),我想我必须获取连接到 Ryu 控制器的每个交换机的 IP 地址。但是,我找不到将数据路径对象或数据路径 ID 转换为交换机 IP 地址的 API。
所以,如果有这样的API,我想知道它。如果没有,我期待收到一些关于在没有 IP 地址的情况下建立连接的方法的评论。
目前,我正在 Ryu(开源 OpenFlow 控制器)之上编写一个应用程序。
要创建 OF-Config 连接(或 OVSDB 连接),我想我必须获取连接到 Ryu 控制器的每个交换机的 IP 地址。但是,我找不到将数据路径对象或数据路径 ID 转换为交换机 IP 地址的 API。
所以,如果有这样的API,我想知道它。如果没有,我期待收到一些关于在没有 IP 地址的情况下建立连接的方法的评论。
Byungjoon 你在用 mininet 吗?
如果你是,所有的交换机都使用 localhost ip 地址进行实例化(这是 mininet 的默认行为)。控制器使用 tcp 端口区分交换机。
据我所知,您只需要知道交换机的 dpid 即可发送 OF 消息。这是示例 l2-learning 开关正在做的事情:https ://github.com/osrg/ryu/blob/master/ryu/app/simple_switch_13.py
我也尝试使用 Ryu 控制器与交换机通信。我使用上面的示例作为我的基本代码并在其之上添加。它还没有完成(所以你可能会看到一些错误),但这是一个很好的起点。这是链接:https ://github.com/Ehsan70/RyuApps/blob/master/l2.py
@set_ev_cls(event.EventSwitchEnter)
def switch_features_handler(self, ev):
address = ev.switch.dp.address
dpid = ev.switch.dp.id
“address”是 (ip_address, port) 的元组,“dpid”是数据路径 ID。
对于最新版本的 ryu,您应该使用以下代码。
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
def _switch_features_handler(self, ev):
print(ev.msg.datapath.address)