SDN-Mininet命令詳解(py dpctl ovs-vsctl ovs-ofctl)

目錄

基本命令

py命令

基本選項

控制器相關

示例

交換機相關

示例

主機相關命令

示例

dpctl命令

常用選項

示例

show

-V --version

 ovs-vsctl命令

常用選項

 示例

ovs-ofctl命令

常用選項

示例

dump-flows SWITCH

del-flows

add-flows


基本命令

文章SDN-Mininet安裝使用中列舉了dump,nodes,links等基本命令,不再贅述。

py命令

基本選項

  • net.addController(name='c0',controller=Controller,protocol='tcp',port=6633)        添加控制器
  • net.addSwitch('s1', cls=OVSKernelSwitch, dpid='0000000000000001')  添加交換機
  • net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)              添加主機
  • net.addLink(s1, s2)                                                                                            添加鏈路

控制器相關

在CLI界面,使用py help(c0)顯示下圖界面,其中,c0是控制器的名字。

針對控制器的命令

按q鍵退出,下同。

我翻譯了一下

class RemoteController(Controller)
 |控制器在Mininet的控制範圍之外運行。
 |
 |方法解析順序:
 |遠程控制器
 |控制器
 |節點
 | 內置對象
 |
 |此處定義的方法:
 |
 | __init __(self,name,ip ='127.0.0.1',port = None,** kwargs)
 |初始化。
 |name:控制器名稱
 | ip:控制器所在的IP地址
 |監聽
 | port:控制器監聽的端口
 |
 | checkListening(self)
 |在無法訪問控制器時發出警告
 |
 | isListening(self,ip,port)
 |檢查控制器是否正在偵聽特定的IP和端口
 |
 |start(self)
 |什麼也不做,可覆蓋。
 |
 |stop(self)
 |什麼也不做,可覆蓋。
 |
 | -------------------------------------------------- --------------------
 |此處定義的數據和其他屬性:
 |
 | isSetup = True
 |
 | -------------------------------------------------- --------------------
 |從Controller繼承的方法:
 |
| IP(self,intf=None)
 |返回控制器的IP地址
 |
 | __repr __(self)
 |更豐富的字符串表示形式
 |
 | -------------------------------------------------- --------------------
 |從Controller繼承的類方法:
 |
 | __builtin __.type中的isAvailable(cls)
 |控制器可用嗎?
 |
 | -------------------------------------------------- --------------------
 |從Node繼承的方法:
 |
 | MAC(self,intf=None)
 |返回節點或特定接口的MAC地址。
 |
 | __str __(self)
 |縮寫字符串表示
 |
 | addIntf(self,intf,port = None,moveIntfFn = <fuction moveIntf>)
 |添加接口。
 | intf:接口
 | port:端口號(可選,通常爲OpenFlow端口號)
 | moveIntfFn:移動界面的功能(可選)
 |
 |cleanup(​​self)
 |幫助python收集其垃圾。
 |
 | cmd(self,* args,** kwargs)
 |發送命令,等待輸出,然後返回。
 | cmd:字符串
 |
 | cmdPrint(self,* args)
 |調用cmd並打印其輸出
 | cmd:字符串
 |
 | config(self,mac = None,ip = None,defaultRoute = None,lo ='up',** _ params)
