pppoe with vpp/dpdk
最近在调研pppoe 客户端在vpp中的应用,发现相关的资料还是比较少的,在vpp-dev邮箱列表中可以找到一些信息。下面就来简单说明一下:
- vpp支持pppoe插件 下面摘自邮件部分内容,可以了解到当前插件只实现了pppoe server端,貌似需要手动配置会话才能工作。
我们成功地将 VPP、PPPoE 插件和 OpenBRAS 集成在一起,并使用 IXIA PPPoE 测试套件进行功能和性能测试。
该插件添加了三个图形节点:1) pppoe-input 用于 PPPoE 解封装 2) pppoe-encap 用于 PPPoE 封装 3) pppoe-tap-dispatch 用于控制报文和 OpenBRAS 之间的控制平面数据包交互。
下面是使 PPPoE CP 和 DP 工作的配置:
vim /etc/vpp/startup.conf
tuntap {
enable
ethernet
name newtap
}
vppctl 配置命令行
create pppoe tap client-if-index 2 tap-if-index 1
vppctl create pppoe session client-ip 100.1.1.2 session-id 1 local-mac 68:05:ca:30:54:e8 client-mac 00: 11:01:00:00:01
vppctl ip route add 100.1.1.2/24 via pppoe_session0
注意:上述命令行在新版本中有变化。
邮件链接:https://lists.fd.io/g/vpp-dev/topic/10641929#581
上面是vpp官方介绍pppoe插件相关功能架构的ppt资料,已放在个人github地址上,有需要自取。https://github.com/jin13417/dpdk-vpp-learning/tree/main/doc/PPPoe
- pppoe插件控制面开源软件pppcpd pppcpd是c++编写,作为vpp pppoe模块的控制面,目前只能用于pppoe server端,可以创建会话将配置下发到vpp。
github链接:https://github.com/zstas/pppcpd 使用介绍文章: 1:https://zstas.github.io/jekyll/update/2020/01/25/vpp.html 2:https://zstas.github.io/jekyll/update/2020/02/02/vpp_p2.html
- 基于vpp开源pppoeclient 基于vpp 17.10版本开发的pppoe的客户端,vpp群里已经有小伙伴调通了基本pppoe拨号正常。对接不同的pppoe server可能处理可能都会导致vpp异常,任重道远啊。
链接:https://github.com/raydonetworks/vpp-pppoeclient
下面是基本配置命令,很遗憾并没有拨号成功。还需要详细阅读代码,了解交互流程。
对应物理接口GigabitEthernetb/0/0,创建一个pppoe虚拟接口,客户端主机标识11223344。
DBGvpp# show interface
Name Idx State Counter Count
GigabitEthernet13/0/0 2 down
GigabitEthernet1b/0/0 3 down
GigabitEthernetb/0/0 1 up
.................................................
create pppoe client sw-if-index host-uniq
查询pppoe客户端信息
DBGvpp# show pppoe client
[0] sw-if-index 1 host_uniq 11223344 state PPPOE_CLIENT_DISCOVERY session-id 0 ac-mac-address 00:00:00:00:00:00
启动pppoe拨号,设置pppoex虚接口,对应pppoe用户名及密码。后续就进入pppoe交互流程中。
pppox set auth sw-if-index username test password
- flexiwan产品pppoe client实现 flexiwan产品中已支持pppoe client,需要使用vppsb route插件,使能tap-inject功能。
下面是vppsb router插件中的pppoe session和pppoe discover报文注册处理函数,直接通过tap接口映射到内核的接口将报文送到内核pppd协议栈处理。目前测试可以正常拨号成功,从内核可以ping通server。但是后续业务报文流量路径还未知。
void tap_inject_map_interface_set (u32 src_sw_if_index, u32 dst_sw_if_index)
{
tap_inject_main_t *im = tap_inject_get_main();
ip4_register_protocol (IP_PROTOCOL_OSPF, im->tx_node_index);
ip4_register_protocol (IP_PROTOCOL_TCP, im->tx_node_index);
#注册pppoe 会话报文eth type=0x8864处理节点,直接送到内核
ethernet_register_input_type (vm, ETHERNET_TYPE_PPPOE_SESSION,
tap_inject_pppoe_tx_node.index);
#注册pppoe discover报文eth type=0x8863,直接送到内核
ethernet_register_input_type (vm, ETHERNET_TYPE_PPPOE_DISCOVERY,
tap_inject_pppoe_tx_node.index);
#ifdef FLEXIWAN_FIX
// Issue: all UDP traffic is captured by tap-inject before VxLan node intercepts it.
// as a result VxLAN tunnel that sits on BVI bridge with TAP interface does not work.
}
flexiwan vppsb router 插件pppoe修改commit链接: https://gitlab.com/flexiwangroup/flexiroutersb/-/commit/a1008562cd38091eaf2d48547dacf5775541ff9a
相关文章
- Github下载release附件变相提速方法
- 流程图软件 drawio 免费 github开源
- Git多人协作
- Linux 下 Too many open files 问题排查与解决
- Linux 下安装 fail2ban
- Git 推送到多个远程仓库
- Github团队开发示例(二)
- Github团队开发示例(一)
- Github教程(3)
- Github教程(2)
- Github教程(1)
- Github教程(0)
- jenkins配置从git指定分支下载代码,打包部署jar包
- 一台电脑支持2个git账号:gitlab+github
- 资产收集神器-Goby工具
- phpStudy 2016搭建-upload-labs靶场
- Adobe Photoshop 2022(mac+windows全版本都有,包括最新的2023)
- PS 2021 软件安装包+安装教程(mac+windows全版本都有,包括最新的2023)
- 闻道Go语言,6月龄必知必会
- Go语言正/反向代理的姿势