python中网络拓扑的表示

时间:2014-04-22 02:31:12

标签: python networking switch-statement ethernet openflow

这是来自https://github.com/osrg/ryu/blob/master/ryu/topology/switches.py#L429

的类切换的代码

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

    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)链接又是一个字典,它将Link类映射到时间戳

- again what does this mean?

我试图了解RYU控制器如何使用上述结构存储拓扑信息。非常感谢您理解或解释的任何帮助。

2 个答案:

答案 0 :(得分:1)

通常,每个OpenFlow交换机连接到特定端口上的控制器,每个交换机和控制器之间的这种连接被视为一个单独的数据路径'它通常称为DPID(DataPath ID)。

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

我使用的是POX控制器,因此在Ryu中并不是很多,但我认为你现在可以理解它了。

答案 1 :(得分:0)

以下是我对答案的看法:

  1. 为每个datapth id保存一个datapath类。例如switches.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],它将包含数据路径标识为1的端口。

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

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

  5. 的第317行

    这是topo discovery in Ryu的好教程。