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);
43 rte_memcpy(&arp->arp_data.arp_tha, &mac_addr, 6);
47 arp->arp_hardware = htons(RTE_ARP_HRD_ETHER);
48 arp->arp_protocol = htons(RTE_ETHER_TYPE_IPV4);
51 arp->arp_opcode = htons(RTE_ARP_OP_REQUEST);
56 struct rte_mbuf *arp_tx_mbuf[1];
67 rte_eth_tx_burst(port_id, 0, arp_tx_mbuf, 1);
80 struct rte_ether_hdr *eth = rte_pktmbuf_mtod(m,
struct rte_ether_hdr *);
81 struct rte_arp_hdr *arp = (
struct rte_arp_hdr *)ð[1];
83 if (arp->arp_opcode == rte_cpu_to_be_16(RTE_ARP_OP_REQUEST)) {
84 arp->arp_opcode = rte_cpu_to_be_16(RTE_ARP_OP_REPLY);
88 struct rte_ether_addr mac_addr;
89 rte_eth_macaddr_get(port_id, &mac_addr);
97 TLOG_DEBUG(10) <<
"ARP LOCAL IP: " << localaddr;
100 if ( arp->arp_data.arp_tip != ip_add_bin)
return;
102 TLOG_DEBUG(10) <<
"ARP Received " << dstaddr <<
" I'm the target " << localaddr;
105 ethAddrSwap(&arp->arp_data.arp_sha, &arp->arp_data.arp_tha);
108 inetAddrSwap(&arp->arp_data.arp_tip, &arp->arp_data.arp_sip);
111 arp->arp_opcode = htons(RTE_ARP_OP_REPLY);
117 rte_memcpy(&arp->arp_data.arp_sha, &mac_addr, 6);
118 rte_memcpy(ð->src_addr, &mac_addr, 6);
120 struct rte_mbuf *arp_tx_mbuf[1];
123 rte_eth_tx_burst(port_id, 0, arp_tx_mbuf, 1);