1 初識OVS(open vswitch)
1.1 ovs組件
1.2 Open vSwtich模塊介紹
當前最新代碼包主要包括以下模塊和特性:
1.ovs-vswitchd :主要模塊,實現switch的daemon,包括一個支持流交換的Linux內核模塊;
2.ovsdb-server :輕量級數據庫服務器,提供ovs-vswitchd獲取配置信息;
3.ovs-brcompatd :讓ovs-vswitch替換Linux bridge,包括獲取bridge ioctls的Linux內核模塊;
4.ovs-dpctl: 用來配置switch內核模塊;
5一些Scripts and specs: 輔助OvS安裝在Citrix XenServer上,作爲默認switch;
6.ovs-vsctl :查詢和更新ovs-vswitchd的配置;
7.ovs-appctl :發送命令消息,運行相關daemon;
8.ovsdbmonitor: GUI工具,可以遠程獲取OvS數據庫和OpenFlow的流表。
9.ovs-openflowd:一個簡單的OpenFlow交換機;
10.ovs-controller:一個簡單的OpenFlow控制器;
11.ovs-ofctl :查詢和控制OpenFlow交換機和控制器;
12.ovs-pki :OpenFlow交換機創建和管理公鑰框架;
13.ovs-tcpundump:tcpdump的補丁,解析OpenFlow的消息;
1.3 Open vSwtich 工作流程
一般的數據包在linux網絡協議棧中的流向爲黑色箭頭流向:從網卡上接受到數據包後層層往上分析,最後離開內核態,把數據傳送到用戶態。當然也有些數據包只是在內核網絡協議棧中操作,然後再從某個網卡發出去。
但當其中有openVswitch時,數據包的流向就不一樣了。首先是創建一個網橋:ovs-vsctl add-br br0;然後是綁定某個網卡:綁定網卡:ovs-vsctl add-port br0 eth0;這裏默認爲綁定了eth0網卡。數據包的流向是從網卡eth0上然後到openVswitch的端口vport上進入openVswitch中,然後根據key值進行流表的匹配。如果匹配成功,則根據流表中對應的action找到其對應的操作方法,完成相應的動作(這個動作有可能是把一個請求變成應答,也有可能是直接丟棄,也可以自己設計自己的action);如果匹配不成功,則執行默認的動作,有可能是放回內核網絡協議棧中去處理(在創建網橋時就會相應的創建一個端口連接內核協議棧的)。
其大概工作流程就是這樣了,在工作中一般在這幾個地方來修改內核代碼以達到自己的目的:第一個是在datapath.c中的ovs_dp_process_received_packet(struct vport *p, struct sk_buff *skb)函數內添加相應的代碼來達到自己的目的,因爲對於每個數據包來說這個函數都是必經之地;第二個就是自己去設計自己的流表了;第三個和第二個是相關聯的,就是根據流表來設計自己的action,完成自己想要的功能。