目录


文章目录

  • 目录
  • L2 vSwitch
  • L2 vSwitch 操作指令集合
  • MAC address
  • ARP
  • Bridge Domain
  • 应用示例
  • L2 Switching
  • VLAN L2 Switcing


L2 vSwitch

VPP 实现的 VLAN 转发模型类似于 Linux Bridge,称之为 Bridge Domain。VPP 的接口模式默认为 L3 模式,将接口挂载到 Bridge Domain 之后,即可转换为 L2 模式。

VPP 可以作为一个现成的 L2 vSwitch,支持创建:

  • Bridge Domains
  • Ports (including tunnel ports)
  • Connect ports to bridge domains
  • Program ARP termination
  • etc…

L2 vSwitch 操作指令集合

MAC address

# 设置接口的 MAC 地址。
set int mac address GigabitEthernet2/0/0 00:00:00:00:00:00

# 查看 L2 转发 MAC 表
show l2fib [all] | [bd_id <nn> | bd_index <nn>] [learn | add] | [raw]

# 添加 L2 转发 MAC 表记录
set l2fib add fa:16:3e:b0:a9:71 834 BondEthernet0.834

ARP

# 查看 ARP 学习表
show ip neighbor

# 设置静态 ARP
set ip neighbor GigabitEthernet2/6/0 192.168.2.2 00:0c:29:dc:96:f8

Bridge Domain

# 创建 Bridge Domain(vSwitch)
create bridge-domain 100

# 查看 Bridge Domain(vSwitch)
show bridge-domain 100 detail

# 将接口挂载到指定的 Bridge Domain(vSwitch)
set interface l2 bridge <interface> <bridge-domain-id> [bvi|uu-fwd] [shg]

# 将接口移出 Bridge Domain(vSwitch),set l3 == del l2
set interface l3 GigabitEthernet0/a/0.200

应用示例

L2 Switching

FD.io/VPP — L2 vSwitch_指令集

使用 VPP1 充当 L2 vSwitch 的角色。

  1. 在 Linux 上创建 veth pair vpp1out-vpp1host,其中 vpp1out 用于 VPP1 host-interface,vpp1host 作为 Linux Host Network Interface,配置好 IP 地址。
$ sudo ip link add name vpp1out type veth peer name vpp1host
$ sudo ip link set dev vpp1out up
$ sudo ip link set dev vpp1host up
$ sudo ip addr add 10.10.1.1/24 dev vpp1host
  1. 在 VPP 上创建 host-interface host-vpp1out。
vpp# create host-interface name vpp1out
host-vpp1out

vpp# show hardware
Name Idx Link Hardware
host-vpp1out 1 up host-vpp1out
Link speed: unknown
Ethernet address 02:fe:e6:fc:17:1e
Linux PACKET socket interface
...

vpp# set int state host-vpp1out up

vpp# show int
Name Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
host-vpp1out 1 up 9000/0/0/0
local0 0 down 0/0/0/0
  1. 在 Linux 上创建 veth pair vpp1vpp2-vpp2vpp1,其中 vpp1vpp2 用于 VPP1 host-interface,vpp2vpp1 作为 VPP2 host-interface。
$ sudo ip link add name vpp1vpp2 type veth peer name vpp2vpp1
$ sudo ip link set dev vpp1vpp2 up
$ sudo ip link set dev vpp2vpp1 up
  1. 在 VPP1 上创建 host-interface host-vpp1vpp2。
vpp# create host-interface name vpp1vpp2
host-vpp1vpp2

vpp# show hardware
Name Idx Link Hardware
host-vpp1vpp2 2 up host-vpp1vpp2
Link speed: unknown
Ethernet address 02:fe:41:4e:24:6f
Linux PACKET socket interface
...

vpp# set int state host-vpp1vpp2 up

vpp# show int
Name Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
host-vpp1out 1 up 9000/0/0/0 rx packets 8
rx bytes 560
drops 8
ip6 8
host-vpp1vpp2 2 up 9000/0/0/0
local0 0 down 0/0/0/0
  1. 在 VPP1 上创建 host-interface host-vpp2vpp1。
vpp# create host-interface name vpp2vpp1
host-vpp2vpp1

vpp# show hardware
Name Idx Link Hardware
host-vpp2vpp1 1 up host-vpp2vpp1
Link speed: unknown
Ethernet address 02:fe:5d:5e:17:8f
Linux PACKET socket interface
...

vpp# set int state host-vpp2vpp1 up

vpp# show int
Name Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
host-vpp2vpp1 1 up 9000/0/0/0
local0 0 down 0/0/0/0
  1. Configure Bridge Domain on vpp1 and add host-interface to bridge domain ID 1(​NOTE​:bridge domain ID 0 是无效的,我们应该创建 bridge domain 1)。
vpp# show bridge-domain
no bridge-domains in use

vpp# set int l2 bridge host-vpp1out 1
vpp# set int l2 bridge host-vpp1vpp2 1

