1. 程式人生 > >Floodlight Mininet自定義拓撲及流表

Floodlight Mininet自定義拓撲及流表

實驗拓撲:


目的:(1)自定義構建以上拓撲

   (2)實現h1,h2能通訊,h3,h4不能通訊,h1,h2與h3,h4之間能相互通訊

基本操作這裡就不仔細介紹了,可以參考之前的兩篇文。

1.構建拓撲,用Python實現以上自定義拓撲

程式碼:

  1. from mininet.topo import Topo, Node  
  2. class MyTopo( Topo ):  
  3.     "Simple topology example."
  4.     def __init__( self, enable_all = True ):  
  5.         "Create custom topo."
  6.         # Add default members to class.
  7.         super( MyTopo, self ).__init__()  
  8.         # Set Node IDs for hosts and switches
  9.         leftHost1 = 1
  10.         leftHost2 = 2
  11.         leftSwitch = 3
  12.         rightSwitch = 4
  13.         rightHost1 = 5
  14.         rightHost2 = 6
  15.         # Add nodes
  16.         self.add_node( leftSwitch, Node( is_switch=True
     ) )  
  17.         self.add_node( rightSwitch, Node( is_switch=True ) )  
  18.         self.add_node( leftHost1, Node( is_switch=False ) )  
  19.         self.add_node( leftHost2, Node( is_switch=False ) )  
  20.         self.add_node( rightHost1, Node( is_switch=False ) )  
  21.         self.add_node( rightHost2, Node( is_switch=
    False ) )  
  22.         # Add edges
  23.         self.add_edge( leftHost1, leftSwitch )  
  24.         self.add_edge( leftHost2, leftSwitch )  
  25.         self.add_edge( leftSwitch, rightSwitch )  
  26.         self.add_edge( rightSwitch, rightHost1 )  
  27.         self.add_edge( rightSwitch, rightHost2 )  
  28.         # Consider all switches and hosts 'on'
  29.         self.enable_all()  
  30. topos = { 'mytopo': ( lambda: MyTopo() ) }  

2.在floodlight的web頁面點選host如下圖


可以看到連結交換機03的host埠號為1,2,那麼可以推斷04交換機連結到03交換機的3埠。同樣連結交換機04的host埠號為2,3,那麼可以推斷03交換機連結到04交換機的1埠(寫流表就是根據這些資訊來的)。

3.此時使用pingall,得到相互ping不通,(在刪除.property檔案中的Forwarding則預設相互不通,參考上一篇文)如下圖


4.寫流表

python程式碼:

  1. import httplib  
  2. import json  
  3. class StaticFlowPusher(object):  
  4.     def __init__(self, server):  
  5.         self.server = server  
  6.     def get(self, data):  
  7.         ret = self.rest_call({}, 'GET')  
  8.         return json.loads(ret[2])  
  9.     def set(self, data):  
  10.         ret = self.rest_call(data, 'POST')  
  11.         return ret[0] == 200
  12.     def remove(self, objtype, data):  
  13.         ret = self.rest_call(data, 'DELETE')  
  14.         return ret[0] == 200
  15.     def rest_call(self, data, action):  
  16.         path = '/wm/staticflowentrypusher/json'
  17.         headers = {  
  18.             'Content-type''application/json',  
  19.             'Accept''application/json',  
  20.             }  
  21.         body = json.dumps(data)  
  22.         conn = httplib.HTTPConnection(self.server, 8080)  
  23.         conn.request(action, path, body, headers)  
  24.         response = conn.getresponse()  
  25.         ret = (response.status, response.reason, response.read())  
  26.         print ret  
  27.         conn.close()  
  28.         return ret  
  29. pusher = StaticFlowPusher('192.168.131.129')  
  30. flow1 = {  
  31.     'switch':"00:00:00:00:00:00:00:03",  
  32.     "name":"flow-mod-1",  
  33.     "cookie":"0",  
  34.     "priority":"32768",  
  35.     "ingress-port":"1",  
  36.     "active":"true",  
  37.     "actions":"output=flood"
  38.     }  
  39. flow2 = {  
  40.     'switch':"00:00:00:00:00:00:00:03",  
  41.     "name":"flow-mod-2",  
  42.     "cookie":"0",  
  43.     "priority":"32768",  
  44.     "ingress-port":"2",  
  45.     "active":"true",  
  46.     "actions":"output=flood"
  47.     }  
  48. flow3 = {  
  49.     'switch':"00:00:00:00:00:00:00:03",  
  50.     "name":"flow-mod-3",  
  51.     "cookie":"0",  
  52.     "priority":"32768",  
  53.     "ingress-port":"3",  
  54.     "active":"true",  
  55.     "actions":"output=flood"
  56.     }  
  57. flow4 = {  
  58.     'switch':"00:00:00:00:00:00:00:04",  
  59.     "name":"flow-mod-4",  
  60.     "cookie":"0",  
  61.     "priority":"32768",  
  62.     "ingress-port":"2",  
  63.     "active":"true",  
  64.     "actions":"output=1"
  65.     }  
  66. flow5 = {  
  67.     'switch':"00:00:00:00:00:00:00:04",  
  68.     "name":"flow-mod-5",  
  69.     "cookie":"0",  
  70.     "priority":"32768",  
  71.     "ingress-port":"3",  
  72.     "active":"true",  
  73.     "actions":"output=1"
  74.     }  
  75. flow6 = {  
  76.     'switch':"00:00:00:00:00:00:00:04",  
  77.     "name":"flow-mod-6",  
  78.     "cookie":"0",  
  79.     "priority":"32768",  
  80.     "ingress-port":"1",  
  81.     "active":"true",  
  82.     "actions":"output=flood"
  83.     }  
  84. pusher.set(flow1)  
  85. pusher.set(flow2)  
  86. pusher.set(flow3)  
  87. pusher.set(flow4)  
  88. pusher.set(flow5)  
  89. pusher.set(flow6)  
