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 25B2D45B00; Thu, 10 Oct 2024 11:47:00 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id ACBED4025E; Thu, 10 Oct 2024 11:46:59 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) by mails.dpdk.org (Postfix) with ESMTP id 6D578400D6 for ; Thu, 10 Oct 2024 11:46:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1728553618; x=1760089618; h=date:from:to:cc:subject:message-id:references: content-transfer-encoding:in-reply-to:mime-version; bh=E4KJ0rI/AKUmVrGTsRBSEFaOy4qWsPBDVyH5KboPX+Q=; b=gvC1zOzJolKzPXGdn+KCVz2gceq/rmmz9ZQFOURTmsuAwS4F0bPqBlT/ vgsfPXGehmV8xXRBHEY8tPI9I8jiGFCwN5239lYmwlNjor/2s1qj8b4b9 3aMoytWRRq3uPyb2XQ6Qvs5n298bDH+KpOWxbeeEiXfQ+WE8c2G8Ec1m8 2+D2wdMDRj5Al5X5zP6DUL9gIGpHWz8Bb1RurMewJhnZeRE7ZbewhuOi6 wl5LmfYfYUsq3vWbij4ncwnVrh/EhFBiYZ0ra5snHbKdVaxJ72z/LRkwm L6j4aok1+2PZM4dHpvjZRNBXbyP/SYo2SIdRwRyGTWl7ZzDfW+nZiIIhy Q==; X-CSE-ConnectionGUID: oPLs96NoSmy2PRRzh+qNnQ== X-CSE-MsgGUID: 4rttdNjuTn6sZuFUGeZg7Q== X-IronPort-AV: E=McAfee;i="6700,10204,11220"; a="53304227" X-IronPort-AV: E=Sophos;i="6.11,192,1725346800"; d="scan'208";a="53304227" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Oct 2024 02:46:57 -0700 X-CSE-ConnectionGUID: n4EXusGtT2moAotcRVqe/A== X-CSE-MsgGUID: TMLO5VRMQ56r3cgqW1u89Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,192,1725346800"; d="scan'208";a="99868635" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmviesa002.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 10 Oct 2024 02:46:57 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) 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; Thu, 10 Oct 2024 02:46:57 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Thu, 10 Oct 2024 02:46:56 -0700 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Thu, 10 Oct 2024 02:46:55 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) 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; Thu, 10 Oct 2024 02:46:55 -0700 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (104.47.73.175) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Thu, 10 Oct 2024 02:46:55 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zEpLu66Pcnh9stqondpIrikBjKIhnKhTJrozzvIktr1mpUpVP5gK/j6aXkVn3U2ZR4yvEQ9frVgQklxmKFfRazKeo2auGzheKK91EOpYxwYhO9IjCdIiyeLbeaAX8mIonwvwGMkxVTxR/U3zkja7lKLJ3p6M8fLYUe+k7yV+6/86QdjzWjkLx+NQZ0YCK+CRF9PNLjOxAOS0YnmEQWtlEkUTmeEnDaYJuvAF3aQLTOs3aLyOeyFjgmxJnhcD6tQPBwwQxYsTZfQ3tf0HO7MoSNeu2U+vCWBLHruPKLtT+iPguEdjGazrH4txozn2XtcwxXsxXKhDbCKRSGHRVifuEQ== 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=amlH5XGqyRERxbv2e27AXCbM+TEUdiG66FMdHgOIVSw=; b=Mhr3UvV3oin+yAB3JebX80gBLOYxe9MQck0qMfDbEm4dwNXnJZRR9Hp1LkJMJFLzP7GEeq9JWrU0D/Dchvj4R2hauvjHbhT5iOvYjoTB28+gwICKc65k4bSBaALLiyhzjJ9gAUJfktRfJL8en3CkT2TfSCt01y6HUU73b8tlezt3iljT0OmdoDF2S8QsSrQ8lSHRkmvuduIloGl+o/b9srSGDy1FNgnR5i6mAdK+oftFSKLXOjPJCiNT9qc3HRLXynWrxRw6lfSZRgnRfnDt6BlRdVRWISLj+an0hMY7S59+ZjeXaufnKVEdzq0eLm6nBMWiQ54pHEOZ7ygH6way8A== 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 IA0PR11MB7353.namprd11.prod.outlook.com (2603:10b6:208:435::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8048.18; Thu, 10 Oct 2024 09:46:53 +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.8048.013; Thu, 10 Oct 2024 09:46:52 +0000 Date: Thu, 10 Oct 2024 10:46:47 +0100 From: Bruce Richardson To: David Marchand CC: Ferruh Yigit , , Thomas Monjalon Subject: Re: [PATCH v2] app/testpmd: show output of commands read from file Message-ID: References: <20240822103604.113246-1-bruce.richardson@intel.com> <20240822104109.116208-2-bruce.richardson@intel.com> <72489130-4de2-4f59-b454-20a64503320c@amd.com> <5b255af9-b9a3-491a-8d4d-eb6c94b5cee7@amd.com> Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-ClientProxiedBy: DB6PR0301CA0101.eurprd03.prod.outlook.com (2603:10a6:6:30::48) To DS0PR11MB7309.namprd11.prod.outlook.com (2603:10b6:8:13e::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB7309:EE_|IA0PR11MB7353:EE_ X-MS-Office365-Filtering-Correlation-Id: 8b988aa0-7f62-41d5-5863-08dce9107841 X-LD-Processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?B?S2JoQThHOXdBVjZYc2MzNE5qK1A3WmtTQS9DVnBtM2c3UUdFSC9VN2VYNDQv?= =?utf-8?B?VTUxa3k3SDBFY2xrb3Y4dkkvWnh1alRicU5Wb2k3SklvdlRjYkQ5ZmthUmg0?= =?utf-8?B?NVJFV0E2dWd2cGRuc28zZklTS1dmU1hpQkkvVnAyQVBRa2xMMkpqQlZhUW9P?= =?utf-8?B?QnJUVnUwanhyUnhqanZWUkpiZmxmSUZGUVNTV0s5TktiaTdBTFhYeFRDcEJI?= =?utf-8?B?cm5hWDJKajRQL2xwNnF0dmZtV3lQeTNsT21hNzFYRHFEbGJUTUxsL1lETC9O?= =?utf-8?B?TWdibGZIbVpMWVhPbGg2bzk5MEZYc0hnZENWUWtWV0pNTUM1Ny84ejZ2dVdY?= =?utf-8?B?cGU5V0ZscTkxeWJQb3cyYkdYdTBmYXhLdFhCRjZnb2VNYlN6aThxV1B6VXRW?= =?utf-8?B?dy83SExsZjd3cTV5a2d4VjM5aHFzb2lrdTBZRmpyNHJDajlsOG4yZzhEVGNj?= =?utf-8?B?aHNFaHduaUhYMHFXaElaRXFWdGswMDBlckxuR2FOd3UvMUtPanU2a2h0RWQz?= =?utf-8?B?bmorOTNQMGZaVkFoeXdORWRLNXBuU3ZVakZoQTJlUHdUZmlmWGFvQTMvNnBw?= =?utf-8?B?Z0JTZ29DZnplc1BVQXFSRFlXUVQvVjJROEVRc3JGUFFnaXR5dk1EWE55c2hw?= =?utf-8?B?OG5UWnVKL2EvVGg2S3hpenZqVVUxZHE3enJ5cVQ1ZnlvNzBDNHh0YTJlQVh1?= =?utf-8?B?M0NtZjUxYnJ1NGlkeFNjSXJlWTFhbTk5ZWVYQTZlbEZNZHhjVnZSb3dBa0lj?= =?utf-8?B?UWZoTnA5TnNrbUxrbTlzdEtxZnE4MzBKc2pqbXFMaisvVStuVGZaTDdDRmpH?= =?utf-8?B?SUp5Q1E4QTcreHZHVmtnNlRYbDlZL21nS0NlZXdwL0oxWXkwMytkdWZiQTho?= =?utf-8?B?KzUrWVZ3UjQ2WUdwZHBBUmVmb2lTaHBlODJZdUw5cGM2aklDbFFZbEVnZEps?= =?utf-8?B?M1UxQkw3bnhJWnllYVhXak9PUkoyaGNxbGNoRVRwTU9rVm9hU1o5RmhTTWFN?= =?utf-8?B?ZHdRM2luczBjL0plTThVZlA3NnV4MjVRamlEem5CUSsxbHZjU3J5aHI4VGFz?= =?utf-8?B?TlRUSGhCL0dKbEswSVdMSjlrRFo5RXRHZHRUcS9sT05RcDBiWjFHOXl2L0pW?= =?utf-8?B?cFBkKytnQkE4RVRITmRqb0VIZm9Ha3dCdWpVeXV2Z3BGNE1aTk1USWM3WU5Z?= =?utf-8?B?OHRVcFpXYzRwdytmSHVmRkUrbDZhak9YV0ppMHUxdjltcVRzWGt2NTdkRTVn?= =?utf-8?B?d3J3YkRTb2M3Um96Wmt4RjZQbCsxNUd5M2UySW4ydWNLbFlJR2dBc0RWdkJ0?= =?utf-8?B?WjRER1gzajNvZCtuNndMOUxwbm1QRlBkOFE2T3U4bytldFlIdVF4VEdBMUk5?= =?utf-8?B?eXJ2RnQxWDJYN3hnWHNYZ3FTZmg3bnZtUUtkZWpoNWkyaEVyc3hrOXhMU2NW?= =?utf-8?B?R2cyT1FPYkFGVmhkNGJlRlpDcHc0TFB6UTZvMnMzZkIrTDRBbSthWjg0Z3B0?= =?utf-8?B?MXFiN3BVbjhqY0FScldZS2VlRHJJQlM4K2EzYU0yakFDMmNlR2JUcjM4OGtv?= =?utf-8?B?T0hvY0xtaGduWUV4YWtRNzQwbUJURzFWYWxRUmJtWHFpdkYwc3RwTWpVODd6?= =?utf-8?B?LzNtRGhKdnJpTG5xL2FGZXM4VzRmR3dJV2llNEtaRmtYZjV0UHNpTnhjZmNN?= =?utf-8?B?TzFBd1JyYzNrMmQxZFdEUE90a3k3bFNHOHpPY1BlNWVCRHZvdUdXdWVRPT0=?= 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)(366016)(376014)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VlAxT1dIb041ZGxJN2VHdG16eU5Vblg1azBGVGR6Q3Z0VURJSEhWcVU5T2lw?= =?utf-8?B?MklYNzN0R1dFaVlKNzJGNFdWQWM3Z21hODNzUXBqWHpMQ1NRMUxrU0dkRFZU?= =?utf-8?B?RDRpSlJqNnMyYzRTakpTV2xMVUJHN0JZVmt6empOanlCc01Hc2ZtVytGNHQ2?= =?utf-8?B?UzBsRFBWaVdYa3Q2MnFXL1dmTDRmTGN2d3Ywbk9xMHIxa2xwbUlCdVFrZ2xn?= =?utf-8?B?NUVmREVMa2dnbVpKVlVwZjg4Y0NlenFwb2tUNFhyeVNlNnhJL1NnR1pvdWtS?= =?utf-8?B?a2ZuNEMyMDBtTWdmbDhVYzQ1dUhlSHJUWVcwajZLU1VsdzhONUI5WVZINnkr?= =?utf-8?B?TXdQL2NlTWZ1dE9OUjdBZWhPbTNma1dZT2lNOHRXL1VWbFB4b1lCU2NHQ0o4?= =?utf-8?B?anJSY05mZExESEk1QmJUdHA2OWlNY3lWNXVLRlJma3RBSHdhdyszb1JCVkVP?= =?utf-8?B?Q0ZwUy9oNTFBRVFPaXhNRkRZb1JZUGJHajhqU1FtaVJxeENvYzNBQlFCeis0?= =?utf-8?B?S2lUZmg1bGxmRjBUR0xwdzF0UmlES3VSVU9FNHJ3KzhGTkhTOGVib3lyTEpm?= =?utf-8?B?TVhrdHIxd0cxaVRIc0pJNlNZaU1sei95MW5zbFVsRDVZT2tEekRLTkFjanla?= =?utf-8?B?bmV6clpwc3Fmb1Era0pXTlY2bzZqYVpIVXFiL1R3aFRhc1htVSs5S2wvMTQ5?= =?utf-8?B?dkxnQmgyVkRmQk9MRDJ1NkZYMElQLzd6bGViZzQ4TVdmODc0bVdwV0x2bmpk?= =?utf-8?B?UFN5NzNVaEJUdWtaRC9MODBhbnhMOWhlS3NpcWN0cXZnM2FZdnQ3TldvK2l3?= =?utf-8?B?dWFITnVDNmZzb3VNZ3NtSlN4MWpMdzEwUk8vdkIrb3pmQnBneTFwSHUrS1Bu?= =?utf-8?B?d3F4VXBUUllRSGswanpLaFV5RmZvYmQ4VFArbzFvY3NwMnE3b3BudENrRU96?= =?utf-8?B?YUNVMXZRNGMyOHNjcGtlc2pEL1FPZjlMTlRGSytNWk45cE84NVpQZ0tJQ3ZL?= =?utf-8?B?RUVqVHRHME1zMXZsUnhDN21peEJLZWtmVm9BL3FwaVIwNWduV3FreU1laUNy?= =?utf-8?B?Y1c2RzcrUFFiNkl2V0Zkcm5CRy85V1MxelUwdUxUNFd1c3hhd1JKTEhOTGFt?= =?utf-8?B?NlNUUjZoT2hPZy9UcHF2SmxYZTNTVjNocFNJTG5ieEc0eHpra2w5MGttMUth?= =?utf-8?B?WWw1RUdsRE1mVWtkRUt5OHEwc1l1eEFRU0N6dTR4Y0dTbkNxdUJtVElEMy9p?= =?utf-8?B?ekN3SktYTjZkdy9mbC9MdEp3NW1wRXpRaHJGZ1liS2J6U3ZhMkVXdGJnb1py?= =?utf-8?B?QllmK3c5dWJSWloyeFRlN0VVMjI0VjErVWhqSXlqY3VvVlk1bk9GakUyaDFJ?= =?utf-8?B?bThLZ21FWFJEdGt5MDRJaDkzelRTRFhtSDhROXFyUGpBMHZDZGorQ0hCSE0x?= =?utf-8?B?RENNUEU1UkdLdVZGVmZRbDZoS0FKcWc0WWYvQ3I5VWR1MUhMWjRLMDdSa3FC?= =?utf-8?B?L0p1QWcyT0puVTZsV0pqdTVYNnZMQVFCck05N1lMTVFGWmErd2dxU3pYeVln?= =?utf-8?B?cGl4T0pIQkkxVnllOUdJWHdYdEFhdTd0bXd4OENJdXBSYVpwYml3d0E2VXBX?= =?utf-8?B?aDJla2pxZGtUQXBGckFvdXN3elhFZnJYb3JXWmVYSWFZMTc5aSt1Q3QzeVB0?= =?utf-8?B?eTQ2OEJ2L0dKNTdBUlo0Nk5EOUJUbjNPMWhKWHRaMHJXeGI2UXNtTWxNMlhm?= =?utf-8?B?cThkMVFnVzh0Wmk0eDhzYkZObEt3bk42SXpaZlp1MG55bkFhcXlSU1VySXRh?= =?utf-8?B?QVIvQ3FPbDkzRVNRajlvTEFYR3F3cDlwRHdXcmVXLzJ5anBxNGJDRy9VSDBu?= =?utf-8?B?Y295TFZGeWl0aGF1a1NPS1lWK3hlVmpSUDNoSzhhbnJwQ0VLVzY5aSs2OEhK?= =?utf-8?B?ZThrclUxK0laa2EyNjQ1TGt0QVltQ0ZSWnJmbldZNVZvT29CeU1uNVZuVDRv?= =?utf-8?B?a3pqMmJQaGNCU3gyWnNROFl3TklnQzM1M0NUdlRGYWY1V1l5VktsRFNzL2Y5?= =?utf-8?B?THlJbVNQaDJlWSs0Tm8rNndRaVZkNXgwTnhPZmxDZ0tuU0NjRXhjdnA2S2NE?= =?utf-8?B?Y0pNRDRrM013Q215NC9JQ1k2L2FhTkRxbHpvamh3VmtmMjFjR2g3VHVzNTN1?= =?utf-8?B?NVE9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: 8b988aa0-7f62-41d5-5863-08dce9107841 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB7309.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Oct 2024 09:46:52.8200 (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: fi2VUS04TyuZD7iFs6H/PTdORmrTO+u0uiOtjt4Gsle6pWPiIk10QKymX4TQSGSVu0q5zMNmZ83mXg8YEcJp1EjccTR6RQstdx8r5sNNFOk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR11MB7353 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 Thu, Oct 10, 2024 at 10:56:24AM +0200, David Marchand wrote: > Hello Bruce, Ferruh, > > On Tue, Oct 8, 2024 at 3:33 AM Ferruh Yigit wrote: > > > > On 10/4/2024 5:56 AM, Ferruh Yigit wrote: > > > On 8/22/2024 11:41 AM, Bruce Richardson wrote: > > >> Testpmd supports the "--cmdline-file" parameter to read a set of initial > > >> commands from a file. However, the only indication that this has been > > >> done successfully on startup is a single-line message, no output from > > >> the commands is seen. > > >> > > >> To improve usability here, we can use cmdline_new rather than > > >> cmdline_file_new and have the output from the various commands sent to > > >> stdout, allowing the user to see better what is happening. > > >> > > >> Signed-off-by: Bruce Richardson > > >> > > >> --- > > >> v2: use STDOUT_FILENO in place of hard-coded "1" > > >> --- > > >> > > > > > > After discussion, I think it is OK to have the update in the testpmd > > > (instead of a new function in cmdline), hence; > > > > > > Acked-by: Ferruh Yigit > > Applied to dpdk-next-net/main, thanks. > > This patch triggers an error in UNH for Windows builds. > Can you have a look? > > https://lab.dpdk.org/results/dashboard/testruns/logs/1386705/ > Looks like I should have kept the hard-coded 1 after all! :-( Anyway, something like this should fix the issue, I think: diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 1fc1cce5fe..bfa0e77dce 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -68,6 +68,10 @@ #include "cmdline_tm.h" #include "bpf_cmd.h" +#ifndef STDOUT_FILENO +#define STDOUT_FILENO _fileno(stdout) +#endif + static struct cmdline *testpmd_cl; static cmdline_parse_ctx_t *main_ctx; static TAILQ_HEAD(, testpmd_driver_commands) driver_commands_head = However, this is a fix only for this specific testpmd instance. I see that unistd.h is present in "lib/eal/windows/include" in DPDK, so I'm thinking maybe we add these macros there. WDYT? /Bruce