From: Oleksandr Kolomeiets <okl-plv@napatech.com>
To: dev@dpdk.org
Cc: mko-plv@napatech.com, sil-plv@napatech.com, ckm@napatech.com,
stephen@networkplumber.org, thomas@monjalon.net,
Danylo Vodopianov <dvo-plv@napatech.com>
Subject: [PATCH v1 10/25] net/ntnic: remove unused code
Date: Wed, 30 Apr 2025 15:48:22 +0200 [thread overview]
Message-ID: <20250430134840.402553-11-okl-plv@napatech.com> (raw)
In-Reply-To: <20250430134840.402553-1-okl-plv@napatech.com>
From: Danylo Vodopianov <dvo-plv@napatech.com>
Remove unused CRC calculation and simplify AVR probe logging.
The condition is always false.
Signed-off-by: Danylo Vodopianov <dvo-plv@napatech.com>
---
drivers/net/ntnic/nthw/core/nthw_fpga.c | 299 +-----------------------
1 file changed, 11 insertions(+), 288 deletions(-)
diff --git a/drivers/net/ntnic/nthw/core/nthw_fpga.c b/drivers/net/ntnic/nthw/core/nthw_fpga.c
index 8831eeb4d3..485e912912 100644
--- a/drivers/net/ntnic/nthw/core/nthw_fpga.c
+++ b/drivers/net/ntnic/nthw/core/nthw_fpga.c
@@ -152,26 +152,6 @@ int nthw_fpga_silabs_detect(nthw_fpga_t *p_fpga, const int n_instance_no, const
return res;
}
-/*
- * Calculate CRC-16-CCITT of passed data
- * CRC-16-CCITT ^16 + ^12 + ^5 + 1 (0x1021) (X.25, HDLC, XMODEM, Bluetooth,
- * SD, many others; known as CRC-CCITT)
- */
-static uint16_t crc16(uint8_t *buffer, size_t length)
-{
- uint16_t seed = 0;
-
- while (length--) {
- seed = (uint16_t)(seed >> 8 | seed << 8);
- seed = (uint16_t)(seed ^ *buffer++);
- seed = (uint16_t)(seed ^ (seed & 0xff) >> 4);
- seed = (uint16_t)(seed ^ seed << 8 << 4);
- seed = (uint16_t)(seed ^ (seed & 0xff) << 4 << 1);
- }
-
- return seed;
-}
-
int nthw_fpga_avr_probe(nthw_fpga_t *p_fpga, const int n_instance_no)
{
struct fpga_info_s *p_fpga_info = p_fpga->p_fpga_info;
@@ -314,150 +294,15 @@ int nthw_fpga_avr_probe(nthw_fpga_t *p_fpga, const int n_instance_no)
rx_buf.p_buf = &rx_data;
res = nthw_spi_v3_transfer(p_avr_spi, AVR_OP_SYSINFO_2, &tx_buf, &rx_buf);
- if (res == 0 && avr_vpd_info.n_avr_spi_version >= 3 && rx_buf.size >= 16) {
- if (rx_buf.size != 16) {
- NT_LOG(WRN, NTHW,
- "%s: AVR%d: SYSINFO2: reply is larger than expected: %04X %04X",
- p_adapter_id_str, n_instance_no, rx_buf.size, 16);
-
- } else {
- NT_LOG(DBG, NTHW, "%s: AVR%d: SYSINFO2: OK: res=%d sz=%d",
- p_adapter_id_str, n_instance_no, res, rx_buf.size);
- }
-
- avr_vpd_info.sysinfo_container_version = rx_data[0];
- NT_LOG(DBG, NTHW, "%s: AVR%d: SYSINFO_REQ_VER: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_container_version);
-
- memcpy(&avr_vpd_info.sysinfo_avr_libc_version, &rx_data[0 + 1],
- sizeof(avr_vpd_info.sysinfo_avr_libc_version));
- NT_LOG(DBG, NTHW, "%s: AVR%d: LIBC_VER: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_avr_libc_version);
-
- avr_vpd_info.sysinfo_signature_0 = rx_data[5];
- avr_vpd_info.sysinfo_signature_1 = rx_data[6];
- avr_vpd_info.sysinfo_signature_2 = rx_data[7];
- NT_LOG(DBG, NTHW, "%s: AVR%d: SIGNATURE: %02x%02x%02x", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_signature_0,
- avr_vpd_info.sysinfo_signature_1, avr_vpd_info.sysinfo_signature_2);
-
- avr_vpd_info.sysinfo_spi_version = rx_data[8];
- NT_LOG(DBG, NTHW, "%s: AVR%d: SPI_VER: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_spi_version);
-
- avr_vpd_info.sysinfo_hw_revision = rx_data[9];
- NT_LOG(DBG, NTHW, "%s: AVR%d: HW_REV: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_hw_revision);
-
- avr_vpd_info.sysinfo_ticks_per_second = rx_data[10];
- NT_LOG(DBG, NTHW, "%s: AVR%d: TICKS_PER_SEC: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_ticks_per_second);
-
- memcpy(&avr_vpd_info.sysinfo_uptime, &rx_data[11],
- sizeof(avr_vpd_info.sysinfo_uptime));
- NT_LOG(DBG, NTHW, "%s: AVR%d: UPTIME: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_uptime);
-
- avr_vpd_info.sysinfo_osccal = rx_data[15];
- NT_LOG(DBG, NTHW, "%s: AVR%d: OSCCAL: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_osccal);
-
- {
- bool b_spi_ver_match = (avr_vpd_info.n_avr_spi_version ==
- avr_vpd_info.sysinfo_spi_version);
- (void)b_spi_ver_match;
- NT_LOG(DBG, NTHW, "%s: AVR%d: SPI_VER_TST: %s (%d %d)",
- p_adapter_id_str, n_instance_no,
- (b_spi_ver_match ? "OK" : "MISMATCH"),
- avr_vpd_info.n_avr_spi_version,
- avr_vpd_info.sysinfo_spi_version);
- }
-
- /* SYSINFO2: if response: only populate hw_id not hw_id_emulated */
- p_fpga_info->nthw_hw_info.hw_id = avr_vpd_info.sysinfo_hw_revision;
-
- } else {
- /* AVR_OP_SYSINFO */
- tx_buf.size = 0;
- tx_buf.p_buf = NULL;
- rx_buf.size = sizeof(rx_data);
- rx_buf.p_buf = &rx_data;
- res = nthw_spi_v3_transfer(p_avr_spi, AVR_OP_SYSINFO, &tx_buf, &rx_buf);
-
- if (res == 0 && avr_vpd_info.n_avr_spi_version >= 3 && rx_buf.size >= 16) {
- if (rx_buf.size != 16) {
- NT_LOG(WRN, NTHW,
- "%s: AVR%d: SYSINFO: reply is larger than expected: %04X %04X",
- p_adapter_id_str, n_instance_no, rx_buf.size, 16);
-
- } else {
- NT_LOG(DBG, NTHW, "%s: AVR%d: SYSINFO: OK: res=%d sz=%d",
- p_adapter_id_str, n_instance_no, res, rx_buf.size);
- }
-
- avr_vpd_info.sysinfo_container_version = rx_data[0];
- NT_LOG(DBG, NTHW, "%s: AVR%d: SYSINFO_REQ_VER: %d",
- p_adapter_id_str, n_instance_no,
- avr_vpd_info.sysinfo_container_version);
-
- memcpy(&avr_vpd_info.sysinfo_avr_libc_version, &rx_data[0 + 1],
- sizeof(avr_vpd_info.sysinfo_avr_libc_version));
- NT_LOG(DBG, NTHW, "%s: AVR%d: LIBC_VER: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_avr_libc_version);
-
- avr_vpd_info.sysinfo_signature_0 = rx_data[5];
- avr_vpd_info.sysinfo_signature_1 = rx_data[6];
- avr_vpd_info.sysinfo_signature_2 = rx_data[7];
- NT_LOG(DBG, NTHW, "%s: AVR%d: SIGNATURE: %02x%02x%02x",
- p_adapter_id_str, n_instance_no,
- avr_vpd_info.sysinfo_signature_0,
- avr_vpd_info.sysinfo_signature_1,
- avr_vpd_info.sysinfo_signature_2);
-
- avr_vpd_info.sysinfo_spi_version = rx_data[8];
- NT_LOG(DBG, NTHW, "%s: AVR%d: SPI_VER: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_spi_version);
-
- avr_vpd_info.sysinfo_hw_revision = rx_data[9];
- NT_LOG(DBG, NTHW, "%s: AVR%d: HW_REV: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_hw_revision);
- NT_LOG(INF, NTHW, "%s: AVR%d: HW_REV: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_hw_revision);
-
- avr_vpd_info.sysinfo_ticks_per_second = rx_data[10];
- NT_LOG(DBG, NTHW, "%s: AVR%d: TICKS_PER_SEC: %d",
- p_adapter_id_str, n_instance_no,
- avr_vpd_info.sysinfo_ticks_per_second);
-
- memcpy(&avr_vpd_info.sysinfo_uptime, &rx_data[11],
- sizeof(avr_vpd_info.sysinfo_uptime));
- NT_LOG(DBG, NTHW, "%s: AVR%d: UPTIME: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_uptime);
-
- avr_vpd_info.sysinfo_osccal = rx_data[15];
- NT_LOG(DBG, NTHW, "%s: AVR%d: OSCCAL: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.sysinfo_osccal);
-
- {
- bool b_spi_ver_match = (avr_vpd_info.n_avr_spi_version ==
- avr_vpd_info.sysinfo_spi_version);
- (void)b_spi_ver_match;
- NT_LOG(DBG, NTHW, "%s: AVR%d: SPI_VER_TST: %s (%d %d)",
- p_adapter_id_str, n_instance_no,
- (b_spi_ver_match ? "OK" : "MISMATCH"),
- avr_vpd_info.n_avr_spi_version,
- avr_vpd_info.sysinfo_spi_version);
- }
-
- p_fpga_info->nthw_hw_info.hw_id = avr_vpd_info.sysinfo_hw_revision;
- p_fpga_info->nthw_hw_info.hw_id_emulated =
- avr_vpd_info.sysinfo_hw_revision;
+ /* AVR_OP_SYSINFO */
+ tx_buf.size = 0;
+ tx_buf.p_buf = NULL;
+ rx_buf.size = sizeof(rx_data);
+ rx_buf.p_buf = &rx_data;
+ res = nthw_spi_v3_transfer(p_avr_spi, AVR_OP_SYSINFO, &tx_buf, &rx_buf);
- } else {
- NT_LOG(ERR, NTHW, "%s: AVR%d: SYSINFO: NA: res=%d sz=%d",
- p_adapter_id_str, n_instance_no, res, rx_buf.size);
- }
- }
+ NT_LOG(ERR, NTHW, "%s: AVR%d: SYSINFO: NA: res=%d sz=%d",
+ p_adapter_id_str, n_instance_no, res, rx_buf.size);
/* AVR_OP_VPD_READ */
tx_buf.size = 0;
@@ -466,132 +311,10 @@ int nthw_fpga_avr_probe(nthw_fpga_t *p_fpga, const int n_instance_no)
rx_buf.p_buf = &rx_data;
res = nthw_spi_v3_transfer(p_avr_spi, AVR_OP_VPD_READ, &tx_buf, &rx_buf);
- if (res == 0 && avr_vpd_info.n_avr_spi_version >= 3 &&
- rx_buf.size >= GEN2_VPD_SIZE_TOTAL) {
- avr_vpd_info.n_crc16_calced = crc16(rx_buf.p_buf, rx_buf.size - 2);
- memcpy(&avr_vpd_info.n_crc16_stored, &rx_data[rx_buf.size - 2],
- sizeof(avr_vpd_info.n_crc16_stored));
- NT_LOG(DBG, NTHW, "%s: AVR%d: VPD_CRC: %04X %04X", p_adapter_id_str,
- n_instance_no, avr_vpd_info.n_crc16_stored,
- avr_vpd_info.n_crc16_calced);
-
- avr_vpd_info.b_crc16_valid =
- (avr_vpd_info.n_crc16_stored == avr_vpd_info.n_crc16_calced);
- NT_LOG(DBG, NTHW, "%s: AVR%d: CRC_TST: %s", p_adapter_id_str,
- n_instance_no, (avr_vpd_info.b_crc16_valid ? "OK" : "ERROR"));
-
- if (avr_vpd_info.b_crc16_valid) {
- memcpy(&avr_vpd_info.psu_hw_version, &rx_data[0],
- sizeof(avr_vpd_info.psu_hw_version));
- NT_LOG(DBG, NTHW, "%s: AVR%d: PSU_HW_VER: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.psu_hw_version);
-
- memcpy(&avr_vpd_info.vpd_pn, &rx_data[0 + 1],
- sizeof(avr_vpd_info.vpd_pn));
- NT_LOG(DBG, NTHW, "%s: AVR%d: PN: '%.*s'", p_adapter_id_str,
- n_instance_no, GEN2_PN_SIZE, avr_vpd_info.vpd_pn);
-
- memcpy(&avr_vpd_info.vpd_pba, &rx_data[0 + 1 + GEN2_PN_SIZE],
- sizeof(avr_vpd_info.vpd_pba));
- NT_LOG(DBG, NTHW, "%s: AVR%d: PBA: '%.*s'", p_adapter_id_str,
- n_instance_no, GEN2_PBA_SIZE, avr_vpd_info.vpd_pba);
-
- memcpy(&avr_vpd_info.vpd_sn,
- &rx_data[0 + 1 + GEN2_PN_SIZE + GEN2_PBA_SIZE],
- sizeof(avr_vpd_info.vpd_sn));
- NT_LOG(DBG, NTHW, "%s: AVR%d: SN: '%.*s", p_adapter_id_str,
- n_instance_no, GEN2_SN_SIZE, avr_vpd_info.vpd_sn);
-
- memcpy(&avr_vpd_info.vpd_board_name,
- &rx_data[0 + 1 + GEN2_PN_SIZE + GEN2_PBA_SIZE +
- GEN2_SN_SIZE],
- sizeof(avr_vpd_info.vpd_board_name));
- NT_LOG(DBG, NTHW, "%s: AVR%d: BN: '%.*s'", p_adapter_id_str,
- n_instance_no, GEN2_BNAME_SIZE,
- avr_vpd_info.vpd_board_name);
-
- union mac_u {
- uint8_t a_u8[8];
- uint16_t a_u16[4];
- uint32_t a_u32[2];
- uint64_t a_u64[1];
- } mac;
-
- /* vpd_platform_section */
- uint8_t *p_vpd_board_info =
- (uint8_t *)(&rx_data[1 + GEN2_PN_SIZE + GEN2_PBA_SIZE +
- GEN2_SN_SIZE + GEN2_BNAME_SIZE]);
- memcpy(&avr_vpd_info.product_family, &p_vpd_board_info[0],
- sizeof(avr_vpd_info.product_family));
- NT_LOG(DBG, NTHW, "%s: AVR%d: PROD_FAM: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.product_family);
-
- memcpy(&avr_vpd_info.feature_mask, &p_vpd_board_info[0 + 4],
- sizeof(avr_vpd_info.feature_mask));
- NT_LOG(DBG, NTHW, "%s: AVR%d: FMSK_VAL: 0x%08X",
- p_adapter_id_str, n_instance_no, avr_vpd_info.feature_mask);
-
- memcpy(&avr_vpd_info.invfeature_mask, &p_vpd_board_info[0 + 4 + 4],
- sizeof(avr_vpd_info.invfeature_mask));
- NT_LOG(DBG, NTHW, "%s: AVR%d: FMSK_INV: 0x%08X",
- p_adapter_id_str, n_instance_no,
- avr_vpd_info.invfeature_mask);
-
- avr_vpd_info.b_feature_mask_valid =
- (avr_vpd_info.feature_mask ==
- ~avr_vpd_info.invfeature_mask);
- NT_LOG(DBG, NTHW, "%s: AVR%d: FMSK_TST: %s", p_adapter_id_str,
- n_instance_no,
- (avr_vpd_info.b_feature_mask_valid ? "OK" : "ERROR"));
-
- memcpy(&avr_vpd_info.no_of_macs, &p_vpd_board_info[0 + 4 + 4 + 4],
- sizeof(avr_vpd_info.no_of_macs));
- NT_LOG(DBG, NTHW, "%s: AVR%d: NUM_MACS: %d", p_adapter_id_str,
- n_instance_no, avr_vpd_info.no_of_macs);
-
- memcpy(&avr_vpd_info.mac_address,
- &p_vpd_board_info[0 + 4 + 4 + 4 + 1],
- sizeof(avr_vpd_info.mac_address));
- NT_LOG(DBG, NTHW,
- "%s: AVR%d: MAC_ADDR: %02x:%02x:%02x:%02x:%02x:%02x",
- p_adapter_id_str, n_instance_no,
- avr_vpd_info.mac_address[0], avr_vpd_info.mac_address[1],
- avr_vpd_info.mac_address[2], avr_vpd_info.mac_address[3],
- avr_vpd_info.mac_address[4], avr_vpd_info.mac_address[5]);
-
- mac.a_u64[0] = 0;
- memcpy(&mac.a_u8[2], &avr_vpd_info.mac_address,
- sizeof(avr_vpd_info.mac_address));
- {
- const uint32_t u1 = ntohl(mac.a_u32[0]);
-
- if (u1 != mac.a_u32[0]) {
- const uint32_t u0 = ntohl(mac.a_u32[1]);
- mac.a_u32[0] = u0;
- mac.a_u32[1] = u1;
- }
- }
-
- avr_vpd_info.n_mac_val = mac.a_u64[0];
- NT_LOG(DBG, NTHW, "%s: AVR%d: MAC_U64: %012" PRIX64 "",
- p_adapter_id_str, n_instance_no, avr_vpd_info.n_mac_val);
- }
-
- p_fpga_info->nthw_hw_info.vpd_info.mn_mac_addr_count =
- avr_vpd_info.no_of_macs;
- p_fpga_info->nthw_hw_info.vpd_info.mn_mac_addr_value =
- avr_vpd_info.n_mac_val;
- memcpy(p_fpga_info->nthw_hw_info.vpd_info.ma_mac_addr_octets,
- avr_vpd_info.mac_address,
- ARRAY_SIZE(p_fpga_info->nthw_hw_info.vpd_info.ma_mac_addr_octets));
-
- } else {
- NT_LOG(ERR, NTHW, "%s:%u: res=%d", __func__, __LINE__, res);
- NT_LOG(ERR, NTHW, "%s: AVR%d: SYSINFO2: NA: res=%d sz=%d",
- p_adapter_id_str, n_instance_no, res, rx_buf.size);
- }
+ NT_LOG(ERR, NTHW, "%s:%u: res=%d", __func__, __LINE__, res);
+ NT_LOG(ERR, NTHW, "%s: AVR%d: SYSINFO2: NA: res=%d sz=%d",
+ p_adapter_id_str, n_instance_no, res, rx_buf.size);
}
-
return res;
}
--
2.47.1
next prev parent reply other threads:[~2025-04-30 13:50 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-30 13:48 [PATCH v1 00/25] net/ntnic: fixes and improvements Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 01/25] net/ntnic: remove usage of the variable-length arrays Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 02/25] net/ntnic: handle string truncations when using strlcpy Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 03/25] net/ntnic: replace pragma pack with DPDK defined macros Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 04/25] net/ntnic: remove extra memset Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 05/25] net/ntnic: include all queues into statistics Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 06/25] net/ntnic: avoid misleading variable names Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 07/25] net/ntnic: apply packing to the structure Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 08/25] net/ntnic: improve logging format specifiers Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 09/25] net/ntnic: remove usless expressions Oleksandr Kolomeiets
2025-04-30 13:48 ` Oleksandr Kolomeiets [this message]
2025-04-30 13:48 ` [PATCH v1 11/25] net/ntnic: remove usless part of conditional expression Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 12/25] net/ntnic: add error logging for hsh Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 13/25] net/ntnic: add explicitly specificator Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 14/25] net/ntnic: add handle memory allocation failures Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 15/25] net/ntnic: remove redundant initialization Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 16/25] net/ntnic: enhance null checks and assertions Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 17/25] net/ntnic: add return value check Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 18/25] net/ntnic: remove redundant assignments and branching Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 19/25] net/ntnic: rework array usage Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 20/25] net/ntnic: avoid divide by zero Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 21/25] net/ntnic: remove unnecessary void cast Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 22/25] net/ntnic: remove unnecessary memset Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 23/25] net/ntnic: add null verification Oleksandr Kolomeiets
2025-04-30 13:48 ` [PATCH v1 24/25] net/ntnic: avoid possible deadlock Oleksandr Kolomeiets
2025-04-30 14:05 ` Stephen Hemminger
2025-04-30 13:48 ` [PATCH v1 25/25] net/ntnic: fix operation with rte ring queue Oleksandr Kolomeiets
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=20250430134840.402553-11-okl-plv@napatech.com \
--to=okl-plv@napatech.com \
--cc=ckm@napatech.com \
--cc=dev@dpdk.org \
--cc=dvo-plv@napatech.com \
--cc=mko-plv@napatech.com \
--cc=sil-plv@napatech.com \
--cc=stephen@networkplumber.org \
--cc=thomas@monjalon.net \
/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).