如下圖達到實驗目的:

相關推薦

Floodlight Mininet定義

實驗拓撲: 目的:(1)自定義構建以上拓撲    (2)實現h1,h2能通訊,h3,h4不能通訊,h1,h2與h3,h4之間能相互通訊 基本操作這裡就不仔細介紹了,可以參考之前的兩篇文。 1.構建拓撲,用Python實現以上自定義拓撲 程式碼: from min

mininet實現定義結構--基於兩個資料中心的網路--fattree.py

前言 基於兩個資料中心的網路拓撲是最常見的、也是最基本的一種網路拓撲結構,這裡先拿這個作為練習。 其網路拓撲結構圖如下: 一、首先編寫生成拓撲結構的python程式碼fattree.py檔案 #建立網路拓撲,程式碼可以直接使用 from minine

nginx定義站點目錄簡單編寫開發網頁內容講解

linux[[email protected]/* */ conf]# egrep -v "^$|#" nginx.conf.default >nginx.conf[[email protected]/* */ conf]# pwd/application/nginx/conf[

vpshere6.5網絡基礎架構

網絡拓撲1、5臺服務器,2臺存儲2、一臺服務器安裝vcenter,其他服務器安裝exsi3、采用一臺分布式交換機,管理使用vkernal端口組,其他使用業務端口組4、存儲使用NFS協議的開源NAS5、沒有嚴格按照vmware推薦的最佳實踐搭建6、每塊網卡設置的是主備關系 vpshere6.5網絡拓撲及基礎架

詳細分享UICollectionView的定義布局(瀑布, 線性, 圓形...)

init hide 屬性 png 繼承 del 屏幕旋轉 結束 效果 前言: 本篇文章不是分享collectionView的詳細使用教程, 而是屬於比較‘高級‘的collectionView使用技巧, 閱讀之前, 我想你已經很熟悉collectionView的基本使用,

JavaScript中定義函數以文本框、radio、下拉框的值的獲取,結合淘寶競拍案例來理解。。。

支付寶 價格 select back html alt 文本框 lec 獲取 淘寶競拍案例: HTML部分代碼: <form action="#" method="post"> <h2>歡迎進入淘寶競拍</h2> &l

Django——模板層(template)(模板語法、定義模板過濾器標簽、模板繼承)

num 序列 document 希望 可讀性 數量 AC 自然 同學 前言:當我們想在頁面上給客戶端返回一個當前時間,一些初學者可能會很自然的想到用占位符,字符串拼接來達到我們想要的效果,但是這樣做會有一個問題,HTML被直接硬編碼在 Python代碼之中。

