VPP和Linux内核协议栈通信方法(转载)

  原文基础上,对vpp tap命令进行更新调整, 截至目前vpp版本20.01。原文地址https://blog.csdn.net/illina/article/details/81669944

背景介绍

  基于VPP开发一款网络设备,除使用VPP框架实现端口数据报文转发外,还需要对设备进行配置和管理,比较常用的是要实现ssh、web等相关服务,另外,由于VPP并未实现dhcp server的功能,控制面可能还需移植isc-dhcp类似的dhcp server。相关的用户态程序是基于Linux内核的socket来收发包的,因此,需要实现VPP和Linux内核协议栈通信的方法,可以将访问控制面的报文由VPP上送至Linux协议的协议栈。

实现原理

  VPP和Linux内核协议栈通信有两种方法,分别是基于Linux的TAP/TUN和VETH两种机制,对这两种机制不了解的朋友,建议先阅读下如下两个衔接的内容:
TUN/TAP:https://segmentfault.com/a/1190000009249039
VETH:https://segmentfault.com/a/1190000009251098

基于TAP/TUN的方法:

  如上图,PC的地址是192.168.1.2,Linux Kernel的管理接口地址是192.168.1.1,需要PC通过VPP可以ping通Linux内核的192.168.1.1地址。

  技术原理图如上,物理网卡对应VPP中的GE4/0/0,VPP创建tap接口,使用l2 bridge机制将GE4/0/0和tap桥接,进入GE4/0/0的报文通过l2 bridge转发到TAP,VPP的TAP相当于用户态进程,另一端对应的是Linux内核中的TAP接口,报文通过TAP机制重入到Linux内核,实现了VPP到控制面的通信。

  创建虚拟网卡 create tap范式,建议序号从0开始依次编号,以和linux端创建对应网卡保持一致;

查看tap网卡 

   实现命令:

  上述操作完成后,在linux后台,ifconfig发现多了一个tap0接口,给tap0接口配置好IP地址,就可以实现PC和设备的通信了。

基于VETH方法:

VETH技术原理如上图,通过在vpp上创建host-interface的方式实现,使用VETH方式的效率更高,实际使用时推荐此种方法。配置步骤如下:

linux后台配置:

  VPP配置:

赞赏

微信赞赏支付宝赞赏

发表评论

邮箱地址不会被公开。 必填项已用*标注