* [PATCH v2 2/3] staging: r8188eu: Remove code depending on NAT25_LOOKUP
@ 2021-08-16 17:51 Fabio M. De Francesco
2021-08-16 19:52 ` Michael Straube
2021-08-17 17:55 ` Greg Kroah-Hartman
0 siblings, 2 replies; 4+ messages in thread
From: Fabio M. De Francesco @ 2021-08-16 17:51 UTC (permalink / raw)
To: Greg Kroah-Hartman, Larry Finger, Phillip Potter, Martin Kaiser,
Michael Straube, linux-staging, linux-kernel
Cc: Fabio M. De Francesco
Remove all the code related to the management of the NAT25_LOOKUP
method in nat25_db_handle(). The only function that used that method was
the now deleted nat25_handle_frame(). Remove the NAT25_LOOKUP entry from
the NAT25_METHOD enum because it is not anymore used everywhere else in
the code of the driver.
Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
---
v2: Patch rebased against the latest Greg K-H's tree.
drivers/staging/r8188eu/core/rtw_br_ext.c | 112 -------------------
drivers/staging/r8188eu/include/rtw_br_ext.h | 1 -
2 files changed, 113 deletions(-)
diff --git a/drivers/staging/r8188eu/core/rtw_br_ext.c b/drivers/staging/r8188eu/core/rtw_br_ext.c
index e8eea95a52e3..0402f48319c4 100644
--- a/drivers/staging/r8188eu/core/rtw_br_ext.c
+++ b/drivers/staging/r8188eu/core/rtw_br_ext.c
@@ -484,27 +484,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
__nat25_db_print(priv);
return 0;
- case NAT25_LOOKUP:
- DEBUG_INFO("NAT25: Lookup IP, SA =%08x, DA =%08x\n", iph->saddr, iph->daddr);
- tmp = be32_to_cpu(iph->daddr);
- __nat25_generate_ipv4_network_addr(networkAddr, &tmp);
-
- if (!__nat25_db_network_lookup_and_replace(priv, skb, networkAddr)) {
- if (*((unsigned char *)&iph->daddr + 3) == 0xff) {
- /* L2 is unicast but L3 is broadcast, make L2 bacome broadcast */
- DEBUG_INFO("NAT25: Set DA as boardcast\n");
- memset(skb->data, 0xff, ETH_ALEN);
- } else {
- /* forward unknow IP packet to upper TCP/IP */
- DEBUG_INFO("NAT25: Replace DA with BR's MAC\n");
- if ((*(u32 *)priv->br_mac) == 0 && (*(u16 *)(priv->br_mac+4)) == 0) {
- printk("Re-init netdev_br_init() due to br_mac == 0!\n");
- netdev_br_init(priv->pnetdev);
- }
- memcpy(skb->data, priv->br_mac, ETH_ALEN);
- }
- }
- return 0;
default:
return -1;
}
@@ -536,20 +515,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
__nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr);
__nat25_db_print(priv);
return 0;
- case NAT25_LOOKUP:
- DEBUG_INFO("NAT25: Lookup ARP\n");
-
- arp_ptr += arp->ar_hln;
- sender = (unsigned int *)arp_ptr;
- arp_ptr += (arp->ar_hln + arp->ar_pln);
- target = (unsigned int *)arp_ptr;
- __nat25_generate_ipv4_network_addr(networkAddr, target);
- __nat25_db_network_lookup_and_replace(priv, skb, networkAddr);
- /* change to ARP target mac address to Lookup result */
- arp_ptr = (unsigned char *)(arp + 1);
- arp_ptr += (arp->ar_hln + arp->ar_pln);
- memcpy(arp_ptr, skb->data, ETH_ALEN);
- return 0;
default:
return -1;
}
@@ -637,70 +602,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
priv->pppoe_connection_in_progress = 0;
}
return 0;
- case NAT25_LOOKUP:
- if (ph->code == PADO_CODE || ph->code == PADS_CODE) {
- if (priv->ethBrExtInfo.addPPPoETag) {
- struct pppoe_tag *tag;
- unsigned char *ptr;
- unsigned short tagType, tagLen;
- int offset = 0;
-
- ptr = __nat25_find_pppoe_tag(ph, ntohs(PTT_RELAY_SID));
- if (!ptr) {
- DEBUG_ERR("Fail to find PTT_RELAY_SID in FADO!\n");
- return -1;
- }
-
- tag = (struct pppoe_tag *)ptr;
- tagType = (unsigned short)((ptr[0] << 8) + ptr[1]);
- tagLen = (unsigned short)((ptr[2] << 8) + ptr[3]);
-
- if ((tagType != ntohs(PTT_RELAY_SID)) || (tagLen < (MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN))) {
- DEBUG_ERR("Invalid PTT_RELAY_SID tag length [%d]!\n", tagLen);
- return -1;
- }
-
- pMagic = (unsigned short *)tag->tag_data;
- if (ntohs(*pMagic) != MAGIC_CODE) {
- DEBUG_ERR("Can't find MAGIC_CODE in %s packet!\n",
- (ph->code == PADO_CODE ? "PADO" : "PADS"));
- return -1;
- }
-
- memcpy(skb->data, tag->tag_data+MAGIC_CODE_LEN, ETH_ALEN);
-
- if (tagLen > MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN)
- offset = TAG_HDR_LEN;
-
- if (skb_pull_and_merge(skb, ptr+offset, TAG_HDR_LEN+MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN-offset) < 0) {
- DEBUG_ERR("call skb_pull_and_merge() failed in PADO packet!\n");
- return -1;
- }
- ph->length = htons(ntohs(ph->length)-(TAG_HDR_LEN+MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN-offset));
- if (offset > 0)
- tag->tag_len = htons(tagLen-MAGIC_CODE_LEN-RTL_RELAY_TAG_LEN);
-
- DEBUG_INFO("NAT25: Lookup PPPoE, forward %s Packet from %s\n",
- (ph->code == PADO_CODE ? "PADO" : "PADS"), skb->dev->name);
- } else { /* not add relay tag */
- if (!priv->pppoe_connection_in_progress) {
- DEBUG_ERR("Discard PPPoE packet due to no connection in progresss!\n");
- return -1;
- }
- memcpy(skb->data, priv->pppoe_addr, ETH_ALEN);
- priv->pppoe_connection_in_progress = WAIT_TIME_PPPOE;
- }
- } else {
- if (ph->sid != 0) {
- DEBUG_INFO("NAT25: Lookup PPPoE, lookup session packet from %s\n", skb->dev->name);
- __nat25_generate_pppoe_network_addr(networkAddr, skb->data+ETH_ALEN, &ph->sid);
- __nat25_db_network_lookup_and_replace(priv, skb, networkAddr);
- __nat25_db_print(priv);
- } else {
- return -1;
- }
- }
- return 0;
default:
return -1;
}
@@ -713,8 +614,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
return -1;
case NAT25_INSERT:
return 0;
- case NAT25_LOOKUP:
- return 0;
default:
return -1;
}
@@ -727,8 +626,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
return -1;
case NAT25_INSERT:
return 0;
- case NAT25_LOOKUP:
- return 0;
default:
return -1;
}
@@ -775,15 +672,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
}
}
return 0;
- case NAT25_LOOKUP:
- DEBUG_INFO("NAT25: Lookup IP, SA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x, DA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x\n",
- iph->saddr.s6_addr16[0], iph->saddr.s6_addr16[1], iph->saddr.s6_addr16[2], iph->saddr.s6_addr16[3],
- iph->saddr.s6_addr16[4], iph->saddr.s6_addr16[5], iph->saddr.s6_addr16[6], iph->saddr.s6_addr16[7],
- iph->daddr.s6_addr16[0], iph->daddr.s6_addr16[1], iph->daddr.s6_addr16[2], iph->daddr.s6_addr16[3],
- iph->daddr.s6_addr16[4], iph->daddr.s6_addr16[5], iph->daddr.s6_addr16[6], iph->daddr.s6_addr16[7]);
- __nat25_generate_ipv6_network_addr(networkAddr, (unsigned int *)&iph->daddr);
- __nat25_db_network_lookup_and_replace(priv, skb, networkAddr);
- return 0;
default:
return -1;
}
diff --git a/drivers/staging/r8188eu/include/rtw_br_ext.h b/drivers/staging/r8188eu/include/rtw_br_ext.h
index 00d461c4c6fa..69905d30c191 100644
--- a/drivers/staging/r8188eu/include/rtw_br_ext.h
+++ b/drivers/staging/r8188eu/include/rtw_br_ext.h
@@ -31,7 +31,6 @@ enum NAT25_METHOD {
NAT25_MIN,
NAT25_CHECK,
NAT25_INSERT,
- NAT25_LOOKUP,
NAT25_PARSE,
NAT25_MAX
};
--
2.32.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/3] staging: r8188eu: Remove code depending on NAT25_LOOKUP
2021-08-16 17:51 [PATCH v2 2/3] staging: r8188eu: Remove code depending on NAT25_LOOKUP Fabio M. De Francesco
@ 2021-08-16 19:52 ` Michael Straube
2021-08-17 17:55 ` Greg Kroah-Hartman
1 sibling, 0 replies; 4+ messages in thread
From: Michael Straube @ 2021-08-16 19:52 UTC (permalink / raw)
To: Fabio M. De Francesco, Greg Kroah-Hartman, Larry Finger,
Phillip Potter, Martin Kaiser, linux-staging, linux-kernel
On 8/16/21 7:51 PM, Fabio M. De Francesco wrote:
> Remove all the code related to the management of the NAT25_LOOKUP
> method in nat25_db_handle(). The only function that used that method was
> the now deleted nat25_handle_frame(). Remove the NAT25_LOOKUP entry from
> the NAT25_METHOD enum because it is not anymore used everywhere else in
> the code of the driver.
>
> Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
> ---
>
> v2: Patch rebased against the latest Greg K-H's tree.
>
> drivers/staging/r8188eu/core/rtw_br_ext.c | 112 -------------------
> drivers/staging/r8188eu/include/rtw_br_ext.h | 1 -
> 2 files changed, 113 deletions(-)
>
> diff --git a/drivers/staging/r8188eu/core/rtw_br_ext.c b/drivers/staging/r8188eu/core/rtw_br_ext.c
> index e8eea95a52e3..0402f48319c4 100644
> --- a/drivers/staging/r8188eu/core/rtw_br_ext.c
> +++ b/drivers/staging/r8188eu/core/rtw_br_ext.c
> @@ -484,27 +484,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
>
> __nat25_db_print(priv);
> return 0;
> - case NAT25_LOOKUP:
> - DEBUG_INFO("NAT25: Lookup IP, SA =%08x, DA =%08x\n", iph->saddr, iph->daddr);
> - tmp = be32_to_cpu(iph->daddr);
> - __nat25_generate_ipv4_network_addr(networkAddr, &tmp);
> -
> - if (!__nat25_db_network_lookup_and_replace(priv, skb, networkAddr)) {
> - if (*((unsigned char *)&iph->daddr + 3) == 0xff) {
> - /* L2 is unicast but L3 is broadcast, make L2 bacome broadcast */
> - DEBUG_INFO("NAT25: Set DA as boardcast\n");
> - memset(skb->data, 0xff, ETH_ALEN);
> - } else {
> - /* forward unknow IP packet to upper TCP/IP */
> - DEBUG_INFO("NAT25: Replace DA with BR's MAC\n");
> - if ((*(u32 *)priv->br_mac) == 0 && (*(u16 *)(priv->br_mac+4)) == 0) {
> - printk("Re-init netdev_br_init() due to br_mac == 0!\n");
> - netdev_br_init(priv->pnetdev);
> - }
> - memcpy(skb->data, priv->br_mac, ETH_ALEN);
> - }
> - }
> - return 0;
> default:
> return -1;
> }
> @@ -536,20 +515,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
> __nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr);
> __nat25_db_print(priv);
> return 0;
> - case NAT25_LOOKUP:
> - DEBUG_INFO("NAT25: Lookup ARP\n");
> -
> - arp_ptr += arp->ar_hln;
> - sender = (unsigned int *)arp_ptr;
> - arp_ptr += (arp->ar_hln + arp->ar_pln);
> - target = (unsigned int *)arp_ptr;
> - __nat25_generate_ipv4_network_addr(networkAddr, target);
> - __nat25_db_network_lookup_and_replace(priv, skb, networkAddr);
> - /* change to ARP target mac address to Lookup result */
> - arp_ptr = (unsigned char *)(arp + 1);
> - arp_ptr += (arp->ar_hln + arp->ar_pln);
> - memcpy(arp_ptr, skb->data, ETH_ALEN);
> - return 0;
> default:
> return -1;
> }
> @@ -637,70 +602,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
> priv->pppoe_connection_in_progress = 0;
> }
> return 0;
> - case NAT25_LOOKUP:
> - if (ph->code == PADO_CODE || ph->code == PADS_CODE) {
> - if (priv->ethBrExtInfo.addPPPoETag) {
> - struct pppoe_tag *tag;
> - unsigned char *ptr;
> - unsigned short tagType, tagLen;
> - int offset = 0;
> -
> - ptr = __nat25_find_pppoe_tag(ph, ntohs(PTT_RELAY_SID));
> - if (!ptr) {
> - DEBUG_ERR("Fail to find PTT_RELAY_SID in FADO!\n");
> - return -1;
> - }
> -
> - tag = (struct pppoe_tag *)ptr;
> - tagType = (unsigned short)((ptr[0] << 8) + ptr[1]);
> - tagLen = (unsigned short)((ptr[2] << 8) + ptr[3]);
> -
> - if ((tagType != ntohs(PTT_RELAY_SID)) || (tagLen < (MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN))) {
> - DEBUG_ERR("Invalid PTT_RELAY_SID tag length [%d]!\n", tagLen);
> - return -1;
> - }
> -
> - pMagic = (unsigned short *)tag->tag_data;
> - if (ntohs(*pMagic) != MAGIC_CODE) {
> - DEBUG_ERR("Can't find MAGIC_CODE in %s packet!\n",
> - (ph->code == PADO_CODE ? "PADO" : "PADS"));
> - return -1;
> - }
> -
> - memcpy(skb->data, tag->tag_data+MAGIC_CODE_LEN, ETH_ALEN);
> -
> - if (tagLen > MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN)
> - offset = TAG_HDR_LEN;
> -
> - if (skb_pull_and_merge(skb, ptr+offset, TAG_HDR_LEN+MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN-offset) < 0) {
> - DEBUG_ERR("call skb_pull_and_merge() failed in PADO packet!\n");
> - return -1;
> - }
> - ph->length = htons(ntohs(ph->length)-(TAG_HDR_LEN+MAGIC_CODE_LEN+RTL_RELAY_TAG_LEN-offset));
> - if (offset > 0)
> - tag->tag_len = htons(tagLen-MAGIC_CODE_LEN-RTL_RELAY_TAG_LEN);
> -
> - DEBUG_INFO("NAT25: Lookup PPPoE, forward %s Packet from %s\n",
> - (ph->code == PADO_CODE ? "PADO" : "PADS"), skb->dev->name);
> - } else { /* not add relay tag */
> - if (!priv->pppoe_connection_in_progress) {
> - DEBUG_ERR("Discard PPPoE packet due to no connection in progresss!\n");
> - return -1;
> - }
> - memcpy(skb->data, priv->pppoe_addr, ETH_ALEN);
> - priv->pppoe_connection_in_progress = WAIT_TIME_PPPOE;
> - }
> - } else {
> - if (ph->sid != 0) {
> - DEBUG_INFO("NAT25: Lookup PPPoE, lookup session packet from %s\n", skb->dev->name);
> - __nat25_generate_pppoe_network_addr(networkAddr, skb->data+ETH_ALEN, &ph->sid);
> - __nat25_db_network_lookup_and_replace(priv, skb, networkAddr);
> - __nat25_db_print(priv);
> - } else {
> - return -1;
> - }
> - }
> - return 0;
> default:
> return -1;
> }
> @@ -713,8 +614,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
> return -1;
> case NAT25_INSERT:
> return 0;
> - case NAT25_LOOKUP:
> - return 0;
> default:
> return -1;
> }
> @@ -727,8 +626,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
> return -1;
> case NAT25_INSERT:
> return 0;
> - case NAT25_LOOKUP:
> - return 0;
> default:
> return -1;
> }
> @@ -775,15 +672,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
> }
> }
> return 0;
> - case NAT25_LOOKUP:
> - DEBUG_INFO("NAT25: Lookup IP, SA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x, DA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x\n",
> - iph->saddr.s6_addr16[0], iph->saddr.s6_addr16[1], iph->saddr.s6_addr16[2], iph->saddr.s6_addr16[3],
> - iph->saddr.s6_addr16[4], iph->saddr.s6_addr16[5], iph->saddr.s6_addr16[6], iph->saddr.s6_addr16[7],
> - iph->daddr.s6_addr16[0], iph->daddr.s6_addr16[1], iph->daddr.s6_addr16[2], iph->daddr.s6_addr16[3],
> - iph->daddr.s6_addr16[4], iph->daddr.s6_addr16[5], iph->daddr.s6_addr16[6], iph->daddr.s6_addr16[7]);
> - __nat25_generate_ipv6_network_addr(networkAddr, (unsigned int *)&iph->daddr);
> - __nat25_db_network_lookup_and_replace(priv, skb, networkAddr);
> - return 0;
> default:
> return -1;
> }
> diff --git a/drivers/staging/r8188eu/include/rtw_br_ext.h b/drivers/staging/r8188eu/include/rtw_br_ext.h
> index 00d461c4c6fa..69905d30c191 100644
> --- a/drivers/staging/r8188eu/include/rtw_br_ext.h
> +++ b/drivers/staging/r8188eu/include/rtw_br_ext.h
> @@ -31,7 +31,6 @@ enum NAT25_METHOD {
> NAT25_MIN,
> NAT25_CHECK,
> NAT25_INSERT,
> - NAT25_LOOKUP,
> NAT25_PARSE,
> NAT25_MAX
> };
>
Acked-by: Michael Straube <straube.linux@gmail.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/3] staging: r8188eu: Remove code depending on NAT25_LOOKUP
2021-08-16 17:51 [PATCH v2 2/3] staging: r8188eu: Remove code depending on NAT25_LOOKUP Fabio M. De Francesco
2021-08-16 19:52 ` Michael Straube
@ 2021-08-17 17:55 ` Greg Kroah-Hartman
2021-08-17 20:21 ` Fabio M. De Francesco
1 sibling, 1 reply; 4+ messages in thread
From: Greg Kroah-Hartman @ 2021-08-17 17:55 UTC (permalink / raw)
To: Fabio M. De Francesco
Cc: Larry Finger, Phillip Potter, Martin Kaiser, Michael Straube,
linux-staging, linux-kernel
On Mon, Aug 16, 2021 at 07:51:38PM +0200, Fabio M. De Francesco wrote:
> Remove all the code related to the management of the NAT25_LOOKUP
> method in nat25_db_handle(). The only function that used that method was
> the now deleted nat25_handle_frame(). Remove the NAT25_LOOKUP entry from
> the NAT25_METHOD enum because it is not anymore used everywhere else in
> the code of the driver.
>
> Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
> ---
>
> v2: Patch rebased against the latest Greg K-H's tree.
>
> drivers/staging/r8188eu/core/rtw_br_ext.c | 112 -------------------
> drivers/staging/r8188eu/include/rtw_br_ext.h | 1 -
> 2 files changed, 113 deletions(-)
This change adds a build warning, which is not allowed.
Please merge this, and the 3/3 patch into a single change, so that it
all is removed together, causing no build warnings at any point in time.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/3] staging: r8188eu: Remove code depending on NAT25_LOOKUP
2021-08-17 17:55 ` Greg Kroah-Hartman
@ 2021-08-17 20:21 ` Fabio M. De Francesco
0 siblings, 0 replies; 4+ messages in thread
From: Fabio M. De Francesco @ 2021-08-17 20:21 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Larry Finger, Phillip Potter, Martin Kaiser, Michael Straube,
linux-staging, linux-kernel
On Tuesday, August 17, 2021 7:55:36 PM CEST Greg Kroah-Hartman wrote:
> On Mon, Aug 16, 2021 at 07:51:38PM +0200, Fabio M. De Francesco wrote:
> > Remove all the code related to the management of the NAT25_LOOKUP
> > method in nat25_db_handle(). The only function that used that method was
> > the now deleted nat25_handle_frame(). Remove the NAT25_LOOKUP entry from
> > the NAT25_METHOD enum because it is not anymore used everywhere else in
> > the code of the driver.
> >
> > Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
> > ---
> >
> > v2: Patch rebased against the latest Greg K-H's tree.
> >
> > drivers/staging/r8188eu/core/rtw_br_ext.c | 112 -------------------
> > drivers/staging/r8188eu/include/rtw_br_ext.h | 1 -
> > 2 files changed, 113 deletions(-)
>
> This change adds a build warning, which is not allowed.
>
> Please merge this, and the 3/3 patch into a single change, so that it
> all is removed together, causing no build warnings at any point in time.
Sorry, I didn't know that, within a series, no patch is allowed to add build warning
that are then fixed by the following ones. I did it for the purpose of splitting
different logical changes into different patches and the removal of code
related to NAT25_LOOKUP (2/3) introduced some warnings about a function
and a variable that were not anymore used. Patch 3/3 had the changes that
removed the above-mentioned no more used objects.
According to your request, now I've merged 2/3 and 3/3 into a single v3 patch.
I had to drop the numbering of the patch because neither 2/3 or 2/2 seemed
appropriate to me after the merge. I hope it was the right thing to do. If not,
let me know, please.
Please see:
https://lore.kernel.org/lkml/20210817185723.15192-1-fmdefrancesco@gmail.com
Thanks,
Fabio
> thanks,
>
> greg k-h
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-08-17 20:21 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-08-16 17:51 [PATCH v2 2/3] staging: r8188eu: Remove code depending on NAT25_LOOKUP Fabio M. De Francesco
2021-08-16 19:52 ` Michael Straube
2021-08-17 17:55 ` Greg Kroah-Hartman
2021-08-17 20:21 ` Fabio M. De Francesco
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.