Operations 49 min read

Master Open vSwitch: Essential Commands and Real-World SDN Use Cases

This guide walks through Open vSwitch fundamentals, covering version and log management, controller and bridge configuration, flow table manipulation, VLAN, QoS, tunneling, sFlow, STP, port mirroring, aggregation, group and meter tables, and practical SDN application examples such as building virtual topologies and packet redirection.

AI Cyberspace
AI Cyberspace
AI Cyberspace
Master Open vSwitch: Essential Commands and Real-World SDN Use Cases

前文列表

《未来互联网技术发展编年史,从阿帕网到完全可编程网络》

《SDN — OpenFlow SDN 协议标准》

《SDN — OpenvSwitch 软件架构与运行原理》

目录

常用指令

版本与日志管理

控制器管理

网桥管理

Flow Table 管理

VLAN

QoS

Overlay Tunnel

sFlow

STP

端口镜像

端口聚合

Group Table

Meter Table

应用示例

创建基本的虚拟网络拓扑

屏蔽数据包

重定向数据包

修改数据包 srcIP 地址

修改数据包 VLAN tag

常用指令

版本与日志管理

# 查看 OvS 版本
$ ovs-appctl --version
ovs-appctl (Open vSwitch) 2.0.0
Compiled Apr 19 2018 17:57:34

# 查看 OvS 支持的 OpenFlow 版本
$ ovs-ofctl --version
ovs-ofctl (Open vSwitch) 2.0.0
Compiled Apr 19 2018 17:57:34
OpenFlow versions 0x1:0x4

# 查看 OvS Log 级别
$ ovs-appctl vlog/list

# 设置 Log 级别
# ovs-appctl vlog/set {module name}:{console, syslog, file}:{off, emer, err, warn, info, dbg}
$ ovs-appctl vlog/set stp:file:dbg

# 查询指令历史记录
$ ovsdb-tool show-log [-mmm]

控制器管理

# 设置/删除 Bridge 的 OpenFlow 版本
ovs-vsctl set bridge br0 protocols=OpenFlow13
ovs-vsctl clear bridge br0 protocols

# 设置/删除 Bridge 的 SDN Controller
ovs-vsctl set-controller br0 tcp:1.2.3.4:6633
ovs-vsctl list controller
ovs-vsctl del-controller br0

# 设置/删除 Manager 被动连接的控制器
ovs-vsctl set-manager tcp:1.2.3.4:6640
ovs-vsctl get-manager
ovs-vsctl del-manager

# 设置/删除 Bridge 的 Fail Mode
ovs-vsctl del-fail-mode br0
ovs-vsctl set-fail-mode br0 secure # or standalone
ovs-vsctl get-fail-mode br0

# 设置/删除 Interface 的可选选项
ovs-vsctl set Interface eth0 options:link_speed=1G
ovs-vsctl remove Interface eth0 options link_speed

网桥管理

# 查看所有 Bridges 和 Ports
ovs-vsctl show

# 创建一个 OvS Bridge
ovs-vsctl add-br br0
ovs-vsctl set bridge br0 datapath_type=netdev

# 添加/删除 OvS Bridge 的一个 Port(系统接口)
ovs-vsctl add-port br0 eth1
ovs-vsctl del-port br0 eth1

# 添加/删除 DPDK Port
ovs-vsctl add-port br0 dpdk1 -- set interface dpdk1 type=dpdk options:dpdk-devargs=0000:01:00.0

# 添加/删除 DPDK Bond
ovs-vsctl add-bond br0 dpdkbond0 dpdk1 dpdk2 \
    -- set interface dpdk1 type=dpdk options:dpdk-devargs=0000:01:00.0 \
    -- set interface dpdk2 type=dpdk options:dpdk-devargs=0000:02:00.0

# 查看 Flow Table
ovs-ofctl dump-flows br0
ovs-ofctl -O OpenFlow13 dump-flows br0

# 查看 Ports 统计
ovs-ofctl dump-ports br0

# 查看 Interface ID
ovs-appctl dpif/show

Flow Table 管理

Flow Entry

# 查看所有 Ovs Bridge 的 Flow Entries
ovs-ofctl show <bridge>

