99a2dd955f
There is no reason for the DPDK libraries to all have 'librte_' prefix on the directory names. This prefix makes the directory names longer and also makes it awkward to add features referring to individual libraries in the build - should the lib names be specified with or without the prefix. Therefore, we can just remove the library prefix and use the library's unique name as the directory name, i.e. 'eal' rather than 'librte_eal' Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
51 lines
1.3 KiB
C
51 lines
1.3 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright(c) 2018 Intel Corporation
|
|
*/
|
|
|
|
#include <rte_arp.h>
|
|
#include <rte_byteorder.h>
|
|
|
|
#define RARP_PKT_SIZE 64
|
|
struct rte_mbuf *
|
|
rte_net_make_rarp_packet(struct rte_mempool *mpool,
|
|
const struct rte_ether_addr *mac)
|
|
{
|
|
struct rte_ether_hdr *eth_hdr;
|
|
struct rte_arp_hdr *rarp;
|
|
struct rte_mbuf *mbuf;
|
|
|
|
if (mpool == NULL)
|
|
return NULL;
|
|
|
|
mbuf = rte_pktmbuf_alloc(mpool);
|
|
if (mbuf == NULL)
|
|
return NULL;
|
|
|
|
eth_hdr = (struct rte_ether_hdr *)
|
|
rte_pktmbuf_append(mbuf, RARP_PKT_SIZE);
|
|
if (eth_hdr == NULL) {
|
|
rte_pktmbuf_free(mbuf);
|
|
return NULL;
|
|
}
|
|
|
|
/* Ethernet header. */
|
|
memset(eth_hdr->d_addr.addr_bytes, 0xff, RTE_ETHER_ADDR_LEN);
|
|
rte_ether_addr_copy(mac, ð_hdr->s_addr);
|
|
eth_hdr->ether_type = RTE_BE16(RTE_ETHER_TYPE_RARP);
|
|
|
|
/* RARP header. */
|
|
rarp = (struct rte_arp_hdr *)(eth_hdr + 1);
|
|
rarp->arp_hardware = RTE_BE16(RTE_ARP_HRD_ETHER);
|
|
rarp->arp_protocol = RTE_BE16(RTE_ETHER_TYPE_IPV4);
|
|
rarp->arp_hlen = RTE_ETHER_ADDR_LEN;
|
|
rarp->arp_plen = 4;
|
|
rarp->arp_opcode = RTE_BE16(RTE_ARP_OP_REVREQUEST);
|
|
|
|
rte_ether_addr_copy(mac, &rarp->arp_data.arp_sha);
|
|
rte_ether_addr_copy(mac, &rarp->arp_data.arp_tha);
|
|
memset(&rarp->arp_data.arp_sip, 0x00, 4);
|
|
memset(&rarp->arp_data.arp_tip, 0x00, 4);
|
|
|
|
return mbuf;
|
|
}
|