(dpdk f-stack)-实现L4代理功能
Posted ygmdream
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(dpdk f-stack)-实现L4代理功能相关的知识,希望对你有一定的参考价值。
目的:利用f-stack实现tcp/udp代理功能的一种思路(比如采用snat/dnat方法改写ip头和tcp/udp头信息)。
实现tcp/udp代理思路:
FreeBSD提供了IPFW机制,即提供了hook函数来对数据包做改写操作; hook函数中利用数据包匹配代理规则,对数据包做改写操作。
dpdk收到包后,首先执行FreeBSD提供的hook函数处理(可能改写ip/tcp头部信息),再交由FreeBSD协议栈处理(协议栈中不再做hook处理逻辑了,交给上层应用处理,或者路由转发处理)。
nginx上层发包,经过FreeBSD协议栈后,最终调用dpdk接口将数据包从网卡发送前需调用hook函数(可能改写ip/tcp头部信息),完事交由dpdk将数据包从网卡发出去。
FreeBSD提供的hook函数:
- hook函数注册:
int
ipfw_attach_hooks(int arg)
int error = 0;
if (arg == 0) /* detach */
ipfw_hook(0, AF_INET);
else if (V_fw_enable && ipfw_hook(1, AF_INET) != 0)
error = ENOENT; /* see ip_fw_pfil.c::
以上是关于(dpdk f-stack)-实现L4代理功能的主要内容,如果未能解决你的问题,请参考以下文章
(dpdk f-stack) VMware跑 f-stack