# 查看指定 Ovs Bridge 的 Flow Entries
ovs-ofctl dump-flows <bridge>

# 添加普通 Flow Entry
ovs-ofctl add-flow br0 "in_port=1,actions=output:2"
ovs-ofctl add-flow br0 "dl_src=02:a2:a2:a2:a2:a2,dl_dst=02:b2:b2:b2:b2:b2,in_port=2,dl_type=0x0800,nw_src=10.0.0.1,nw_dst=10.0.0.2,actions=output:6"

# 修改指定 Flow Entry
ovs-ofctl mod-flows <bridge> <flow>

# 按 MatchFields 删除 Flow Entry
ovs-ofctl del-flows br0 "in_port=1"
ovs-ofctl del-flows br0 "dl_src=02:a2:a2:a2:a2:a2,dl_dst=02:b2:b2:b2:b2:b2,in_port=2,dl_type=0x0800,nw_src=10.0.0.1,nw_dst=10.0.0.2"

# 删除所有 Flow Entries
ovs-ofctl del-flows br0

Match

# 匹配 VLAN tag (0-4095)
ovs-ofctl add-flow br0 "priority=401,in_port=1,dl_vlan=777,actions=output:2"

# 匹配 VLAN pcp (0-7)
ovs-ofctl add-flow br0 "priority=401,in_port=1,dl_vlan_pcp=7,actions=output:2"

# 匹配源/目的 MAC
ovs-ofctl add-flow br0 "in_port=1,dl_src=00:00:00:00:00:01/00:00:00:00:00:01,actions=output:2"
ovs-ofctl add-flow br0 "in_port=1,dl_dst=00:00:00:00:00:01/00:00:00:00:00:01,actions=output:2"

# 匹配以太网类型 (0-65535)
ovs-ofctl add-flow br0 "in_port=1,dl_type=0x0806,actions=output:2"

# 匹配源/目的 IP (需指定 dl_type=0x0800 或 ip/tcp)
ovs-ofctl add-flow br0 "ip,in_port=1,nw_src=10.10.0.0/16,actions=output:2"
ovs-ofctl add-flow br0 "ip,in_port=1,nw_dst=10.20.0.0/16,actions=output:2"

# 匹配协议号 (0-255, 需指定 dl_type=0x0800 或 ip/icmp)
ovs-ofctl add-flow br0 "ip,in_port=1,nw_proto=1,actions=output:2"

# 匹配 IP ToS/DSCP (ToS 0-255, DSCP 0-63)
ovs-ofctl add-flow br0 "ip,in_port=1,nw_tos=68,actions=output:2"
ovs-ofctl add-flow br0 "ip,in_port=1,ip_dscp=62,actions=output:2"

# 匹配 IP ECN 位 (0-3)
ovs-ofctl add-flow br0 "ip,in_port=1,ip_ecn=2,actions=output:2"

# 匹配 IP TTL (0-255)
ovs-ofctl add-flow br0 "ip,in_port=1,nw_ttl=128,actions=output:2"

# 匹配 tcp/udp 端口 (0-65535)
ovs-ofctl add-flow br0 "tcp,tcp_src=179/0xfff0,actions=output:2"
ovs-ofctl add-flow br0 "tcp,tcp_dst=179/0xfff0,actions=output:2"
ovs-ofctl add-flow br0 "udp,udp_src=1234/0xfff0,actions=output:2"
ovs-ofctl add-flow br0 "udp,udp_dst=1234/0xfff0,actions=output:2"

# 匹配 tcp flags
ovs-ofctl add-flow br0 "tcp,tcp_flags=ack,actions=output:2"

# 匹配 icmp code (0-255)
ovs-ofctl add-flow br0 "icmp,icmp_code=2,actions=output:2"

# 匹配 VLAN TCI (12-bit VLAN ID + 3-bit priority)
ovs-ofctl add-flow br0 "in_port=1,vlan_tci=0xf123,actions=output:2"

# 匹配 MPLS label (需指定 dl_type=0x8847/0x8848)
ovs-ofctl add-flow br0 "mpls,in_port=1,mpls_label=7,actions=output:2"

# 匹配 MPLS tc (0-7, 需指定 dl_type=0x8847/0x8848)
ovs-ofctl add-flow br0 "mpls,in_port=1,mpls_tc=7,actions=output:2"

