]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | /* SPDX-License-Identifier: BSD-3-Clause |
2 | * Copyright(c) 2018 Intel Corporation | |
3 | */ | |
4 | ||
5 | #include <arpa/inet.h> | |
6 | ||
7 | #include <rte_arp.h> | |
8 | ||
9 | #define RARP_PKT_SIZE 64 | |
f67539c2 | 10 | struct rte_mbuf * |
11fdf7f2 | 11 | rte_net_make_rarp_packet(struct rte_mempool *mpool, |
f67539c2 | 12 | const struct rte_ether_addr *mac) |
11fdf7f2 | 13 | { |
f67539c2 TL |
14 | struct rte_ether_hdr *eth_hdr; |
15 | struct rte_arp_hdr *rarp; | |
11fdf7f2 TL |
16 | struct rte_mbuf *mbuf; |
17 | ||
18 | if (mpool == NULL) | |
19 | return NULL; | |
20 | ||
21 | mbuf = rte_pktmbuf_alloc(mpool); | |
22 | if (mbuf == NULL) | |
23 | return NULL; | |
24 | ||
f67539c2 TL |
25 | eth_hdr = (struct rte_ether_hdr *) |
26 | rte_pktmbuf_append(mbuf, RARP_PKT_SIZE); | |
11fdf7f2 TL |
27 | if (eth_hdr == NULL) { |
28 | rte_pktmbuf_free(mbuf); | |
29 | return NULL; | |
30 | } | |
31 | ||
32 | /* Ethernet header. */ | |
f67539c2 TL |
33 | memset(eth_hdr->d_addr.addr_bytes, 0xff, RTE_ETHER_ADDR_LEN); |
34 | rte_ether_addr_copy(mac, ð_hdr->s_addr); | |
35 | eth_hdr->ether_type = htons(RTE_ETHER_TYPE_RARP); | |
11fdf7f2 TL |
36 | |
37 | /* RARP header. */ | |
f67539c2 TL |
38 | rarp = (struct rte_arp_hdr *)(eth_hdr + 1); |
39 | rarp->arp_hardware = htons(RTE_ARP_HRD_ETHER); | |
40 | rarp->arp_protocol = htons(RTE_ETHER_TYPE_IPV4); | |
41 | rarp->arp_hlen = RTE_ETHER_ADDR_LEN; | |
42 | rarp->arp_plen = 4; | |
43 | rarp->arp_opcode = htons(RTE_ARP_OP_REVREQUEST); | |
44 | ||
45 | rte_ether_addr_copy(mac, &rarp->arp_data.arp_sha); | |
46 | rte_ether_addr_copy(mac, &rarp->arp_data.arp_tha); | |
11fdf7f2 TL |
47 | memset(&rarp->arp_data.arp_sip, 0x00, 4); |
48 | memset(&rarp->arp_data.arp_tip, 0x00, 4); | |
49 | ||
50 | return mbuf; | |
51 | } |