(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)-ipvs实现L3/L4层代理

(dpdk f-stack)-ipvs实现L3/L4层代理

(dpdk f-stack)-ipvs实现L3/L4层代理

(dpdk f-stack) VMware跑 f-stack

(dpdk f-stack)-tcp代理访问rser时本地lport选择方法

(dpdk f-stack)-整体框架