# 匹配 Tunnel id、源/目的 IP
ovs-ofctl add-flow br0 "in_port=1,tun_id=0x7/0xf,actions=output:2"
ovs-ofctl add-flow br0 "in_port=1,tun_src=192.168.1.0/255.255.255.0,actions=output:2"
ovs-ofctl add-flow br0 "in_port=1,tun_dst=192.168.1.0/255.255.255.0,actions=output:2"

Action

# normal – standard L2/L3 processing
ovs-ofctl add-flow br0 "in_port=1,actions=normal"

# output – forward to a specific port
ovs-ofctl add-flow br0 "in_port=1,actions=output:2"

# flood – forward to all physical ports except the ingress port and ports with flooding disabled
ovs-ofctl add-flow br0 "in_port=1,actions=flood"

# all – forward to all physical ports except the ingress port
ovs-ofctl add-flow br0 "in_port=1,actions=all"

# local – forward to the local bridge
ovs-ofctl add-flow br0 "in_port=1,actions=local"

# in_port – send back out the ingress port
ovs-ofctl add-flow br0 "in_port=1,actions=in_port"

# controller – send packet‑in to the controller
ovs-ofctl add-flow br0 "in_port=1,actions=controller"

# drop – discard the packet
ovs-ofctl add-flow br0 "in_port=1,actions=drop"

# mod_vlan_vid – change VLAN ID (VLAN PCP is cleared)
ovs-ofctl add-flow br0 "in_port=1,actions=mod_vlan_vid:8,output:2"

# mod_vlan_pcp – change VLAN priority (VLAN ID is cleared)
ovs-ofctl add-flow br0 "in_port=1,actions=mod_vlan_pcp:7,output:2"

# strip_vlan – remove outer VLAN tag(s)
ovs-ofctl add-flow br0 "in_port=1,actions=strip_vlan,output:2"

# push_vlan – add an outer VLAN tag (requires OpenFlow 1.1+)
ovs-ofctl add-flow -O OpenFlow13 br0 "in_port=1,actions=push_vlan:0x8100,set_field:4097->vlan_vid,output:2"

# pop_vlan – remove the outermost VLAN tag
ovs-ofctl add-flow br0 "in_port=1,dl_type=0x8100,dl_vlan=777,actions=pop_vlan,output:2"

# modify MAC/IP addresses
ovs-ofctl add-flow br0 "in_port=1,actions=mod_dl_src:00:00:00:00:00:01,output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=mod_dl_dst:00:00:00:00:00:01,output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=mod_nw_src:192.168.1.1,output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=mod_nw_dst:192.168.1.1,output:2"

# modify TCP/UDP ports
ovs-ofctl add-flow br0 "in_port=1,actions=mod_tp_src:67,output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=mod_tp_dst:68,output:2"

# modify ToS / ECN / TTL
ovs-ofctl add-flow br0 "in_port=1,actions=mod_nw_tos:68,output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=mod_nw_ecn:2,output:2"
ovs-ofctl -O OpenFlow13 add-flow br0 "in_port=1,actions=mod_nw_ttl:6,output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=dec_ttl,output:2"

# MPLS actions
ovs-ofctl add-flow br0 "in_port=1,actions=push_mpls:0x8847,set_field:10->mpls_label,output:2"
ovs-ofctl add-flow br0 "mpls,in_port=1,mpls_label=20,actions=pop_mpls:0x0800,output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=set_mpls_label:666,output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=set_mpls_tc:7,output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=set_mpls_ttl:255,output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=dec_mpls_ttl,output:2"

# NXM move / load
ovs-ofctl add-flow br0 "in_port=1,actions=move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[],mod_dl_src:00:00:00:00:00:01,output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=load:0xa->OXM_OF_MPLS_LABEL[],output:2"
ovs-ofctl add-flow br0 "in_port=1,actions=load:0x001122334455->OXM_OF_ETH_DST[],output:2"

# group action
ovs-ofctl add-flow br0 "in_port=1,actions=group:666"

goto table 配置

# 在 table0 中添加一条流表条目
ovs-ofctl add-flow br0 "table=0,in_port=1,actions=goto_table=1"

