From: Thomas Monjalon <thomas@monjalon.net>
To: Stephen Hemminger <stephen@networkplumber.org>
Cc: dev@dpdk.org, Luca Boccassi <bluca@debian.org>,
David Marchand <david.marchand@redhat.com>
Subject: Re: [dpdk-dev] [PATCH 4/8] eal: replace pci-whitelist/pci-blacklist options
Date: Tue, 20 Oct 2020 14:43:20 +0200 [thread overview]
Message-ID: <9162316.KZ3Jag88Df@thomas> (raw)
In-Reply-To: <CAJFAV8xdj8cho5wJamfSRbDr8t79B66oq2fytenwXcPD3gj8ow@mail.gmail.com>
Ping Stephen,
Waiting a new version addressing these comments
before resuming the review.
Thanks
14/10/2020 18:07, David Marchand:
> On Tue, Sep 22, 2020 at 4:33 PM Stephen Hemminger
> <stephen@networkplumber.org> wrote:
> >
> > Replace -w / --pci-whitelist with -a / --allow options
> > and -b / --pci-blacklist with -b / --block.
>
> Looks like there is a mix or -a/-b and -i/-x from the previous proposal.
>
> This is what causes CI failure as I previously reported:
> http://inbox.dpdk.org/dev/CAJFAV8yCWg9YXKBiKsoEq7dHGr3PjbTGzHL_d1j5+Dp9GuXbOw@mail.gmail.com/
>
> I guess the intention of this patch is:
>
> '-b' / '--pci-blacklist' becomes '-b' / '--block' + warning on '--pci-blacklist'
> '-w' / '--pci-whitelist' becomes '-a' / '--allow' + warning on 'w' /
> '--pci-whitelist'
>
>
> Comments below.
>
>
> >
> > Allow the old options for now, but print a nag
> > warning since old options are deprecated.
> >
> > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> > Acked-by: Luca Boccassi <bluca@debian.org>
> > ---
> > lib/librte_eal/common/eal_common_options.c | 70 +++++++++++++---------
> > lib/librte_eal/common/eal_options.h | 9 ++-
> > 2 files changed, 51 insertions(+), 28 deletions(-)
> >
> > diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
> > index a5426e12346a..4e54512c874c 100644
> > --- a/lib/librte_eal/common/eal_common_options.c
> > +++ b/lib/librte_eal/common/eal_common_options.c
> > @@ -51,7 +51,8 @@
> >
> > const char
> > eal_short_options[] =
> > - "b:" /* pci-blacklist */
> > + "a:" /* allow */
> > + "b:" /* block */
> > "c:" /* coremask */
> > "s:" /* service coremask */
> > "d:" /* driver */
> > @@ -62,7 +63,7 @@ eal_short_options[] =
> > "n:" /* memory channels */
> > "r:" /* memory ranks */
> > "v" /* version */
> > - "w:" /* pci-whitelist */
> > + "w:" /* whitelist (deprecated) */
> > ;
> >
> > const struct option
> > @@ -87,8 +88,8 @@ eal_long_options[] = {
> > {OPT_NO_PCI, 0, NULL, OPT_NO_PCI_NUM },
> > {OPT_NO_SHCONF, 0, NULL, OPT_NO_SHCONF_NUM },
> > {OPT_IN_MEMORY, 0, NULL, OPT_IN_MEMORY_NUM },
> > - {OPT_PCI_BLACKLIST, 1, NULL, OPT_PCI_BLACKLIST_NUM },
> > - {OPT_PCI_WHITELIST, 1, NULL, OPT_PCI_WHITELIST_NUM },
> > + {OPT_DEV_BLOCK, 1, NULL, OPT_DEV_BLOCK_NUM },
> > + {OPT_DEV_ALLOW, 1, NULL, OPT_DEV_ALLOW_NUM },
> > {OPT_PROC_TYPE, 1, NULL, OPT_PROC_TYPE_NUM },
> > {OPT_SOCKET_MEM, 1, NULL, OPT_SOCKET_MEM_NUM },
> > {OPT_SOCKET_LIMIT, 1, NULL, OPT_SOCKET_LIMIT_NUM },
> > @@ -102,6 +103,11 @@ eal_long_options[] = {
> > {OPT_MATCH_ALLOCATIONS, 0, NULL, OPT_MATCH_ALLOCATIONS_NUM},
> > {OPT_TELEMETRY, 0, NULL, OPT_TELEMETRY_NUM },
> > {OPT_NO_TELEMETRY, 0, NULL, OPT_NO_TELEMETRY_NUM },
> > +
> > + /* legacy options that will be removed in next LTS */
> > + {OPT_PCI_BLACKLIST, 1, NULL, OPT_PCI_BLACKLIST_NUM },
> > + {OPT_PCI_WHITELIST, 1, NULL, OPT_PCI_WHITELIST_NUM },
> > +
> > {0, 0, NULL, 0 }
> > };
> >
> > @@ -1414,29 +1420,38 @@ int
> > eal_parse_common_option(int opt, const char *optarg,
> > struct internal_config *conf)
> > {
> > - static int b_used;
> > - static int w_used;
> > + static bool x_used, i_used;
>
> Previously the variables matched the short options.
> It should be a_used and b_used.
>
>
> >
> > switch (opt) {
> > - /* blacklist */
> > + /* deprecated option */
> > case 'b':
>
> Should be
> case OPT_PCI_BLACKLIST_NUM:
>
> > - if (w_used)
> > - goto bw_used;
> > - if (eal_option_device_add(RTE_DEVTYPE_BLACKLISTED_PCI,
> > + fprintf(stderr,
> > + "Option -b, --blacklist is deprecated, use -x, --exclude option instead\n");
>
> We keep the -b option as is, don't complain about it.
>
> Plus, the previous option was not --blacklist but --pci-blacklist.
> Please use "--"OPT_PCI_BLACKLIST.
>
>
>
> > + /* fallthrough */
> > + case 'x':
> > + /* excluded list */
>
> Should be
> case 'b':
> /* block list */
>
> > + if (i_used)
> > + goto include_exclude;
> > + if (eal_option_device_add(RTE_DEVTYPE_BLOCKED,
> > optarg) < 0) {
> > return -1;
> > }
> > - b_used = 1;
> > + x_used = true;
> > break;
> > - /* whitelist */
> > +
> > case 'w':
> > - if (b_used)
> > - goto bw_used;
> > - if (eal_option_device_add(RTE_DEVTYPE_WHITELISTED_PCI,
> > + fprintf(stderr,
> > + "Option -w, --whitelist is deprecated, use -i, --include option instead\n");
>
> Plus, the previous option was not --whitelist but --pci-whitelist.
> Please use "--"OPT_PCI_WHITELIST.
>
> The new option is '-a' not '-i'.
>
>
>
> > + /* fallthrough */
> > + case 'i':
> > + /* include device list */
>
> Should be
> case 'a':
> /* allow list */
>
> etc...
>
>
> > + if (x_used)
> > + goto include_exclude;
> > + if (eal_option_device_add(RTE_DEVTYPE_ALLOWED,
> > optarg) < 0) {
> > return -1;
> > }
> > - w_used = 1;
> > + i_used = true;
> > break;
> > /* coremask */
> > case 'c': {
> > @@ -1715,9 +1730,10 @@ eal_parse_common_option(int opt, const char *optarg,
> > }
> >
> > return 0;
> > -bw_used:
> > - RTE_LOG(ERR, EAL, "Options blacklist (-b) and whitelist (-w) "
> > - "cannot be used at the same time\n");
> > +
> > +include_exclude:
> > + RTE_LOG(ERR, EAL,
> > + "Options include (-i) and exclude (-x) can't be used at the same time\n");
>
> -a / -b
>
>
> > return -1;
> > }
> >
> > @@ -1926,14 +1942,14 @@ eal_common_usage(void)
> > " -n CHANNELS Number of memory channels\n"
> > " -m MB Memory to allocate (see also --"OPT_SOCKET_MEM")\n"
> > " -r RANKS Force number of memory ranks (don't detect)\n"
> > - " -b, --"OPT_PCI_BLACKLIST" Add a PCI device in black list.\n"
> > - " Prevent EAL from using this PCI device. The argument\n"
> > - " format is <domain:bus:devid.func>.\n"
> > - " -w, --"OPT_PCI_WHITELIST" Add a PCI device in white list.\n"
> > - " Only use the specified PCI devices. The argument format\n"
> > - " is <[domain:]bus:devid.func>. This option can be present\n"
> > - " several times (once per device).\n"
> > - " [NOTE: PCI whitelist cannot be used with -b option]\n"
> > + " -b, --"OPT_DEV_BLOCK" Add a device to the excluded list.\n"
> > + " Prevent EAL from using this device. The argument\n"
> > + " format for PCI devices is <domain:bus:devid.func>.\n"
> > + " -a, --"OPT_DEV_ALLOW" Add a device to the included list.\n"
> > + " Only use the specified devices. The argument format\n"
> > + " for PCI devices is <[domain:]bus:devid.func>.\n"
> > + " This option can be present several times.\n"
> > + " [NOTE: " OPT_DEV_ALLOW " cannot be used with "OPT_DEV_BLOCK" option]\n"
> > " --"OPT_VDEV" Add a virtual device.\n"
> > " The argument format is <driver><id>[,key=val,...]\n"
> > " (ex: --vdev=net_pcap0,iface=eth2).\n"
> > diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h
> > index 89769d48b487..fc0fe2258a32 100644
> > --- a/lib/librte_eal/common/eal_options.h
> > +++ b/lib/librte_eal/common/eal_options.h
> > @@ -13,8 +13,15 @@ enum {
> > /* long options mapped to a short option */
> > #define OPT_HELP "help"
> > OPT_HELP_NUM = 'h',
> > +#define OPT_DEV_ALLOW "allow"
> > + OPT_DEV_ALLOW_NUM = 'a',
> > +#define OPT_DEV_BLOCK "block"
> > + OPT_DEV_BLOCK_NUM = 'b',
>
> Fix indent.
>
>
> > +
> > + /* legacy options that will be removed in next LTS */
> > #define OPT_PCI_BLACKLIST "pci-blacklist"
> > - OPT_PCI_BLACKLIST_NUM = 'b',
> > +#define OPT_PCI_BLACKLIST_NUM OPT_DEV_BLOCK_NUM
>
> Move OPT_PCI_BLACKLIST_NUM as a long-only option.
> This way we can differentiate it from the 'b' short option that has
> been preserved.
>
>
> > +
> > #define OPT_PCI_WHITELIST "pci-whitelist"
> > OPT_PCI_WHITELIST_NUM = 'w',
> >
> > --
> > 2.27.0
> >
>
>
>
next prev parent reply other threads:[~2020-10-20 12:43 UTC|newest]
Thread overview: 117+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-22 14:31 [dpdk-dev] [PATCH 0/8] replace blacklist/whitelist with block/allow Stephen Hemminger
2020-09-22 14:31 ` [dpdk-dev] [PATCH 1/8] eal: add macro to mark macros as deprecated Stephen Hemminger
2020-09-23 9:18 ` Burakov, Anatoly
2020-09-23 17:01 ` Stephen Hemminger
2020-09-22 14:31 ` [dpdk-dev] [PATCH 2/8] eal: replace usage of blacklist/whitelist in enum Stephen Hemminger
2020-09-22 14:31 ` [dpdk-dev] [PATCH 3/8] drivers: replace references to blacklist Stephen Hemminger
2020-09-22 14:31 ` [dpdk-dev] [PATCH 4/8] eal: replace pci-whitelist/pci-blacklist options Stephen Hemminger
2020-10-14 16:07 ` David Marchand
2020-10-20 12:43 ` Thomas Monjalon [this message]
2020-10-20 14:56 ` Stephen Hemminger
2020-09-22 14:31 ` [dpdk-dev] [PATCH 5/8] app/test: use new allowlist and blocklist Stephen Hemminger
2020-09-22 14:32 ` [dpdk-dev] [PATCH 6/8] doc: replace references to blacklist/whitelist Stephen Hemminger
2020-09-22 14:32 ` [dpdk-dev] [PATCH 7/8] doc: change reference to allowlist relative to MAC filtering Stephen Hemminger
2020-09-22 14:32 ` [dpdk-dev] [PATCH 8/8] doc: replace -w with -a in the documentation Stephen Hemminger
2020-10-20 16:20 ` [dpdk-dev] [PATCH v2 0/5] replace blacklist/whitelist with block/allow Stephen Hemminger
2020-10-20 16:20 ` [dpdk-dev] [PATCH v2 1/5] eal: replace usage of blacklist/whitelist in enum Stephen Hemminger
2020-10-20 16:20 ` [dpdk-dev] [PATCH v2 2/5] drivers: replace references to blacklist Stephen Hemminger
2020-10-20 16:20 ` [dpdk-dev] [PATCH v2 3/5] eal: replace pci-whitelist/pci-blacklist options Stephen Hemminger
2020-10-20 16:20 ` [dpdk-dev] [PATCH v2 4/5] app/test: use new allowlist and blocklist Stephen Hemminger
2020-10-20 16:20 ` [dpdk-dev] [PATCH v2 5/5] doc: change references to blacklist and whitelist Stephen Hemminger
2020-10-22 14:39 ` [dpdk-dev] [PATCH v3 0/5] replace blacklist/whitelist with block/allow Stephen Hemminger
2020-10-22 14:39 ` [dpdk-dev] [PATCH v3 1/5] eal: replace usage of blacklist/whitelist in enum Stephen Hemminger
2020-10-22 14:39 ` [dpdk-dev] [PATCH v3 2/5] drivers: replace references to blacklist Stephen Hemminger
2020-10-22 14:39 ` [dpdk-dev] [PATCH v3 3/5] eal: replace pci-whitelist/pci-blacklist options Stephen Hemminger
2020-10-22 14:39 ` [dpdk-dev] [PATCH v3 4/5] app/test: use new allowlist and blocklist Stephen Hemminger
2020-10-22 14:39 ` [dpdk-dev] [PATCH v3 5/5] doc: change references to blacklist and whitelist Stephen Hemminger
2020-10-22 15:18 ` Wang, Haiyue
2020-10-22 20:39 ` [dpdk-dev] [PATCH v4 0/5] replace blacklist/whitelist with block/allow Stephen Hemminger
2020-10-22 20:39 ` [dpdk-dev] [PATCH v4 1/5] eal: replace usage of blacklist/whitelist in enum Stephen Hemminger
2020-10-22 20:39 ` [dpdk-dev] [PATCH v4 2/5] drivers: replace references to blacklist Stephen Hemminger
2020-10-22 20:40 ` [dpdk-dev] [PATCH v4 3/5] eal: replace pci-whitelist/pci-blacklist options Stephen Hemminger
2020-10-22 20:40 ` [dpdk-dev] [PATCH v4 4/5] app/test: use new allowlist and blocklist Stephen Hemminger
2020-10-22 20:40 ` [dpdk-dev] [PATCH v4 5/5] doc: change references to blacklist and whitelist Stephen Hemminger
2020-10-24 1:01 ` [dpdk-dev] [PATCH v5 0/5] replace blacklist/whitelist with block/allow Stephen Hemminger
2020-10-24 1:01 ` [dpdk-dev] [PATCH v5 1/5] eal: replace usage of blacklist/whitelist in enum Stephen Hemminger
2020-10-24 1:01 ` [dpdk-dev] [PATCH v5 2/5] drivers: replace references to blacklist Stephen Hemminger
2020-10-24 1:01 ` [dpdk-dev] [PATCH v5 3/5] eal: replace pci-whitelist/pci-blacklist options Stephen Hemminger
2020-10-24 16:43 ` Stephen Hemminger
2020-10-24 1:01 ` [dpdk-dev] [PATCH v5 4/5] app/test: use new allowlist and blocklist Stephen Hemminger
2020-10-24 1:01 ` [dpdk-dev] [PATCH v5 5/5] doc: change references to blacklist and whitelist Stephen Hemminger
2020-11-05 8:27 ` [dpdk-dev] [PATCH v5 0/5] replace blacklist/whitelist with block/allow David Marchand
2020-11-05 17:02 ` Stephen Hemminger
2020-10-25 16:57 ` [dpdk-dev] [PATCH v6 0/5] replace blacklist/whitelist with allow/block Stephen Hemminger
2020-10-25 16:57 ` [dpdk-dev] [PATCH v6 1/5] eal: replace usage of blacklist/whitelist in enum Stephen Hemminger
2020-10-25 16:57 ` [dpdk-dev] [PATCH v6 2/5] drivers: replace references to blacklist Stephen Hemminger
2020-10-25 16:57 ` [dpdk-dev] [PATCH v6 3/5] eal: replace pci-whitelist/pci-blacklist options Stephen Hemminger
2020-10-25 16:57 ` [dpdk-dev] [PATCH v6 4/5] app/test: use new allowlist and blocklist Stephen Hemminger
2020-10-25 18:47 ` David Marchand
2020-10-25 21:25 ` Stephen Hemminger
2020-10-25 16:57 ` [dpdk-dev] [PATCH v6 5/5] doc: change references to blacklist and whitelist Stephen Hemminger
2020-10-25 20:57 ` [dpdk-dev] [PATCH v7 0/5] replace blacklist/whitelist with allow/block Stephen Hemminger
2020-10-25 20:57 ` [dpdk-dev] [PATCH v7 1/5] eal: replace usage of blacklist/whitelist in enum Stephen Hemminger
2020-10-25 20:57 ` [dpdk-dev] [PATCH v7 2/5] drivers: replace references to blacklist Stephen Hemminger
2020-10-25 20:57 ` [dpdk-dev] [PATCH v7 3/5] eal: replace pci-whitelist/pci-blacklist options Stephen Hemminger
2020-10-25 20:57 ` [dpdk-dev] [PATCH v7 4/5] doc: change references to blacklist and whitelist Stephen Hemminger
2020-10-25 20:57 ` [dpdk-dev] [PATCH v7 5/5] app/test: use new allowlist and blocklist Stephen Hemminger
2020-10-25 21:15 ` [dpdk-dev] [PATCH v8 0/5] replace blacklist/whitelist with allow/block Stephen Hemminger
2020-10-25 21:15 ` [dpdk-dev] [PATCH v8 1/5] eal: replace usage of blacklist/whitelist in enum Stephen Hemminger
2020-10-25 21:15 ` [dpdk-dev] [PATCH v8 2/5] drivers: replace references to blacklist Stephen Hemminger
2020-10-25 21:15 ` [dpdk-dev] [PATCH v8 3/5] eal: replace pci-whitelist/pci-blacklist options Stephen Hemminger
2020-10-25 21:15 ` [dpdk-dev] [PATCH v8 4/5] doc: change references to blacklist and whitelist Stephen Hemminger
2020-10-25 21:15 ` [dpdk-dev] [PATCH v8 5/5] app/test: use new allowlist and blocklist Stephen Hemminger
2020-10-29 15:31 ` [dpdk-dev] [PATCH v8 0/5] replace blacklist/whitelist with allow/block Stephen Hemminger
2020-11-05 22:35 ` [dpdk-dev] [PATCH v9 0/6] " Stephen Hemminger
2020-11-05 22:35 ` [dpdk-dev] [PATCH v9 1/6] eal: replace usage of blacklist/whitelist in enum Stephen Hemminger
2020-11-09 13:49 ` Bruce Richardson
2020-11-09 15:54 ` Stephen Hemminger
2020-11-09 16:03 ` David Marchand
2020-11-09 16:05 ` Bruce Richardson
2020-11-09 16:07 ` David Marchand
2020-11-09 16:10 ` Bruce Richardson
2020-11-09 16:20 ` Stephen Hemminger
2020-11-09 16:03 ` Bruce Richardson
2020-11-10 12:33 ` Luca Boccassi
2020-11-10 16:40 ` Stephen Hemminger
2020-11-10 16:46 ` Luca Boccassi
2020-11-05 22:35 ` [dpdk-dev] [PATCH v9 2/6] drivers: replace references to blacklist Stephen Hemminger
2020-11-05 22:35 ` [dpdk-dev] [PATCH v9 3/6] eal: replace pci-whitelist/pci-blacklist options Stephen Hemminger
2020-11-05 22:36 ` [dpdk-dev] [PATCH v9 4/6] app/test: use new allowlist and blocklist Stephen Hemminger
2020-11-05 22:36 ` [dpdk-dev] [PATCH v9 5/6] doc: change references to blacklist and whitelist Stephen Hemminger
2020-11-10 12:59 ` Luca Boccassi
2020-11-10 16:09 ` Bruce Richardson
2020-11-05 22:36 ` [dpdk-dev] [PATCH v9 6/6] doc: update release notes now for block allow changes Stephen Hemminger
2020-11-10 16:10 ` Bruce Richardson
2020-11-10 22:57 ` Stephen Hemminger
2020-11-10 13:56 ` [dpdk-dev] [PATCH v9 0/6] replace blacklist/whitelist with allow/block Luca Boccassi
2020-11-10 16:14 ` Bruce Richardson
2020-11-10 22:55 ` [dpdk-dev] [PATCH v10 0/7] " Stephen Hemminger
2020-11-10 22:55 ` [dpdk-dev] [PATCH v10 1/7] eal: replace usage of blacklist/whitelist in enum Stephen Hemminger
2020-11-11 10:43 ` Luca Boccassi
2020-11-10 22:55 ` [dpdk-dev] [PATCH v10 2/7] drivers: replace references to blacklist Stephen Hemminger
2020-11-11 10:45 ` Luca Boccassi
2020-11-10 22:55 ` [dpdk-dev] [PATCH v10 3/7] eal: replace pci-whitelist/pci-blacklist options Stephen Hemminger
2020-11-11 10:45 ` Luca Boccassi
2020-11-15 18:54 ` Thomas Monjalon
2020-11-15 20:02 ` Thomas Monjalon
2020-11-10 22:55 ` [dpdk-dev] [PATCH v10 4/7] doc: update documentation to reflect new options Stephen Hemminger
2020-11-11 10:46 ` Luca Boccassi
2020-11-15 19:58 ` Thomas Monjalon
2020-11-15 20:00 ` Thomas Monjalon
2020-11-15 21:38 ` Thomas Monjalon
2020-11-15 21:44 ` Thomas Monjalon
2020-11-15 19:50 ` Thomas Monjalon
2020-11-15 21:56 ` Thomas Monjalon
2020-11-15 21:59 ` Thomas Monjalon
2020-11-15 22:27 ` Thomas Monjalon
2020-11-10 22:55 ` [dpdk-dev] [PATCH v10 5/7] app/test: use new allowlist and blocklist Stephen Hemminger
2020-11-11 10:46 ` Luca Boccassi
2020-11-10 22:55 ` [dpdk-dev] [PATCH v10 6/7] auto test comment fix Stephen Hemminger
2020-11-11 10:47 ` Luca Boccassi
2020-11-10 22:55 ` [dpdk-dev] [PATCH v10 7/7] eal: mark old definitions as deprecated Stephen Hemminger
2020-11-11 10:47 ` Luca Boccassi
2020-11-15 22:53 ` [dpdk-dev] [PATCH v11 0/4] replace blacklist/whitelist with block/allow Thomas Monjalon
2020-11-15 22:53 ` [dpdk-dev] [PATCH v11 1/4] eal: replace usage of blacklist/whitelist in enums Thomas Monjalon
2020-11-15 22:53 ` [dpdk-dev] [PATCH v11 2/4] eal: replace blacklist/whitelist options Thomas Monjalon
2020-11-15 22:53 ` [dpdk-dev] [PATCH v11 3/4] test: rename blacklist/whitelist in autotest scripts Thomas Monjalon
2020-11-15 22:53 ` [dpdk-dev] [PATCH v11 4/4] doc: replace usage of blacklist/whitelist Thomas Monjalon
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=9162316.KZ3Jag88Df@thomas \
--to=thomas@monjalon.net \
--cc=bluca@debian.org \
--cc=david.marchand@redhat.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.