微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用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 举报,一经查实,本站将立刻删除。