# 在 table1 中添加一条流表条目
ovs-ofctl add-flow br0 "table=1,ip,nw_dst=10.10.0.0/16,actions=output:2"

常用 NXM 字段参照表

VLAN

# 添加 VLAN tag
ovs-ofctl add-flow s1 "in_port=1,actions=mod_vlan_vid:10,output:2"

# 去掉 VLAN tag 再匹配转发
ovs-ofctl add-flow s1 "priority=1,in_port=1,dl_vlan=10,actions=strip_vlan,output:2"

# 按 VLAN tag 匹配转发 (0-4095)
ovs-ofctl add-flow s1 "priority=1,in_port=1,dl_vlan=777,actions=output:2"

# 按 VLAN pcp 匹配转发
ovs-ofctl add-flow s1 "priority=1,in_port=1,dl_vlan_pcp=7,actions=output:2"

QoS

Ingress policing

# 对接口 eth0 进行 10Mbps 限速
ovs-vsctl set interface eth0 ingress_policing_rate=10000
ovs-vsctl set interface eth0 ingress_policing_burst=8000

# 清除限速配置
ovs-vsctl set interface eth0 ingress_policing_rate=0
ovs-vsctl set interface eth0 ingress_policing_burst=0

# 查看接口配置
ovs-vsctl list interface eth0

# 查看网桥支持的 QoS 类型
ovs-appctl qos/show-types br0

Overlay Tunnel

GRE

# 创建 GRE 接口,OpenFlow Port ID 为 1001
ovs-vsctl add-port br0 gre1 -- set Interface gre1 type=gre options:remote_ip=1.1.1.1 ofport_request=1001

# 可选:继承 ToS/TTL 并设置 Tunnel id 为 123
ovs-vsctl set Interface gre1 options:tos=inherit options:ttl=inherit options:key=123

# GRE 流表 – 封装转发
ovs-ofctl add-flow br0 "ip,in_port=1,nw_dst=10.10.0.0/16,actions=output:1001"
# GRE 流表 – 解封转发
ovs-ofctl add-flow br0 "in_port=1001,actions=output:1"

VxLAN

# 创建 VxLAN 接口,OpenFlow Port ID 为 2001
ovs-vsctl add-port br0 vxlan1 -- set Interface vxlan1 type=vxlan options:remote_ip=1.1.1.1 ofport_request=2001

# 可选:继承 ToS/TTL,设置 VNI 为 123,UDP 目的端口为 8472
ovs-vsctl set Interface vxlan1 options:tos=inherit options:ttl=inherit options:key=123 options:dst_port=8472

# VxLAN 流表 – 封装转发
ovs-ofctl add-flow br0 "ip,in_port=1,nw_dst=10.10.0.0/16,actions=output:2001"
# VxLAN 流表 – 解封转发
ovs-ofctl add-flow br0 "in_port=2001,actions=output:1"

sFlow

# 对 br0 进行 sFlow 监控
ovs-vsctl -- --id=@sflow create sflow agent=eth0 target="10.0.0.1:6343" header=128 sampling=64 polling=10 -- set bridge br0 sflow=@sflow

# 查看 sFlow 配置
ovs-vsctl list sflow

# 删除指定 sFlow(使用 UUID)
ovs-vsctl remove bridge br0 sflow <sflow-uuid>

# 删除网桥下所有 sFlow 配置
ovs-vsctl -- clear bridge br0 sflow

STP

# 开启/关闭 Bridge 的 STP
ovs-vsctl set bridge <bridge> stp_enable=true
ovs-vsctl set bridge <bridge> stp_enable=false

# 查询 STP 配置
ovs-vsctl get bridge <bridge> stp_enable

# 设置 STP Priority
ovs-vsctl set bridge <bridge> other_config:stp-priority=0x7800

# 设置 STP Cost
ovs-vsctl set bridge <bridge> other_config:stp-path-cost=10

端口镜像

# 配置 eth0 的流量镜像到 eth1
ovs-vsctl -- set bridge br0 mirrors=@m \
    -- --id=@eth0 get port eth0 \
    -- --id=@eth1 get port eth1 \
    -- --id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1

# 查看镜像配置
ovs-vsctl get bridge br0 mirrors

