1. 程式人生 > >OVS網橋建立和連線管理

OVS網橋建立和連線管理

前言

Open vSwitch作為一個被廣泛應用的虛擬交換機,除了完成流表匹配、資料轉發等功能外,其自身對網橋的建立更新和連線管理也尤為重要,這是其高效能的保障。本文按照原始碼的行文思路,從網橋的建立、配置、更新到主動、被動連線管理,依次進行梳理學習。

重要結構體:

本文將按照下圖主線進行分析。其中,會提到一系列有關聯的結構體bridge、ofproto、connmgr、ofconn、rconn、vconn,其附屬關係也如圖中所示:

bridge、ofproto、connmgr等前三個結構體都是對於一個網橋而言,且分別和網橋都是一對一關係,互相之間也是一對一關係。從connmgr開始是和連線例項相關,一個connmgr對應多個ofconn(如一個網橋連線多個控制器,則需要建立相應多個ofconn例項;和ofctl等工具連線時也要建立ofconn例項);一個ofconn對應一個rconn;一個rconn對應多個vconn(因為和控制器建立連線外,可能還會實現snoop功能,即監測並複製互動的of訊息,則一個rconn會對應一個vconn和一個vconn結構體型別的陣列monitor。這樣看來,vconn並非連線兩個實體,可稱為虛擬連線)。

每個結構體具體含義在後面分析中會逐一說明,這裡只需要對其有一個大體關係的瞭解,方便後面分析中保持一個清晰的思路。

一 從Main開始,建立ovs-vswitchd服務端

為了保障思路的完整性,從main函式快速引入(ovs-vswitchd.c),然後進入到網橋建立階段。

1、 main函式中,先通過引數解析得到unixctl_path和remote:

1 remote = parse_options ( argc , argv , & unixctl_path )
;

ovs有兩大程序vswitchd和ovsdb-server,remote用於這兩個程序的IPC,即程序間socket通訊。remote其實是一個socket檔案地址,由 ovsdb-server服務端繫結監聽時產生,作用類似於網路socket的Ip+Port地址,remote格式如unix:/usr/local/var/run/openvswitch/db.sock。後面建立網橋時會使用。

2、 通過下面命令建立vswitch unixctl服務端,個人理解這個是用於以後ovs vswitch的管理工具,如ofctl等連線的服務端:

1 retval = unixctl_server_create ( unixctl_path , & unixctl ) ;

3、 同時會啟動守護程序,最終一些守護程序會退出:

1 daemonize_start ( )

4、 之後,初始化網橋,主要是初始化網橋bridge模型,通過remote地址,來從OVSDB服務端獲取配置資訊來實現網橋初始化配置:

1 bridge_init ( remote ) ;

這裡會遇到一個IDL概念。關於IDL,即介面定義語言,一般用於RPC(遠端過程呼叫)。這裡可以理解為用於vswitch和OVSDB服務之間的互動呼叫,一些資訊就需要不斷從OVSDB獲取,如網橋資訊。

5 最後,則通過while迴圈進入正式工作狀態(主要呼叫函式bridge_run(),進入網橋建立階段)。這裡會反覆迴圈,直到服務需要停止時,才退出ovs-vswitchd服務端。

1 bridge_run ( ) ;

二 bridge_run():網橋建立、配置和更新(vswitchd/bridge.c)

OVSDB包含三級結構,表table、記錄record和屬性columm。例如,在bridge表中,每一個record就是一個網橋例項的資訊集合,其中uuid和datapath_id等就是這條record的屬性。Open_vSwitch表(ovs資訊表)是肯定有的,屬於根表,一般有且只有一個record,屬性有uuid、版本、系統版本和網橋bridges(當無網橋時則為空[])。當然,這些都是可以通過ovs-vsctl list 表名(如Open_vSwitch、bridge等表)來查詢其具體內容。

