24{
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];
27
28
29 memset(ð->dst_addr, 0xFF, 6);
30
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);
34
35 eth->ether_type = htons(RTE_ETHER_TYPE_ARP);
36
37
38 memset(arp, 0, sizeof(struct rte_arp_hdr));
39 rte_memcpy(&arp->arp_data.arp_sha, &mac_addr, 6);
40
42
43 rte_memcpy(&arp->arp_data.arp_tha, &mac_addr, 6);
45
46
47 arp->arp_hardware = htons(RTE_ARP_HRD_ETHER);
48 arp->arp_protocol = htons(RTE_ETHER_TYPE_IPV4);
49 arp->arp_hlen = 6;
50 arp->arp_plen = 4;
51 arp->arp_opcode = htons(RTE_ARP_OP_REQUEST);
52
53 m->pkt_len = 60;
54 m->data_len = 60;
55
56 struct rte_mbuf *arp_tx_mbuf[1];
57 arp_tx_mbuf[0] = m;
58
59
66
67 rte_eth_tx_burst(port_id, 0, arp_tx_mbuf, 1);
68}
void inetAddrCopy(void *t, void *f)