From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0058.outbound.protection.outlook.com [104.47.34.58]) by dpdk.org (Postfix) with ESMTP id 57E40968 for ; Tue, 27 Sep 2016 13:44:54 +0200 (CEST) Received: from BN6PR03CA0010.namprd03.prod.outlook.com (10.168.230.148) by BN1PR0301MB0708.namprd03.prod.outlook.com (10.160.78.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.639.5; Tue, 27 Sep 2016 11:44:52 +0000 Received: from BN1AFFO11FD043.protection.gbl (2a01:111:f400:7c10::163) by BN6PR03CA0010.outlook.office365.com (2603:10b6:404:23::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.639.5 via Frontend Transport; Tue, 27 Sep 2016 11:44:52 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; linux.intel.com; dkim=none (message not signed) header.d=none;linux.intel.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BN1AFFO11FD043.mail.protection.outlook.com (10.58.52.190) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.629.5 via Frontend Transport; Tue, 27 Sep 2016 11:44:52 +0000 Received: from [127.0.0.1] (B32944-11.ap.freescale.net [10.232.14.25]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id u8RBij39012475; Tue, 27 Sep 2016 04:44:49 -0700 To: Yuanhan Liu References: <1473072871-16108-1-git-send-email-pankaj.chauhan@nxp.com> <1473072871-16108-2-git-send-email-pankaj.chauhan@nxp.com> <20160926041209.GK23158@yliu-dev.sh.intel.com> CC: , , , From: Pankaj Chauhan Message-ID: Date: Tue, 27 Sep 2016 17:14:44 +0530 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 MIME-Version: 1.0 In-Reply-To: <20160926041209.GK23158@yliu-dev.sh.intel.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-EOPAttributedMessage: 0 X-Matching-Connectors: 131194502927232154; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(1110001)(1109001)(3190300001)(339900001)(53474002)(199003)(24454002)(189002)(377454003)(2906002)(561944003)(81156014)(8676002)(65956001)(11100500001)(65806001)(81166006)(31686004)(50466002)(33646002)(69596002)(189998001)(106466001)(8936002)(104016004)(586003)(47776003)(92566002)(23746002)(68736007)(36756003)(85426001)(305945005)(110136003)(87936001)(7126002)(7846002)(64126003)(120886001)(65826007)(19580405001)(19580395003)(8666005)(356003)(4001350100001)(5660300001)(97736004)(7246003)(626004)(86362001)(31696002)(83506001)(77096005)(4326007)(105606002)(54356999)(230700001)(76176999)(50986999)(2950100002)(6916009)(41533002)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR0301MB0708; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD043; 1:SaP+9XKxHmo6T1hUvB2sGT64BIO2hYCt7E5jsNEURI6ZdHAKJYw4lbFP+aTZSemeJw/MyyivtbI3rxPqBuMIUMbwVoLHs5/46c238sCuRHL5L2WSuzYg6iH4HNmWe7umghqcMPS/YYEZJc17N1lti6dHbdSplYayapxk5NQfZF3s+OAynCJMbS2/uB8Vd1cDAVvE6EJ9peFfj2+OMEnG9O/ovH9/ldnKjXAacMueLEgnpESd1U/A2EXONPRKDxPz5liU3lh4UOotDzpS0KkAPEYaoE/K6OGko1VYL+yTOcyTwTWimrSS6G5h2iaF2S9M8KkdOnt15Wy5YMi9kVnQfA2UpSHCCh0x/ANEwlNqR+1y4jNRQ3vONXH8z0TRZkh3vSJgqLlCFQUvY2qgYF2atGttGNGqYOSqT6r/OPPXAEFLWp679AWcbEsMH4nLVC3MF++Bt1yferfZwk3L55RMJ2l5xwmgA/iYxF4cW843di1WBK/POs2XSWD2zD+sDdQbb0Eo1K2v2MZaJ1ISQudtZm2TLZyD2z847d6LSSgHs4R77FKerMmtopWCvNn70M9xZjjdVTrrxYDJJmxOhD8+qjRELVd0UhwBY8Ln41EHnXkLf19daRxoNdV6/Ev4Jg6RvW0cnScxGJmTdHKq1OCG1A== X-MS-Office365-Filtering-Correlation-Id: a8f35a71-eee4-46fa-cb38-08d3e6cbb1ea X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0708; 2:opI3VsrSjWR24zZiNjkC8+oZzyoTB8zQ15gK8oPIJ1ol/OLDRzYwkEFXKCmYbEMONMsN5KHXDxkirzP4g9PB5sAHQfm0S3HBw0NGgeKIacmxFAml1/0T12EA/GFZwnpCsExIiid/stiOCxDniunK4xUFykK49lPNritBx9lVx82ZBYJOSyRsukN8Ua+wdzFp; 3:nk4/y2QQDodz7eDB4phkOAdeLGHyZnLL0gBL0JuHifgguLFiqEyVGjL/MwgMhyLCR+LT+1R0B4M6AXVfxnqCGnE32WAHJyljAIs7KV9YDFgNdMDlVfgrqz4VuER3GShfOwWnnICDKVR3cDWuGtez75BKCIAimrWZThIb6D8j7VYDQxOsnrEoGKA2QakF11BwId6J00eJ86PPZnIkxL22YW2fA8cd8qnSCmLoFcI6nR0=; 25:HPZsCQUHmItL/+Cr7VFLW3XP0/mXM/XoznWmxQCIwrCtQ0cuAx90+a92z7cOJXpJrbM9/gPJIefJn3eAPPfzPbrVnV/a1a/BpVznErP+NPI93JEDjVWQWhgldp9dQ5bfQACFac2TigZD078RwMv9D0HzL/7UX6HLeRSQaD2Ha1Po1//4YudJY7OYYCzAxb2kTzkhmTK+pLXevijoQDuFZs8ZvSMKP7DsPdxCEYSWS4PXzYkhuNNGEzYe4UlNA0Hy4wCmW/6zDqOupsFSObqnM8tKpsKqb8VUMWnVbxI5J9ZN4dTCHdnmznB4/AA2RSpALtug8ZYhBA05eZr+ATSmFUGFJS51311Q3A2ZYy/LzID7QUjnRSf01L91KDpAtND7x0zfg2c4r0zNfNjhIKsKFTDipYjcYOSyFBy9m+s0nYU= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN1PR0301MB0708; X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0708; 31:OV/sqoLwaN96we9oCAEm0GGCC0SNCnIeQxAFDkIOkLO9Ec9zlXvrgW7Lik2YZFS9NZ4CWmKeeKb2DWA6Zr73z20kpdfpGDG1Dhg2jEeDOHofq6v4h43h0AkKs3oe8LVsvYPELrypvSCo0UbjVn+rB65/MnugtuyNJJMG2Q6B3R7Lp36OwIKgY5aZ+F+7l1fCkI1wAswQ6caHufYZZcDQJu4E5sC6e0HM4ZCqrtQnbyo=; 4:vkYNk7QAjq009EpeSA+WXpPJaSHi5oELpVCj+m8Te96YkHQQLxKTT+oKLotlMltk3E59SfEFRfKTmDUbSnGq48ezjYGl4k8IsuAW3cTRkW7BaZ0e0uq8j+QdE3BUX9Wmh2WtMBdZm+e0bPwvVdMo5pEX0DBTS69sphMDqyqhcDocAIhqzBaYjDRFGXda7YQwDEJYWqgF0diAWrTeogKDvDIQTPMsmqYxEoPK5yyCpZTup4UNz3vkSja4VwKiso2xzJ10zfug1ZPKTkXgq/52xKeZDfKMkUlQOxQL6f6RR/J39LpyxTqRZlnI00Vqw6mTywjKOJGALwzKs0gASgOr1TCwldGZTNUev2Vvt0ldyqPk9vCvoZ51ouLRcLEV9yCNhHFjgQ248DNA7XxV6yoCq1qXONdqfiHl5JB76Q0gJOxuGRZEQvwV1S/8QZUJhSqcYuHF/npEMm3HIiZcUsjSjbfq1iGPZC8xGYA40nqFraemPv9ssnH6IJvd0gaApNxEU7SphyxdZ9WnRYvtJkhDy1Iy0Z3XNhdM5dskbC0iUrtzWUprkf6u/10nBQtBzsSn X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(13015025)(13017025)(13024025)(13023025)(13018025)(8121501046)(5005006)(10201501046)(3002001)(6055026); SRVR:BN1PR0301MB0708; BCL:0; PCL:0; RULEID:(400006); SRVR:BN1PR0301MB0708; X-Forefront-PRVS: 007814487B X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1; BN1PR0301MB0708; 23:+g62C+Y4y42RuPbzEFGZOgN3PDCRaKdQk24?= =?Windows-1252?Q?v+wsDsz/e0vI9lBrsXa8kPwxtS2hfcpxuyX9exg6VKKbirpktFJFIbuZ?= =?Windows-1252?Q?7kJn0QbtXY4ZXAU9mqrTuZEG+/bGE5GMkfT+qcsC8EhT4jrm7FygOtt4?= =?Windows-1252?Q?W2MCPbovueC2hnhL2EiDVCYrbkO2uZNGHvVPJgIndFMxPWLHeZBWmZXZ?= =?Windows-1252?Q?W1l9XFPwtHkXQNlZBt7+Ubcx4kMJBeQ7lpBs2JfZwDyhUDRVj/ITCKXv?= =?Windows-1252?Q?FN/qLeIDofrKqf1FGY1xGcCuv41zap1hLjlWIpo6/9GIJcoKUPNFjtEJ?= =?Windows-1252?Q?+q+2Mn+zKX6SM8LOiv4Y7w0qqvLG7lIecmL1xxh7hdXLk/mXAc6NVGjn?= =?Windows-1252?Q?DHwbT7XbUzmL5gcNcbqkt1iDSIGjzhfWqz2Kjzxeo03MyNqdlAIDUFhw?= =?Windows-1252?Q?EGetuOa8QH7XeWJlq+KkZOb14bZ4UBflG8oFVoJPAalpDLlYuhZ/c/59?= =?Windows-1252?Q?SY/MZuQ1BbH4hUpEnGNI6CMgcoLK0YsAenHx2wlYQVqzieWgdeie9nea?= =?Windows-1252?Q?W20faAIATxp9QFsfD7xFSQvE7mXenRdoE9VM4c4I34GJaYDAdMP9QjYb?= =?Windows-1252?Q?BQ5GpqK+69NnhTUlQwnQ2/69Xe2bGEb8xFdV3WR2cWF2r4PazhwdDIr5?= =?Windows-1252?Q?zteSrGjWGEeQtrPDFBTUak7ei0m9pJuUZQCki6wbOk/lOxEwqWHvKX/t?= =?Windows-1252?Q?tfUCWVSwYA2BVuA6BmsVVboh9A/Jds0r93XouAq9O10yqD1fAXB49rJC?= =?Windows-1252?Q?c26Hz3FIZiLc3z/M+UOUmaEETv93aOUnda8D2aRfe1MDzKm9HCBwgvSu?= =?Windows-1252?Q?XhAN2wLo6tTwn2TaPQSocYI8PKVXHy5ghpxFgfBCYBw055wbXv84zEtm?= =?Windows-1252?Q?qpuJL8KUz/kjtC1165T68GsIgt9W6Ipk6IcNP5Dg3ip1lg6Owvmrl2IQ?= =?Windows-1252?Q?8dpDL+r/OI1UPw+bwkHYqECP11/kPrWxTC2rJOw50MnOZWLIYSbv4jKN?= =?Windows-1252?Q?GETLBAsNS6mb1SIKzzvbquBpTt9h/1tok0H0EUfAZwRQG+96+T+qdZK6?= =?Windows-1252?Q?aV6zatMn+awMLLfAhF4F/ps+lkQ7Lc5OCBWJpen/cR3E011uNvt5xUOI?= =?Windows-1252?Q?zKZY94lO4bc8ccJEJFwGpSr4bvsH+sowKvFsGyGkirGJUxCWn3lntwHP?= =?Windows-1252?Q?v4yzoufz6tqhMW7x1JCYOKwXsljSJnqhmrhRYICvFQG1RWIbkVlX0Tyu?= =?Windows-1252?Q?Trfhvw1Y0PaZS4e5bq0weVnoWmqY5ZPEaZGmoxbFnlmPqv3CWl7qefLi?= =?Windows-1252?Q?xqg9dMwUD/CCVv+i644MLCI56DpKqnK3yYmtr8gU7Ys9fSCQr1QTPQ6d?= =?Windows-1252?Q?PzgbxdCvTOY9ncomrxC02+PEIgOaVZT3LETXr5o+o/NOTSKNVdNwhoft?= =?Windows-1252?Q?SpeE8k23WgyabmvK2+dywYlSg3KwHZD9GL2fGwt0a2PzjcWjANHVRhwA?= =?Windows-1252?Q?D1C+TEaAeEHBSKOPO7xiQ1ACH8wANXwIPVWhyQyBeR2waGx7KupsD7u5?= =?Windows-1252?Q?DsAcXBihXrIB4YMpV7TU759KVRnC2FkkWTUcbkf+8vH1bEZHyiGCLkJ/?= =?Windows-1252?Q?tKwMkLZUwYw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0708; 6:RfCv1B9MmRSDcCM5UkJHQWYBTaJB4h1D0P8hOBKm87gs6b6aLcXOZLslXmhaCp8+HBTGF915Ofq++EbJPrPIi7cmflfcmRVvHn3WHF1YD8HYHyq1ZVzf+hSZdnbsy7EjUn1mj7S6cgL3If2l9lng0VDVBzEko4yJDz1YjUs3rljd4DQlEZnNX5k/90B4/1fb5Z9PkxghaUX2Er0/1i0GHrtNNMJJg5L5sxYVMQFdYoUHU0dOAEgmtxoAspIp/VWxzvkBMdez2Nc4cSR7CXNlhJeJH8OhvdGtFxJKm3BuiWU=; 5:cGGkWJ5hOCXVjM0MITmJ0HorqHem2SSgbAdKghjtCYhbKfzjL1Cb+w3fsMlPmfonARhKW2Hu7ExGs9S22Efq5AusIUAxZAX3ynaOxVyR4I7qNA6As3SKHkkZcO3Kvrc7EI5r69KGOIUYp+i8KVpac8DLFBIFj+iWG0+ELFE2V5g=; 24:Ja9zjidl3/Wjd811k/ZkYNC64DE7X5AfgwZ6vtdRPLlqbeKh5CmvwwSbJVe77K5mOdjLdzR9A/WqkvXG8ROK4TIi0mzN3fZ9zwhd9K0+eP8=; 7:BkJa75iq7ZellKzk9z2A5Zawo2EJrecmh/TyJzn0Z59Ssb6Pxdga/HHePOZ1hUjXMuCwGYSSAuJA/dKsVVOYk4xXSmiFg0M6JD0oSVRcX0lHX4Iafa95qvyuPCMmxGzgo7Mjul11C/w2692bBVLBw+jhTjsZ+y6RBZUsDHSe+1vLnC0hp30j8fHsKtDufD5LypJelHcKX8Izi7yroflxY6D/h3lfd0tAyLYdY0mfJsjX+z5H43NzbE+LAQJiQ+S+UVmSUPpCTV20Q8XIQ8xoGMMPFewGPpNSpEdyUsrcXyU5eY5mTf6emaX0Nck1Zriq SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Sep 2016 11:44:52.5048 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR0301MB0708 Subject: Re: [dpdk-dev] [RFC][PATCH V2 1/3] examples/vhost: Add vswitch (generic switch) framework X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Sep 2016 11:44:55 -0000 On 9/26/2016 9:42 AM, Yuanhan Liu wrote: > Besides the VMDq proposal, I got few more comments for you. > > On Mon, Sep 05, 2016 at 04:24:29PM +0530, Pankaj Chauhan wrote: >> Introduce support for a generic framework for handling of switching between >> physical and vhost devices. The vswitch framework introduces the following >> concept: >> >> 1. vswitch_dev: Vswitch device > > It looks a bit confusing to me, to claim it as a "device": it's neither a > physical nic device nor a virtio net device. Something like "vswitch_unit", > or even "vswitch" is better and enough. > Yes we can change it to 'vswitch' it suites better, i'll do that in v3. >> Signed-off-by: Pankaj Chauhan >> --- >> examples/vhost/Makefile | 2 +- >> examples/vhost/main.c | 128 +++++++++-- >> examples/vhost/vswitch_common.c | 499 ++++++++++++++++++++++++++++++++++++++++ >> examples/vhost/vswitch_common.h | 186 +++++++++++++++ >> examples/vhost/vswitch_txrx.c | 97 ++++++++ >> examples/vhost/vswitch_txrx.h | 71 ++++++ > > Seems that you forgot to include the file to implment all those ops for > "switch" vswitch mode? I mean, I just see a vs_lookup_n_fwd implmentation > of VMDq. > No i didn't forget to include the file but wanted to implement, get reviewed and included (hopefully :)) the implementation of following first: 1. vswitch framework 2. vmdq implementation plugged into the vswitch framework. After above two i am planning to send the 'software switch' implementation in a separate patch, i hope that is fine. >> @@ -1241,7 +1296,7 @@ static int >> new_device(int vid) >> { >> int lcore, core_add = 0; >> - uint32_t device_num_min = num_devices; >> + uint32_t device_num_min; >> struct vhost_dev *vdev; >> >> vdev = rte_zmalloc("vhost device", sizeof(*vdev), RTE_CACHE_LINE_SIZE); >> @@ -1252,6 +1307,16 @@ new_device(int vid) >> return -1; >> } >> vdev->vid = vid; >> + device_num_min = vs_get_max_vdevs(vswitch_dev_g); >> + RTE_LOG(INFO, VHOST_PORT, "max virtio devices %d\n", device_num_min); >> + >> + vs_port = vs_add_port(vswitch_dev_g, vid, VSWITCH_PTYPE_VIRTIO, vdev); > > Note that "vid" does not equal "port". They are two different counters > and both start from 0. That means, you will get unexpected results from > following piece of code ----> > Sorry i didn't get the inconsistency completely, please help me understand it. I agree both port_id and vid counters start from zero. But when we add these as vswitch_port we'll pass different port type (VSWITCH_PTYPE_VIRTIO or VSWITCH_PTYPE_PHYS). And while searching for any vswitch port we use vs_port->port_id && vs_port->type as the key, thus we'll not get confused between ports even when both have same port_id. Can you please help me understand the inconsistency that you thought we may have? Thanks, Pankaj >> +struct vswitch_port *vs_add_port(struct vswitch_dev *vs_dev, int port_id, >> + enum vswitch_port_type type, void *priv) >> +{ >> + int rc = 0; >> + struct vswitch_port *vs_port = NULL; >> + struct vswitch_ops *vs_ops = vs_dev->ops; >> + >> + vs_port = vs_get_free_port(vs_dev); >> + if (!vs_port) { >> + RTE_LOG(DEBUG, VHOST_CONFIG, "Failed get free port in \ >> + vswitch %s\n", vs_dev->name); >> + rc = -EBUSY; >> + goto out; >> + } >> + >> + vs_port->port_id = port_id; >> + vs_port->type = type; >> + vs_port->priv = priv; >> + >> + /* Initialize default port operations. It should be noted that >> + * The switch ops->add_port can replace them with switch specefic >> + * operations if required. This gives us more flexibility in switch >> + * implementations. >> + */ >> + >> + switch (type) { >> + case VSWITCH_PTYPE_PHYS: >> + vs_port->do_tx = vs_do_tx_phys_port; >> + vs_port->do_rx = vs_do_rx_phys_port; >> + vs_port->get_txq = vs_get_txq_phys_port; >> + vs_port->get_rxq = vs_get_rxq_phys_port; >> + break; >> + case VSWITCH_PTYPE_VIRTIO: >> + vs_port->do_tx = vs_do_tx_virtio_port; >> + vs_port->do_rx = vs_do_rx_virtio_port; >> + vs_port->get_txq = vs_get_txq_virtio_port; >> + vs_port->get_rxq = vs_get_rxq_virtio_port; >> + break; >> + default: >> + RTE_LOG(DEBUG, VHOST_CONFIG, "Invalid port [id %d, type %d]", >> + port_id, type); >> + rc = -EINVAL; >> + goto out; >> + } >> + >> + if (vs_ops->add_port) >> + rc = vs_ops->add_port(vs_port); >> + >> + if (rc) >> + goto out; >> + >> + vs_port->state = VSWITCH_PSTATE_ADDED; >> + >> + rte_eth_macaddr_get(vs_port->port_id, &vs_port->mac_addr); > > <--- here. > > --yliu > >> + RTE_LOG(INFO, VHOST_PORT, "Port %u MAC: %02"PRIx8" %02"PRIx8" %02"PRIx8 >> + " %02"PRIx8" %02"PRIx8" %02"PRIx8"\n", >> + (unsigned)port_id, >> + vs_port->mac_addr.addr_bytes[0], >> + vs_port->mac_addr.addr_bytes[1], >> + vs_port->mac_addr.addr_bytes[2], >> + vs_port->mac_addr.addr_bytes[3], >> + vs_port->mac_addr.addr_bytes[4], >> + vs_port->mac_addr.addr_bytes[5]); >> + >> + RTE_LOG(DEBUG, VHOST_CONFIG, "Added port [%d, type %d] to \ >> + vswitch %s\n", vs_port->port_id, type, vs_dev->name); >> +out: >> + if (rc){ >> + RTE_LOG(INFO, VHOST_CONFIG, "Failed to Add port [%d, type %d] to \ >> + vswitch %s\n", port_id, type, vs_dev->name); >> + if (vs_port) >> + vs_free_port(vs_port); >> + vs_port = NULL; >> + } >> + >> + return vs_port; >> +} >