Mininet 应用与源码剖析
  • 前言
  • 概述
    • 主要特性
    • 安装
  • 基本使用
    • 创建网络
    • 查看信息
    • 节点操作
  • 常用操作
    • 快捷测试
    • 自定义拓扑
    • 使用友好的 MAC 编号
    • 使用 XTerm
    • 链路操作
    • 指定交换机跟控制器类型
    • 名字空间
    • 启动参数总结
    • 常用命令总结
    • 其他操作
  • 高级功能
    • 使用 dpctl
    • 控制器
    • 交换机与控制器交互
    • 使用 NOX
    • 外部读取配置命令
  • 代码结构
    • 运行相关
    • 安装相关
    • 核心代码
    • 说明文件
    • 其它
    • 整体逻辑功能
  • mininet.link 模块
    • mininet.link.Intf
    • mininet.link.Link
    • mininet.link.TCIntf
    • mininet.link.TCLink
  • mininet.node 模块
    • 基类
    • 主机类
    • 控制器类
    • 交换机类
  • mininet.net 模块
    • mininet.net.Mininet
    • mininet.net.MininetWithControlNet
  • mininet.topo 模块
    • mininet.topo.MultiGraph
    • mininet.topo.Topo
    • mininet.topo.LinearTopo
    • mininet.topo.SingleSwitchTopo
    • mininet.topo.SingleSwitchReversedTopo
  • 其它模块
    • mininet.cli 模块
    • mininet.clean 模块
    • mininet.log 模块
    • mininet.moduledeps 模块
    • mininet.term 模块
    • mininet.util 模块
  • 运行代码和示例
    • mn
    • 示例程序
Powered by GitBook
On this page

Was this helpful?

  1. mininet.link 模块

mininet.link.Link

表示基本的一条链路,最基本的链路在 mininet 中其实就是一对 veth 接口对。

def __init__( self, node1, node2, port1=None, port2=None,
                  intfName1=None, intfName2=None,
                  intf=Intf, cls1=None, cls2=None, params1=None,
                  params2=None ):
        """Create veth link to another node, making two new interfaces.
           node1: first node
           node2: second node
           port1: node1 port number (optional)
           port2: node2 port number (optional)
           intf: default interface class/constructor
           cls1, cls2: optional interface-specific constructors
           intfName1: node1 interface name (optional)
           intfName2: node2  interface name (optional)
           params1: parameters for interface 1
           params2: parameters for interface 2"""
        # This is a bit awkward; it seems that having everything in
        # params would be more orthogonal, but being able to specify
        # in-line arguments is more convenient!
        if port1 is None:
            port1 = node1.newPort()
        if port2 is None:
            port2 = node2.newPort()
        if not intfName1:
            intfName1 = self.intfName( node1, port1 )
        if not intfName2:
            intfName2 = self.intfName( node2, port2 )

        self.makeIntfPair( intfName1, intfName2 )

        if not cls1:
            cls1 = intf
        if not cls2:
            cls2 = intf
        if not params1:
            params1 = {}
        if not params2:
            params2 = {}

        intf1 = cls1( name=intfName1, node=node1, port=port1,
                      link=self, **params1  )
        intf2 = cls2( name=intfName2, node=node2, port=port2,
                      link=self, **params2 )

        # All we are is dust in the wind, and our two interfaces
        self.intf1, self.intf2 = intf1, intf2

创建链路时,需要在两个节点上分别生成两个端口,利用节点和端口,获取对应的两个网络接口的名称,例如 s1-eth0 和 h1-eth0,然后调用 makeIntfPair() 方法,最终调用 util.py 中的 makeIntfPair() 方法,调用系统中的 ip link 命令来创造一对 veth pair。

def makeIntfPair( intf1, intf2 ):
    """Make a veth pair connecting intf1 and intf2.
       intf1: string, interface
       intf2: string, interface
       returns: success boolean"""
    # Delete any old interfaces with the same names
    quietRun( 'ip link del ' + intf1 )
    quietRun( 'ip link del ' + intf2 )
    # Create new pair
    cmd = 'ip link add name ' + intf1 + ' type veth peer name ' + intf2
    return quietRun( cmd )
Previousmininet.link.IntfNextmininet.link.TCIntf

Last updated 5 years ago

Was this helpful?