numam-dpdk/lib/librte_net/rte_arp.h
David Marchand 18218713bf enforce experimental tag at beginning of declarations
Putting a '__attribute__((deprecated))' in the middle of a function
prototype does not result in the expected result with gcc (while clang
is fine with this syntax).

$ cat deprecated.c
void * __attribute__((deprecated)) incorrect() { return 0; }
__attribute__((deprecated)) void *correct(void) { return 0; }
int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
$ gcc -o deprecated.o -c deprecated.c
deprecated.c: In function ‘main’:
deprecated.c:3:1: warning: ‘correct’ is deprecated (declared at
deprecated.c:2) [-Wdeprecated-declarations]
 int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
 ^

Move the tag on a separate line and make it the first thing of function
prototypes.
This is not perfect but we will trust reviewers to catch the other not
so easy to detect patterns.

sed -i \
     -e '/^\([^#].*\)\?__rte_experimental */{' \
     -e 's//\1/; s/ *$//; i\' \
     -e __rte_experimental \
     -e '/^$/d}' \
     $(git grep -l __rte_experimental -- '*.h')

Special mention for rte_mbuf_data_addr_default():

There is either a bug or a (not yet understood) issue with gcc.
gcc won't drop this inline when unused and rte_mbuf_data_addr_default()
calls rte_mbuf_buf_addr() which itself is experimental.
This results in a build warning when not accepting experimental apis
from sources just including rte_mbuf.h.

For this specific case, we hide the call to rte_mbuf_buf_addr() under
the ALLOW_EXPERIMENTAL_API flag.

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
2019-06-29 19:04:48 +02:00

76 lines
1.9 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2013 6WIND S.A.
*/
#ifndef _RTE_ARP_H_
#define _RTE_ARP_H_
/**
* @file
*
* ARP-related defines
*/
#include <stdint.h>
#include <rte_ether.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* ARP header IPv4 payload.
*/
struct rte_arp_ipv4 {
struct rte_ether_addr arp_sha; /**< sender hardware address */
uint32_t arp_sip; /**< sender IP address */
struct rte_ether_addr arp_tha; /**< target hardware address */
uint32_t arp_tip; /**< target IP address */
} __attribute__((__packed__));
/**
* ARP header.
*/
struct rte_arp_hdr {
uint16_t arp_hardware; /* format of hardware address */
#define RTE_ARP_HRD_ETHER 1 /* ARP Ethernet address format */
uint16_t arp_protocol; /* format of protocol address */
uint8_t arp_hlen; /* length of hardware address */
uint8_t arp_plen; /* length of protocol address */
uint16_t arp_opcode; /* ARP opcode (command) */
#define RTE_ARP_OP_REQUEST 1 /* request to resolve address */
#define RTE_ARP_OP_REPLY 2 /* response to previous request */
#define RTE_ARP_OP_REVREQUEST 3 /* request proto addr given hardware */
#define RTE_ARP_OP_REVREPLY 4 /* response giving protocol address */
#define RTE_ARP_OP_INVREQUEST 8 /* request to identify peer */
#define RTE_ARP_OP_INVREPLY 9 /* response identifying peer */
struct rte_arp_ipv4 arp_data;
} __attribute__((__packed__));
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice
*
* Make a RARP packet based on MAC addr.
*
* @param mpool
* Pointer to the rte_mempool
* @param mac
* Pointer to the MAC addr
*
* @return
* - RARP packet pointer on success, or NULL on error
*/
__rte_experimental
struct rte_mbuf *
rte_net_make_rarp_packet(struct rte_mempool *mpool,
const struct rte_ether_addr *mac);
#ifdef __cplusplus
}
#endif
#endif /* _RTE_ARP_H_ */