第一步:安裝git
sudo apt-get update
sudo apt-get install git
測試git是否安裝成功:
git
第二步:安裝mininet
1.獲取mininet最新源碼樹
git clone git://github.com/mininet/mininet 會在當前目錄下創建mininet文件夾
2.安裝mininet
cd mininet/util 進入mininet目錄
安裝:【一定要加-a,這樣才能保證mininet所有的組件和依賴都能安裝上】
./install.sh -a
若出現以下錯誤,正確的解決辦法應該是重裝mininet,也就是執行rm -rf mininet,將mininet整個文件夾都刪除,然后再執行上面的重裝命令
3.測試mininet
如果mininet正確安裝會出現enjoy mininet字樣,即
則說明安裝成功
再次打開mininet,可發現已成功安裝如下:
執行命令pingall可以查看連接情況。
sudo mn就是默認進入mininet自帶拓撲結構的網絡環境。
備注:在mininet中為什么沒有添加流表的時候兩台主機會ping通,原因在於控制器中的二層自學習功能,因為這是控制器可以通過下發流表的方式來使交換機產生流表,從而兩台機器ping通,這時如果你關閉了控制器,你會發現兩台主機就ping不同了。
第三步:安裝floodlight
1.
sudo apt-get update
2.安裝jdk和eclipse
sudo apt-get install build-essential default-jdk ant python-dev eclipse
3.下載最新floodlight源碼樹
git clone git://github.com/floodlight/floodlight.git
4.進入floodlight目錄
git submodule init
git submodule update
ant
第一次執行以上命令結果如下:
5.首次運行floodlight需執行如下命令
sudo mkdir /var/lib/floodlight
sudo chmod 777 /var/lib/floodlight
6.運行floodlight
sudo java -jar target/floodlight.jar
運行成功后在瀏覽器輸入localhost:8080/ui/pages/index.html,會出現如下界面
第四步:mininet和floodlight都在虛擬機內搭建拓撲
1.運行floodlight
sudo java -jar target/floodlight.jar 打開floodlight正常運行
2.創建簡單topo並運行
執行sudo mn --topo single,3 --mac --switch ovsk --controller remote,ip=127.0.0.1,port=6653,這里是創建了3個主機,一個交換機,一個控制器,ip是誰的ip?還未解。。。這個ip是floodlight控制器所在的主機的ip地址,也就是ipconfig后得到的ip地址,port是控制器的端口號,這里在打開floodlight后,可以看到這樣一條信息
floodlight控制器會在0.0.0.0:6653監聽Openflow的switch。
發現floodlight會以6653端口號來監聽交換機,所以這里端口號一定要是6653,否則會顯示下面的連不上控制器的信息:
在正常連接后會是下面的信息:
正常之后執行ping可以正常連接如上。
3.利用python創建topo並運行
簡單topo.py格式:

1 from mininet.topo import Topo 2 from mininet.net import Mininet 3 from mininet.util import dumpNodeConnections 4 from mininet.log import setLogLevel,info 5 from mininet.node import CPULimitedHost 6 from mininet.node import RemoteController 7 from mininet.link import TCLink 8 from mininet.cli import CLI 9 10 class MyTopo( Topo ): 11 12 def __init__( self ): 13 "Create custom topo." 14 15 # initilaize topology 16 Topo.__init__( self ) 17 18 # add hosts and switches 19 host1 = self.addHost( 'h1' ) 20 host2 = self.addHost( 'h2' ) 21 switch1 = self.addSwitch( 's1' ) 22 switch2 = self.addSwitch( 's2' ) 23 24 25 # add links 26 self.addLink(host1,switch1) 27 self.addLink(host2,switch2) 28 self.addLink(switch1,switch2) 29 30 31 if __name__=='__main__': 32 setLogLevel('info') 33 info( '*** Creating network\n' ) 34 35 topo=MyTopo() 36 net=Mininet(topo=topo,controller=None,host=CPULimitedHost,link=TCLink) 37 net.addController('c0',controller=RemoteController,ip='192.168.80.1',port=6653) 38 net.start() 39 CLI(net)
其中ip應該改成本機ip。
在topo.py的目錄下執行python topo.py,如果正確的話能看到以下信息:
exit退出之后再執行python topo.py會出現如下錯誤:
原因:因為在開啟topo的時候mininet還會開啟其他的一些組件,導致退出topo的時候仍在占用。
解決辦法是:
1.執行sudo mn,會出現如下問題:
執行pkill -9 -f "sudo mnexec",再次執行python topo.py,發現正確運行。
2.退出topo后執行mn -c,再次執行python topo.py,就可以正確運行。
第五步:mininet和floodlight分在兩個主機上運行
1.將floodlight源碼放進eclipse工程中
2.打開Main主函數,run as以java se的方式運行
正確運行結果如下:
3.打開虛擬機,建一個topo,【ip地址一定是當前floodlight所在主機的ip】,正確創建topo並ping通之后結果如下:
IP地址127.0.0.1和本機IP的選擇:
1.如果在虛擬機的mininet中創建topo時使用127.0.0.1,在本機中運行floodlight,會發現創建topo時出現如下無法連接控制器的信息:
此時再在虛擬機中跑floodlight,【此時本機和虛擬機同時在跑floodlight,發現兩者是互不干擾的,雖然監聽端口相同,我覺得原因應該是他倆相當於在兩個不同的主機上跑】,然后再次運行剛才的topo,發現正確創建。
2.如果在虛擬機的mininet中創建topo時使用本機IP,在本機中運行floodlight,會發現topo正確創建,且本機floodlight可以獲取到topo的相關信息。
綜上所述,127.0.0.1是回環地址,也就是只在當前主機中有效,無論是虛擬主機還是實際主機,都只能在本主機中有效,要想虛擬主機認識實際主機,需要設置實際主機的IP地址。