在ovs原始碼中,以結構體名為ovsrec_開頭的就是表結構體,如果例項化了表就是一項紀錄record。因此,在bridge_run()裡,通過ovsrec_open_vswitch_first(idl)和介面idl得到根表open_vswitch(*cfg,即結構體ovsrec_open_vswitch)。其實一個cfg就是跟表的一個record,cfg裡的成員也就是屬性columm(比如版本屬性)。

在bridge_run()中,主要工作依次如下:

1、初始化網橋的ofproto庫:主要呼叫bridge_init_ofproto()->ofproto_init(),且這個函式只執行一次,通過靜態變數initialized控制。

這裡重要的是,註冊了變數ofproto_dpif_class(結構體ofproto_class,ofproto-dpif.c),這是ofproto的執行函式庫的集合。註冊函式為ofproto_class_register(&ofproto_dpif_class),將ofproto_dpif_class賦值給ofproto_classes[i]。個人理解,i只可能為0(n_ofproto_classes只能為1),即ofproto_classes[0]就是ofproto_dpif_class(即ofproto的函式庫)。ofproto_dpif_class很有用,比如含有ofproto的執行、流表項的插入等操作函式,之後會用到。

當然,註冊了ofproto庫,即ofproto_dpif_class之後,才可以建立ofproto。結構體ofproto代表一個OpenFlow交換機,之後會在bridge_reconfigure()中呼叫ofproto_create()建立ofproto。

2、執行網橋:bridge_run_(),主進行兩項工作,第一是通過函式ofproto_type_run(type)讓每一個型別的datapath執行,第二是呼叫ofproto_run(br->ofproto)讓每一個bridge的ofproto執行,ofproto的執行細節在後面三中著重分析。

相關推薦

OVS建立連線管理

前言 Open vSwitch作為一個被廣泛應用的虛擬交換機,除了完成流表匹配、資料轉發等功能外,其自身對網橋的建立更新和連線管理也尤為重要,這是其高效能的保障。本文按照原始碼的行文思路,從網橋的建立、配置、更新到主動、被動連線管理,依次進行梳理學習。 重要結構體: 本文將按照下

尚矽谷大數據技術之Linux第5章絡配置系統管理操作5.7克隆虛擬機

tro 分享 數據 time 克隆 sys font pic get 5.7 克隆虛擬機 1)關閉要被克隆的虛擬機 2)找到克隆選項 3)歡迎頁面 4)克隆虛擬機 5)設置創建完整克隆 6)設置克隆的虛擬機名稱和存儲位置 7)等待正在克隆 8)點擊關閉,完成克

尚矽谷大數據技術之Linux第5章絡配置系統管理操作5.6找回root密碼

url 模式 不用 show 分享圖片 管理操作 strong 配置 linux 5.6 找回root密碼 重新安裝系統嗎?當然不用!進入單用戶模式更改一下root密碼即可。 1)重啟Linux,見到下圖,在3秒鐘之內按下回車 2)三秒之內要按一下回車,出現如下界面

AutoCAD中我們如何進行建立設定管理圖層?

像我們一般做繪圖設計的小夥伴們大致都瞭解啦,AutoCAD中繪製任何物件都是在圖層上進行的。圖層就好像一張張透明的圖紙。整個圖形就相當於若干個透明圖紙上下疊加的效果。一般情況下,相同的圖層上具有相同的線型、顏色、線寬等特性。 在繪製的是過程中,我們可以根據自己的需要進行建立、設定圖層。比如

Ubuntu下Python建立連線資料庫

[email protected]:~# mysql -u root -p Enter password: Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connecti

linux 管理搭建

