使用xdp / tc eBPF的单播/多播数据包

问题描述

我尝试使用ebpf设计负载均衡器。我想将传入的数据包传输到不同的目的地(连接在同一网络中的设备)。尽管我使用了clone_bpf_redirect帮助器函数将数据包重定向到实际/虚拟接口,但其工作正常。现在,我想将数据包广播/单播到连接在同一网络中的其他设备。据我所知,XDP不支持它。因此,使用tc bpf挂钩。是否有任何辅助功能或应该使用哪个操作?谁能指导我该怎么做?

eBpf负载分配器:192.168.98.178(负载分配器) 收件人1 :192.168.98.131 收件人2 :192.168.98.138

    iph->daddr = htonl(3232260739);  //Dest: 192.168.98.131 
    iph->check = 0;
    iph->check = checksum((unsigned short *)iph,sizeof(struct iphdr));

    // Update upd packet checksum of 
    sum = old_daddr + (~ntohs(*(unsigned short *)&iph->daddr) & 0xffff);
    sum += ntohs(udp->check);
    sum = (sum & 0xffff) + (sum>>16);
    udp->check = htons(sum + (sum>>16) - 1);
// clone the packet and redirect to infdex 
    bpf_clone_redirect(skb,skb->ifindex,0);
//clone the packet and redirect to infdex (virtual interface 2)
    bpf_clone_redirect(skb,skb->ifindex + 2,0);
//clone the packet and redirect to infdex (virtual interface 4)
    bpf_clone_redirect(skb,skb->ifindex + 4,0);
            return TC_ACT_OK;
// Or
         //   return TC_ACT_REDIRECT;

sudo tc filter add dev ens33 ingress bpf da obj bpf_loadbalancer.o sec ingress

在此之后,我将1个数据包分配给3个不同的ifindex,但我想将相同的数据包发送给连接到网络的其他设备。有人可以帮我怎样将数据包重定向到设备上,而不是接口上吗? 谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)