OVS-OFCTL操作:
match部分:
flow有很多syntax, 一半來說actions之前都是match的部分,常用的一般是
字段名稱 | 說明 |
---|---|
in_port=port | 傳遞數據包的端口的 OpenFlow 端口編號 |
dl_vlan=vlan | 數據包的 VLAN Tag 值,范圍是 0-4095,0xffff 代表不包含 VLAN Tag 的數據包 |
dl_vlan_pcp=priority | VLAN 優先級,改值取值區間為[0-7]。數字越大,表示優先級越高。 |
dl_src=<MAC> dl_dst=<MAC> |
匹配源或者目標的 MAC 地址 01:00:00:00:00:00/01:00:00:00:00:00 代表廣播地址00:00:00:00:00:00/01:00:00:00:00:00 代表單播地址 |
dl_type=ethertype | 匹配以太網協議類型,其中: dl_type=0x0800 代表 IPv4 協議 dl_type=0x086dd 代表 IPv6 協議 dl_type=0x0806 代表 ARP 協議 完整的的類型列表可以參見以太網協議類型列表 |
nw_src=ip[/netmask] nw_dst=ip[/netmask] | 當 dl_typ=0x0800 時,匹配源或者目標的 IPv4 地址,可以使 IP 地址或者域名 |
nw_proto=proto |
和 dl_type 字段協同使用。 當 dl_type=0x0800 時,匹配 IP 協議編號 當 dl_type=0x086dd 代表 IPv6 協議編號 完整的 IP 協議編號可以參見IP 協議編號列表 |
table=number | 指定要使用的流表的編號,范圍是 0-254。在不指定的情況下,默認值為 0 通過使用流表編號,可以創建或者修改多個 Table 中的 Flow |
reg<idx>=value[/mask] | 交換機中的寄存器的值。當一個數據包進入交換機時,所有的寄存器都被清零,用戶可以通過 Action 的指令修改寄存器中的值 |
tp_src=number | TCP/UDP/SCTP source port |
tp_dst=number | TCP/UDP/SCTP dest port |
nwproto or ipproto
ff:ff:ff:ff:ff:ff
- 當dl_type=0x0800或使用了關鍵字ip時,匹配IP頭中的proto字段,取值 區間[0, 255],比如為1時可以匹配ICMP數據包,為6時匹配TCP數據包。
- 當dl_type=0x86dd或使用了關鍵字ipv6是,匹配IPv6頭中的proto字段,取值區間[0, 255],比如為58時匹配ICMPv6數據包,為6時匹配TCP數據包
- 當dl_type=0x0806或者使用了關鍵字arp時,匹配ARP opcode的低8位,ARP opcode大于255時,與等于0效果一樣
- 當dl_type=0x8035或者使用了關鍵字rarp時,匹配ARP opcode的低8位, ARP opcode大于255時,與等于0效果一樣
- 當dl_type使用了通配符或這除了0x0800, 0x0806, 0x8035以外的值,則nw_proto的值會被忽略
actions:
- output:port: 輸出數據包到指定的端口。port 是指端口的 OpenFlow 端口編號
controller(key=value) 送到controller作為packet-in 消息,括號內的key value pair可以是:
reason=reason ,reason 可以是action,no_match,invalid_ttl
id=controller-id 默認是0,特殊的controller會有一個16位的id
mod_dl_src:mac
Sets the source Ethernet address to mac.
mod_dl_dst:mac
Sets the destination Ethernet address to mac.
mod_nw_src:ip
Sets the IPv4 source address to ip.
mod_nw_dst:ip
Sets the IPv4 destination address to ip.
mod_tp_src:port
Sets the TCP or UDP source port to port.
mod_tp_dst:port
Sets the TCP or UDP destination port to port.
ovs-vsctl使用指南:
vos-vsctl命令格式:
usage: ovs-vsctl [OPTIONS] COMMAND [ARG...]
常見的OPTIONS有以下組成:
--db=DATABASE :指定連接的數據庫,默認是unix:/var/run/openvswitch/db.sock
--no-wait: 在使用時不等待ovs-vswitchd的重新配置
--retry:不斷嘗試連接遠端服務器
--t,-timeout=SECS: 等待ovs-vswitchd的超時時間
--dry-run: 嘗試運行修修改的配置但是不提交到ovsdb-vswitch數據庫
--oneline:將打印出的命令一行一行的顯示
-h,--help: 顯示幫助信息
-V,--version:顯示版本信息
常用的COMMAND有以下幾類:
OpenvSwitch的維護命令:
init:初始化ovsdb-vswitch數據庫
show:查看數據信息
emer-reset: 重新設置openvswitch的狀態
OpenvSwitch對橋設備操作相關的命令:
add-br BRIDGE :添加一個橋設備
add-br BRIDGE PARENT VLAN:在PARENT中創建一個橋,并做vlan標記
del-br BRIDGE: 刪除一個橋設備
list-br: 查看創建的橋設備
br-exists BRIDGE: 判斷新創建的橋是否已經存在
br-to-vlan BRIDGE: 列出橋設備的所有的valn
br-to-parent BRIDGE: 列出當前橋的上一個橋設備
br-set-external-id BRIDGE KEY VALUE: 給橋添加額外的屬性,方式為 key vllue格式
br-set-external-id BRIDGE KEY:撤銷橋設備額外的信息
br-get-external-id BRIDGE KEY:列出橋設備額外的信息
br-get-external-id BRIDGE :以key-value格式列出橋設備的額外信息
OpenvSwitch對端口的操作命令:
list-ports BRIDGE: 列出指定橋設備上的端口
add-ports BRIDGE PORT :添加一個端口到橋設備,此端口可以事先不存在
add-bond BRIDGE PORT IFACE...: 對橋設備做多端口綁定
del-port [BRIDGE] PORT: 刪除一個端口或者刪除一個指定橋設備上的端口
port-to-br PORT:列出端口所在的橋設備
OpenvSwitch對接口操作的命令:
list-ifaces BRIDGE: 列出橋設備上的所有接口
iface-to-br IFACE: 列出接口所在的橋設備
OpenvSwitch的控制命令:
get-contorller BRIDGE: 獲取橋設備的控制器
del-contorller BRIDGE: 刪除橋設備的控制器
set-contorller BRIDGE TARGET...:給橋設備設置一個控制器
get-fail-mode BRIDGE: 顯示橋設備錯誤的模式
del-fail-mode BRIDGE: 刪除橋設備錯誤的模式
set-fail-mode BRIDGE MODE: 設置橋設備失敗的模式為MODE
OpenvSwitch管理相關的命令:
get-manager: 列出openvswitch的管理者
del-manager:刪除openvswitch的管理者
set-manager TARGET....:設置管理者列表為TARGET
OpenvSwitch安全相關的命令:
get-ssl:獲取ssl的配置信息
del-ssl: 刪除ssl的配置信息
set-ssl PRIV-KEY CERT CA-CERT: 配置ssl
OpenvSwitch交換相關的命令:
emer-rest: 重新設置未知交換機的狀態
OpenvSwitch數據庫操作相關命令:
listTBL [REC]: 列出TBL的資源記錄信息(ovs-vsctl list port )
findTBL CONDITION....:查找相關的資源記錄信息
getTBL REC COL[:KEY]:獲取TBL的信息
setTBL REC COL[:KEY]=VALUE:設定TBL的額外屬性(ovs-vsctl set Port br1 tag=2)
addTBL REC COL [KEY=]VALUE:添加一個[key=]value到TBL
remove TBL REC COL [KEY=]VALUE:刪除TBL中的一個key值(ovs-vsctlremove Port br1 tag 2)
clearTBL REC COL: 清除指定TBL的資源記錄信息
create TBL COL [:KEY]=VALUE:在TBL中創建一個資源記錄信息
destroy TBL REC:銷毀一個TBL的REC
wait-until TBL REC [COL[:KEY]=VALUE]:等待TBL資源記錄配置完成
常用的ARG參數:
連接主數據庫的方法:
tcp:IP:PORT: 指定連接遠端數據庫使用tcp協議,以及遠端主數據庫的ip地址跟端口
ssl:IP:PORT: 指定連接遠端數據庫使用ssl協議,以及遠端主數據庫的ip地址跟端口
unix:FILE:使用socket套接字連接主數據庫
備用數據庫的連接方法:
ptcp:IP:PORT: 指定連接遠端數據庫使用tcp協議,以及遠端備用數據庫的ip地址跟端口
pssl:IP:PORT: 指定連接遠端數據庫使用ssl協議,以及遠端備用數據庫的ip地址跟端口
punix:FILE:使用socket套接字連接備用數據庫
PKI配置:
-p,--private-key=FILE: 指定私有秘鑰的位置
-c,--certificate=FILE:指定證書的位置
-C,ca-cert=FILE:指定對端證書的