-1

对于外行 - 我在问一个 Python/SDN 问题。这一个编程问题。

这方面的文献不多,我在规范中也没有看到。我已经根据文档构建了一个 Ryu 控制器,并且一切正常,但我有一个相当简单的问题:

您如何将in_port编号映射到实际端口号?在我的例子中,它说我的in_port为 5。但是,它实际上进入了我的戴尔 4112F-ON 上的物理端口 1/1/2。两者之间似乎没有任何关联。

如果我想控制每个端口的流量,我如何知道流量来自哪个物理端口?

编辑:我知道如何转换为 MAC 地址,但我还没有找到一种干净的方法来以编程方式从 MAC 地址确定端口号。

4

1 回答 1

0

我发现在 Ryu 中,物理端口的名称在 dpset 数据结构中,它是 ryu.controller 的一部分。在 dpset 中有一个名为 port_state 的属性,它是类型为 {: } 的字典。您可以使用以下代码提取数据:

    port_list = []

    for port, port_info in simple_switch.dpset.port_state[dpid].items():
        port_list.append(
            {"hw_addr": port_info.hw_addr, "name": port_info.name.decode("utf-8"), "openflow_port": port})

在我的例子中,simpleswitch 是 Ryu 的 REST 控制器的一个实例。但是,您无需休息即可获取数据 - 它是由 dpset 中的控制器维护的数据的一部分。

于 2020-04-24T13:54:14.167 回答