Я хочу перенаправить пакет UDP/TCP на другие устройства, подключенные к тому же маршрутизатору. Я просто пишу код, который пересылает пакет на другие интерфейсы, проверяя тип пакета и его полезную нагрузку. Это работает нормально, но когда я пытаюсь переслать тот же пакет на другие устройства, я не получаю пакет на других устройствах. Я обновил контрольную сумму с помощью вспомогательных функций, и перенаправление на другие устройства у меня не работает. TC_ACT_REDIRECT
похож на XDP_TX
?
Вот фрагмент кода (если значение c
равно 1, он обновляет адрес назначения и пересылает пакет в место назначения):
if (c == 1) {
int ipaddr = htonl(3232260738); // Dest: 192.168.98.130
sum = bpf_csum_diff((void *)&old1_daddr, 4, (void *)&ipaddr, 4, 0);
bpf_skb_store_bytes(skb, ETH_HLEN + offsetof(struct iphdr, daddr),
(void *)&ipaddr, 4, 0);
bpf_l3_csum_replace(skb, IP_CSUM_OFFSET, 0, sum, 0);
bpf_l4_csum_replace(skb, IP_CSUM_OFFSET1, 0, sum, BPF_F_PSEUDO_HDR);
bpf_clone_redirect(skb, skb->ifindex, 0 );
return TC_ACT_REDIRECT;
}
Вот команда входа tc
sudo tc filter add dev ens33 ingress bpf da obj tcbpf1_kern.o sec classifier
с приведенным выше фрагментом кода я могу перенаправить пакет на виртуальный интерфейс, но не на обновленный пункт назначения.
ethtool -S
)? - person pchaigno   schedule 06.10.2020