前幾天有網路上的朋友詢問有沒有辦法將 p4 跟 ovs 混合起來使用,就想說來測試看看好了,畢竟之前有使用過將 docker container 連接上 ovs 的經驗,想說應該不會太困難。
結果僅使用一支簡單的 mininet script 就可以完成了:
#!/usr/bin/python
# This file is fork from p4factory/mininet/swl_l2.py
##############################################################################
# Topology with two switches and two hosts (static macs, no loops, no STP)
#
# 172.16.10.0/24
# h1 -------- sw1(p4) -------------- sw2(ovs) --------h2
# .1 .2
##############################################################################
from mininet.net import Mininet, VERSION
from mininet.log import setLogLevel, info
from mininet.cli import CLI
from distutils.version import StrictVersion
from p4_mininet import P4DockerSwitch
from time import sleep
import sys
def main():
net = Mininet( controller = None )
# add hosts
h1 = net.addHost( 'h1', ip = '172.16.10.1/24' )
h2 = net.addHost( 'h2', ip = '172.16.10.2/24' )
# add switch 1
sw1 = net.addSwitch( 'sw1', target_name = "p4dockerswitch",
cls = P4DockerSwitch, pcap_dump = False )
# add switch 2
sw2 = net.addSwitch('sw2')
# add links
if StrictVersion(VERSION) <= StrictVersion('2.2.0') :
net.addLink( sw1, h1, port1 = 1 )
net.addLink( sw1, sw2, port1 = 2, port2 = 2 )
net.addLink( sw2, h2, port1 = 1 )
else:
net.addLink( sw1, h1, port1 = 1, fast=False )
net.addLink( sw1, sw2, port1 = 2, port2 = 2, fast=False )
net.addLink( sw2, h2, port1 = 1, fast=False )
net.start()
CLI( net )
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
main()
唯一比較麻煩的是,他好像沒有辦法直接使用 addLink 這一個 function,必須要指定 port 才行。