最近在调研pppoe 客户端在vpp中的应用,发现相关的资料还是比较少的,在vpp-dev邮箱列表中可以找到一些信息。下面就来简单说明一下:
我们成功地将 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
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
链接: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
下面是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
本文分享自 DPDK VPP源码分析 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!