vpp# show bridge-domain 1 detail
BD-ID Index BSN Age(min) Learning U-Forwrd UU-Flood Flooding ARP-Term arp-ufwd BVI-Intf
1 1 off on on flood on off off N/A
span-l2-input l2-input-classify l2-input-feat-arc l2-policer-classify l2-input-acl vpath-input-l2 l2-ip-qos-record l2-input-vtr l2-gbp-lpm-classify gbp-src-classify gbp-null-classify l2-gbp-lpm-anon-classify gbp-learn-l2 l2-emulation l2-learn l2-rw l2-fwd gbp-fwd l2-flood l2-flood l2-output

Interface If-idx ISN SHG BVI TxFlood VLAN-Tag-Rewrite
host-vpp1out 1 1 0 - * none
host-vpp1vpp2 2 1 0 - * none
  1. Configure loopback interface on vpp2
vpp# create loopback interface
loop0

vpp# set int state loop0 up

vpp# set int ip address loop0 10.10.1.2/24

vpp# show inter addr
host-vpp2vpp1 (up):
local0 (dn):
loop0 (up):
L3 10.10.1.2/24
  1. Configure bridge domain on vpp2: Add interface loop0 as a bvi (bridge virtual interface) to bridge domain 1 and Add interface vpp2vpp1 to bridge domain 1.
vpp# set int l2 bridge loop0 1 bvi
vpp# set int l2 bridge host-vpp2vpp1 1
vpp# show bridge-domain 1 detail
BD-ID Index BSN Age(min) Learning U-Forwrd UU-Flood Flooding ARP-Term arp-ufwd BVI-Intf
1 1 off on on flood on off off loop0
span-l2-input l2-input-classify l2-input-feat-arc l2-policer-classify l2-input-acl vpath-input-l2 l2-ip-qos-record l2-input-vtr l2-gbp-lpm-classify gbp-src-classify gbp-null-classify l2-gbp-lpm-anon-classify gbp-learn-l2 l2-emulation l2-learn l2-rw l2-fwd gbp-fwd l2-flood l2-flood l2-output

Interface If-idx ISN SHG BVI TxFlood VLAN-Tag-Rewrite
loop0 2 1 0 * * none
host-vpp2vpp1 1 1 0 - * none
  1. Ping from host to vpp2 and vpp2 to host
$ ping 10.10.1.2
PING 10.10.1.2 (10.10.1.2) 56(84) bytes of data.
64 bytes from 10.10.1.2: icmp_seq=1 ttl=64 time=0.534 ms
  1. 查看 VPP1 L2 FIB(MAC 映射表):
vpp# show l2fib verbose
Mac-Address BD-Idx If-Idx BSN-ISN Age(min) static filter bvi Interface-Name
b6:36:04:ba:af:ac 1 2 0/1 - - - - host-vpp1vpp2
aa:ac:58:9d:9b:33 1 1 0/1 - - - - host-vpp1out
de:ad:00:00:00:00 1 2 0/1 - - - - host-vpp1vpp2
c2:31:59:d8:27:26 1 2 0/1 - - - - host-vpp1vpp2
L2FIB total/learned entries: 4/4 Last scan time: 0.0000e0sec Learn limit: 16777216
  1. 查看 VPP2 L2 FIB(MAC 映射表)和 ARP 表:
vpp# show l2fib verbose
Mac-Address BD-Idx If-Idx BSN-ISN Age(min) static filter bvi Interface-Name
b6:36:04:ba:af:ac 1 1 0/1 - - - - host-vpp2vpp1
aa:ac:58:9d:9b:33 1 1 0/1 - - - - host-vpp2vpp1
de:ad:00:00:00:00 1 2 0/0 no * - * loop0
L2FIB total/learned entries: 3/2 Last scan time: 0.0000e0sec Learn limit: 16777216

vpp# show ip neighbor
Time IP Flags Ethernet Interface
1396.0497 10.10.1.1 D aa:ac:58:9d:9b:33 loop0

VLAN L2 Switcing

FD.io/VPP — L2 vSwitch_指令集_02

  • GE1 接口为 Access 模式,加入到 VLAN 10 中;
  • GE2 接口为 Trunk 模式,允许 VLAN 10 和 VLAN 11 的报文通过;
  • 创建 GE2 接口的 802.1q 类型子接口 GE2.10,加入到 VLAN 10 中,并修改 GE2.10 的 L2 Rewrite 类型为 pop-1(转发带单层 VLAN Tag)。
  • 创建 GE2 接口的 802.1q 类型子接口 GE2.11,加入到 VLAN 11 中,并修改 GE2.11 的 L2 Rewrite 类型为 pop-1(转发带单层 VLAN Tag)。
  • GE3 接口为 Access 模式,加入到 VLAN 11 中;

配置步骤:

# VLAN 10
create bridge-domain 10
set interface l2 bridge GigabitEthernet1/0/0 10
create sub-interfaces GigabitEthernet2/0/0 10 dot1q 10
set interface l2 bridge GigabitEthernet2/0/0.10 10
set interface l2 tag-rewrite GigabitEthernet2/0/0.10 pop 1
show bridge-domain 10 detail

# VLAN 11
create bridge-domain 11
set interface l2 bridge GigabitEthernet3/0/0 11
create sub-interfaces GigabitEthernet2/0/0 11 dot1q 11
set interface l2 bridge GigabitEthernet2/0/0.11 11
set interface l2 tag-rewrite GigabitEthernet2/0/0.11 pop 1
show bridge-domain 11 detail