# 删除镜像配置
ovs-vsctl -- --id=@m get mirror mymirror -- remove bridge br0 mirrors @m

# 清除所有镜像配置
ovs-vsctl clear bridge br0 mirrors

端口聚合

# 创建聚合口
ovs-vsctl add-port br0 dpdkbond0 \
    -- set interface dpdkbond0 type=dpdk options:dpdk-devargs=0000:01:00.0,0000:02:00.0

# 设置聚合模式
ovs-vsctl set port dpdkbond0 bond_mode=active-backup   # mode=1
ovs-vsctl set port dpdkbond0 bond_mode=balance-slb      # mode=2
ovs-vsctl set port dpdkbond0 bond_mode=balance-tcp      # mode=4

# LACP 配置
ovs-vsctl set port dpdkbond0 lacp=active
ovs-vsctl set port dpdkbond0 lacp=off
ovs-vsctl set port dpdkbond0 lacp=passive

# 查看 LACP 状态
ovs-appctl lacp/show

Group Table

# 查看 Group Table 支持情况
ovs-ofctl -O OpenFlow13 dump-group-features br0

# 查看现有 Group Table
ovs-ofctl -O OpenFlow13 dump-groups br0

# 创建 all 类型 Group
ovs-ofctl -O OpenFlow13 add-group br0 "group_id=1,type=all,bucket=output:1,bucket=output:2,bucket=output:3"

# 创建 select 类型 Group
ovs-ofctl -O OpenFlow13 add-group br0 "group_id=2,type=select,bucket=output:1,bucket=output:2,bucket=output:3"

# OpenFlow1.5+ hash 选择方法
ovs-ofctl -O OpenFlow15 add-group br0 "group_id=3,type=select,selection_method=hash,fields=ip_src,bucket=output:2,bucket=output:3"

# 删除 Group
ovs-ofctl -O OpenFlow13 del-groups br0 "group_id=2"

# 创建指向 Group 的 Flow Entry
ovs-ofctl -O OpenFlow13 add-flow br0 "in_port=1,actions=group:2"

Meter Table

# 查看 Meter 支持情况
ovs-ofctl -O OpenFlow13 meter-features br0

# 查看 Meter Table
ovs-ofctl -O OpenFlow13 dump-meters br0

# 查看 Meter 统计
ovs-ofctl -O OpenFlow13 meter-stats br0

# 创建限速 Meter(kbps)
ovs-ofctl -O OpenFlow13 add-meter br0 "meter=1,kbps,band=type=drop,rate=20"
ovs-ofctl -O OpenFlow13 add-meter br0 "meter=2,kbps,burst,band=type=drop,rate=20,burst_size=256"
ovs-ofctl -O OpenFlow13 add-meter br0 "meter=3,kbps,burst,stats,band=type=drop,rate=20,burst_size=256"

# 创建 pktps 限速 Meter
ovs-ofctl -O OpenFlow13 add-meter br0 "meter=4,pktps,band=type=drop,rate=1000"

# 删除 Meter
ovs-ofctl -O OpenFlow13 del-meters br0   # 删除全部
ovs-ofctl -O OpenFlow13 del-meter br0 meter=1

# 创建指向 Meter 的 Flow Entry
ovs-ofctl -O OpenFlow13 add-flow br0 "in_port=1,actions=meter:1,output:2"

应用示例

创建基本的虚拟网络拓扑

新建一个 OvS Bridge(默认会创建同名 internal Port)

$ ovs-vsctl add-br ovs-switch
$ ovs-vsctl show

在 Bridge 上创建 Port p0 并指定 OpenFlow Port ID 为 100

$ ovs-vsctl add-port ovs-switch p0 -- set Interface p0 ofport_request=100
$ ovs-vsctl get Interface p0 ofport

将 p0 设置为 internal 类型,使其在宿主机上生成同名网络接口

$ ovs-vsctl set Interface p0 type=internal
$ ip a

创建网络命名空间 ns0 并将 p0 移入其中,配置 IP 地址并开启混杂模式

$ ip netns add ns0
$ ip link set p0 netns ns0
$ ip netns exec ns0 ip addr add 192.168.1.100/24 dev p0
$ ip netns exec ns0 ifconfig p0 promisc up

