18218713bf
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>
122 lines
3.5 KiB
C
122 lines
3.5 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright(c) 2018 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _RTE_BPF_ETHDEV_H_
|
|
#define _RTE_BPF_ETHDEV_H_
|
|
|
|
/**
|
|
* @file rte_bpf_ethdev.h
|
|
* @b EXPERIMENTAL: this API may change without prior notice
|
|
*
|
|
* API to install BPF filter as RX/TX callbacks for eth devices.
|
|
* Note that right now:
|
|
* - it is not MT safe, i.e. it is not allowed to do load/unload for the
|
|
* same port/queue from different threads in parallel.
|
|
* - though it allows to do load/unload at runtime
|
|
* (while RX/TX is ongoing on given port/queue).
|
|
* - allows only one BPF program per port/queue,
|
|
* i.e. new load will replace previously loaded for that port/queue BPF program.
|
|
* Filter behaviour - if BPF program returns zero value for a given packet,
|
|
* then it will be dropped inside callback and no further processing
|
|
* on RX - it will be dropped inside callback and no further processing
|
|
* for that packet will happen.
|
|
* on TX - packet will remain unsent, and it is responsibility of the user
|
|
* to handle such situation (drop, try to send again, etc.).
|
|
*/
|
|
|
|
#include <rte_bpf.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
enum {
|
|
RTE_BPF_ETH_F_NONE = 0,
|
|
RTE_BPF_ETH_F_JIT = 0x1, /*< use compiled into native ISA code */
|
|
};
|
|
|
|
/**
|
|
* Unload previously loaded BPF program (if any) from given RX port/queue
|
|
* and remove appropriate RX port/queue callback.
|
|
*
|
|
* @param port
|
|
* The identifier of the ethernet port
|
|
* @param queue
|
|
* The identifier of the RX queue on the given port
|
|
*/
|
|
__rte_experimental
|
|
void
|
|
rte_bpf_eth_rx_unload(uint16_t port, uint16_t queue);
|
|
|
|
/**
|
|
* Unload previously loaded BPF program (if any) from given TX port/queue
|
|
* and remove appropriate TX port/queue callback.
|
|
*
|
|
* @param port
|
|
* The identifier of the ethernet port
|
|
* @param queue
|
|
* The identifier of the TX queue on the given port
|
|
*/
|
|
__rte_experimental
|
|
void
|
|
rte_bpf_eth_tx_unload(uint16_t port, uint16_t queue);
|
|
|
|
/**
|
|
* Load BPF program from the ELF file and install callback to execute it
|
|
* on given RX port/queue.
|
|
*
|
|
* @param port
|
|
* The identifier of the ethernet port
|
|
* @param queue
|
|
* The identifier of the RX queue on the given port
|
|
* @param fname
|
|
* Pathname for a ELF file.
|
|
* @param sname
|
|
* Name of the executable section within the file to load.
|
|
* @param prm
|
|
* Parameters used to create and initialise the BPF execution context.
|
|
* @param flags
|
|
* Flags that define expected behavior of the loaded filter
|
|
* (i.e. jited/non-jited version to use).
|
|
* @return
|
|
* Zero on successful completion or negative error code otherwise.
|
|
*/
|
|
__rte_experimental
|
|
int
|
|
rte_bpf_eth_rx_elf_load(uint16_t port, uint16_t queue,
|
|
const struct rte_bpf_prm *prm, const char *fname, const char *sname,
|
|
uint32_t flags);
|
|
|
|
/**
|
|
* Load BPF program from the ELF file and install callback to execute it
|
|
* on given TX port/queue.
|
|
*
|
|
* @param port
|
|
* The identifier of the ethernet port
|
|
* @param queue
|
|
* The identifier of the TX queue on the given port
|
|
* @param fname
|
|
* Pathname for a ELF file.
|
|
* @param sname
|
|
* Name of the executable section within the file to load.
|
|
* @param prm
|
|
* Parameters used to create and initialise the BPF execution context.
|
|
* @param flags
|
|
* Flags that define expected expected behavior of the loaded filter
|
|
* (i.e. jited/non-jited version to use).
|
|
* @return
|
|
* Zero on successful completion or negative error code otherwise.
|
|
*/
|
|
__rte_experimental
|
|
int
|
|
rte_bpf_eth_tx_elf_load(uint16_t port, uint16_t queue,
|
|
const struct rte_bpf_prm *prm, const char *fname, const char *sname,
|
|
uint32_t flags);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _RTE_BPF_ETHDEV_H_ */
|