淘先锋技术网

首页 1 2 3 4 5 6 7

目的:利用f-stack实现tcp/udp代理功能的一种思路(比如采用snat/dnat方法改写ip头和tcp/udp头信息)。


实现tcp/udp代理思路:
    FreeBSD提供了IPFW机制,即提供了hook函数来对数据包做改写操作; hook函数中利用数据包匹配代理规则,对数据包做改写操作。
    dpdk收到包后,首先由hook函数处理(可能改写ip/tcp头部信息),再交由FreeBSD协议栈处理(交给上层应用处理,或者路由转发处理)。
    nginx上层发包,经过FreeBSD协议栈后,最终调用dpdk接口将数据包从网卡发送前需调用hook函数(可能改写ip/tcp头部信息),完事交由dpdk将数据包从网卡发出去。

FreeBSD提供的hook函数:

  •     hook函数注册:

        int
        ipfw_attach_hooks(int arg)
        {
            int error = 0;

            if (arg == 0)
                ipfw_hook(0, AF_INET);
            else if (V_fw_enable && ipfw_hook(1, AF_INET) != 0) {
                        error = ENOENT;