* [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API
@ 2018-03-28 0:15 Rasesh Mody
2018-03-28 0:15 ` [dpdk-dev] [PATCH 2/5] net/qede: enable IPGRE offload support Rasesh Mody
` (5 more replies)
0 siblings, 6 replies; 9+ messages in thread
From: Rasesh Mody @ 2018-03-28 0:15 UTC (permalink / raw)
To: dev; +Cc: Harish Patil, ferruh.yigit, Dept-EngDPDKDev, Rasesh Mody
From: Harish Patil <harish.patil@cavium.com>
Ethdev RX/TX offloads API has changed since:
commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API")
commit cba7f53b717d ("ethdev: introduce Tx queue offloads API")
This patch makes use of new offload flags as suggested and fix
the default RX/TX configuration. Also indent the code properly
around those changes.
Signed-off-by: Harish Patil <harish.patil@cavium.com>
Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
drivers/net/qede/qede_ethdev.c | 103 ++++++++++++++++++++++------------------
drivers/net/qede/qede_rxtx.c | 2 +-
drivers/net/qede/qede_rxtx.h | 2 -
3 files changed, 59 insertions(+), 48 deletions(-)
diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index a91f436..6a51e3d 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -591,6 +591,8 @@ int qede_enable_tpa(struct rte_eth_dev *eth_dev, bool flg)
}
}
qdev->enable_lro = flg;
+ eth_dev->data->lro = flg;
+
DP_INFO(edev, "LRO is %s\n", flg ? "enabled" : "disabled");
return 0;
@@ -1166,10 +1168,10 @@ static int qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)
{
struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
- struct rte_eth_rxmode *rxmode = ð_dev->data->dev_conf.rxmode;
+ uint64_t rx_offloads = eth_dev->data->dev_conf.rxmode.offloads;
if (mask & ETH_VLAN_STRIP_MASK) {
- if (rxmode->hw_vlan_strip)
+ if (rx_offloads & DEV_RX_OFFLOAD_VLAN_STRIP)
(void)qede_vlan_stripping(eth_dev, 1);
else
(void)qede_vlan_stripping(eth_dev, 0);
@@ -1177,7 +1179,7 @@ static int qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)
if (mask & ETH_VLAN_FILTER_MASK) {
/* VLAN filtering kicks in when a VLAN is added */
- if (rxmode->hw_vlan_filter) {
+ if (rx_offloads & DEV_RX_OFFLOAD_VLAN_FILTER) {
qede_vlan_filter_set(eth_dev, 0, 1);
} else {
if (qdev->configured_vlans > 1) { /* Excluding VLAN0 */
@@ -1187,7 +1189,8 @@ static int qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)
/* Signal app that VLAN filtering is still
* enabled
*/
- rxmode->hw_vlan_filter = true;
+ eth_dev->data->dev_conf.rxmode.offloads |=
+ DEV_RX_OFFLOAD_VLAN_FILTER;
} else {
qede_vlan_filter_set(eth_dev, 0, 0);
}
@@ -1195,13 +1198,11 @@ static int qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)
}
if (mask & ETH_VLAN_EXTEND_MASK)
- DP_INFO(edev, "No offloads are supported with VLAN Q-in-Q"
- " and classification is based on outer tag only\n");
+ DP_ERR(edev, "Extend VLAN not supported\n");
qdev->vlan_offload_mask = mask;
- DP_INFO(edev, "vlan offload mask %d vlan-strip %d vlan-filter %d\n",
- mask, rxmode->hw_vlan_strip, rxmode->hw_vlan_filter);
+ DP_INFO(edev, "VLAN offload mask %d\n", mask);
return 0;
}
@@ -1267,19 +1268,19 @@ static void qede_fastpath_start(struct ecore_dev *edev)
static int qede_dev_start(struct rte_eth_dev *eth_dev)
{
- struct rte_eth_rxmode *rxmode = ð_dev->data->dev_conf.rxmode;
struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
+ struct rte_eth_rxmode *rxmode = ð_dev->data->dev_conf.rxmode;
PMD_INIT_FUNC_TRACE(edev);
/* Configure TPA parameters */
- if (rxmode->enable_lro) {
+ if (rxmode->offloads & DEV_RX_OFFLOAD_TCP_LRO) {
if (qede_enable_tpa(eth_dev, true))
return -EINVAL;
/* Enable scatter mode for LRO */
- if (!rxmode->enable_scatter)
- eth_dev->data->scattered_rx = 1;
+ if (!eth_dev->data->scattered_rx)
+ rxmode->offloads |= DEV_RX_OFFLOAD_SCATTER;
}
/* Start queues */
@@ -1294,7 +1295,7 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev)
* Also, we would like to retain similar behavior in PF case, so we
* don't do PF/VF specific check here.
*/
- if (rxmode->mq_mode == ETH_MQ_RX_RSS)
+ if (eth_dev->data->dev_conf.rxmode.mq_mode == ETH_MQ_RX_RSS)
if (qede_config_rss(eth_dev))
goto err;
@@ -1411,15 +1412,15 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
/* Check requirements for 100G mode */
if (ECORE_IS_CMT(edev)) {
if (eth_dev->data->nb_rx_queues < 2 ||
- eth_dev->data->nb_tx_queues < 2) {
+ eth_dev->data->nb_tx_queues < 2) {
DP_ERR(edev, "100G mode needs min. 2 RX/TX queues\n");
return -EINVAL;
}
if ((eth_dev->data->nb_rx_queues % 2 != 0) ||
- (eth_dev->data->nb_tx_queues % 2 != 0)) {
+ (eth_dev->data->nb_tx_queues % 2 != 0)) {
DP_ERR(edev,
- "100G mode needs even no. of RX/TX queues\n");
+ "100G mode needs even no. of RX/TX queues\n");
return -EINVAL;
}
}
@@ -1439,20 +1440,8 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
if (qede_args(eth_dev))
return -ENOTSUP;
- /* Sanity checks and throw warnings */
- if (rxmode->enable_scatter)
- eth_dev->data->scattered_rx = 1;
-
- if (!rxmode->hw_strip_crc)
- DP_INFO(edev, "L2 CRC stripping is always enabled in hw\n");
-
- if (!rxmode->hw_ip_checksum)
- DP_INFO(edev, "IP/UDP/TCP checksum offload is always enabled "
- "in hw\n");
- if (rxmode->header_split)
- DP_INFO(edev, "Header split enable is not supported\n");
- if (!(rxmode->mq_mode == ETH_MQ_RX_NONE || rxmode->mq_mode ==
- ETH_MQ_RX_RSS)) {
+ if (!(rxmode->mq_mode == ETH_MQ_RX_NONE ||
+ rxmode->mq_mode == ETH_MQ_RX_RSS)) {
DP_ERR(edev, "Unsupported multi-queue mode\n");
return -ENOTSUP;
}
@@ -1467,19 +1456,23 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
return -ENOMEM;
/* If jumbo enabled adjust MTU */
- if (eth_dev->data->dev_conf.rxmode.jumbo_frame)
+ if (rxmode->offloads & DEV_RX_OFFLOAD_JUMBO_FRAME)
eth_dev->data->mtu =
- eth_dev->data->dev_conf.rxmode.max_rx_pkt_len -
- ETHER_HDR_LEN - ETHER_CRC_LEN;
+ eth_dev->data->dev_conf.rxmode.max_rx_pkt_len -
+ ETHER_HDR_LEN - ETHER_CRC_LEN;
+
+ if (rxmode->offloads & DEV_RX_OFFLOAD_SCATTER)
+ eth_dev->data->scattered_rx = 1;
if (qede_start_vport(qdev, eth_dev->data->mtu))
return -1;
+
qdev->mtu = eth_dev->data->mtu;
/* Enable VLAN offloads by default */
ret = qede_vlan_offload_set(eth_dev, ETH_VLAN_STRIP_MASK |
- ETH_VLAN_FILTER_MASK |
- ETH_VLAN_EXTEND_MASK);
+ ETH_VLAN_FILTER_MASK |
+ ETH_VLAN_EXTEND_MASK);
if (ret)
return ret;
@@ -1534,26 +1527,46 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
dev_info->reta_size = ECORE_RSS_IND_TABLE_SIZE;
dev_info->hash_key_size = ECORE_RSS_KEY_SIZE * sizeof(uint32_t);
dev_info->flow_type_rss_offloads = (uint64_t)QEDE_RSS_OFFLOAD_ALL;
-
- dev_info->default_txconf = (struct rte_eth_txconf) {
- .txq_flags = QEDE_TXQ_FLAGS,
- };
-
- dev_info->rx_offload_capa = (DEV_RX_OFFLOAD_VLAN_STRIP |
- DEV_RX_OFFLOAD_IPV4_CKSUM |
+ dev_info->rx_offload_capa = (DEV_RX_OFFLOAD_IPV4_CKSUM |
DEV_RX_OFFLOAD_UDP_CKSUM |
DEV_RX_OFFLOAD_TCP_CKSUM |
DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM |
- DEV_RX_OFFLOAD_TCP_LRO);
-
+ DEV_RX_OFFLOAD_TCP_LRO |
+ DEV_RX_OFFLOAD_CRC_STRIP |
+ DEV_RX_OFFLOAD_SCATTER |
+ DEV_RX_OFFLOAD_JUMBO_FRAME |
+ DEV_RX_OFFLOAD_VLAN_FILTER |
+ DEV_RX_OFFLOAD_VLAN_STRIP);
+ dev_info->rx_queue_offload_capa = 0;
+
+ /* TX offloads are on a per-packet basis, so it is applicable
+ * to both at port and queue levels.
+ */
dev_info->tx_offload_capa = (DEV_TX_OFFLOAD_VLAN_INSERT |
DEV_TX_OFFLOAD_IPV4_CKSUM |
DEV_TX_OFFLOAD_UDP_CKSUM |
DEV_TX_OFFLOAD_TCP_CKSUM |
DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM |
- DEV_TX_OFFLOAD_TCP_TSO |
+ DEV_TX_OFFLOAD_QINQ_INSERT |
+ DEV_TX_OFFLOAD_MULTI_SEGS |
+ DEV_TX_OFFLOAD_TCP_TSO |
DEV_TX_OFFLOAD_VXLAN_TNL_TSO |
DEV_TX_OFFLOAD_GENEVE_TNL_TSO);
+ dev_info->tx_queue_offload_capa = dev_info->tx_offload_capa;
+
+ dev_info->default_txconf = (struct rte_eth_txconf) {
+ .txq_flags = DEV_TX_OFFLOAD_MULTI_SEGS,
+ };
+
+ dev_info->default_rxconf = (struct rte_eth_rxconf) {
+ /* Packets are always dropped if no descriptors are available */
+ .rx_drop_en = 1,
+ /* The below RX offloads are always enabled */
+ .offloads = (DEV_RX_OFFLOAD_CRC_STRIP |
+ DEV_RX_OFFLOAD_IPV4_CKSUM |
+ DEV_RX_OFFLOAD_TCP_CKSUM |
+ DEV_RX_OFFLOAD_UDP_CKSUM),
+ };
memset(&link, 0, sizeof(struct qed_link_output));
qdev->ops->common->get_link(edev, &link);
diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c
index 0de7c6b..e9fe46c 100644
--- a/drivers/net/qede/qede_rxtx.c
+++ b/drivers/net/qede/qede_rxtx.c
@@ -87,7 +87,7 @@ static inline int qede_alloc_rx_buffer(struct qede_rx_queue *rxq)
/* Fix up RX buffer size */
bufsz = (uint16_t)rte_pktmbuf_data_room_size(mp) - RTE_PKTMBUF_HEADROOM;
- if ((rxmode->enable_scatter) ||
+ if ((rxmode->offloads & DEV_RX_OFFLOAD_SCATTER) ||
(max_rx_pkt_len + QEDE_ETH_OVERHEAD) > bufsz) {
if (!dev->data->scattered_rx) {
DP_INFO(edev, "Forcing scatter-gather mode\n");
diff --git a/drivers/net/qede/qede_rxtx.h b/drivers/net/qede/qede_rxtx.h
index f1d3666..a2dc9e7 100644
--- a/drivers/net/qede/qede_rxtx.h
+++ b/drivers/net/qede/qede_rxtx.h
@@ -76,8 +76,6 @@
ETH_RSS_VXLAN |\
ETH_RSS_GENEVE)
-#define QEDE_TXQ_FLAGS ((uint32_t)ETH_TXQ_FLAGS_NOMULTSEGS)
-
#define for_each_rss(i) for (i = 0; i < qdev->num_rx_queues; i++)
#define for_each_tss(i) for (i = 0; i < qdev->num_tx_queues; i++)
#define QEDE_RXTX_MAX(qdev) \
--
1.7.10.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [dpdk-dev] [PATCH 2/5] net/qede: enable IPGRE offload support
2018-03-28 0:15 [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API Rasesh Mody
@ 2018-03-28 0:15 ` Rasesh Mody
2018-03-28 0:15 ` [dpdk-dev] [PATCH 3/5] net/qede: add devarg to disable NPAR Tx switching Rasesh Mody
` (4 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Rasesh Mody @ 2018-03-28 0:15 UTC (permalink / raw)
To: dev; +Cc: Harish Patil, ferruh.yigit, Dept-EngDPDKDev
From: Harish Patil <harish.patil@cavium.com>
Signed-off-by: Harish Patil <harish.patil@cavium.com>
---
drivers/net/qede/qede_ethdev.c | 49 ++++++++++++++++++++++++++++++++++------
drivers/net/qede/qede_ethdev.h | 7 +++---
drivers/net/qede/qede_rxtx.c | 14 +++++-------
drivers/net/qede/qede_rxtx.h | 3 ++-
4 files changed, 54 insertions(+), 19 deletions(-)
diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index 6a51e3d..f25fb91 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -782,6 +782,36 @@ static void qede_set_ucast_cmn_params(struct ecore_filter_ucast *ucast)
}
static int
+qede_ipgre_enable(struct rte_eth_dev *eth_dev, uint8_t clss,
+ bool enable)
+{
+ struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
+ struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
+ enum _ecore_status_t rc = ECORE_INVAL;
+ struct ecore_tunnel_info tunn;
+
+ memset(&tunn, 0, sizeof(struct ecore_tunnel_info));
+ tunn.ip_gre.b_update_mode = true;
+ tunn.ip_gre.b_mode_enabled = enable;
+ tunn.ip_gre.tun_cls = clss;
+ tunn.ip_gre.tun_cls = clss;
+ tunn.b_update_rx_cls = true;
+ tunn.b_update_tx_cls = true;
+
+ rc = qede_tunnel_update(qdev, &tunn);
+ if (rc == ECORE_SUCCESS) {
+ qdev->ipgre.enable = enable;
+ DP_INFO(edev, "IPGRE is %s\n",
+ enable ? "enabled" : "disabled");
+ } else {
+ DP_ERR(edev, "Failed to update tunn_clss %u\n",
+ clss);
+ }
+
+ return rc;
+}
+
+static int
qede_tunn_enable(struct rte_eth_dev *eth_dev, uint8_t clss,
enum rte_eth_tunnel_type tunn_type, bool enable)
{
@@ -794,6 +824,9 @@ static void qede_set_ucast_cmn_params(struct ecore_filter_ucast *ucast)
case RTE_TUNNEL_TYPE_GENEVE:
rc = qede_geneve_enable(eth_dev, clss, enable);
break;
+ case RTE_TUNNEL_TYPE_IP_IN_GRE:
+ rc = qede_ipgre_enable(eth_dev, clss, enable);
+ break;
default:
rc = -EINVAL;
break;
@@ -2078,6 +2111,7 @@ static int qede_flow_ctrl_get(struct rte_eth_dev *eth_dev,
RTE_PTYPE_TUNNEL_VXLAN,
RTE_PTYPE_L4_FRAG,
RTE_PTYPE_TUNNEL_GENEVE,
+ RTE_PTYPE_TUNNEL_GRE,
/* Inner */
RTE_PTYPE_INNER_L2_ETHER,
RTE_PTYPE_INNER_L2_ETHER_VLAN,
@@ -2501,7 +2535,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
ECORE_TUNN_CLSS_MAC_VLAN, false);
break;
-
case RTE_TUNNEL_TYPE_GENEVE:
if (qdev->geneve.udp_port != tunnel_udp->udp_port) {
DP_ERR(edev, "UDP port %u doesn't exist\n",
@@ -2591,7 +2624,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
qdev->vxlan.udp_port = udp_port;
break;
-
case RTE_TUNNEL_TYPE_GENEVE:
if (qdev->geneve.udp_port == tunnel_udp->udp_port) {
DP_INFO(edev,
@@ -2629,7 +2661,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
qdev->geneve.udp_port = udp_port;
break;
-
default:
return ECORE_INVAL;
}
@@ -2795,7 +2826,8 @@ static void qede_get_ecore_tunn_params(uint32_t filter, uint32_t *type,
qdev->geneve.filter_type = conf->filter_type;
}
- if (!qdev->vxlan.enable || !qdev->geneve.enable)
+ if (!qdev->vxlan.enable || !qdev->geneve.enable ||
+ !qdev->ipgre.enable)
return qede_tunn_enable(eth_dev, clss,
conf->tunnel_type,
true);
@@ -2831,15 +2863,14 @@ int qede_dev_filter_ctrl(struct rte_eth_dev *eth_dev,
switch (filter_conf->tunnel_type) {
case RTE_TUNNEL_TYPE_VXLAN:
case RTE_TUNNEL_TYPE_GENEVE:
+ case RTE_TUNNEL_TYPE_IP_IN_GRE:
DP_INFO(edev,
"Packet steering to the specified Rx queue"
" is not supported with UDP tunneling");
return(qede_tunn_filter_config(eth_dev, filter_op,
filter_conf));
- /* Place holders for future tunneling support */
case RTE_TUNNEL_TYPE_TEREDO:
case RTE_TUNNEL_TYPE_NVGRE:
- case RTE_TUNNEL_TYPE_IP_IN_GRE:
case RTE_L2_TUNNEL_TYPE_E_TAG:
DP_ERR(edev, "Unsupported tunnel type %d\n",
filter_conf->tunnel_type);
@@ -3138,19 +3169,23 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
/* VF tunnel offloads is enabled by default in PF driver */
adapter->vxlan.num_filters = 0;
adapter->geneve.num_filters = 0;
+ adapter->ipgre.num_filters = 0;
if (is_vf) {
adapter->vxlan.enable = true;
adapter->vxlan.filter_type = ETH_TUNNEL_FILTER_IMAC |
ETH_TUNNEL_FILTER_IVLAN;
adapter->vxlan.udp_port = QEDE_VXLAN_DEF_PORT;
adapter->geneve.enable = true;
-
adapter->geneve.filter_type = ETH_TUNNEL_FILTER_IMAC |
ETH_TUNNEL_FILTER_IVLAN;
adapter->geneve.udp_port = QEDE_GENEVE_DEF_PORT;
+ adapter->ipgre.enable = true;
+ adapter->ipgre.filter_type = ETH_TUNNEL_FILTER_IMAC |
+ ETH_TUNNEL_FILTER_IVLAN;
} else {
adapter->vxlan.enable = false;
adapter->geneve.enable = false;
+ adapter->ipgre.enable = false;
}
DP_INFO(edev, "MAC address : %02x:%02x:%02x:%02x:%02x:%02x\n",
diff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h
index 23f7e0e..baae22d 100644
--- a/drivers/net/qede/qede_ethdev.h
+++ b/drivers/net/qede/qede_ethdev.h
@@ -170,7 +170,7 @@ struct qede_fdir_info {
#define QEDE_VXLAN_DEF_PORT (4789)
#define QEDE_GENEVE_DEF_PORT (6081)
-struct qede_udp_tunn {
+struct qede_tunn_params {
bool enable;
uint16_t num_filters;
uint16_t filter_type;
@@ -205,8 +205,9 @@ struct qede_dev {
SLIST_HEAD(uc_list_head, qede_ucast_entry) uc_list_head;
uint16_t num_uc_addr;
bool handle_hw_err;
- struct qede_udp_tunn vxlan;
- struct qede_udp_tunn geneve;
+ struct qede_tunn_params vxlan;
+ struct qede_tunn_params geneve;
+ struct qede_tunn_params ipgre;
struct qede_fdir_info fdir_info;
bool vlan_strip_flg;
char drv_ver[QEDE_PMD_DRV_VER_STR_SIZE];
diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c
index e9fe46c..20c10be 100644
--- a/drivers/net/qede/qede_rxtx.c
+++ b/drivers/net/qede/qede_rxtx.c
@@ -1837,17 +1837,14 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags)
* offloads. Don't rely on pkt_type marked by Rx, instead use
* tx_ol_flags to decide.
*/
- if (((tx_ol_flags & PKT_TX_TUNNEL_MASK) ==
- PKT_TX_TUNNEL_VXLAN) ||
- ((tx_ol_flags & PKT_TX_TUNNEL_MASK) ==
- PKT_TX_TUNNEL_MPLSINUDP) ||
- ((tx_ol_flags & PKT_TX_TUNNEL_MASK) ==
- PKT_TX_TUNNEL_GENEVE)) {
+ tunn_flg = !!(tx_ol_flags & PKT_TX_TUNNEL_MASK);
+
+ if (tunn_flg) {
/* Check against max which is Tunnel IPv6 + ext */
if (unlikely(txq->nb_tx_avail <
ETH_TX_MIN_BDS_PER_TUNN_IPV6_WITH_EXT_PKT))
break;
- tunn_flg = true;
+
/* First indicate its a tunnel pkt */
bd1_bf |= ETH_TX_DATA_1ST_BD_TUNN_FLAG_MASK <<
ETH_TX_DATA_1ST_BD_TUNN_FLAG_SHIFT;
@@ -1986,7 +1983,8 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags)
* csum offload is requested then we need to force
* recalculation of L4 tunnel header csum also.
*/
- if (tunn_flg) {
+ if (tunn_flg && ((tx_ol_flags & PKT_TX_TUNNEL_MASK) !=
+ PKT_TX_TUNNEL_GRE)) {
bd1_bd_flags_bf |=
ETH_TX_1ST_BD_FLAGS_TUNN_L4_CSUM_MASK <<
ETH_TX_1ST_BD_FLAGS_TUNN_L4_CSUM_SHIFT;
diff --git a/drivers/net/qede/qede_rxtx.h b/drivers/net/qede/qede_rxtx.h
index a2dc9e7..3c66df0 100644
--- a/drivers/net/qede/qede_rxtx.h
+++ b/drivers/net/qede/qede_rxtx.h
@@ -151,7 +151,8 @@
PKT_TX_VLAN_PKT | \
PKT_TX_TUNNEL_VXLAN | \
PKT_TX_TUNNEL_GENEVE | \
- PKT_TX_TUNNEL_MPLSINUDP)
+ PKT_TX_TUNNEL_MPLSINUDP | \
+ PKT_TX_TUNNEL_GRE)
#define QEDE_TX_OFFLOAD_NOTSUP_MASK \
(PKT_TX_OFFLOAD_MASK ^ QEDE_TX_OFFLOAD_MASK)
--
1.7.10.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [dpdk-dev] [PATCH 3/5] net/qede: add devarg to disable NPAR Tx switching
2018-03-28 0:15 [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API Rasesh Mody
2018-03-28 0:15 ` [dpdk-dev] [PATCH 2/5] net/qede: enable IPGRE offload support Rasesh Mody
@ 2018-03-28 0:15 ` Rasesh Mody
2018-03-28 0:15 ` [dpdk-dev] [PATCH 4/5] net/qede: fix device stop to remove primary MAC Rasesh Mody
` (3 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Rasesh Mody @ 2018-03-28 0:15 UTC (permalink / raw)
To: dev; +Cc: Rasesh Mody, ferruh.yigit, Dept-EngDPDKDev
Added a run-time argument npar_tx_switching to enable/disable
Tx switching for multi-fucntion devices (NPAR).
Rename vf_txswitch option to vf_tx_switching.
Sample usage to disable Tx switching for NPAR or VF is something like...
-w 05:00.0,npar_tx_switching=0 -w 05:00.1,npar_tx_switching=0
-w 05:00.0,vf_tx_switching=0 -w 05:00.1,vf_tx_switching=0
Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
drivers/net/qede/qede_ethdev.c | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index f25fb91..025cd2a 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -499,6 +499,9 @@ static void qede_reset_queue_stats(struct qede_dev *qdev, bool xstats)
return 0;
}
+#define QEDE_NPAR_TX_SWITCHING "npar_tx_switching"
+#define QEDE_VF_TX_SWITCHING "vf_tx_switching"
+
/* Activate or deactivate vport via vport-update */
int qede_activate_vport(struct rte_eth_dev *eth_dev, bool flg)
{
@@ -516,10 +519,12 @@ int qede_activate_vport(struct rte_eth_dev *eth_dev, bool flg)
params.vport_active_rx_flg = flg;
params.vport_active_tx_flg = flg;
if (!qdev->enable_tx_switching) {
- if (IS_VF(edev)) {
+ if ((QEDE_NPAR_TX_SWITCHING != NULL) ||
+ ((QEDE_VF_TX_SWITCHING != NULL) && IS_VF(edev))) {
params.update_tx_switching_flg = 1;
params.tx_switching_flg = !flg;
- DP_INFO(edev, "VF tx-switching is disabled\n");
+ DP_INFO(edev, "%s tx-switching is disabled\n",
+ QEDE_NPAR_TX_SWITCHING ? "NPAR" : "VF");
}
}
for_each_hwfn(edev, i) {
@@ -1373,10 +1378,9 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev)
DP_INFO(edev, "Device is stopped\n");
}
-#define QEDE_TX_SWITCHING "vf_txswitch"
-
const char *valid_args[] = {
- QEDE_TX_SWITCHING,
+ QEDE_NPAR_TX_SWITCHING,
+ QEDE_VF_TX_SWITCHING,
NULL,
};
@@ -1395,7 +1399,8 @@ static int qede_args_check(const char *key, const char *val, void *opaque)
return errno;
}
- if (strcmp(QEDE_TX_SWITCHING, key) == 0)
+ if ((strcmp(QEDE_NPAR_TX_SWITCHING, key) == 0) ||
+ (strcmp(QEDE_VF_TX_SWITCHING, key) == 0))
qdev->enable_tx_switching = !!tmp;
return ret;
--
1.7.10.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [dpdk-dev] [PATCH 4/5] net/qede: fix device stop to remove primary MAC
2018-03-28 0:15 [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API Rasesh Mody
2018-03-28 0:15 ` [dpdk-dev] [PATCH 2/5] net/qede: enable IPGRE offload support Rasesh Mody
2018-03-28 0:15 ` [dpdk-dev] [PATCH 3/5] net/qede: add devarg to disable NPAR Tx switching Rasesh Mody
@ 2018-03-28 0:15 ` Rasesh Mody
2018-03-28 0:15 ` [dpdk-dev] [PATCH 5/5] net/qede: fix to prevent overwriting packet type Rasesh Mody
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Rasesh Mody @ 2018-03-28 0:15 UTC (permalink / raw)
To: dev; +Cc: Rasesh Mody, ferruh.yigit, Dept-EngDPDKDev, stable
This fix is to remove primary MAC filter during dev stop. Without the
fix device start attempt to add the primary MAC fails. Perform MAC set
remove under IS_PF() check.
Fixes: dd28bc8c6ef4 ("net/qede: fix VF port creation sequence")
Cc: stable@dpdk.org
Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
drivers/net/qede/qede_ethdev.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index 025cd2a..a4e9e75 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -1038,7 +1038,7 @@ static void qede_set_ucast_cmn_params(struct ecore_filter_ucast *ucast)
ether_addr_copy(ð_dev->data->mac_addrs[index],
(struct ether_addr *)&ucast.mac);
- ecore_filter_ucast_cmd(edev, &ucast, ECORE_SPQ_MODE_CB, NULL);
+ qede_mac_int_ops(eth_dev, &ucast, false);
}
static void
@@ -1375,6 +1375,9 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev)
/* Disable traffic */
ecore_hw_stop_fastpath(edev); /* TBD - loop */
+ if (IS_PF(edev))
+ qede_mac_addr_remove(eth_dev, 0);
+
DP_INFO(edev, "Device is stopped\n");
}
@@ -2443,6 +2446,9 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
dev->data->dev_started = 0;
qede_dev_stop(dev);
restart = true;
+ } else {
+ if (IS_PF(edev))
+ qede_mac_addr_remove(dev, 0);
}
rte_delay_ms(1000);
qede_start_vport(qdev, mtu); /* Recreate vport */
@@ -2470,7 +2476,9 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
dev->data->dev_conf.rxmode.jumbo_frame = 0;
/* Restore config lost due to vport stop */
- qede_mac_addr_set(dev, &qdev->primary_mac);
+ if (IS_PF(edev))
+ qede_mac_addr_set(dev, &qdev->primary_mac);
+
if (dev->data->promiscuous)
qede_promiscuous_enable(dev);
else
--
1.7.10.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [dpdk-dev] [PATCH 5/5] net/qede: fix to prevent overwriting packet type
2018-03-28 0:15 [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API Rasesh Mody
` (2 preceding siblings ...)
2018-03-28 0:15 ` [dpdk-dev] [PATCH 4/5] net/qede: fix device stop to remove primary MAC Rasesh Mody
@ 2018-03-28 0:15 ` Rasesh Mody
2018-03-30 10:39 ` [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API Ferruh Yigit
2018-05-11 9:16 ` Andrew Rybchenko
5 siblings, 0 replies; 9+ messages in thread
From: Rasesh Mody @ 2018-03-28 0:15 UTC (permalink / raw)
To: dev; +Cc: Harish Patil, ferruh.yigit, Dept-EngDPDKDev, stable
From: Harish Patil <harish.patil@cavium.com>
Fixes: 3f72dd780e10 ("net/qede: check tunnel L3 header")
Cc: stable@dpdk.org
Signed-off-by: Harish Patil <harish.patil@cavium.com>
---
drivers/net/qede/qede_rxtx.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c
index 20c10be..2b9db32 100644
--- a/drivers/net/qede/qede_rxtx.c
+++ b/drivers/net/qede/qede_rxtx.c
@@ -1466,6 +1466,8 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags)
*/
rx_mb->data_off = offset + RTE_PKTMBUF_HEADROOM;
packet_type |= qede_rx_cqe_to_pkt_type_outer(rx_mb);
+ } else {
+ packet_type |= qede_rx_cqe_to_pkt_type(parse_flag);
}
/* Common handling for non-tunnel packets and for inner
@@ -1487,7 +1489,6 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags)
ol_flags |= PKT_RX_IP_CKSUM_BAD;
} else {
ol_flags |= PKT_RX_IP_CKSUM_GOOD;
- packet_type |= qede_rx_cqe_to_pkt_type(parse_flag);
}
if (CQE_HAS_VLAN(parse_flag) ||
--
1.7.10.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API
2018-03-28 0:15 [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API Rasesh Mody
` (3 preceding siblings ...)
2018-03-28 0:15 ` [dpdk-dev] [PATCH 5/5] net/qede: fix to prevent overwriting packet type Rasesh Mody
@ 2018-03-30 10:39 ` Ferruh Yigit
2018-05-11 9:16 ` Andrew Rybchenko
5 siblings, 0 replies; 9+ messages in thread
From: Ferruh Yigit @ 2018-03-30 10:39 UTC (permalink / raw)
To: Rasesh Mody, dev; +Cc: Harish Patil, Dept-EngDPDKDev
On 3/28/2018 1:15 AM, Rasesh Mody wrote:
> From: Harish Patil <harish.patil@cavium.com>
>
> Ethdev RX/TX offloads API has changed since:
> commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API")
> commit cba7f53b717d ("ethdev: introduce Tx queue offloads API")
>
> This patch makes use of new offload flags as suggested and fix
> the default RX/TX configuration. Also indent the code properly
> around those changes.
>
> Signed-off-by: Harish Patil <harish.patil@cavium.com>
> Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
Series applied to dpdk-next-net/master, thanks.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API
2018-03-28 0:15 [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API Rasesh Mody
` (4 preceding siblings ...)
2018-03-30 10:39 ` [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API Ferruh Yigit
@ 2018-05-11 9:16 ` Andrew Rybchenko
2018-05-14 12:53 ` Ferruh Yigit
5 siblings, 1 reply; 9+ messages in thread
From: Andrew Rybchenko @ 2018-05-11 9:16 UTC (permalink / raw)
To: Rasesh Mody, dev; +Cc: Harish Patil, ferruh.yigit, Dept-EngDPDKDev
On 03/28/2018 03:15 AM, Rasesh Mody wrote:
> From: Harish Patil <harish.patil@cavium.com>
>
> Ethdev RX/TX offloads API has changed since:
> commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API")
> commit cba7f53b717d ("ethdev: introduce Tx queue offloads API")
>
> This patch makes use of new offload flags as suggested and fix
> the default RX/TX configuration. Also indent the code properly
> around those changes.
>
> Signed-off-by: Harish Patil <harish.patil@cavium.com>
> Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
> ---
> drivers/net/qede/qede_ethdev.c | 103 ++++++++++++++++++++++------------------
> drivers/net/qede/qede_rxtx.c | 2 +-
> drivers/net/qede/qede_rxtx.h | 2 -
> 3 files changed, 59 insertions(+), 48 deletions(-)
>
> diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
> index a91f436..6a51e3d 100644
> --- a/drivers/net/qede/qede_ethdev.c
> +++ b/drivers/net/qede/qede_ethdev.c
[...]
> @@ -1534,26 +1527,46 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
> dev_info->reta_size = ECORE_RSS_IND_TABLE_SIZE;
> dev_info->hash_key_size = ECORE_RSS_KEY_SIZE * sizeof(uint32_t);
> dev_info->flow_type_rss_offloads = (uint64_t)QEDE_RSS_OFFLOAD_ALL;
> -
> - dev_info->default_txconf = (struct rte_eth_txconf) {
> - .txq_flags = QEDE_TXQ_FLAGS,
> - };
> -
> - dev_info->rx_offload_capa = (DEV_RX_OFFLOAD_VLAN_STRIP |
> - DEV_RX_OFFLOAD_IPV4_CKSUM |
> + dev_info->rx_offload_capa = (DEV_RX_OFFLOAD_IPV4_CKSUM |
> DEV_RX_OFFLOAD_UDP_CKSUM |
> DEV_RX_OFFLOAD_TCP_CKSUM |
> DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM |
> - DEV_RX_OFFLOAD_TCP_LRO);
> -
> + DEV_RX_OFFLOAD_TCP_LRO |
> + DEV_RX_OFFLOAD_CRC_STRIP |
> + DEV_RX_OFFLOAD_SCATTER |
> + DEV_RX_OFFLOAD_JUMBO_FRAME |
> + DEV_RX_OFFLOAD_VLAN_FILTER |
> + DEV_RX_OFFLOAD_VLAN_STRIP);
> + dev_info->rx_queue_offload_capa = 0;
> +
> + /* TX offloads are on a per-packet basis, so it is applicable
> + * to both at port and queue levels.
> + */
> dev_info->tx_offload_capa = (DEV_TX_OFFLOAD_VLAN_INSERT |
> DEV_TX_OFFLOAD_IPV4_CKSUM |
> DEV_TX_OFFLOAD_UDP_CKSUM |
> DEV_TX_OFFLOAD_TCP_CKSUM |
> DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM |
> - DEV_TX_OFFLOAD_TCP_TSO |
> + DEV_TX_OFFLOAD_QINQ_INSERT |
> + DEV_TX_OFFLOAD_MULTI_SEGS |
> + DEV_TX_OFFLOAD_TCP_TSO |
> DEV_TX_OFFLOAD_VXLAN_TNL_TSO |
> DEV_TX_OFFLOAD_GENEVE_TNL_TSO);
> + dev_info->tx_queue_offload_capa = dev_info->tx_offload_capa;
> +
> + dev_info->default_txconf = (struct rte_eth_txconf) {
> + .txq_flags = DEV_TX_OFFLOAD_MULTI_SEGS,
It is incorrect to initialize TxQ flags using Tx offload define.
> + };
> +
> + dev_info->default_rxconf = (struct rte_eth_rxconf) {
> + /* Packets are always dropped if no descriptors are available */
> + .rx_drop_en = 1,
> + /* The below RX offloads are always enabled */
> + .offloads = (DEV_RX_OFFLOAD_CRC_STRIP |
> + DEV_RX_OFFLOAD_IPV4_CKSUM |
> + DEV_RX_OFFLOAD_TCP_CKSUM |
> + DEV_RX_OFFLOAD_UDP_CKSUM),
> + };
>
> memset(&link, 0, sizeof(struct qed_link_output));
> qdev->ops->common->get_link(edev, &link);
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API
2018-05-11 9:16 ` Andrew Rybchenko
@ 2018-05-14 12:53 ` Ferruh Yigit
2018-05-15 19:47 ` Mody, Rasesh
0 siblings, 1 reply; 9+ messages in thread
From: Ferruh Yigit @ 2018-05-14 12:53 UTC (permalink / raw)
To: Andrew Rybchenko, Rasesh Mody, dev; +Cc: Harish Patil, Dept-EngDPDKDev
On 5/11/2018 10:16 AM, Andrew Rybchenko wrote:
> On 03/28/2018 03:15 AM, Rasesh Mody wrote:
>> From: Harish Patil <harish.patil@cavium.com>
>>
>> Ethdev RX/TX offloads API has changed since:
>> commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API")
>> commit cba7f53b717d ("ethdev: introduce Tx queue offloads API")
>>
>> This patch makes use of new offload flags as suggested and fix
>> the default RX/TX configuration. Also indent the code properly
>> around those changes.
>>
>> Signed-off-by: Harish Patil <harish.patil@cavium.com>
>> Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
<...>
>> DEV_TX_OFFLOAD_GENEVE_TNL_TSO);
>> + dev_info->tx_queue_offload_capa = dev_info->tx_offload_capa;
>> +
>> + dev_info->default_txconf = (struct rte_eth_txconf) {
>> + .txq_flags = DEV_TX_OFFLOAD_MULTI_SEGS,
>
> It is incorrect to initialize TxQ flags using Tx offload define.
Yes it is wrong, thanks for pointing it out. I assume intentions is .offloads
Rashed, Harish,
Can you send a fix please?
>
>> + };
>> +
>> + dev_info->default_rxconf = (struct rte_eth_rxconf) {
>> + /* Packets are always dropped if no descriptors are available */
>> + .rx_drop_en = 1,
>> + /* The below RX offloads are always enabled */
>> + .offloads = (DEV_RX_OFFLOAD_CRC_STRIP |
>> + DEV_RX_OFFLOAD_IPV4_CKSUM |
>> + DEV_RX_OFFLOAD_TCP_CKSUM |
>> + DEV_RX_OFFLOAD_UDP_CKSUM),
>> + };
>>
>> memset(&link, 0, sizeof(struct qed_link_output));
>> qdev->ops->common->get_link(edev, &link);
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API
2018-05-14 12:53 ` Ferruh Yigit
@ 2018-05-15 19:47 ` Mody, Rasesh
0 siblings, 0 replies; 9+ messages in thread
From: Mody, Rasesh @ 2018-05-15 19:47 UTC (permalink / raw)
To: Ferruh Yigit, Andrew Rybchenko, dev; +Cc: Patil, Harish, Dept-Eng DPDK Dev
> From: Ferruh Yigit [mailto:ferruh.yigit@intel.com]
> Sent: Monday, May 14, 2018 5:53 AM
>
> On 5/11/2018 10:16 AM, Andrew Rybchenko wrote:
> > On 03/28/2018 03:15 AM, Rasesh Mody wrote:
> >> From: Harish Patil <harish.patil@cavium.com>
> >>
> >> Ethdev RX/TX offloads API has changed since:
> >> commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API")
> >> commit cba7f53b717d ("ethdev: introduce Tx queue offloads API")
> >>
> >> This patch makes use of new offload flags as suggested and fix the
> >> default RX/TX configuration. Also indent the code properly around
> >> those changes.
> >>
> >> Signed-off-by: Harish Patil <harish.patil@cavium.com>
> >> Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
>
> <...>
>
> >> DEV_TX_OFFLOAD_GENEVE_TNL_TSO);
> >> + dev_info->tx_queue_offload_capa = dev_info->tx_offload_capa;
> >> +
> >> + dev_info->default_txconf = (struct rte_eth_txconf) {
> >> + .txq_flags = DEV_TX_OFFLOAD_MULTI_SEGS,
> >
> > It is incorrect to initialize TxQ flags using Tx offload define.
>
> Yes it is wrong, thanks for pointing it out. I assume intentions is .offloads
>
> Rashed, Harish,
>
> Can you send a fix please?
Fix sent, thanks Andrew.
-Rasesh
>
> >
> >> + };
> >> +
> >> + dev_info->default_rxconf = (struct rte_eth_rxconf) {
> >> + /* Packets are always dropped if no descriptors are available
> */
> >> + .rx_drop_en = 1,
> >> + /* The below RX offloads are always enabled */
> >> + .offloads = (DEV_RX_OFFLOAD_CRC_STRIP |
> >> + DEV_RX_OFFLOAD_IPV4_CKSUM |
> >> + DEV_RX_OFFLOAD_TCP_CKSUM |
> >> + DEV_RX_OFFLOAD_UDP_CKSUM),
> >> + };
> >>
> >> memset(&link, 0, sizeof(struct qed_link_output));
> >> qdev->ops->common->get_link(edev, &link);
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-05-15 19:47 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-28 0:15 [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API Rasesh Mody
2018-03-28 0:15 ` [dpdk-dev] [PATCH 2/5] net/qede: enable IPGRE offload support Rasesh Mody
2018-03-28 0:15 ` [dpdk-dev] [PATCH 3/5] net/qede: add devarg to disable NPAR Tx switching Rasesh Mody
2018-03-28 0:15 ` [dpdk-dev] [PATCH 4/5] net/qede: fix device stop to remove primary MAC Rasesh Mody
2018-03-28 0:15 ` [dpdk-dev] [PATCH 5/5] net/qede: fix to prevent overwriting packet type Rasesh Mody
2018-03-30 10:39 ` [dpdk-dev] [PATCH 1/5] net/qede: convert to new Rx/Tx offloads API Ferruh Yigit
2018-05-11 9:16 ` Andrew Rybchenko
2018-05-14 12:53 ` Ferruh Yigit
2018-05-15 19:47 ` Mody, Rasesh
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).