MCPcopy Create free account
hub / github.com/F-Stack/f-stack / rte_net_make_rarp_packet

Function rte_net_make_rarp_packet

dpdk/lib/net/rte_arp.c:8–49  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6
7#define RARP_PKT_SIZE 64
8struct rte_mbuf *
9rte_net_make_rarp_packet(struct rte_mempool *mpool,
10 const struct rte_ether_addr *mac)
11{
12 struct rte_ether_hdr *eth_hdr;
13 struct rte_arp_hdr *rarp;
14 struct rte_mbuf *mbuf;
15
16 if (mpool == NULL)
17 return NULL;
18
19 mbuf = rte_pktmbuf_alloc(mpool);
20 if (mbuf == NULL)
21 return NULL;
22
23 eth_hdr = (struct rte_ether_hdr *)
24 rte_pktmbuf_append(mbuf, RARP_PKT_SIZE);
25 if (eth_hdr == NULL) {
26 rte_pktmbuf_free(mbuf);
27 return NULL;
28 }
29
30 /* Ethernet header. */
31 memset(eth_hdr->dst_addr.addr_bytes, 0xff, RTE_ETHER_ADDR_LEN);
32 rte_ether_addr_copy(mac, &eth_hdr->src_addr);
33 eth_hdr->ether_type = RTE_BE16(RTE_ETHER_TYPE_RARP);
34
35 /* RARP header. */
36 rarp = (struct rte_arp_hdr *)(eth_hdr + 1);
37 rarp->arp_hardware = RTE_BE16(RTE_ARP_HRD_ETHER);
38 rarp->arp_protocol = RTE_BE16(RTE_ETHER_TYPE_IPV4);
39 rarp->arp_hlen = RTE_ETHER_ADDR_LEN;
40 rarp->arp_plen = 4;
41 rarp->arp_opcode = RTE_BE16(RTE_ARP_OP_REVREQUEST);
42
43 rte_ether_addr_copy(mac, &rarp->arp_data.arp_sha);
44 rte_ether_addr_copy(mac, &rarp->arp_data.arp_tha);
45 memset(&rarp->arp_data.arp_sip, 0x00, 4);
46 memset(&rarp->arp_data.arp_tip, 0x00, 4);
47
48 return mbuf;
49}

Callers 3

rte_vhost_dequeue_burstFunction · 0.85
virtio_notify_peersFunction · 0.85

Calls 5

rte_pktmbuf_allocFunction · 0.85
rte_pktmbuf_appendFunction · 0.85
rte_pktmbuf_freeFunction · 0.85
memsetFunction · 0.85
rte_ether_addr_copyFunction · 0.85

Tested by

no test coverage detected