同样方式创建 ns1、ns2 并为 p1、p2 分配 IP/MAC 与 OpenFlow Port 编号(101、102)

查看 ovs-vswitchd 配置 $ ovs-vsctl show 查看 Bridge 详细端口信息(Features Request/Reply) $ ovs-ofctl show ovs-switch 查看 Kernel Datapath 信息 $ ovs-dpctl show 检查 p0、p1、p2 的互通性

$ ip netns exec ns0 ping 192.168.1.101
$ ip netns exec ns0 ping 192.168.1.102

屏蔽数据包

查看所有 Flow Table(默认 254 张) $ ovs-ofctl dump-tables ovs-switch 查看所有 Flow Entries $ ovs-ofctl dump-flows ovs-switch 添加 Flow 以丢弃所有以太网广播包

$ ovs-ofctl add-flow ovs-switch "table=0, dl_src=01:00:00:00:00:00/01:00:00:00:00:00, actions=drop"
$ ovs-ofctl dump-flows ovs-switch

添加 Flow 以丢弃 IEEE 802.1D STP 广播包

$ ovs-ofctl add-flow ovs-switch "table=0, dl_dst=01:80:c2:00:00:00/ff:ff:ff:ff:ff:f0, actions=drop"
$ ovs-ofctl dump-flows ovs-switch

删除上述 Flow 条目

$ ovs-ofctl del-flows ovs-switch "dl_dst=01:80:c2:00:00:00/ff:ff:ff:ff:ff:f0"
$ ovs-ofctl del-flows ovs-switch "dl_src=01:00:00:00:00:00/01:00:00:00:00:00"

重定向数据包

将所有 ICMP 包重定向到 p2(OpenFlow Port 102)

$ ovs-ofctl add-flow ovs-switch "idle_timeout=0, dl_type=0x0800, nw_proto=1, actions=output:102"
$ ovs-ofctl dump-flows ovs-switch

验证:ns0 ping p1 实际被转发到 p2

# 在 ns0 中 ping 192.168.1.101
# 在 ns2 中使用 tcpdump 捕获 ICMP 包,看到源 IP 为 192.168.1.100,目的为 192.168.1.101

删除该 Flow

$ ovs-ofctl del-flows ovs-switch "icmp"

修改数据包 srcIP 地址

将从 p0 进入的包的源 IP 改为 9.181.137.1

$ ovs-ofctl add-flow ovs-switch "priority=1, idle_timeout=0, in_port=100, actions=mod_nw_src:9.181.137.1,normal"
$ ovs-ofctl dump-flows ovs-switch

验证:ns0 ping p1 时在 ns1 上捕获到的 ICMP 包源 IP 已被改为 9.181.137.1

删除该 Flow

$ ovs-ofctl del-flows ovs-switch "in_port=100"

修改数据包 VLAN tag

使用 ovs-appctl ofproto/trace 生成模拟数据包进行测试。

将 p1 的 VLAN tag 设置为 101(Access 口) $ ovs-vsctl set Port p1 tag=101 使用 ovs-appctl ofproto/trace 生成不含 VLAN 的数据包,观察转发行为

$ ovs-appctl ofproto/trace ovs-switch "in_port=100, dl_src=5a:d7:49:85:d9:da, dl_dst=62:f0:3e:b6:7d:6f" -generate

添加 Flow:对不含 VLAN 的入端口 100 包打上 VLAN 101 并正常转发

$ ovs-ofctl add-flow ovs-switch "priority=3, in_port=100, dl_vlan=0xffff, actions=mod_vlan_vid:101,normal"
$ ovs-ofctl dump-flows ovs-switch

再次使用 trace 验证,数据包已被打上 VLAN 101

$ ovs-appctl ofproto/trace ovs-switch "in_port=100, dl_src=5a:d7:49:85:d9:da, dl_dst=62:f0:3e:b6:7d:6f" -generate

NOTE :即使为 p0 添加了 VLAN 打标签的 Flow,p0 仍不是完整的 Access 口,仍无法直接与 p1 通信。

SDNOpenFlowOpen vSwitch
AI Cyberspace
Written by

AI Cyberspace

AI, big data, cloud computing, and networking.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.