From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id 4B6D71B416 for ; Thu, 27 Sep 2018 13:35:53 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Sep 2018 04:35:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,310,1534834800"; d="scan'208";a="266234367" Received: from fyigit-mobl.ger.corp.intel.com (HELO [10.237.221.39]) ([10.237.221.39]) by fmsmga005.fm.intel.com with ESMTP; 27 Sep 2018 04:35:40 -0700 To: Dan Gora Cc: dev@dpdk.org, Igor Ryzhov , Stephen Hemminger References: <20180911232906.18352-1-dg@adax.com> <20180919195549.5585-1-dg@adax.com> <20180919195549.5585-2-dg@adax.com> <671135e5-a666-4254-c5c6-672c3863146b@intel.com> From: Ferruh Yigit Openpgp: preference=signencrypt Message-ID: <61731242-db6c-0c5d-bcab-e82b45e324d7@intel.com> Date: Thu, 27 Sep 2018 12:35:39 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v2 1/5] kni: add API to set link status on kernel interface X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 Sep 2018 11:35:53 -0000 On 9/26/2018 7:56 PM, Dan Gora wrote: > On Wed, Sep 26, 2018 at 1:42 PM, Ferruh Yigit wrote: >>> There is nothing to "reflect" to the kernel interface, nor to apply to >>> the kernel interface. This is exactly how every other kernel driver >>> works on link status changes. There is no "netif_set_speed()' >>> function. When a link status change occurs the kernel driver calls >>> netif_carrier_on/off() and prints a message like this one. >> >> I am not suggesting reflecting these into interface, I am just saying why do you >> print them? > > Because the information is useful and because every other Ethernet > driver does the same thing when the link status changes. It would be useful if it writes the values of virtual interface, but this API prints user input. The virtual interface may have different value, this API doesn't change anything related other than link status, so why print user provided value. Won't you think it will be confusing if the virtual interface values are different than what printed. Or won't user will think API changed those values to printed one in interface? > > See the Linux kernel: > > ixgbe_watchdog_link_is_up(): drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > print_link_info(): drivers/net/ethernet/cavium/liquidio/lio_main.c > bnx2_report_link(): drivers/net/ethernet/broadcom/bnx2.c > > and dozens of other examples. > > Imagine you plug your 1G ethernet cable into a 10/100Mbps hub. Yes > the link will be up, but it's the wrong speed. > Imagine you had accidentally forced your 1G connection to 10Mbps > fixed. It will only come up at 10Mbps. Wouldn't you like to know > that autoNeg was disabled? > >> For example, "link->link_speed" this is coming as parameter to API, this API >> does nothing with this value, why print is here? > > Because wouldn't you like to know if your link has connected at the > correct speed? I would. > >> I assume you are using "rte_eth_link" as parameter, instead of basic >> "link_status" to make it extendible in the feature. If so please print those >> other values when function extended, right now only link_status matters. > > No, all that information matters. If you have autoNeg disabled or are > connecting to a broken piece of equipment, the link can come up but be > at the wrong speed. > > There is not much to extend this function with. The only action we > can take, other than to print the information, is to write to the /sys > file to have the KNI kernel module call netif_carrier_on/off() for us. > >>>>> @@ -148,9 +239,16 @@ test_kni_loop(__rte_unused void *arg) >>>>> ret = -1; >>>>> if (system(IFCONFIG TEST_KNI_PORT" mtu 1400") == -1) >>>>> ret = -1; >>>>> + >>>>> + ret = kni_change_link(); >>>>> + if (ret != 0) { >>>>> + test_kni_processing_flag = 1; >>>>> + return ret; >>>>> + } >>>> >>>> I thinks this is wrong place to call kni_change_link(), this is test_kni_loop() >>>> created by test_kni_processing() that does packet processing tests. >>>> >>> >>> Well, no it's not "wrong". The interface has to be up to change the >>> link state, so this is a convenient place to do it. >> >> Are we agree that this function in unit test is to test packet processing part >> of KNI? >> And for example please check following coming patch: >> https://patches.dpdk.org/patch/44730/ >> >> I think you want to benefit from "system(IFCONFIG TEST_KNI_PORT" up")" since >> interface needs to be up to set the link, but you can do same call, not have to >> use that one. > > ok, I'll fix this. Should I rebase the changes on top of this patch > (https://patches.dpdk.org/patch/44730/)? Is that patch going to get > accepted soon? > >>> Because then we'd have to add code to set the interface up and down >>> again, and there really is no point. This is as good a place as any. >>> It does not affect the data transfer tests at all. >> >> Doesn't affect the data transfer, agreed, but why confusing data transfer test >> with link up/down calls? Why not have your function and set interface up and >> down again? > > ok. I was just trying to minimize the number of changes. I'll send a new patch. >