From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C172245C94; Wed, 6 Nov 2024 12:52:40 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E0236402C3; Wed, 6 Nov 2024 12:52:39 +0100 (CET) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) by mails.dpdk.org (Postfix) with ESMTP id 0BF4640265 for ; Wed, 6 Nov 2024 12:52:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1730893958; x=1762429958; h=date:from:to:cc:subject:message-id:references: content-transfer-encoding:in-reply-to:mime-version; bh=RpVwIQNRfi3iOGz+faUiWNWmSolJ/j6r1KgcMMNkQZU=; b=kY2tsSZfv8sW5Z1O5QO7DEZ/gMdUOm2cGjqhUBG/wAAflxspvt2PDIjD 3C8n28jQdPSBCC3lqk93WFVHtmVuqlr/b58Q9efDER7+64F5/9Z16rZ97 1MaeJ75JRAuGG0NHkkeMspwtEWuWDU89kVqvRBo6tnY3KecIEQaDVC18a a09Zy6CD4uelXUVMqIUCOLpw5jjl4xjoW0c9vxR8xJgDozFI2jxCk4X/c hyynL0kc/TCWQb7aSnWTY4LnpNZOTLLw+VRiTE58hBCmNUzQWbDXXbbEz 9RcdW7jHpBP+2rCMLdYSPbhhlgLkscCZG0nIihIxks4ni6Uj/ms8aqiIj A==; X-CSE-ConnectionGUID: gH7ql2vHTAmKfGpeFlINzg== X-CSE-MsgGUID: 2Sz5dvSaTpKftqMSQQ0dBQ== X-IronPort-AV: E=McAfee;i="6700,10204,11247"; a="48202513" X-IronPort-AV: E=Sophos;i="6.11,262,1725346800"; d="scan'208";a="48202513" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Nov 2024 03:52:37 -0800 X-CSE-ConnectionGUID: e1qPKubuRbWiedaDs2bU7Q== X-CSE-MsgGUID: MirQH0ymSUKvI00xfq5nbA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,262,1725346800"; d="scan'208";a="89087270" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmviesa004.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 06 Nov 2024 03:52:34 -0800 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 6 Nov 2024 03:52:34 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39 via Frontend Transport; Wed, 6 Nov 2024 03:52:34 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.177) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Wed, 6 Nov 2024 03:52:33 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VQlsol5halDLoF/d4MkYpQtAp23cJgwXIrxbVR+WflR+nPtziehMODHC5dDMuOn1ZxT+0Q7+tK7WjwbDC97zcB+oYYY857JpIUaej7NEtuTJElfnRigy/PLikQdCuZvmykL63sLvX+Mb8AywO5fWPlzlyVL9Nnr7mqHC5pH1VsjuKEyeVzvUjWdgnjnmmIh71ONI8ZwKiOcXbtU/u53jwGONEEuprJjhVn+EejCM/oqib4aO1h2G8F+yXYC4j+F1HriydHYy6wsfQ1JODdeinMyQk3EmROw9kGLcO2N+1p80ErsHEFXjr2uOHvjjyQxuJ8q5ksThUVXBoUJPL9gRmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mb52IN0XY7B3duKEZSqT8bDO4bdcdnN7GluRmYtU/HQ=; b=hLJcKf1m+HtkItJZIErFfnICZKr1vFSIflkPzRgXOSU3oxUbScQ9m0ol/tHVHK3ER4Cz15VeXTPhdXzbh4LHOOtVrRzU+PGolKADvQr+vPWAp9WlQN5UTreB/7/Bn6RBSV43/BmASsujaN98DT0a+3nzTYE2ShaYe0LyYZ0j9h/WhwzNjVakf3PWEj8S/sChtXyaoLfoQ0SAsIJWkOeuQNP4vZfXgSEltIp0uOakmhHeeHMrVFgVKo4c7BA8oAc+V3yWIFoC2DEyJw1/CjnlIS3pKqTXfnf4vKkdIQf0JQltRd3+JDt4i9SMYbycqMDuxIpwutuKZtFBsiO4bo+OQw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from DS0PR11MB7309.namprd11.prod.outlook.com (2603:10b6:8:13e::17) by PH7PR11MB7987.namprd11.prod.outlook.com (2603:10b6:510:242::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.19; Wed, 6 Nov 2024 11:52:31 +0000 Received: from DS0PR11MB7309.namprd11.prod.outlook.com ([fe80::f120:cc1f:d78d:ae9b]) by DS0PR11MB7309.namprd11.prod.outlook.com ([fe80::f120:cc1f:d78d:ae9b%4]) with mapi id 15.20.8093.018; Wed, 6 Nov 2024 11:52:31 +0000 Date: Wed, 6 Nov 2024 11:52:25 +0000 From: Bruce Richardson To: Morten =?iso-8859-1?Q?Br=F8rup?= CC: , Tyler Retzlaff , "Thomas Monjalon" , Ferruh Yigit , "Andrew Rybchenko" , Ajit Khaparde , Somnath Kotur , Gaetan Rivet , Jie Hai , Long Li , Wei Hu Subject: Re: [PATCH 2/2] drivers/net: support single queue per port Message-ID: References: <20241025115223.1230680-1-mb@smartsharesystems.com> <20241025115223.1230680-3-mb@smartsharesystems.com> Content-Type: text/plain; charset="iso-8859-1" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20241025115223.1230680-3-mb@smartsharesystems.com> X-ClientProxiedBy: DB8PR03CA0006.eurprd03.prod.outlook.com (2603:10a6:10:be::19) To DS0PR11MB7309.namprd11.prod.outlook.com (2603:10b6:8:13e::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB7309:EE_|PH7PR11MB7987:EE_ X-MS-Office365-Filtering-Correlation-Id: 08d18ba8-2307-40d2-3248-08dcfe597f02 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?iso-8859-1?Q?3LixdfnEbXygPgbs2D/Itw3TkJM4i4Jfe0jvRwiybYy/QH9nfZ/cHD5A8T?= =?iso-8859-1?Q?MXLItsR1LxPVFWsK2ntnhXykVacVAylb1UzwA39F8Wl4fUk97CGz+eNex2?= =?iso-8859-1?Q?7ozGQCo909dP2EasC2UCGjO3mMGSsWJrh+gOEHepWMsoxpnN3uCq88VrgS?= =?iso-8859-1?Q?7I8f8kkd5yW72rABo3IEjr8Rh5hYUo21jGtmO/Oo84FnOkyAxVtBNJu/YW?= =?iso-8859-1?Q?srU2o3wcyt8bK2EwN97cwyyv2RNewqeMFuhi48C1I4ngC54iQ1mvfrEFwR?= =?iso-8859-1?Q?d770Mf6I9E1ktNAc7KPk5hwhfx7jDNBImqa45zW5O6opM5q0maVvayu9Ak?= =?iso-8859-1?Q?Gvag4YtF/f+CwnhM28zgyjiHnFE3el2xXN/QD8a5dySF9Q9nS965p+DPAU?= =?iso-8859-1?Q?1/JIgsaRyXfMjD0yDAja/u9FpodBtv0paLkR00nox0Ypefo21fQTyExsAw?= =?iso-8859-1?Q?nxat0ZGVjVM0zb8f3Pi7JMKzwBaU+9k0dsquigRUlJYK4Swtqj55312GYK?= =?iso-8859-1?Q?rJZwkMkzJJhy0yq71B3CALD2sDh63pURBe0ILyrpQWgJ+H3el/PwQitHFA?= =?iso-8859-1?Q?fxyNZrfqYuo3OMEt2D0edJGzwNpU2pt8MC+u5ZrGtb/COzw9cohKZgSQtm?= =?iso-8859-1?Q?lorqC9oNPmVzfWMxaSLmY81fzHOjjgBLGt21lnS+OvyCwkEl10Vdq6zOl5?= =?iso-8859-1?Q?u6Sq7J8b3ZuT6F2k7/l22vMc2/DGMT9hD2KXz9C7Vmrqy1EtzBtNKk4WBT?= =?iso-8859-1?Q?iflaxspduJLO4nW0/zpLEo7A6sJCzhR59/DTFy7BuGNtrt+sr/r9f/rlDT?= =?iso-8859-1?Q?hMS43twILqjEH/voTAj1fOcZjY3X7MqU2WlQ0RC+SG0DAZhTnBX897VHOp?= =?iso-8859-1?Q?Xr9P45omjHkYtyfa4mNnA2fWo3dTHTli1seI6keD41R/tvQOZ8fy91b/qH?= =?iso-8859-1?Q?teRxLdDocQ0SbVZ7sM6dALui2IgGk2WCLc6ftK5W2NkK/niKyKZGJaNlpk?= =?iso-8859-1?Q?nNqDv7C4WdZjcJ15JFQEf8oRAx04JoDukCLSfQtRAbuHjwqLRQKO+3eL4m?= =?iso-8859-1?Q?u3a8F/ZfnM1hSMdxuQtDFoKF5E4Vnt/ilgDe6lmVuCHon/l+0k4mXa4D27?= =?iso-8859-1?Q?i7SmPQ35/UvTaNMyuv/Z2ITidACWEePjUsrAnTS/RCCnJOI64JFokEJZP2?= =?iso-8859-1?Q?htcs8RPvh6nL2lOwLmr+Y+m4/FRnyh4bEGXESz6CJpLIe5DfCdHC6AFOJo?= =?iso-8859-1?Q?U6HZjmXvP5eehYQ9RsyCBq7NJ6ZeCiIeOVgQHXCTYNXe7Ym+3EVJLjJxn0?= =?iso-8859-1?Q?MdmnoaLnD18D14ZLLkkfREyvMZn6Ku5G3gsFaieKl9Jaz8pIky0aYstVHq?= =?iso-8859-1?Q?1a6y+apda/?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DS0PR11MB7309.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(7416014)(366016)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?iso-8859-1?Q?97YmXVUKI/q3dEFH2rt8iRjJzfMulLGb1sZAdUE7RF6s1fvcgZPnhcQEZF?= =?iso-8859-1?Q?jwrcf/BxI1QD3ADfymZSVs8Akyty7ReuSfUtatpvdo4IQ+lTcL/H83rJ8I?= =?iso-8859-1?Q?hMH2sYktaQtTgTmQ0HnD34oyEcNXg9/SVkLosYL5oep/gCmzkV3sdQ6yDD?= =?iso-8859-1?Q?qQ6xOA1XVfUkPyoSUtVPOdW5zxZNGDdJbPiI3E7IO6t1BnY5n3vfogtjkC?= =?iso-8859-1?Q?fYOpqe8SHjjdEZx6t2AZW4XMt4bgvyC9xs0+kgm84/VcW2u6SAiFX7jlAc?= =?iso-8859-1?Q?6MEN1mDLOstES5QSmeYliko6qXzUh9zMQfkzq6GkdLt14PZeknPu27A5Nx?= =?iso-8859-1?Q?lNCt3E0Cp5GOypNEfiLTEztqlO4X9QO/efyIjDQckbwkOMpCQ3NCY7w4WZ?= =?iso-8859-1?Q?yrqmckTxq5KvLiZcoOS60jpDTu/e6lOzbyG14biqJ2rqUSUeIFfD+2YikY?= =?iso-8859-1?Q?+9+1aCSoqpaPnhOZWi/BASuNegtDyKtK2PgaJlL/1ZolsjYjcG7Kxn3uQ4?= =?iso-8859-1?Q?0zTrAlhK6DSNlgI2NanI6nhXJBafUhmFmPyNLqqOo8t3m3t83OiB+ajppD?= =?iso-8859-1?Q?bV52Rplj5lxwHYJ0p+8/bRpCGuAI8hP1lY0byKfbcPTT7qPg7I7H7vrHSU?= =?iso-8859-1?Q?GmGUlftg/sJUhdlwuDMRRhBFBgQdxe6gH4+Bg06py3XZg/0dNumTZvIYfw?= =?iso-8859-1?Q?keBE1mgZ7aFBD7C3u7GA/2t+vPLO9HJVfXSYYqefrR+8bzhycH3LnBhAUB?= =?iso-8859-1?Q?XU7mh3ZU7gC0d17Z6+wfJuqbhV7AskMxCUqwZZ6tvERGsgkvUB8Zaz8plE?= =?iso-8859-1?Q?7DZp5+iD7cxUA5KePbmgpWCZAzSYueeX8/KsJxRh3+G+U9O+realcVkaTL?= =?iso-8859-1?Q?kn9uTA/GRtoth9lEImMJncZMbVVq3Dwj2ICC4tVcmUp/AQlea00qb6KOxZ?= =?iso-8859-1?Q?8rt9JUthDiMJxsnnuKOicEP/MyCVl9Tm9GkGxtvT1X6jCXrVd0dmqF1f85?= =?iso-8859-1?Q?Dwgytr0yqUFNDasl89zDUJTWev/mqILKyh4W35mgYKTyCMZ9hO9BhAXtZ7?= =?iso-8859-1?Q?KnzpL7hQ1bvqHDse6b7xpgdGlnemmzIHi7J9eez//YolTOMDO1cz61gX2P?= =?iso-8859-1?Q?LlcteddnnTcz5zHHWsWowOpEs3nFsHEMnSRCQtA8X2MfwD30DKxYgtfi3F?= =?iso-8859-1?Q?vUjd1cEUl7HSNXqKM46OyJRCjER68dEGwWn0tKLGED8Cm/LiDKsyNNJxQt?= =?iso-8859-1?Q?nSzqlG5ttKHWqjGnvZ76FHUz8sB30GjscnxhMRmyL4FfDNy5OMep43vEdN?= =?iso-8859-1?Q?BQq9RMC68JoRNeYWGScQPb6CLqv05TmvkkmaomKSXeL+BoKfmWoJO6l/fr?= =?iso-8859-1?Q?tncbXcXPAgIoYjEBbl8qn0fu0U0kQc+kEIF4MK02bYD+cCzwt5Le9xnTML?= =?iso-8859-1?Q?zUt4qhnXl7qvQIyXOjdl5p0wyYsjO2W0vcVDqISGmPL00HBKTFFGaYOCE5?= =?iso-8859-1?Q?wEXKqjiFAHv3GtwLtMhZ21y3ZQ2wBe9UVsv9v2ILX6yfSFivuqtLpYbSiu?= =?iso-8859-1?Q?qVL3qCKdBhBtGm2IzcivM0ifhWXIAGkwoEwkIpR+uc4/r0q6/BHp1bmaOp?= =?iso-8859-1?Q?FpLLk7dXjQvsBFLrfbvnJT3MrF2/qtgrNz0A4KtUE0jaBl3QvIMDGvOQ?= =?iso-8859-1?Q?=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 08d18ba8-2307-40d2-3248-08dcfe597f02 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB7309.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2024 11:52:31.7506 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: O0TLznBV8nRF8fRxgKeQDirWiW4Ac3vV+OsJU3Svgr1O2C1p721nPURk4sWTXFlmNpH+OCRKqWIhNvqKWumZu0QOW2KypKj26hymvG7RYWY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB7987 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On Fri, Oct 25, 2024 at 11:52:23AM +0000, Morten Brørup wrote: > When configuring DPDK for one queue per port > (#define RTE_MAX_QUEUES_PER_PORT 1), compilation of some network drivers > fails with e.g.: > > ../drivers/net/bnxt/bnxt_rxq.c: In function 'bnxt_rx_queue_stop': > ../drivers/net/bnxt/bnxt_rxq.c:587:34: error: array subscript 1 is above array bounds of 'uint8_t[1]' {aka 'unsigned char[1]'} [-Werror=array-bounds=] > 587 | dev->data->rx_queue_state[q_id] = RTE_ETH_QUEUE_STATE_STOPPED; > | ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~ > In file included from ../drivers/net/bnxt/bnxt.h:16, > from ../drivers/net/bnxt/bnxt_rxq.c:10: > ../lib/ethdev/ethdev_driver.h:168:17: note: while referencing 'rx_queue_state' > 168 | uint8_t rx_queue_state[RTE_MAX_QUEUES_PER_PORT]; > | ^~~~~~~~~~~~~~ > > To fix this, a hint is added to the network drivers where a compiler in > the CI has been seen to emit the above error when DPDK is configured for > one queue per port, but we know that the error cannot occur. > > Signed-off-by: Morten Brørup > --- > drivers/net/bnxt/bnxt_ethdev.c | 2 ++ > drivers/net/bnxt/bnxt_rxq.c | 1 + > drivers/net/e1000/igb_rxtx.c | 2 ++ > drivers/net/failsafe/failsafe_ops.c | 10 ++++++++-- > drivers/net/hns3/hns3_rxtx.c | 2 ++ > drivers/net/mana/tx.c | 1 + > 6 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c > index 1f7c0d77d5..136e308437 100644 > --- a/drivers/net/bnxt/bnxt_ethdev.c > +++ b/drivers/net/bnxt/bnxt_ethdev.c > @@ -910,6 +910,7 @@ static int bnxt_start_nic(struct bnxt *bp) > struct bnxt_rx_queue *rxq = bp->rx_queues[j]; > > if (!rxq->rx_deferred_start) { > + __rte_assume(j < RTE_MAX_QUEUES_PER_PORT); > bp->eth_dev->data->rx_queue_state[j] = > RTE_ETH_QUEUE_STATE_STARTED; > rxq->rx_started = true; > @@ -930,6 +931,7 @@ static int bnxt_start_nic(struct bnxt *bp) > struct bnxt_tx_queue *txq = bp->tx_queues[j]; > > if (!txq->tx_deferred_start) { > + __rte_assume(j < RTE_MAX_QUEUES_PER_PORT); > bp->eth_dev->data->tx_queue_state[j] = > RTE_ETH_QUEUE_STATE_STARTED; > txq->tx_started = true; > diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c > index 1c25c57ca6..1651c26545 100644 > --- a/drivers/net/bnxt/bnxt_rxq.c > +++ b/drivers/net/bnxt/bnxt_rxq.c > @@ -584,6 +584,7 @@ int bnxt_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) > return -EINVAL; > } > > + __rte_assume(q_id < RTE_MAX_QUEUES_PER_PORT); > dev->data->rx_queue_state[q_id] = RTE_ETH_QUEUE_STATE_STOPPED; > rxq->rx_started = false; > PMD_DRV_LOG_LINE(DEBUG, "Rx queue stopped"); > diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c > index d61eaad2de..4276bb6d31 100644 > --- a/drivers/net/e1000/igb_rxtx.c > +++ b/drivers/net/e1000/igb_rxtx.c > @@ -1868,6 +1868,7 @@ igb_dev_clear_queues(struct rte_eth_dev *dev) > struct igb_rx_queue *rxq; > > for (i = 0; i < dev->data->nb_tx_queues; i++) { > + __rte_assume(i < RTE_MAX_QUEUES_PER_PORT); > txq = dev->data->tx_queues[i]; > if (txq != NULL) { > igb_tx_queue_release_mbufs(txq); > @@ -1877,6 +1878,7 @@ igb_dev_clear_queues(struct rte_eth_dev *dev) > } > > for (i = 0; i < dev->data->nb_rx_queues; i++) { > + __rte_assume(i < RTE_MAX_QUEUES_PER_PORT); > rxq = dev->data->rx_queues[i]; > if (rxq != NULL) { > igb_rx_queue_release_mbufs(rxq); For e1000, this is fine. Acked-by: Bruce Richardson BTW: is this the only/best way to put in the assumption? If it were me, I'd look to put before the loop the underlying assumption that (dev->data->nb_XX_queues < RTE_MAX_QUEUES_PER_PORT), rather than putting the assumption on "i". /Bruce