|根據(可選)參數配置節點:
 | mac:默認接口的MAC地址
 | ip:默認接口的IP地址
 | ifconfig:任意接口配置子類應重寫此方法並調用父類的config(** params)
 |
 | configDefault(self,** moreParams)
 |使用默認參數進行配置
 |
 | connectionsTo(self,node)
 |對於將自身連接到節點的所有接口,返回[接口1,接口2 ...]
 |
 | defaultIntf()
 |最低端口的返回接口
 |
 | delIntf(self,intf)
 |從節點的已知接口中刪除接口
 |注意:要完全刪除接口,請調用intf.delete()
 |
 | deleteIntfs(self,checkName = True)
 |刪除所有接口
 | checkName:僅刪除包含名稱的接口
 |
 | intf(self,intf = None)
 |返回給定字符串名稱的接口對象,
 |如果名稱爲假(無,空字符串等),則默認爲intf。
 |或輸入intf參數。
 |
 |使此函數返回其接口對象的參數使其使用靈活的輸入參數更容易構造函數
 |接口(既接受字符串名稱又接受Intf對象的接口)。
 |
 | intfIsUp(self,intf = None)
 |檢查接口是否打開
 |
 | intfList(self)
 |接口列表按端口號排序
 |
 | intfNames(self)
 |接口名稱按端口號排序
 |
 | linkTo(self,node,link= <class'mininet.link.Link'>)
 | (不建議使用)鏈接到另一個節點
 |替換爲Link(node1,node2)
 |
 |monitor(self,timeoutms=None,findPid = True)
 |監視並返回命令的輸出。
 |如果命令已完成,請將self.waiting設置爲False。
 | timeoutms:超時(以毫秒爲單位)或填寫“None”進行無限期等待
 | findPid:用mnexec -p查找PID
 |
 | mountPrivateDirs(self)
 |掛載私有目錄
 |
 | newPort(self)
 |返回下一個要分配的端口號。
 |
 | pexec(self,* args,** kwargs)
 |使用popen執行命令
 |返回:out,err,exitcode
 |
 | popen(self,* args,** kwargs)
 |在我們的命名空間中返回一個Popen()對象
 | args:Popen()args,單個列表或字符串
 | kwargs:Popen()關鍵字args
 |
 |read(self,size= 1024)
 |從節點緩衝讀取,可能會阻塞。
 | size:要返回的最大字符數
 |
 | readline(self)
 |來自節點的緩衝讀取行,可能會阻塞。
 |返回:行(減去換行符)或None
 |
 | sendCmd(self,* args,** kwargs)
 |發送命令,然後發送命令回顯哨兵,
 |然後返回,而無需等待命令完成。
 | args:命令和參數,或字符串
 | printPid:打印命令的PID?(False)
 |
 | sendInt(self,intr ='\ x03')
 |中斷運行命令。
 |
 | setARP(self,ip,mac)
 |添加ARP條目。
 | ip:IP地址作爲字符串
 | mac:MAC地址爲字符串
 |
 | setDefaultRoute(self,intf = None)
 |設置默認路由來通過接口。
 | intf:Intf或{dev <intfname>通過<gw-ip> ...}
 |
 | setHostRoute(self,ip,intf)
 |將路由添加到主機。
 | ip:IP地址,點分十進制
 | intf:字符串,接口名稱
 |
 | setIP(self,ip,prefixLen = 8,intf = None,** kwargs)
 |設置接口的IP地址。
 | intf:intf或接口名稱
 | ip:IP地址作爲字符串
 | prefixLen:前綴長度,例如8個/ 8或16M加法器
 | kwargs:intf.setIP的所有其他參數
 |
 | setMAC(self,mac,intf =None)
 |設置接口的MAC地址。
 | intf:intf或intf名稱
 | mac:MAC地址爲字符串
 |
 | setParam(self,results,method,** param)
 |內部方法:配置一個單一的參數
 |results:要更新的結果字典
 |method:配置方法名稱
 |param:arg = value(如果value = None則忽略)
 |值也可以是列表或字典
 |
 | startShell(self,mnopts = None)
 |啓動Shell進程以運行命令
 |
 |terminate(self)
 |向節點發送終止信號並對其進行清理。
 |
 | unmountPrivateDirs(個體)
 |掛載私有目錄
 |
 | waitOutput(self,verbose = False,findPid = True)
 |等待命令完成。
 |完成由前哨字符ASCII(127)表示
 |出現在輸出流中。等待哨兵返回輸出,包括尾隨換行符。
 |詳細:以交互方式打印輸出
 |
 | waitReadable(self,timeoutms = None)
 |等待直到節點的輸出可讀。
 | timeoutms:超時(以毫秒爲單位)或填寫“None”進行無限期等待。
 |返回:poll()的結果
 |
 |write(self,data)
 |將數據寫入節點。
 |data:字符串
 |
 | -------------------------------------------------- --------------------
 |從Node繼承的類方法:
 |
 |checkSetup(cls) __builtin __.type中的
 |確保設置了我們的類和超類
 |
 |fdToNode(cls,fd)__builtin __.type中的
 |返回節點對應於給定的文件描述符。
 | fd:文件描述符
 |返回:節點
 |
 |setup(cls)  __builtin __.type中的
 |確保我們的類依賴項可用
 |
 | -------------------------------------------------- --------------------
 |從Node繼承的數據描述符:
 |
 | __dict__
 |實例變量字典(如果已定義)
 |
 | __weakref__
 |對對象的弱引用列表(如果已定義)
 |
 | -------------------------------------------------- --------------------
 |從mininet.node.Node繼承的數據和其他屬性:
 |
 | inToNode = {7:<RemoteController c0:127.0.0.1:6633 pid = 74955>,9:<c ...
 |
 | outToNode = {7:<RemoteController c0:127.0.0.1:6633 pid = 74955>,9:<...

示例

從controller繼承的方法

  • IP
顯示c0的ip

從Node繼承的類方法

  • __str__
顯示控制器名稱
  • cmdPrint
運行cmdf命令ifconfig並打印結果

博主測試了其他cmd命令,也可以運行。

交換機相關

使用py help(s1)可查看交換機命令界面,使用dir()可查看命令,不包含命令的作用及參數解釋,使用方法見下圖。

控制器,交換機,主機命令目錄

 可以看出,有些函數名稱是一樣的,部分函數名稱、作用及參數一樣,不再翻譯,主機的翻譯也是。

class customOvs(mininet.node.OVSSwitch)
 |自定義的OVS交換機
 |
 |方法解析順序:
 | customOvs
 | mininet.node.OVSSwitch
 | mininet.node.Switch
 | mininet.node.Node
 | __builtin__.object
 |
 |此處定義的方法:
 |
 | __init __(self,name,failMode ='secure',datapath ='kernel',** params)
 |
 | getSwitchIP()
 |返回IP地址
 |
 | setSwitchIP(self,ip)
 |設置管理IP地址
 |
 |start(self,controllers)
 |啓動並設置管理IP地址
 |
 | -------------------------------------------------- --------------------
 |此處定義的數據和其他屬性:
 |
 | OVSVersion ='2.9'
 |
 | isSetup = True
 |
 | -------------------------------------------------- --------------------
 |從mininet.node.OVSSwitch繼承的方法:
 |
 |attach(self,intf)
 |連接數據端口
 |
 | bridgeOpts(self)
 |返回OVS橋選項
|
 |connected(self)
 |我們是否連接到至少一個控制器?
 |
 | controllerUUIDs(self,update = False)
 |返回控制器的ovsdb UUID
 |update:更新緩存的值
 |
 | detach(self,intf)
 |斷開數據端口
 |
 | dpctl(self,* args)
 |運行ovs-ofctl命令
 |
 | intfOpts(self,intf)
 |返回intf的OVS接口選項
 |
 |stop(self,deleteIntfs = True)
 |終止OVS交換機
 |deleteIntfs:刪除接口? (真)
 |
 |vsctl(self,* args,** kwargs)
 |運行ovs-vsctl命令(或排隊等待以後執行)
 |
 | -------------------------------------------------- --------------------
 |從mininet.node.OVSSwitch繼承的類方法:
 |
 |batchShutdown(cls,switches,run = <function errRun>),來自__builtin __.type
 |關閉OVS開關列表
 |
 |batchStartup(cls,switches,run = <function errRun>),來自__builtin __.type
 |批量啓動OVS
 |switches:交換機啓動
 | run:運行命令的函數(errRun)
 |
 | isOldOVS(cls),來自__builtin __.type
 | OVS誤差是否小於1.10?
 |
 |
 | setup(cls),來自__builtin __.type
 |確保已安裝Open vSwitch並正常工作
 |
 | -------------------------------------------------- --------------------
 |從mininet.node.OVSSwitch繼承的靜態方法:
 |
 | TCReapply(intf)
 |不幸的是,OVS和Mininet正在戰鬥在tc排隊學科上。
 |作爲快速技巧/解決方法,我們清除了OVS,然後重新應用我們自己的。
 |
 | -------------------------------------------------- --------------------
 |從mininet.node.OVSSwitch繼承的數據和其他屬性:
 |
 | argmax = 128000
 |
 | -------------------------------------------------- --------------------
 |從mininet.node.Switch繼承的方法:
 |
 | __repr __(self)
 |更豐富的字符串表示形式
 |
 | defaultDpid(self,dpid = None)
 |從dpid或開關名稱返回正確格式的dpid(s1-> 1)
 |
 | defaultIntf()
 |返回控制界面
 |
 | sendCmd(self,* cmd,** kwargs)
 |發送命令到節點
 | cmd:字符串
 |
 | -------------------------------------------------- --------------------
 |從mininet.node.Switch繼承的數據和其他屬性:
 |
 | dpidLen = 16
 |
 | portBase = 1

示例

從mininet.node.OVSSwitch繼承的方法

  • attach
交換機s2添加端口s2-eth3
  • bridgeOpts
返回橋選項
  • connected
是否連接控制器

      True表示已連接,False表示未連接

  • controllerUUIDs
返回控制器的UUID
  • stop
關閉交換機

dpctl ovs-vsctl ovs-ofctl等放在後面講解

主機相關命令

使用py help(h1)可查看主機命令界面

翻譯如下

class Host(Node)
 |主機只是一個節點
 |
 |方法解析順序:
 |Host
 |Node
 | __buliltin__.object
 |
 |此處定義的數據和其他屬性:
 |
 | isSetup = True
 |
 | -------------------------------------------------- --------------------
 |從Node繼承的方法:
 |
 | IP(self,intf=None)
 |返回節點或特定接口的IP地址。
 |
 | MAC(self,intf=None)
 |返回節點或特定接口的MAC地址。
 |
 | __init __(self,name,inNamespace = True,** params)
 | name:節點名稱
 | inNamespace:在網絡名稱空間?
 | privateDirs:私有目錄字符串或元組的列表
 | params:節點參數(有關詳細信息,請參見config())
 |
 | __repr __(self)
 |更豐富的字符串表示形式
 |
 | __str __(self)
 |縮寫字符串表示
 |
 | addIntf(self,intf,port = None,moveIntfFn = <函數moveIntf>)
 |添加接口
 | intf:接口
 | port:端口號(可選,通常爲OpenFlow端口號)
 | moveIntfFn:移動界面的功能(可選)
 |
 |cleanup(​​self)
 |幫助python收集其垃圾。
 |
 | cmd(self,* args,** kwargs)
 |發送命令,等待輸出,然後返回
 | cmd:字符串
 |
 | cmdPrint(self,* args)
 |調用cmd並打印其輸出
 | cmd:字符串
 |
 | config(self,mac = None,ip = None,defaultRoute = None,lo ='up',** _ params)
 |根據(可選)參數配置節點:
 | mac:默認接口的MAC地址
 | ip:默認接口的IP地址
 | ifconfig:任意接口配置子類應重寫此方法並調用父類的config(** params)
 |
 | configDefault(self,** moreParams)
 |使用默認參數進行配置
 |
 | connectionsTo(self,節點)
 |對於將自身連接到節點的所有接口,返回[接口1,接口2 ...]
 |
 | defaultIntf()
 |最低端口的返回接口
 |
 | delIntf(self,intf)
 |從Node的已知接口中刪除接口
 |注意:要完全刪除接口,請調用intf.delete()
 |
 | deleteIntfs(self,checkName = True)
 |刪除所有接口
 | checkName:僅刪除包含我們名稱的接口
 |
 | intf(self,intf = None)
 |返回給定字符串名稱的接口對象,
 |如果名稱爲假(None,空字符串等),則默認爲intf。
 |或輸入intf參數。
 |
 |使此函數返回其接口對象的參數使其使用靈活的輸入參數更容易構造函數
 |接口(既接受字符串名稱又接受Intf對象的接口)。
 |
 | intfIsUp(self,intf = None)
 |檢查接口是否打開
 |
 | intfList(self)
 |我們的接口列表按端口號排序
 |
 | intfNames(self)
 |我們的接口名稱按端口號排序
 |
 | linkTo(自身,節點,鏈接= <類'mininet.link.Link'>)
 | (不建議使用)鏈接到另一個節點
 |替換爲Link(node1,node2)
 |
 |monitor(self,timeoutms=None,findPid = True)
 |監視並返回命令的輸出。
 |如果命令已完成,請將self.waiting設置爲False。
 | timeoutms:超時(以毫秒爲單位)或填寫“None”進行無限期等待
 | findPid:用mnexec -p查找PID
 |
 | mountPrivateDirs(self)
 |掛載私有目錄
 |
 | newPort(self)
 |返回下一個要分配的端口號。
 |
 | pexec(self,* args,** kwargs)
 |使用popen執行命令
 |返回:out,err,exitcode
 |
 | popen(self,* args,** kwargs)
 |在我們的命名空間中返回一個Popen()對象
 | args:Popen()args,單個列表或字符串
 | kwargs:Popen()關鍵字args
 |
 |read(self,size= 1024)
 |從節點緩衝讀取,可能會阻塞。
 | size:要返回的最大字符數
 |
 | readline(self)
 |來自節點的緩衝讀取行,可能會阻塞。
 |返回:行(減去換行符)或None
 |
 | sendCmd(self,* args,** kwargs)
 |發送命令,然後發送命令回顯哨兵,
 |然後返回,而None需等待命令完成。
 | args:命令和參數,或字符串
 | printPid:打印命令的PID? (假)
 |
 | sendInt(self,intr ='\ x03')
 |中斷運行命令。
 |
 | setARP(self,ip,mac)
 |添加ARP條目。
 | ip:IP地址作爲字符串
 | mac:MAC地址爲字符串
 |
 | setDefaultRoute(self,intf = None)
 |設置默認路由以通過intf。
 | intf:Intf或{dev <intfname>通過<gw-ip> ...}
 |
 | setHostRoute(self,ip,intf)
 |將路由添加到主機。
 | ip:IP地址,點分十進制
 | intf:字符串,接口名稱
 |
 | setIP(self,ip,prefixLen = 8,intf = None,** kwargs)
 |設置接口的IP地址。
 | intf:intf或接口名稱
 | ip:IP地址作爲字符串
 | prefixLen:前綴長度,例如8個/ 8或16M加法器
 | kwargs:intf.setIP的所有其他參數
 |
 | setMAC(self,mac,intf =None)
 |設置接口的MAC地址。
 | intf:intf或intf名稱
 | mac:MAC地址爲字符串
 |
 | setParam(self,results,method,** param)
 |內部方法:配置一個單一的參數
 |results:要更新的結果字典
 |method:配置方法名稱
 |param:arg = value(如果value = None則忽略)
 |值也可以是列表或字典
 |
 | startShell(self,mnopts = None)
 |啓動Shell進程以運行命令
 |
 |terminate(self)
 |向節點發送終止信號並對其進行清理。
 |
 | unmountPrivateDirs(個體)
 |掛載私有目錄
 |
 | waitOutput(self,verbose = False,findPid = True)
 |等待命令完成。
 |完成由前哨字符ASCII(127)表示
 |出現在輸出流中。等待哨兵返回輸出,包括尾隨換行符。
 |詳細:以交互方式打印輸出
 |
 | waitReadable(self,timeoutms = None)
 |等待直到節點的輸出可讀。
 | timeoutms:超時(以毫秒爲單位)或填寫“None”進行無限期等待。
 |返回:poll()的結果
 |
 |write(self,data)
 |將數據寫入節點。
 |data:字符串

示例

從Node繼承的方法

  • IP
  • MAC
顯示IP、MAC

 

dpctl命令

常用選項

  • dump-flows   SWITCH FLOW          print matching FLOWs(打印流表)
  • show              SWITCH                    show OpenFlow information(顯示SWITCH的OpenFlow信息)
  • dump-tables   SWITCH                    print table stats(打印表統計信息)
  • dump-ports     SWITCH [PORT]       print port statistics(打印端口統計信息)
  • add-flow         SWITCH FLOW         add flow described by FLOW(通過流的描述來添加流)
  • del-flows         SWITCH [FLOW]       delete matching FLOWs(刪除匹配的FLOW,後面加條件,比如in_port=1)
  •   -V,--version                                    display version information(顯示交換機版本信息)
  •   -O, --protocols                               set allowed OpenFlow version(default: OpenFlow10, OpenFlow11, OpenFlow12, OpenFlow13, OpenFlow14)(設置允許的OpenFlow版本,後面是默認值)

示例

show

顯示交換機的動作列表,緩存大小等信息

顯示交換機信息

-V --version

顯示交換機的版本信息

顯示交換機版本信息

其餘部分命令,在SDN-流表分析與增刪改查中有具體的使用情況。

 ovs-vsctl命令

ovs-vsctl的幫助信息

常用選項

  • show                                  print overview of database contents(顯示數據庫內容的打印概述,查看網橋)
  • add-br  BRIDGE                create a new bridge named BRIDGE(創建一個名爲BRIDGE的新網橋)
  • del-br BRIDGE                  delete BRIDGE and all of its ports(刪除BRIDGE及其所有端口)
  • add-port BRIDGE PORT   add network device PORT to BRIDGE(將網絡設備PORT添加到BRIDGE)
  •  del-port [BRIDGE] PORT  delete PORT (which may be bonded) from BRIDGE 從BRIDGE刪除PORT(可能是綁定的)
  • del-controller BRIDGE       delete the controllers for BRIDGE(刪除BRIDGE的控制器)

 示例

佔個坑

ovs-ofctl命令

ovs-ofctl命令幫助

和dpctl顯示的是一樣的

常用選項

  • dump-flows   SWITCH FLOW          print matching FLOWs(打印流表,後面需要添加參數,即交換機名)
  • show              SWITCH                    show OpenFlow information(顯示SWITCH的OpenFlow信息)
  • dump-tables   SWITCH                    print table stats(打印表統計信息)
  • dump-ports     SWITCH [PORT]       print port statistics(打印端口統計信息)
  • add-flow         SWITCH FLOW         add flow described by FLOW(通過流的描述來添加流)
  • del-flows         SWITCH [FLOW]       delete matching FLOWs(刪除匹配的FLOW,後面加條件,比如in_port=1)
  •   -V,--version                                    display version information(顯示交換機版本信息)
  •   -O, --protocols                               set allowed OpenFlow version(default: OpenFlow10, OpenFlow11, OpenFlow12, OpenFlow13, OpenFlow14)(設置允許的OpenFlow版本,後面是默認值)

示例

dump-flows SWITCH

dump-flows

dpctl命令的這個dump-flows選項默認打印所有交換機的,這個必須得添加參數。

del-flows

後面需要至少一個參數,也可以多個,例如刪除交換機s1中所有入端口2的流表項,sh ovs-ofctl del-flows s1 in_port=2

del-flows命令-刪除交換機s1的所有流表項

add-flows

後面加兩個參數 交換機 以及端口動作等信息

add-flows向s1添加兩個流表項

小總結:dpctl命令是針對所有交換機的流表,ovs-ofctl是針對某個交換機的流表

更多SDN相關內容,請查看:SDN-自學筆記

有問題請下方評論,轉載請註明出處,並附有原文鏈接,謝謝!如有侵權,請及時聯繫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章