1

这是来自https://github.com/osrg/ryu/blob/master/ryu/topology/switches.py#L429的类 Switches 的代码

Switches 类中我特别感兴趣的成员变量如下。

    self.dps = {}                 # datapath_id => Datapath class
    self.port_state = {}          # datapath_id => ports
    self.ports = PortDataState()  # Port class -> PortData class
    self.links = LinkState()      # Link class -> timestamp
    self.is_active = True

这些是 RYU 用于缓存拓扑详细信息的成员变量。我试图弄清楚如何使用以下变量表示拓扑。

1) dps 是将 datapath_id 映射到 datapath 类的字典?

- Can someone explain to me what is a datapath_id and a datapath class?

2) port_state 是一个将数据路径 ID 映射到端口的字典

- As per my understanding on a switch without a VLAN all the ports will belong to the           same datapath id? In case of a switch with VLAN ports on the switch can have multiple datapath id's. Is my understanding correct?

3) ports 又是一个将 Port 类映射到 PortData 类的字典?

- what does this mean?

4) links 又是一个字典,将 Link 类映射到时间戳

- again what does this mean?

我正在尝试了解 RYU 控制器如何使用上述结构存储拓扑信息。任何有助于理解或解释的帮助将不胜感激。

4

2 回答 2

1

通常,每个 OpenFlow 交换机都连接到特定端口上的控制器,交换机和控制器之间的每个此类连接都被视为单独的“数据路径”,通常称为 DPID(数据路径 ID)。

链接被视为属于 2 个 DPID 的端口之间的连接,因此 DPID 1 (PORT1) <—> (PORT2)DPID2 是 SW1 P1 和 SW2 P1 之间的链接。

我使用 POX 控制器,所以对 Ryu 的使用并不多,但我认为你现在可以理解它了。

于 2014-06-02T03:35:12.723 回答
0

以下是我对答案的看法:

  1. 为每个 datapth id 保存一个数据路径类。例如,在switchs.py 中的第475 行中这种 self.dps[dp.id] = dp方式使用一个数据路径ID,整个类很容易找到。

  2. PortState在第 161 行定义PortState(dict),这意味着它是一个字典。其中 dict 的键为int port_no,值为 OFPPort port
    因此self.port_state保存每个数据路径 ID 的端口。例如, self.port_state[1]它将包含数据路径 ID 为 1 的端口。

  3. PortDataState在第 206 行定义PortDataState(dict),这意味着它是一个字典。就字典而言,它是某种双向链表。看起来这更像是一个端口列表作为键,然后将它们的状态作为值。

  4. LinkState 跟踪链接。对于 和 之间的链接srcdst它会创建一个 Link 对象。dst并保存了和之间的映射src(这是使用 self._map 结构完成的)。此外,对于每个创建的 Link 对象,它都会记录时间(我不知道为什么会这样做)。
    看看switchs.py的第317

这是Ryu 中拓扑发现的好教程。

于 2015-07-15T20:00:37.547 回答