php定義函數內部函數

定義函數 turn mon 數組 函數 變量的作用域 訪問 記錄 只有一個 1、變量的作用域 變量的作用域也稱為變量的範圍,變量的範圍即它定義的上下文背景(也是它的生效範圍)。大部分php變量只有一個單獨的範圍。這個單獨的範圍跨度同樣包含了include和require引入

Xamarin定義佈局系列——瀑布佈局

原文: Xamarin自定義佈局系列——瀑布流佈局 Xamarin.Forms以Xamarin.Android和Xamarin.iOS等為基礎,自己實現了一整套比較完整的UI框架,包含了絕大多數常用的控制元件,如下圖 雖然XF(Xamarin.Forms簡稱XF,下同)為我們提供大這麼多的控制元件,但在

定義JSR validationSwagger的一些坑

地址:https://blog.csdn.net/z28126308/article/details/77748798 http://sishuok.com/forum/blogPost/list/7798.html   JSR-Java Specification Reque

定義結構體初始化

自定義結構體及初始化,以及標頭檔案先宣告巨集,然後宣告結構體 <pre name="code" class="cpp">/********************** macro definition **********************/ #ifndef CVALGO_

docker overlay網路服務註冊問題

跨主機docker網路有多種方案,如overlay、flannel、calico、weave等,其中overlay是docker原生的跨主機網路方案。最近使用overlay方案部署容器叢集,在進行服務註冊時遇到問題,需要手動建立veth裝置解決。   1. overlay網路拓撲 over

WPF筆記:WPF定義treeview樣式資料繫結

定義treeview 展開按鈕(togglebutton)樣式,建立資源: <Style x:Key="ExpandCollapseToggleStyle" TargetType="ToggleButton"> <Setter Property="Foc

【.NET Core專案實戰-統一認證平臺】第七章 閘道器篇-定義客戶端限

原文: 【.NET Core專案實戰-統一認證平臺】第七章 閘道器篇-自定義客戶端限流 【.NET Core專案實戰-統一認證平臺】開篇及目錄索引 上篇文章我介紹瞭如何在閘道器上增加自定義客戶端授權功能,從設計到編碼實現,一步一步詳細講解,相信大家也掌握了自定義中介軟體的開發技巧了,本篇我們將介紹如

QT如何定義滑鼠樣式如何用windows帶畫圖工具進行滑鼠樣式的設計

眾所周知,QT系統自身擁有眾多的滑鼠樣式,這些滑鼠樣式均比較常見,顏色、樣式為系統所固有,無法更改。哪麼能不能自定義滑鼠的形狀、顏色等特點呢?答案是可以的。自定義的滑鼠樣式可以隨意指定,顏色更是多種多樣,極具個性化。 QT自帶的滑鼠樣式(在此不做過多介紹): 可以直接拿來用,具體用法如下:

百度地圖API 定義座標點圖片

var map = new BMap.Map("allmap");var point = new BMap.Point(105.955754,36.525109);map.centerAndZoom(point,8);map.en

22 定義ioctl命令使用者程序操作GPIO

自定義ioctl命令 ioctl ---> kernel ---> cdev.fops->unlocked_ioctl(...) 系統呼叫ioctl函式的作用:使用者程序用於通過相應的裝置驅動來獲取或者設定硬體狀態。 在字元裝置驅動裡,unlo

(三)高德地圖之定義縮放縮放動畫效果

這一節主要實現的功能是地圖的自定義縮放及縮放的動畫效果,還是直接放上程式碼更直觀些,主要部位裡面基本有註解 還是老樣子,首先是新建activity_zoom_animate.xml佈局檔案 <?xml version="1.0" encoding="utf-8"?> <

C++11使用定義hash函式比較函式的unordered_set

#include <unordered_set> #include <functional> #include <iostream> struct MyKey { int key; }; struct MyKeyHashHasher { size_

java定義註解解析相關場景實現

註解(Annotation)是java1.5之後提供的一種語法。其主要作用是編譯檢查(比如@override)和程式碼分析(通過程式碼中添加註解,利用註解解析器對添加了註解的程式碼進行分析,獲取想要的結果,一般自定義的註解都是這一種功能)。 1.1 JDK提供的註解 JDK提供的