* [PATCH 1/1] ethdev: add link speed 800G
@ 2025-08-12 14:42 Thomas Monjalon
2025-08-12 15:34 ` Stephen Hemminger
` (5 more replies)
0 siblings, 6 replies; 10+ messages in thread
From: Thomas Monjalon @ 2025-08-12 14:42 UTC (permalink / raw)
To: dev; +Cc: Aman Singh, Andrew Rybchenko, Maxime Coquelin, Chenbo Xia
There are some devices supporting 800G speed,
and it is well standardized in IEEE.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
app/test-pmd/cmdline.c | 21 ++++++++++++++-------
app/test-pmd/config.c | 2 ++
app/test-pmd/parameters.c | 3 +++
app/test/test_ethdev_link.c | 3 ++-
doc/guides/rel_notes/release_25_11.rst | 5 +++++
doc/guides/testpmd_app_ug/run_app.rst | 1 +
doc/guides/testpmd_app_ug/testpmd_funcs.rst | 2 +-
drivers/net/virtio/virtio_ethdev.c | 2 ++
lib/ethdev/rte_ethdev.c | 6 ++++++
lib/ethdev/rte_ethdev.h | 2 ++
10 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 801dee4456..3731fba370 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -710,7 +710,8 @@ static void cmd_help_long_parsed(void *parsed_result,
" Detach physical or virtual dev by port_id\n\n"
"port config (port_id|all)"
- " speed (10|100|1000|2500|5000|10000|25000|40000|50000|100000|200000|400000|auto)"
+ " speed (10|100|1000|2500|5000|10000|25000|40000|50000|"
+ "100000|200000|400000|800000|auto)"
" duplex (half|full|auto)\n"
" Set speed and duplex for all ports or port_id\n\n"
@@ -1430,6 +1431,8 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
*speed = RTE_ETH_LINK_SPEED_200G;
} else if (!strcmp(speedstr, "400000")) {
*speed = RTE_ETH_LINK_SPEED_400G;
+ } else if (!strcmp(speedstr, "800000")) {
+ *speed = RTE_ETH_LINK_SPEED_800G;
} else if (!strcmp(speedstr, "auto")) {
*speed = RTE_ETH_LINK_SPEED_AUTONEG;
} else {
@@ -1480,7 +1483,8 @@ static cmdline_parse_token_string_t cmd_config_speed_all_item1 =
TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, item1, "speed");
static cmdline_parse_token_string_t cmd_config_speed_all_value1 =
TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, value1,
- "10#100#1000#2500#5000#10000#25000#40000#50000#100000#200000#400000#auto");
+ "10#100#1000#2500#5000#10000#25000#40000#50000#"
+ "100000#200000#400000#800000#auto");
static cmdline_parse_token_string_t cmd_config_speed_all_item2 =
TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, item2, "duplex");
static cmdline_parse_token_string_t cmd_config_speed_all_value2 =
@@ -1491,8 +1495,9 @@ static cmdline_parse_inst_t cmd_config_speed_all = {
.f = cmd_config_speed_all_parsed,
.data = NULL,
.help_str = "port config all speed "
- "10|100|1000|2500|5000|10000|25000|40000|50000|100000|200000|400000|auto duplex "
- "half|full|auto",
+ "10|100|1000|2500|5000|10000|25000|40000|50000|"
+ "100000|200000|400000|800000|auto "
+ "duplex half|full|auto",
.tokens = {
(void *)&cmd_config_speed_all_port,
(void *)&cmd_config_speed_all_keyword,
@@ -1555,7 +1560,8 @@ static cmdline_parse_token_string_t cmd_config_speed_specific_item1 =
"speed");
static cmdline_parse_token_string_t cmd_config_speed_specific_value1 =
TOKEN_STRING_INITIALIZER(struct cmd_config_speed_specific, value1,
- "10#100#1000#2500#5000#10000#25000#40000#50000#100000#200000#400000#auto");
+ "10#100#1000#2500#5000#10000#25000#40000#50000#"
+ "100000#200000#400000#800000#auto");
static cmdline_parse_token_string_t cmd_config_speed_specific_item2 =
TOKEN_STRING_INITIALIZER(struct cmd_config_speed_specific, item2,
"duplex");
@@ -1567,8 +1573,9 @@ static cmdline_parse_inst_t cmd_config_speed_specific = {
.f = cmd_config_speed_specific_parsed,
.data = NULL,
.help_str = "port config <port_id> speed "
- "10|100|1000|2500|5000|10000|25000|40000|50000|100000|200000|400000|auto duplex "
- "half|full|auto",
+ "10|100|1000|2500|5000|10000|25000|40000|50000|"
+ "100000|200000|400000|800000|auto "
+ "duplex half|full|auto",
.tokens = {
(void *)&cmd_config_speed_specific_port,
(void *)&cmd_config_speed_specific_keyword,
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 08048da6f8..85f148a174 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -634,6 +634,8 @@ device_infos_display_speeds(uint32_t speed_capa)
printf(" 200 Gbps ");
if (speed_capa & RTE_ETH_LINK_SPEED_400G)
printf(" 400 Gbps ");
+ if (speed_capa & RTE_ETH_LINK_SPEED_800G)
+ printf(" 800 Gbps ");
}
void
diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index 80c6ecae54..f7601df0bf 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -924,6 +924,9 @@ parse_link_speed(int n)
case 400000:
speed |= RTE_ETH_LINK_SPEED_400G;
break;
+ case 800000:
+ speed |= RTE_ETH_LINK_SPEED_800G;
+ break;
case 100:
case 10:
default:
diff --git a/app/test/test_ethdev_link.c b/app/test/test_ethdev_link.c
index f063a5fe26..47c526eb0c 100644
--- a/app/test/test_ethdev_link.c
+++ b/app/test/test_ethdev_link.c
@@ -54,7 +54,7 @@ test_link_status_up_default(void)
"string with HDX");
/* test max str len */
- link_status.link_speed = RTE_ETH_SPEED_NUM_400G;
+ link_status.link_speed = RTE_ETH_SPEED_NUM_800G;
link_status.link_duplex = RTE_ETH_LINK_HALF_DUPLEX;
link_status.link_autoneg = RTE_ETH_LINK_AUTONEG;
ret = rte_eth_link_to_str(text, sizeof(text), &link_status);
@@ -131,6 +131,7 @@ test_link_speed_all_values(void)
{ "100 Gbps", RTE_ETH_SPEED_NUM_100G },
{ "200 Gbps", RTE_ETH_SPEED_NUM_200G },
{ "400 Gbps", RTE_ETH_SPEED_NUM_400G },
+ { "800 Gbps", RTE_ETH_SPEED_NUM_800G },
{ "Unknown", RTE_ETH_SPEED_NUM_UNKNOWN },
{ "Invalid", 50505 }
};
diff --git a/doc/guides/rel_notes/release_25_11.rst b/doc/guides/rel_notes/release_25_11.rst
index e81ba33907..122029b3c8 100644
--- a/doc/guides/rel_notes/release_25_11.rst
+++ b/doc/guides/rel_notes/release_25_11.rst
@@ -55,6 +55,11 @@ New Features
Also, make sure to start the actual text at the margin.
=======================================================
+* **Added speed 800G.**
+
+ Added Ethernet link speed for 800 Gb/s as it is well standardized in IEEE,
+ and some devices already support this speed.
+
* **Updated DPAA2 ethernet driver.**
* Enabled software taildrop for ordered queues.
diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst
index 35a0c5528c..171f87e56d 100644
--- a/doc/guides/testpmd_app_ug/run_app.rst
+++ b/doc/guides/testpmd_app_ug/run_app.rst
@@ -409,6 +409,7 @@ The command line options are:
100000 - 100Gbps
200000 - 200Gbps
400000 - 400Gbps
+ 800000 - 800Gbps
...
* ``--disable-link-check``
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index 6ad83ae50d..ea0ab9bcab 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -2090,7 +2090,7 @@ port config - speed
Set the speed and duplex mode for all ports or a specific port::
- testpmd> port config (port_id|all) speed (10|100|1000|2500|5000|10000|25000|40000|50000|100000|200000|400000|auto) \
+ testpmd> port config (port_id|all) speed (10|100|1000|2500|5000|10000|25000|40000|50000|100000|200000|400000|800000|auto) \
duplex (half|full|auto)
port config - queues/descriptors
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index 2d2635b669..eebc3ea817 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -2104,6 +2104,8 @@ virtio_dev_speed_capa_get(uint32_t speed)
return RTE_ETH_LINK_SPEED_200G;
case RTE_ETH_SPEED_NUM_400G:
return RTE_ETH_LINK_SPEED_400G;
+ case RTE_ETH_SPEED_NUM_800G:
+ return RTE_ETH_LINK_SPEED_800G;
default:
return 0;
}
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 4148c33807..f22139cb38 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -1078,6 +1078,9 @@ rte_eth_speed_bitflag(uint32_t speed, int duplex)
case RTE_ETH_SPEED_NUM_400G:
ret = RTE_ETH_LINK_SPEED_400G;
break;
+ case RTE_ETH_SPEED_NUM_800G:
+ ret = RTE_ETH_LINK_SPEED_800G;
+ break;
default:
ret = 0;
}
@@ -3287,6 +3290,9 @@ rte_eth_link_speed_to_str(uint32_t link_speed)
case RTE_ETH_SPEED_NUM_400G:
ret = "400 Gbps";
break;
+ case RTE_ETH_SPEED_NUM_800G:
+ ret = "800 Gbps";
+ break;
case RTE_ETH_SPEED_NUM_UNKNOWN:
ret = "Unknown";
break;
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 5d7fc5ee9d..d23c143eed 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -306,6 +306,7 @@ struct rte_eth_stats {
#define RTE_ETH_LINK_SPEED_100G RTE_BIT32(14) /**< 100 Gbps */
#define RTE_ETH_LINK_SPEED_200G RTE_BIT32(15) /**< 200 Gbps */
#define RTE_ETH_LINK_SPEED_400G RTE_BIT32(16) /**< 400 Gbps */
+#define RTE_ETH_LINK_SPEED_800G RTE_BIT32(17) /**< 800 Gbps */
/**@}*/
/**@{@name Link speed
@@ -326,6 +327,7 @@ struct rte_eth_stats {
#define RTE_ETH_SPEED_NUM_100G 100000 /**< 100 Gbps */
#define RTE_ETH_SPEED_NUM_200G 200000 /**< 200 Gbps */
#define RTE_ETH_SPEED_NUM_400G 400000 /**< 400 Gbps */
+#define RTE_ETH_SPEED_NUM_800G 800000 /**< 800 Gbps */
#define RTE_ETH_SPEED_NUM_UNKNOWN UINT32_MAX /**< Unknown */
/**@}*/
--
2.47.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] ethdev: add link speed 800G
2025-08-12 14:42 [PATCH 1/1] ethdev: add link speed 800G Thomas Monjalon
@ 2025-08-12 15:34 ` Stephen Hemminger
2025-08-13 10:01 ` Thomas Monjalon
2025-08-12 18:18 ` Andrew Rybchenko
` (4 subsequent siblings)
5 siblings, 1 reply; 10+ messages in thread
From: Stephen Hemminger @ 2025-08-12 15:34 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, Aman Singh, Andrew Rybchenko, Maxime Coquelin, Chenbo Xia
On Tue, 12 Aug 2025 16:42:48 +0200
Thomas Monjalon <thomas@monjalon.net> wrote:
> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
> index 5d7fc5ee9d..d23c143eed 100644
> --- a/lib/ethdev/rte_ethdev.h
> +++ b/lib/ethdev/rte_ethdev.h
> @@ -306,6 +306,7 @@ struct rte_eth_stats {
> #define RTE_ETH_LINK_SPEED_100G RTE_BIT32(14) /**< 100 Gbps */
> #define RTE_ETH_LINK_SPEED_200G RTE_BIT32(15) /**< 200 Gbps */
> #define RTE_ETH_LINK_SPEED_400G RTE_BIT32(16) /**< 400 Gbps */
> +#define RTE_ETH_LINK_SPEED_800G RTE_BIT32(17) /**< 800 Gbps */
Do you want to go further, looking around I see roadmaps for.
1.6Tbs, 3.2 Tbs, 6.4 Tbs (2028) and beyond.
Looks like will run out of bits in 2040...
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] ethdev: add link speed 800G
2025-08-12 14:42 [PATCH 1/1] ethdev: add link speed 800G Thomas Monjalon
2025-08-12 15:34 ` Stephen Hemminger
@ 2025-08-12 18:18 ` Andrew Rybchenko
2025-08-12 20:07 ` Morten Brørup
` (3 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Andrew Rybchenko @ 2025-08-12 18:18 UTC (permalink / raw)
To: Thomas Monjalon, dev; +Cc: Aman Singh, Maxime Coquelin, Chenbo Xia
On 8/12/25 17:42, Thomas Monjalon wrote:
> There are some devices supporting 800G speed,
> and it is well standardized in IEEE.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [PATCH 1/1] ethdev: add link speed 800G
2025-08-12 14:42 [PATCH 1/1] ethdev: add link speed 800G Thomas Monjalon
2025-08-12 15:34 ` Stephen Hemminger
2025-08-12 18:18 ` Andrew Rybchenko
@ 2025-08-12 20:07 ` Morten Brørup
2025-08-13 0:26 ` Khadem Ullah
` (2 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Morten Brørup @ 2025-08-12 20:07 UTC (permalink / raw)
To: Thomas Monjalon, dev
Cc: Aman Singh, Andrew Rybchenko, Maxime Coquelin, Chenbo Xia
> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> Sent: Tuesday, 12 August 2025 16.43
>
> There are some devices supporting 800G speed,
> and it is well standardized in IEEE.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
Acked-by: Morten Brørup <mb@smartsharesystems.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] ethdev: add link speed 800G
2025-08-12 14:42 [PATCH 1/1] ethdev: add link speed 800G Thomas Monjalon
` (2 preceding siblings ...)
2025-08-12 20:07 ` Morten Brørup
@ 2025-08-13 0:26 ` Khadem Ullah
2025-08-13 0:45 ` fengchengwen
2025-08-13 15:21 ` Stephen Hemminger
5 siblings, 0 replies; 10+ messages in thread
From: Khadem Ullah @ 2025-08-13 0:26 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, Aman Singh, Andrew Rybchenko, Maxime Coquelin, Chenbo Xia
[-- Attachment #1: Type: text/plain, Size: 284 bytes --]
Acked-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
On Tue, Aug 12, 2025, 19:43 Thomas Monjalon <thomas@monjalon.net> wrote:
> There are some devices supporting 800G speed,
> and it is well standardized in IEEE.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
>
[-- Attachment #2: Type: text/html, Size: 822 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] ethdev: add link speed 800G
2025-08-12 14:42 [PATCH 1/1] ethdev: add link speed 800G Thomas Monjalon
` (3 preceding siblings ...)
2025-08-13 0:26 ` Khadem Ullah
@ 2025-08-13 0:45 ` fengchengwen
2025-08-13 15:21 ` Stephen Hemminger
5 siblings, 0 replies; 10+ messages in thread
From: fengchengwen @ 2025-08-13 0:45 UTC (permalink / raw)
To: Thomas Monjalon, dev
Cc: Aman Singh, Andrew Rybchenko, Maxime Coquelin, Chenbo Xia
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
On 8/12/2025 10:42 PM, Thomas Monjalon wrote:
> There are some devices supporting 800G speed,
> and it is well standardized in IEEE.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] ethdev: add link speed 800G
2025-08-12 15:34 ` Stephen Hemminger
@ 2025-08-13 10:01 ` Thomas Monjalon
2025-08-13 14:18 ` Stephen Hemminger
0 siblings, 1 reply; 10+ messages in thread
From: Thomas Monjalon @ 2025-08-13 10:01 UTC (permalink / raw)
To: Stephen Hemminger
Cc: dev, Aman Singh, Andrew Rybchenko, Maxime Coquelin, Chenbo Xia
12/08/2025 17:34, Stephen Hemminger:
> On Tue, 12 Aug 2025 16:42:48 +0200
> Thomas Monjalon <thomas@monjalon.net> wrote:
>
> > diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
> > index 5d7fc5ee9d..d23c143eed 100644
> > --- a/lib/ethdev/rte_ethdev.h
> > +++ b/lib/ethdev/rte_ethdev.h
> > @@ -306,6 +306,7 @@ struct rte_eth_stats {
> > #define RTE_ETH_LINK_SPEED_100G RTE_BIT32(14) /**< 100 Gbps */
> > #define RTE_ETH_LINK_SPEED_200G RTE_BIT32(15) /**< 200 Gbps */
> > #define RTE_ETH_LINK_SPEED_400G RTE_BIT32(16) /**< 400 Gbps */
> > +#define RTE_ETH_LINK_SPEED_800G RTE_BIT32(17) /**< 800 Gbps */
>
> Do you want to go further, looking around I see roadmaps for.
> 1.6Tbs, 3.2 Tbs, 6.4 Tbs (2028) and beyond.
I prefer adding speeds as they are standardized and useful for DPDK.
> Looks like will run out of bits in 2040...
I observe the max speed doubling every 3 years.
So I imagine we will run out of bits in 2070,
or earlier if we have new intermediate speeds.
But in any case we have at least 20 years before it happens,
so it looks safe to me.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] ethdev: add link speed 800G
2025-08-13 10:01 ` Thomas Monjalon
@ 2025-08-13 14:18 ` Stephen Hemminger
2025-08-13 15:37 ` Thomas Monjalon
0 siblings, 1 reply; 10+ messages in thread
From: Stephen Hemminger @ 2025-08-13 14:18 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, Aman Singh, Andrew Rybchenko, Maxime Coquelin, Chenbo Xia
On Wed, 13 Aug 2025 12:01:53 +0200
Thomas Monjalon <thomas@monjalon.net> wrote:
> > Looks like will run out of bits in 2040...
>
> I observe the max speed doubling every 3 years.
> So I imagine we will run out of bits in 2070,
> or earlier if we have new intermediate speeds.
> But in any case we have at least 20 years before it happens,
> so it looks safe to me.
That was just my lame attempt a joke.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] ethdev: add link speed 800G
2025-08-12 14:42 [PATCH 1/1] ethdev: add link speed 800G Thomas Monjalon
` (4 preceding siblings ...)
2025-08-13 0:45 ` fengchengwen
@ 2025-08-13 15:21 ` Stephen Hemminger
5 siblings, 0 replies; 10+ messages in thread
From: Stephen Hemminger @ 2025-08-13 15:21 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, Aman Singh, Andrew Rybchenko, Maxime Coquelin, Chenbo Xia
On Tue, 12 Aug 2025 16:42:48 +0200
Thomas Monjalon <thomas@monjalon.net> wrote:
> There are some devices supporting 800G speed,
> and it is well standardized in IEEE.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Applied to next-net
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/1] ethdev: add link speed 800G
2025-08-13 14:18 ` Stephen Hemminger
@ 2025-08-13 15:37 ` Thomas Monjalon
0 siblings, 0 replies; 10+ messages in thread
From: Thomas Monjalon @ 2025-08-13 15:37 UTC (permalink / raw)
To: Stephen Hemminger
Cc: dev, Aman Singh, Andrew Rybchenko, Maxime Coquelin, Chenbo Xia
13/08/2025 16:18, Stephen Hemminger:
> On Wed, 13 Aug 2025 12:01:53 +0200
> Thomas Monjalon <thomas@monjalon.net> wrote:
>
> > > Looks like will run out of bits in 2040...
> >
> > I observe the max speed doubling every 3 years.
> > So I imagine we will run out of bits in 2070,
> > or earlier if we have new intermediate speeds.
> > But in any case we have at least 20 years before it happens,
> > so it looks safe to me.
>
> That was just my lame attempt a joke.
Sorry for not spotting the joke :)
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-08-13 15:37 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-08-12 14:42 [PATCH 1/1] ethdev: add link speed 800G Thomas Monjalon
2025-08-12 15:34 ` Stephen Hemminger
2025-08-13 10:01 ` Thomas Monjalon
2025-08-13 14:18 ` Stephen Hemminger
2025-08-13 15:37 ` Thomas Monjalon
2025-08-12 18:18 ` Andrew Rybchenko
2025-08-12 20:07 ` Morten Brørup
2025-08-13 0:26 ` Khadem Ullah
2025-08-13 0:45 ` fengchengwen
2025-08-13 15:21 ` Stephen Hemminger
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).