小さな NAT 実装のパケット ソース ポートと IP アドレスを次のように変更します (パケットは にありますstruct rte_mbuf *m
)。
eth_hdr = rte_pktmbuf_mtod(m, struct ether_hdr *);
ipv4_hdr->dst_addr = f->int_src_ip;
パッケージを変更する適切な方法はありますか? もしそうなら、どうすればチェックサムを更新できますか?
小さな NAT 実装のパケット ソース ポートと IP アドレスを次のように変更します (パケットは にありますstruct rte_mbuf *m
)。
eth_hdr = rte_pktmbuf_mtod(m, struct ether_hdr *);
ipv4_hdr->dst_addr = f->int_src_ip;
パッケージを変更する適切な方法はありますか? もしそうなら、どうすればチェックサムを更新できますか?
はい、いつものやり方です。DPDK の checksum API を使用して、チェックサムを変更できます。
例:
ipv4_hdr = (struct ipv4_hdr *)(eth_hdr + 1);
udp_hdr = (struct udp_hdr *)((char *)ipv4_hdr + sizeof(struct ipv4_hdr));
udp_hdr->src_port = 42;
ipv4_hdr->hdr_checksum = 0;
udp_hdr->dgram_cksum = 0;
udp_hdr->dgram_cksum = rte_ipv4_udptcp_cksum(ipv4_hdr, udp_hdr);
ipv4_hdr>hdr_checksum = rte_ipv4_cksum(ipv4_hdr);