linux bridge在linux網絡中,當一個物理設備依附另一個物理設備才能進行通信時,我們最常見的虛擬機等,他就靠真實主機的網卡,進行通信,所以我們提到了一個網橋改概念,正好可以解決此類問題網橋的配置1:<1> 在真實網卡上虛擬出一個接口[[email protected]/*

Centos管理(五)-Bonding、絡組

centos網絡管理(五) bonding、網絡組和網橋 centos 網絡組 centos 網橋 centos network team Bonding將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。直接給兩塊網卡設置同一IP地址是不可以的。通過bonding,虛擬一

上網行為管理設備部署方式

上網行為管理 網絡安全網關這裏說的網橋部署,是透明網橋部署。有的局域網環境裏面,路由暫時不想被代替,那麽WSG上網行為管理網關用網橋部署的方式接在局域網裏面。網橋模式下,只用到LAN和WAN1這兩個端口。其他端口都不起作用。WSG接在路由器(防火墻)和交換機之間。內網交換機接在LAN口。上層設備(路由器或者防

Linux日常管理技巧(3):Linux絡相關防火墻

127.0.0.1 網絡 修改網卡 cal 網卡ip lis oot back col 一、Linux網絡相關 1. ifconfig 查看網卡IP ifconfig命令被用於配置和顯示Linux內核中網絡接口的網絡參數。用ifconfig命令配置的網卡信息,在網卡重啟後機

linux絡配置管理

linux網絡配置 網絡很重要!網絡是一切網絡服務的基礎,沒有網絡,就不會有今天的BTA。現在的服務器主要是linux,所以linux的網絡配置和管理很重要。 一,網絡通信的簡介通信的三要素是:ip地址,掩碼,路由。ip和netmask是必須有的,有了這兩個條件,可以實現本地網絡通信。如果有ip,net

絡操作系統 第二章 用戶管理

gin 設置 min 系統 設置密碼 賬戶管理 配置文件 margin 所屬組 本章小結   本章介紹了用戶和用戶的基本概念。講解了在Windows Server2008中用戶和組的創建、刪除及其屬性的修改。在Linux部分,首先通過圖形配置工具介紹了Linux、中用戶及組

Oracle中用sql語句建立管理

建立語法 create table [schema.]tablename (column datatype [default expr] [constaint], ....) 查看錶結構 desc tablename 克隆表 克隆整個表: create table e

Oracle DB 使用DDL語句建立管理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux學習筆記之1——檔案目錄管理(硬連線連線)(連結檔,相當於快捷方式)

在這節將要學習linux的連線檔,在之前用"ls -l" 檢視檔案屬性的命令時, 其中第二個屬性是連線數。那麼這個連線數是幹什麼的?這就要理解inode。     先說一下檔案是怎麼儲存的。檔案儲存在硬碟上,硬碟的最小儲存單位叫做"扇區"(Sector),每個扇區儲存512位元

vue-cli3.0 使用圖形化介面建立管理專案

1.開啟終端輸入vue ui vue ui 2.建立專案 3.選擇一套預設,點選建立專案按鈕 4.等待安裝 5.安裝完成後    6.可以新增外掛 7.專案依賴管理 8.專案配置管理    9.

建立管理使用者作業

建立和管理使用者作業 1. 建立一個口令認證的資料使用者usera_exer,口令為usera,預設表空間為USERS,配額為10MB,初始賬戶為鎖定狀態。(需要在system或sys使用者下建立。) 2. 為usera_exer使用者授予create session許可權、scott.emp的sel

建立一個供虛擬機器使用

建立一個網橋供虛擬機器使用 宿主機系統 CentOS 7 - 建立網橋xml檔案 - 建立並配置網橋 1、寫配置檔案 # vim /work/roller-br.xml <network connections='1'> <name>roller_

集線器 路由器 交換機 閘道器 的區別功能原理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

路由器的區別

        網橋和路由器的區別主要體現在:         1. 網橋只能連線兩個邏輯相同的網路(它相當於一個二層交換機),而路由器可以連線不同網路;      

Linux系統中高階網路管理.

網橋:(Bridge) Linux網橋是一種以同種協議連線兩個區域網的產品。可以把它看成是一個決定傳送的包是到自己的區域網還是到另一個區域網的裝置。linux網橋檢查區域網上所有的包,在同一個區域網中傳送它,如果不是同一個網中的,就將它發到別的網上。 原理: 網橋是連線兩個區域網的儲存轉