DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ray Kinsella <mdr@ashroe.eu>
To: Stephen Hemminger <stephen@networkplumber.org>
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] RFC - adding filter to packet capture API
Date: Mon, 9 Dec 2019 10:24:06 +0000	[thread overview]
Message-ID: <0d591a40-4f1a-4982-1c34-56ab07e24f91@ashroe.eu> (raw)
In-Reply-To: <20191206141114.6b7d6d60@hermes.lan>



On 06/12/2019 22:11, Stephen Hemminger wrote:
> In the process of updating packet capture to take a filter program, there
> is one open question about API/ABI.
> 
> The example is:
> 
> int
> rte_pdump_enable(uint16_t port, uint16_t queue, uint32_t flags,
> 		struct rte_ring *ring,
> 		struct rte_mempool *mp,
> 		void *filter);
> 
> For the new version want to add ability to pass a BPF (classic) program
> from libcap. This is described in most pcap API's as "struct bpf_program".
> 
> The filter parameter was left as a placeholder, but in typical YAGNI
> fashion. When we do need to use it, it is not going to work out.
> 
> Since the existing filter argument was never used, there are a bunch
> of options (in order from best to worse).
> 
> 1. Introduce new API which takes a filter. 
> 
> int
> rte_pdump_enable_bpf(uint16_t port, uint16_t queue, uint32_t flags,
> 		struct rte_ring *ring,
> 		struct rte_mempool *mp,
> 		const struct bpf_program *filter);
> 
> The old API is just the same as calling new API with NULL as filter.
> This solution is safe but adds minor bloat.
> 
> 2. Use API versioning.  This solves the ABI problem but it is still
>    an API breakage since program that was passing junk would still
>    not compile.

I honestly think this is the best option.
Our commitment with ABI Stability is only not to break applications linked against 19.11.

If someone is rebuilding against v20.02 and is passing something into the void *.
It is probably no-harm the compiler is giving them an FYI that things have changed.

> 
> 3. Change the function signature of existing API. This risks breaking
>    at compile time some program that was passing some other value.
>    Similarly, a program could have passed garbage, we never checked.
> 
> 4. Keep existing function signature, but be type unsafe.
>    This keeps API, but still is ABI breakage for programs that passed
>    garbage. Plus C is unsafe enough already.

True, but implementing ABI versioning is really trivial in this case, and avoids this.

  reply	other threads:[~2019-12-09 10:24 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-06 22:11 Stephen Hemminger
2019-12-09 10:24 ` Ray Kinsella [this message]
2019-12-09 13:41 ` Ananyev, Konstantin
2019-12-09 16:49   ` Stephen Hemminger
2019-12-11 20:13   ` Morten Brørup

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0d591a40-4f1a-4982-1c34-56ab07e24f91@ashroe.eu \
    --to=mdr@ashroe.eu \
    --cc=dev@dpdk.org \
    --cc=stephen@networkplumber.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).