控制器类

mininet.node.Controller

控制器基类。默认的控制器是一个参考的实现,controller。

表示一个控制器节点。包括 IP 地址、端口等。

主要方法包括启动和停止一个控制器。

init

  1. def __init__( self, name, inNamespace=False, command='controller',
  2. cargs='-v ptcp:%d', cdir=None, ip="127.0.0.1",
  3. port=6633, **params ):
  4. self.command = command
  5. self.cargs = cargs
  6. self.cdir = cdir
  7. self.ip = ip
  8. self.port = port
  9. Node.__init__( self, name, inNamespace=inNamespace,
  10. ip=ip, **params )
  11. self.cmd( 'ifconfig lo up' ) # Shouldn't be necessary
  12. self.checkListening()

checkListening

确保系统中安装了 telnet,并且在监听端口上并没有其他控制器在监听。

start

  1. def start( self ):
  2. """Start <controller> <args> on controller.
  3. Log to /tmp/cN.log"""
  4. pathCheck( self.command )
  5. cout = '/tmp/' + self.name + '.log'
  6. if self.cdir is not None:
  7. self.cmd( 'cd ' + self.cdir )
  8. self.cmd( self.command + ' ' + self.cargs % self.port +
  9. ' 1>' + cout + ' 2>' + cout + '&' )
  10. self.execed = False

该方法检查控制器程序存在,并根据传入的参数来启动它。

stop

  1. def stop( self ):
  2. "Stop controller."
  3. self.cmd( 'kill %' + self.command )
  4. self.terminate()

该方法杀死控制器进程和节点的 shell 进程,并执行清理工作。

mininet.node.NOX

表示一个 NOX 控制器(需要系统中事先安装了 NOX)。

mininet.node.OVSController

表示一个ovs-controller(需要系统中实现安装了 ovs-controller)。

mininet.node.RemoteController

表示一个在 Mininet 控制外的控制器,即用户自己额外运行了控制器,此处需要维护连接的相关信息。