FD.io/VPP — L2 vSwitch
目录
文章目录
- 目录
- 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
使用 VPP1 充当 L2 vSwitch 的角色。
- 在 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
- 在 VPP 上创建 host-interface host-vpp1out。
vpp# create host-interface name vpp1out
host-vpp1outvpp# show hardwareName Idx Link Hardware
host-vpp1out 1 up host-vpp1outLink speed: unknownEthernet address 02:fe:e6:fc:17:1eLinux PACKET socket interface
...vpp# set int state host-vpp1out upvpp# show intName Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
host-vpp1out 1 up 9000/0/0/0
local0 0 down 0/0/0/0
- 在 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
- 在 VPP1 上创建 host-interface host-vpp1vpp2。
vpp# create host-interface name vpp1vpp2
host-vpp1vpp2vpp# show hardwareName Idx Link Hardware
host-vpp1vpp2 2 up host-vpp1vpp2Link speed: unknownEthernet address 02:fe:41:4e:24:6fLinux PACKET socket interface
...vpp# set int state host-vpp1vpp2 upvpp# show intName Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
host-vpp1out 1 up 9000/0/0/0 rx packets 8rx bytes 560drops 8ip6 8
host-vpp1vpp2 2 up 9000/0/0/0
local0 0 down 0/0/0/0
- 在 VPP1 上创建 host-interface host-vpp2vpp1。
vpp# create host-interface name vpp2vpp1
host-vpp2vpp1vpp# show hardwareName Idx Link Hardware
host-vpp2vpp1 1 up host-vpp2vpp1Link speed: unknownEthernet address 02:fe:5d:5e:17:8fLinux PACKET socket interface
...vpp# set int state host-vpp2vpp1 upvpp# show intName Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
host-vpp2vpp1 1 up 9000/0/0/0
local0 0 down 0/0/0/0
- 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 usevpp# set int l2 bridge host-vpp1out 1
vpp# set int l2 bridge host-vpp1vpp2 1vpp# show bridge-domain 1 detailBD-ID Index BSN Age(min) Learning U-Forwrd UU-Flood Flooding ARP-Term arp-ufwd BVI-Intf1 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-outputInterface If-idx ISN SHG BVI TxFlood VLAN-Tag-Rewritehost-vpp1out 1 1 0 - * nonehost-vpp1vpp2 2 1 0 - * none
- Configure loopback interface on vpp2
vpp# create loopback interface
loop0vpp# set int state loop0 upvpp# set int ip address loop0 10.10.1.2/24vpp# show inter addr
host-vpp2vpp1 (up):
local0 (dn):
loop0 (up):L3 10.10.1.2/24
- 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 detailBD-ID Index BSN Age(min) Learning U-Forwrd UU-Flood Flooding ARP-Term arp-ufwd BVI-Intf1 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-outputInterface If-idx ISN SHG BVI TxFlood VLAN-Tag-Rewriteloop0 2 1 0 * * nonehost-vpp2vpp1 1 1 0 - * none
- 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
- 查看 VPP1 L2 FIB(MAC 映射表):
vpp# show l2fib verboseMac-Address BD-Idx If-Idx BSN-ISN Age(min) static filter bvi Interface-Nameb6:36:04:ba:af:ac 1 2 0/1 - - - - host-vpp1vpp2aa:ac:58:9d:9b:33 1 1 0/1 - - - - host-vpp1outde:ad:00:00:00:00 1 2 0/1 - - - - host-vpp1vpp2c2: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
- 查看 VPP2 L2 FIB(MAC 映射表)和 ARP 表:
vpp# show l2fib verboseMac-Address BD-Idx If-Idx BSN-ISN Age(min) static filter bvi Interface-Nameb6:36:04:ba:af:ac 1 1 0/1 - - - - host-vpp2vpp1aa:ac:58:9d:9b:33 1 1 0/1 - - - - host-vpp2vpp1de:ad:00:00:00:00 1 2 0/0 no * - * loop0
L2FIB total/learned entries: 3/2 Last scan time: 0.0000e0sec Learn limit: 16777216vpp# show ip neighborTime IP Flags Ethernet Interface1396.0497 10.10.1.1 D aa:ac:58:9d:9b:33 loop0
VLAN L2 Switcing
- 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
FD.io/VPP — L2 vSwitch相关推荐
- FD.io/VPP — Overview
目录 文章目录 目录 FD.io VPP FD.io 官网:https://fd.io FD.io(Fast data – Input/Output)是 Linux 基金会下属的一个开源项目,成立于 ...
- FD.io VPP基本介绍:理解向量包处理(VPP)
FD.io VPP:用户文档 向量包处理器 RToax 2020年9月 1. 什么是向量包处理器(VPP) FD.io的矢量包处理器(VPP)是一个快速,可扩展的2-4层多平台网络协议栈.它在Linu ...
- FD.io VPP 使用场景-用例
目录 路由器/通用CPE等 宽带网络网关 云负载均衡器 入侵防御系统 部署模型 离散电器 虚拟网络功能 FD.io是一种联网技术,可用于构建网络功能星系.如今,一些主要的通信网络提供商和设备制造商正在 ...
- FD.io/VPP — 常用指令集合
目录 文章目录 目录 前言 System Level Interface Add NIC into VPP as Interface Interface State Hardware Interfac ...
- FD.io VPP 20.09版本正式发布:往期VPP文章回顾+下载地址+相关链接
目录 下载RPM/DEB包 往期文章回顾与推荐 FD.io是一些项目和库的集合,基于DPDK并逐渐演化,支持在通用硬件平台上部署灵活可变的业务.FD.io为软件定义基础设施的开发者提供了一个通用平台, ...
- FD.io VPP:探究分段场景下vlib_buf在收发包的处理(dpdk_plugin.so)、rte_mbuf与vlib_buf 关系
Table of Contents rte_mbuf.vlib_buf 关系及内存分布 使用dpdk-收包接口函数 使用dpdk 发包接口函数 总结 参考阅读 在使用vpp老版本copy报文的时候,经 ...
- FD.io VPP:vlib buffer pool(vlib_buffer) 内存初始化
Table of Contents vlib buffer创建过程 vlib_buffer相关内存初始化 1.函数一开始就查询numa的个数 2.遍历numa节点来初始化 3.查询系统大页大小. 4. ...
- 关于FD.io VPP的最新消息
Table of Contents CuVPP:软件数据平面中基于过滤器的最长前缀匹配 快速数据项目的矢量包处理器(VPP)版本20.05 2020年打破神话的DPDK 在商品硬件上使用Calico ...
- FD.io VPP环境下运行用户应用程序教程
FD.io VPP环境下运行用户应用程序教程 RToax 2020年9月 相关文章:<FD.io VPP利用iperf3进行UDP灌包测试-英特尔X520万兆网卡> 1. VPP简介 VP ...
最新文章
- Linux操作oracle——关闭、停止、重启
- hihoCoder1233(2015北京网络赛H题)
- Data truncation: Data truncated for column/Data too long for column
- 虚拟同步发电机_一种光储型虚拟同步机介绍
- c语言线性分类回归库 台湾,最全的线性回归算法库总结—— scikit-learn篇
- ewsa 字典_汉语字典小程序
- 项目投标注意点001---项目投标那点事
- 7-10 数组循环左移 (20 分)
- Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)
- eclipse JSP页面中的JS代码为黑色,JS单独文件是OK的
- oracle delete误删除表数据进行恢复
- ABAQUS二次开发手册【随书代码使用说明】
- CocosCreator矢量绘图组件(2)
- Kali Linux 下搜狗输入法换肤和设置快捷键
- 从时间上算,我和李笑来是同一批人 | 十年币圈生存实录
- java倒叙遍历list
- 十行代码完成公众号对话,VFP的能力就是这么强悍,你学会了吗?
- ctrl+alt+t 函数注释快捷键失效KoroFileHeader
- commvault备份mysql数据库_Oracle数据库的备份和恢复-Commvault.PDF
- Docker (八)容器数据卷使用
热门文章
- SQLite中使用全文搜索FTS
- php 数组 获取键值,PHP数组_filter获取无键值
- python学会后再学c_目前python熟练 ,想再学golang 需要先学c吗?
- windows命令大全_必收藏!电脑快捷键、组合键大全
- 你知道“淘宝意念购“吗?阿里巴巴也入局脑机接口领域了...,
- Python-EEG工具库MNE中文教程(9)-参考电极应用
- 这块DIY墨水屏手表火了!外观可盐可甜,无线蓝牙计步闹钟一应俱全 | 开源
- 亚马逊员工流动率150%,每8个月相当于“大换血”,网友:贝佐斯不知足
- 一批美国名校被曝监控学生:14秒记录一次手机位置,想翘课更难了
- NLP中文面试学习资料:面向算法面试,理论代码俱全,登上GitHub趋势榜