25 struct rte_ether_hdr *eth = rte_pktmbuf_mtod(m,
struct rte_ether_hdr *);
26 struct rte_arp_hdr *arp = (
struct rte_arp_hdr *)ð[1];
29 memset(ð->dst_addr, 0xFF, 6);
31 struct rte_ether_addr mac_addr;
32 rte_eth_macaddr_get(port_id, &mac_addr);
33 rte_ether_addr_copy(&mac_addr, ð->src_addr);
35 eth->ether_type = htons(RTE_ETHER_TYPE_ARP);
38 memset(arp, 0,
sizeof(
struct rte_arp_hdr));
39 rte_memcpy(&arp->arp_data.arp_sha, &mac_addr, 6);
41 uint32_t addr = htonl(ip_add_bin);
45 rte_memcpy(&arp->arp_data.arp_tha, &mac_addr, 6);
54 arp->arp_hardware = htons(RTE_ARP_HRD_ETHER);
55 arp->arp_protocol = htons(RTE_ETHER_TYPE_IPV4);
58 arp->arp_opcode = htons(RTE_ARP_OP_REQUEST);
63 struct rte_mbuf *arp_tx_mbuf[1];
65 rte_eth_tx_burst(port_id, 0, arp_tx_mbuf, 1);
79 struct rte_ether_hdr *eth = rte_pktmbuf_mtod(m,
struct rte_ether_hdr *);
80 struct rte_arp_hdr *arp = (
struct rte_arp_hdr *)ð[1];
82 if (arp->arp_opcode == rte_cpu_to_be_16(RTE_ARP_OP_REQUEST)) {
83 arp->arp_opcode = rte_cpu_to_be_16(RTE_ARP_OP_REPLY);
87 struct rte_ether_addr mac_addr;
88 rte_eth_macaddr_get(port_id, &mac_addr);
98 if ( arp->arp_data.arp_tip != ip_add_bin)
return;
100 TLOG_DEBUG(10) <<
"ARP Received " << dstaddr <<
" I'm the target " << localaddr;
103 ethAddrSwap(&arp->arp_data.arp_sha, &arp->arp_data.arp_tha);
106 inetAddrSwap(&arp->arp_data.arp_tip, &arp->arp_data.arp_sip);
109 arp->arp_opcode = htons(RTE_ARP_OP_REPLY);
115 rte_memcpy(&arp->arp_data.arp_sha, &mac_addr, 6);
116 rte_memcpy(ð->src_addr, &mac_addr, 6);
118 struct rte_mbuf *arp_tx_mbuf[1];
121 rte_eth_tx_burst(port_id, 0, arp_tx_mbuf, 1);