From: Thomas Monjalon <thomas@monjalon.net>
To: dev@dpdk.org
Cc: ferruh.yigit@intel.com, david.marchand@redhat.com,
bruce.richardson@intel.com, olivier.matz@6wind.com,
andrew.rybchenko@oktetlabs.ru, akhil.goyal@nxp.com
Subject: [dpdk-dev] [PATCH v3 00/15] remove mbuf userdata
Date: Tue, 27 Oct 2020 22:01:00 +0100 [thread overview]
Message-ID: <20201027210115.2529025-1-thomas@monjalon.net> (raw)
In-Reply-To: <20201026052105.1561859-1-thomas@monjalon.net>
The mbuf field userdata (aliased as udata64)
was announced to be removed for two reasons:
- applications, libraries and drivers used the same field
for different purposes, with a risk of usage conflict.
- this field always used 8 bytes even if unneeded
Some dynamic fields are created when needed to replace
the big static userdata field.
As a consequence, 8 bytes can be re-allocated to dynamic fields.
This mbuf layout change is important to allow adding more features
(consuming more dynamic fields) during the next year.
v3 (thanks Olivier):
- use typedef for new field types
- fix node field type
- initialize offsets to -1
- add more inline functions
- inline rte_security_dynfield_is_registered
- add PMD-specific userdata field for ARK
v2 (thanks David & Andrew):
- fix some indentations
- return -rte_errno consistently
- make some type casts more precise
- define dynfield types in macros
- hide field description in rte_security
- do not lookup security dynfield in ipsec-secgw
- do not use the existing timestamp field for other purpose
Thomas Monjalon (15):
examples: enclose DPDK includes with angle brackets
kni: move header file from EAL
mbuf: fix typo in dynamic field convention note
node: switch IPv4 metadata to dynamic mbuf field
security: switch metadata to dynamic mbuf field
event/sw: switch test counter to dynamic mbuf field
net/ark: switch user data to dynamic mbuf field
net/bnxt: switch CFA code to dynamic mbuf field
net/vmxnet3: switch MSS hint to dynamic mbuf field
test/distributor: switch sequence to dynamic mbuf field
test/graph: switch user data to dynamic mbuf field
app/eventdev: switch flow ID to dynamic mbuf field
examples/bbdev: switch to dynamic mbuf field
examples/rxtx_callbacks: switch to dynamic mbuf field
mbuf: remove userdata field
app/test-eventdev/test_order_atq.c | 4 +-
app/test-eventdev/test_order_common.c | 21 ++++-
app/test-eventdev/test_order_common.h | 19 ++++
app/test-eventdev/test_order_queue.c | 4 +-
app/test/test_distributor.c | 28 +++++-
app/test/test_graph.c | 94 +++++++++++--------
doc/api/doxy-api-index.md | 1 +
doc/api/doxy-api.conf.in | 1 +
doc/guides/prog_guide/rte_security.rst | 9 +-
doc/guides/rel_notes/deprecation.rst | 1 -
doc/guides/rel_notes/release_20_11.rst | 3 +
doc/guides/sample_app_ug/rxtx_callbacks.rst | 4 +-
drivers/crypto/octeontx2/otx2_cryptodev_sec.c | 5 +-
drivers/event/sw/sw_evdev_selftest.c | 23 ++++-
drivers/net/ark/ark_ethdev.c | 18 ++++
drivers/net/ark/ark_ethdev_rx.c | 3 +-
drivers/net/ark/ark_ethdev_tx.c | 3 +-
drivers/net/ark/rte_pmd_ark.h | 56 +++++++++++
drivers/net/bnxt/bnxt_ethdev.c | 19 ++++
drivers/net/bnxt/bnxt_rxr.c | 2 +-
drivers/net/bnxt/bnxt_rxr.h | 5 +
drivers/net/bnxt/rte_pmd_bnxt.h | 3 +
drivers/net/ixgbe/ixgbe_ipsec.c | 5 +-
drivers/net/ixgbe/ixgbe_rxtx.c | 6 +-
drivers/net/octeontx2/otx2_ethdev.h | 1 +
drivers/net/octeontx2/otx2_ethdev_sec.c | 5 +-
drivers/net/octeontx2/otx2_ethdev_sec_tx.h | 2 +-
drivers/net/octeontx2/otx2_rx.h | 2 +-
drivers/net/vmxnet3/vmxnet3_ethdev.c | 15 +++
drivers/net/vmxnet3/vmxnet3_ethdev.h | 6 ++
drivers/net/vmxnet3/vmxnet3_rxtx.c | 9 +-
examples/bbdev_app/main.c | 79 +++++++++++-----
examples/bond/main.c | 11 +--
examples/ipsec-secgw/ipsec-secgw.c | 9 +-
examples/ipsec-secgw/ipsec_worker.c | 12 ++-
examples/rxtx_callbacks/main.c | 20 +++-
examples/tep_termination/vxlan_setup.c | 2 +-
kernel/linux/kni/meson.build | 2 +-
lib/librte_eal/linux/include/meson.build | 1 -
lib/librte_kni/meson.build | 2 +-
.../include => librte_kni}/rte_kni_common.h | 3 +-
lib/librte_mbuf/rte_mbuf_core.h | 8 +-
lib/librte_mbuf/rte_mbuf_dyn.h | 2 +-
lib/librte_node/ip4_lookup.c | 7 ++
lib/librte_node/ip4_rewrite.c | 10 ++
lib/librte_node/node_private.h | 12 ++-
lib/librte_security/rte_security.c | 16 ++++
lib/librte_security/rte_security.h | 42 +++++++++
lib/librte_security/rte_security_driver.h | 3 +
lib/librte_security/version.map | 2 +
50 files changed, 485 insertions(+), 135 deletions(-)
create mode 100644 drivers/net/ark/rte_pmd_ark.h
rename lib/{librte_eal/linux/include => librte_kni}/rte_kni_common.h (97%)
--
2.28.0
next prev parent reply other threads:[~2020-10-27 21:01 UTC|newest]
Thread overview: 178+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-26 5:20 [dpdk-dev] [PATCH " Thomas Monjalon
2020-10-26 5:20 ` [dpdk-dev] [PATCH 01/15] examples: enclose DPDK includes with angle brackets Thomas Monjalon
2020-10-26 14:23 ` Andrew Rybchenko
2020-10-27 11:32 ` Bruce Richardson
2020-10-26 5:20 ` [dpdk-dev] [PATCH 02/15] kni: move header file from EAL Thomas Monjalon
2020-10-26 14:25 ` Andrew Rybchenko
2020-10-27 11:33 ` Bruce Richardson
2020-10-26 5:20 ` [dpdk-dev] [PATCH 03/15] mbuf: fix typo in dynamic field convention note Thomas Monjalon
2020-10-26 14:26 ` Andrew Rybchenko
2020-10-26 5:20 ` [dpdk-dev] [PATCH 04/15] node: switch IPv4 metadata to dynamic mbuf field Thomas Monjalon
2020-10-26 10:40 ` David Marchand
2020-10-26 14:29 ` Thomas Monjalon
2020-10-26 14:34 ` Andrew Rybchenko
2020-10-26 14:39 ` Thomas Monjalon
2020-10-26 5:20 ` [dpdk-dev] [PATCH 05/15] security: switch " Thomas Monjalon
2020-10-26 10:41 ` David Marchand
2020-10-26 14:30 ` Thomas Monjalon
2020-10-26 17:58 ` Akhil Goyal
2020-10-26 15:06 ` Andrew Rybchenko
2020-10-26 16:49 ` Thomas Monjalon
2020-10-26 19:03 ` Thomas Monjalon
2020-10-26 5:20 ` [dpdk-dev] [PATCH 06/15] event/sw: switch test counter " Thomas Monjalon
2020-10-26 15:09 ` Andrew Rybchenko
2020-10-26 5:20 ` [dpdk-dev] [PATCH 07/15] net/ark: ignore user data Thomas Monjalon
2020-10-26 5:20 ` [dpdk-dev] [PATCH 08/15] net/bnxt: switch CFA code to dynamic mbuf field Thomas Monjalon
2020-10-26 10:42 ` David Marchand
2020-10-26 14:32 ` Thomas Monjalon
2020-10-26 5:20 ` [dpdk-dev] [PATCH 09/15] net/vmxnet3: switch MSS hint " Thomas Monjalon
2020-10-26 15:14 ` Andrew Rybchenko
2020-10-26 15:21 ` Andrew Rybchenko
2020-10-26 16:50 ` Thomas Monjalon
2020-10-26 18:13 ` Thomas Monjalon
2020-10-26 5:21 ` [dpdk-dev] [PATCH 10/15] test/distributor: switch sequence " Thomas Monjalon
2020-10-26 9:39 ` Lukasz Wojciechowski
2020-10-26 5:21 ` [dpdk-dev] [PATCH 11/15] test/graph: switch user data " Thomas Monjalon
2020-10-26 5:21 ` [dpdk-dev] [PATCH 12/15] app/eventdev: switch flow ID " Thomas Monjalon
2020-10-26 5:21 ` [dpdk-dev] [PATCH 13/15] examples/bbdev: switch " Thomas Monjalon
2020-10-26 5:21 ` [dpdk-dev] [PATCH 14/15] examples/rxtx_callbacks: " Thomas Monjalon
2020-10-26 10:43 ` David Marchand
2020-10-26 14:33 ` Thomas Monjalon
2020-10-26 14:53 ` Stephen Hemminger
2020-10-26 16:32 ` Thomas Monjalon
2020-10-26 5:21 ` [dpdk-dev] [PATCH 15/15] mbuf: remove userdata field Thomas Monjalon
2020-10-26 22:19 ` [dpdk-dev] [PATCH v2 00/15] remove mbuf userdata Thomas Monjalon
2020-10-26 22:19 ` [dpdk-dev] [PATCH v2 01/15] examples: enclose DPDK includes with angle brackets Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 02/15] kni: move header file from EAL Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 03/15] mbuf: fix typo in dynamic field convention note Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 04/15] node: switch IPv4 metadata to dynamic mbuf field Thomas Monjalon
2020-10-27 9:32 ` Olivier Matz
2020-10-27 9:34 ` Thomas Monjalon
2020-10-27 14:23 ` Nithin Dabilpuram
2020-10-27 14:33 ` Thomas Monjalon
2020-10-27 15:33 ` Nithin Dabilpuram
2020-10-27 15:57 ` Thomas Monjalon
2020-10-27 16:16 ` Nithin Dabilpuram
2020-10-27 16:26 ` Thomas Monjalon
2020-10-28 9:30 ` [dpdk-dev] [PATCH v4] " Nithin Dabilpuram
2020-10-28 10:08 ` Thomas Monjalon
2020-10-28 10:24 ` Van Haaren, Harry
2020-10-28 10:42 ` Nithin Dabilpuram
2020-10-28 10:43 ` Thomas Monjalon
2020-10-28 18:07 ` Thomas Monjalon
2020-10-29 10:17 ` Van Haaren, Harry
2020-10-28 10:33 ` Nithin Dabilpuram
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 05/15] security: switch " Thomas Monjalon
2020-10-27 2:01 ` Wang, Haiyue
2020-10-27 8:52 ` Thomas Monjalon
2020-10-27 13:12 ` Wang, Haiyue
2020-10-27 10:05 ` Olivier Matz
2020-10-27 16:10 ` Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 06/15] event/sw: switch test counter " Thomas Monjalon
2020-10-27 10:15 ` Olivier Matz
2020-10-27 16:14 ` Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 07/15] net/ark: ignore user data Thomas Monjalon
2020-10-27 15:32 ` Ed Czeck
2020-10-27 15:55 ` Thomas Monjalon
2020-10-27 16:05 ` Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 08/15] net/bnxt: switch CFA code to dynamic mbuf field Thomas Monjalon
2020-10-27 4:44 ` Ajit Khaparde
2020-10-27 10:31 ` Olivier Matz
2020-10-27 16:22 ` Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 09/15] net/vmxnet3: switch MSS hint " Thomas Monjalon
2020-10-27 10:45 ` Olivier Matz
2020-10-27 16:25 ` Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 10/15] test/distributor: switch sequence " Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 11/15] test/graph: switch user data " Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 12/15] app/eventdev: switch flow ID " Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 13/15] examples/bbdev: switch " Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 14/15] examples/rxtx_callbacks: " Thomas Monjalon
2020-10-26 22:20 ` [dpdk-dev] [PATCH v2 15/15] mbuf: remove userdata field Thomas Monjalon
2020-10-27 10:53 ` Olivier Matz
2020-10-27 21:01 ` Thomas Monjalon [this message]
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 01/15] examples: enclose DPDK includes with angle brackets Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 02/15] kni: move header file from EAL Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 03/15] mbuf: fix typo in dynamic field convention note Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 04/15] node: switch IPv4 metadata to dynamic mbuf field Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 05/15] security: switch " Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 06/15] event/sw: switch test counter " Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 07/15] net/ark: switch user data " Thomas Monjalon
2020-10-27 22:30 ` Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 08/15] net/bnxt: switch CFA code " Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 09/15] net/vmxnet3: switch MSS hint " Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 10/15] test/distributor: switch sequence " Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 11/15] test/graph: switch user data " Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 12/15] app/eventdev: switch flow ID " Thomas Monjalon
2020-10-28 4:54 ` Jerin Jacob
2020-10-28 7:43 ` Thomas Monjalon
2020-10-28 8:06 ` Jerin Jacob
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 13/15] examples/bbdev: switch " Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 14/15] examples/rxtx_callbacks: " Thomas Monjalon
2020-10-27 21:01 ` [dpdk-dev] [PATCH v3 15/15] mbuf: remove userdata field Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 00/15] remove mbuf userdata Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 01/15] examples: enclose DPDK includes with angle brackets Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 02/15] kni: move header file from EAL Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 03/15] mbuf: fix typo in dynamic field convention note Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 04/15] node: switch IPv4 metadata to dynamic mbuf field Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 05/15] security: switch " Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 06/15] event/sw: switch test counter " Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 07/15] net/ark: switch user data to dynamic mbuf fields Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 08/15] net/bnxt: switch CFA code to dynamic mbuf field Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 09/15] net/vmxnet3: switch MSS hint " Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 10/15] test/distributor: switch sequence " Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 11/15] test/graph: switch user data " Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 12/15] app/eventdev: switch flow ID " Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 13/15] examples/bbdev: switch " Thomas Monjalon
2020-10-28 11:51 ` Andrew Rybchenko
2020-10-28 12:21 ` Thomas Monjalon
2020-10-28 12:55 ` Andrew Rybchenko
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 14/15] examples/rxtx_callbacks: " Thomas Monjalon
2020-10-28 10:26 ` [dpdk-dev] [PATCH v4 15/15] mbuf: remove userdata field Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 00/15] remove mbuf userdata Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 01/15] eventdev: remove software Rx timestamp Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 02/15] mbuf: add Rx timestamp dynamic flag Thomas Monjalon
2020-11-01 20:03 ` Andrew Rybchenko
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 03/15] ethdev: register mbuf field and flags for timestamp Thomas Monjalon
2020-11-01 20:10 ` Andrew Rybchenko
2020-11-01 22:54 ` Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 04/15] latency: switch timestamp to dynamic mbuf field Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 05/15] net/ark: " Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 06/15] net/dpaa2: " Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 07/15] net/mlx5: fix dynamic mbuf offset lookup check Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 08/15] net/mlx5: switch timestamp to dynamic mbuf field Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 09/15] net/nfb: " Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 10/15] net/octeontx2: " Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 11/15] net/pcap: " Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 12/15] app/testpmd: " Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 13/15] examples/rxtx_callbacks: switch timestamp to dynamic field Thomas Monjalon
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 14/15] mbuf: remove deprecated timestamp field Thomas Monjalon
2020-11-01 20:13 ` Andrew Rybchenko
2020-10-30 17:29 ` [dpdk-dev] [PATCH v5 15/15] mbuf: move pool pointer in hotter first half Thomas Monjalon
2020-11-01 20:23 ` Andrew Rybchenko
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 00/15] remove mbuf userdata Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 01/15] examples: enclose DPDK includes with angle brackets Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 02/15] kni: move header file from EAL Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 03/15] mbuf: fix typo in dynamic field convention note Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 04/15] node: switch IPv4 metadata to dynamic mbuf field Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 05/15] security: switch " Thomas Monjalon
2020-10-31 8:56 ` David Marchand
2020-10-31 9:26 ` David Marchand
2020-10-31 14:38 ` Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 06/15] event/sw: switch test counter " Thomas Monjalon
2020-10-30 18:53 ` Van Haaren, Harry
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 07/15] net/ark: switch user data to dynamic mbuf fields Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 08/15] net/bnxt: switch CFA code to dynamic mbuf field Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 09/15] net/vmxnet3: switch MSS hint " Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 10/15] test/distributor: switch sequence " Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 11/15] test/graph: switch user data " Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 12/15] app/eventdev: switch flow ID " Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 13/15] examples/bbdev: switch " Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 14/15] examples/rxtx_callbacks: switch TSC to dynamic field Thomas Monjalon
2020-10-30 17:44 ` [dpdk-dev] [PATCH v6 15/15] mbuf: remove userdata field Thomas Monjalon
2020-10-31 15:07 ` [dpdk-dev] [PATCH v6 00/15] remove mbuf userdata Thomas Monjalon
2020-10-31 23:36 ` Ferruh Yigit
2020-11-01 9:15 ` Thomas Monjalon
2020-11-01 10:26 ` David Marchand
2020-11-02 9:11 ` Jiawen Wu
2020-11-02 11:08 ` Ferruh Yigit
2020-11-02 11:58 ` Ferruh Yigit
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=20201027210115.2529025-1-thomas@monjalon.net \
--to=thomas@monjalon.net \
--cc=akhil.goyal@nxp.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=bruce.richardson@intel.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=olivier.matz@6wind.com \
/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).