cfe3aeb170
We had some inconsistencies between functions prototypes and actual definitions. Let's avoid this by only adding the experimental tag to the prototypes. Tests with gcc and clang show it is enough. git grep -l __rte_experimental |grep \.c$ |while read file; do sed -i -e '/^__rte_experimental$/d' $file; sed -i -e 's/ *__rte_experimental//' $file; sed -i -e 's/__rte_experimental *//' $file; done Signed-off-by: David Marchand <david.marchand@redhat.com> Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> Acked-by: Neil Horman <nhorman@tuxdriver.com>
52 lines
1.2 KiB
C
52 lines
1.2 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright(c) 2018 Intel Corporation
|
|
*/
|
|
|
|
#include <arpa/inet.h>
|
|
|
|
#include <rte_arp.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 = htons(RTE_ETHER_TYPE_RARP);
|
|
|
|
/* RARP header. */
|
|
rarp = (struct rte_arp_hdr *)(eth_hdr + 1);
|
|
rarp->arp_hardware = htons(RTE_ARP_HRD_ETHER);
|
|
rarp->arp_protocol = htons(RTE_ETHER_TYPE_IPV4);
|
|
rarp->arp_hlen = RTE_ETHER_ADDR_LEN;
|
|
rarp->arp_plen = 4;
|
|
rarp->arp_opcode = htons(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;
|
|
}
|