DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ferruh Yigit <ferruh.yigit@intel.com>
To: Dan Gora <dg@adax.com>
Cc: dev@dpdk.org, Igor Ryzhov <iryzhov@nfware.com>,
	Stephen Hemminger <stephen@networkplumber.org>
Subject: Re: [dpdk-dev] [PATCH v2 1/5] kni: add API to set link status on kernel interface
Date: Wed, 10 Oct 2018 15:09:35 +0100	[thread overview]
Message-ID: <d0c77251-04d7-29e7-53ef-92ef2ce0f656@intel.com> (raw)
In-Reply-To: <CAGyogRZJmAWGXX0kXk+k69rbDbRqEJgS0H_Vw8h43-qFQ_ptEQ@mail.gmail.com>

On 10/3/2018 8:07 PM, Dan Gora wrote:
> On Fri, Sep 28, 2018 at 5:03 AM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>>
>> On 9/28/2018 12:51 AM, Dan Gora wrote:
>>> On Thu, Sep 27, 2018 at 8:44 PM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>>>>> Well, yes the link_status (link up, link down) _is_ applied to the KNI
>>>>> interface.  When that occurs, most people want to know what the link
>>>>> speed is that the link came up at.
>>>>
>>>> +1 to this, people would like to know link speed of the interface.
>>>> Are you printing link speed of interface? You are printing whatever user pass to
>>>> API.
>>>
>>> There is no such thing as "link speed of the interface".  The link
>>> speed is the speed of the underlying Ethernet link that the interface
>>> corresponds to.  This is true for all other ethernet interfaces in the
>>> kernel.
>>
>> This is an API to set link status of KNI interface, KNI interface is a virtual
>> interface and no need to be backed by a physical interface at all.
> 
> Yes, I understand that.
> 
>> Only kni sample application uses it in a way to match a physical interface to a
>> KNI interface, but please check KNI PMD where you can have multiple KNI
>> interface without any physical device at all.
> 
> Yes, I understand that.. As I pointed out previously, if there is no
> physical device which corresponds to this KNI interface, the
> application can:
> 
> 1) Not use this API at all, just as they do now.

This API has nothing with if KNI interface has corresponding physical device or
not, all KNI users can use it.

> 2) Use the API and set the state to linkup/0Mbps/autoNeg/Full.  This
> is perfectly reasonable and no one would be confused by this.

That is the think, you are not setting anything, you are just printing
"0Mbps/autoNeg/Full" and assuming/hoping the _if_ there is a corresponding
physical device app sends the values of that device to API for printing.

Overall I am not sure if there is a value to discuss this more, and I don't want
this relatively small issue to block the patch, I will comment more to latest
version.

> 
>>>> I guess you trust to user to provide correct values there, but since only link
>>>> up & down matters, what prevents user to leave other fields, like speed, just
>>>> random values?
>>>
>>> Nothing.  What prevents anyone from providing random values for
>>> anything?  The point of the API was to make it super simple, just:
>>>
>>> rte_eth_link_get_nowait(portid, &link);
>>> rte_kni_update_link(p[portid]->kni[i], &link);
>>
>> You are only thinking about this use case. Normally the input to API should be
>> verified right, for this case there is no way to verify it and vales are not
>> used at all, it is just printed in API.
> 
> In most applications it is useful to have a message printed which
> shows the *change* in link status as well as the speed that the link
> came up at.  If you don't provide the link speed, etc information,
> then the API is not really useful.  Yes the application writer can
> provide whatever they want for the link speed/duplex/autoneg, but so
> what?  Their application will have a nonsensical log message.  It's
> not DPDK's job to enforce sanity on everyone's application.
> 
> And no, not every input to every API function is verified.  There are
> lots of examples in the DPDK where this is not the case.  The
> parameters should be verified to ensure that they do not cause the
> application to "break", not necessarily so that they make sense
> (whatever that would mean in this case).
> 
> It was recommended that we change the rte_kni_update_link() API to
> only use the link status as an input and print the log messages
> outside the API in the application code.  However think about what
> that would entail:
> 
> You only want to log *changes* in the link state, not log a message
> when you set the same state.  This means that either:
> 
> 1) the application would have to store the previous carrier state.
> 2) rte_kni_update_link could return the previous value read from the
> /sys/.../carrier file.
> 3) the application could read the /sys/.../carrier file before calling
> rte_kni_update_link to read the previous carrier state.
> 
> In case 1 you're obliging all users of this API to carry around this
> extra state for no real reason.  The API can easily read the
> /sys/.../carrier file to see the previous state while it has it open,
> just as it does in this patch.
> 
> In case 2, the application can easily detect when the state changes,
> but then you end up with a return value something like -1 for errors,
> 0 for previous_link == down, 1 for previous_link == up.  I fail to see
> how this is a better API design that what has already been proposed,
> but it's at least somewhat useful, even if awkward.
> 
> In the DPDK application, you get something like:
> 
> rte_eth_link_get_nowait(portid, &link);
> prev_link = rte_kni_update_link(p[portid]->kni[i], link.link_status);
> if (prev_link >= 0)
> {
>    if (prev_link == 0 && link.link_status == 1)
>      printf("LINKUP: speed %d duplex %s autoneg %s\n", ....)
>   else if (prev_link == 1 && link.link_status == 0)
>     printf("LINKDOWN:\n");
> } else {
>   printf("Error: something went wrong...\n");
> }
> 
> I don't really see how this is better than:
> 
> rte_eth_link_get_nowait(portid, &link);
> rte_kni_update_link(p[portid]->kni[i], &link);
> 
> but that's my opinion...
> 
> In case 3, you might as well not even have this API since you're
> duplicating half of the same code.
> 
> I would be willing to implement case 2, however I still think that it
> is not as good a design and will unnecessarily complicate application
> code compared to the current patch here.  Cases 1 and 3 are
> non-starters for me.  Our application needs log messages only when the
> link *changes* state.  These log messages need to include the link
> speed/duplex/autoneg info.  I think that most, if not all,
> applications would want that too.  It's how every other physical
> ethernet driver in the linux kernel works.  DPDK applications which
> use only KNI virtual interfaces without a physical interface are under
> no obligation to use this API function.
> 
> thanks
> dan
> 

  reply	other threads:[~2018-10-10 14:09 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-11 23:29 [dpdk-dev] [PATCH 0/2] " Dan Gora
2018-09-11 23:29 ` [dpdk-dev] [PATCH 1/2] " Dan Gora
2018-09-18 16:54   ` Ferruh Yigit
2018-09-18 17:41     ` Dan Gora
2018-09-11 23:29 ` [dpdk-dev] [PATCH 2/2] kni: set default carrier state to 'off' Dan Gora
2018-09-18 16:15   ` Ferruh Yigit
2018-09-18 16:48     ` Ferruh Yigit
2018-09-18 18:34       ` Dan Gora
2018-09-19 19:55 ` [dpdk-dev] [PATCH v2 0/5] kni: add API to set link status on kernel interface Dan Gora
2018-09-19 19:55   ` [dpdk-dev] [PATCH v2 1/5] " Dan Gora
2018-09-26 13:59     ` Ferruh Yigit
2018-09-26 14:55       ` Dan Gora
2018-09-26 16:42         ` Ferruh Yigit
2018-09-26 18:56           ` Dan Gora
2018-09-27 11:35             ` Ferruh Yigit
2018-09-27 15:40               ` Dan Gora
2018-09-27 21:49                 ` Ferruh Yigit
2018-09-27 23:05                   ` Dan Gora
2018-09-27 23:44                     ` Ferruh Yigit
2018-09-27 23:51                       ` Dan Gora
2018-09-28  8:02                         ` Igor Ryzhov
2018-09-28  8:03                         ` Ferruh Yigit
2018-10-03 19:07                           ` Dan Gora
2018-10-10 14:09                             ` Ferruh Yigit [this message]
2018-10-10 14:57                               ` Dan Gora
2018-09-19 19:55   ` [dpdk-dev] [PATCH v2 2/5] kni: set default carrier state to 'off' Dan Gora
2018-09-26 13:59     ` Ferruh Yigit
2018-09-19 19:55   ` [dpdk-dev] [PATCH v2 3/5] examples/kni: monitor and update link status continually Dan Gora
2018-09-26 14:00     ` Ferruh Yigit
2018-09-26 19:16       ` Dan Gora
2018-09-27 11:54         ` Ferruh Yigit
2018-09-19 19:55   ` [dpdk-dev] [PATCH v2 4/5] examples/kni: add log msgs to show and clear stats Dan Gora
2018-09-26 14:00     ` Ferruh Yigit
2018-09-19 19:55   ` [dpdk-dev] [PATCH v2 5/5] examples/kni: improve zeroing statistics Dan Gora
2018-09-26 14:01     ` Ferruh Yigit
2018-09-26 14:48       ` Dan Gora
2018-09-27 11:40         ` Ferruh Yigit
2018-09-27 15:53           ` Dan Gora
2018-09-27 22:04             ` Ferruh Yigit
2018-09-27 22:40               ` Dan Gora
2018-09-27  0:32 ` [dpdk-dev] [PATCH v3 0/6] kni: add API to set link status on kernel interface Dan Gora
2018-09-27  0:32   ` [dpdk-dev] [PATCH v3 1/6] " Dan Gora
2018-09-27  0:32   ` [dpdk-dev] [PATCH v3 2/6] kni: add link status test Dan Gora
2018-09-27  0:32   ` [dpdk-dev] [PATCH v3 3/6] kni: set default carrier state to 'off' Dan Gora
2018-09-27  0:32   ` [dpdk-dev] [PATCH v3 4/6] examples/kni: monitor and update link status continually Dan Gora
2018-09-27  0:32   ` [dpdk-dev] [PATCH v3 5/6] examples/kni: add log msgs to show and clear stats Dan Gora
2018-09-27  0:32   ` [dpdk-dev] [PATCH v3 6/6] examples/kni: improve zeroing statistics Dan Gora
2018-10-10 14:16   ` [dpdk-dev] [PATCH v3 0/6] kni: add API to set link status on kernel interface Ferruh Yigit
2018-10-10 15:01     ` Dan Gora
2018-10-10 23:00       ` Ferruh Yigit
2018-10-10 23:36         ` Dan Gora
2018-10-17  1:04 ` [dpdk-dev] [PATCH v4 " Dan Gora
2018-10-17 15:29   ` Ferruh Yigit
2018-10-17  1:04 ` [dpdk-dev] [PATCH v4 1/6] " Dan Gora
2018-10-18 13:44   ` Ferruh Yigit
2018-10-18 19:00     ` Dan Gora
2018-10-17  1:04 ` [dpdk-dev] [PATCH v4 2/6] kni: add link status test Dan Gora
2018-10-17  1:04 ` [dpdk-dev] [PATCH v4 3/6] kni: set default carrier state of interface Dan Gora
2018-10-17 15:20   ` Ferruh Yigit
2018-10-17  1:04 ` [dpdk-dev] [PATCH v4 4/6] examples/kni: monitor and update link status continually Dan Gora
2018-10-17  1:04 ` [dpdk-dev] [PATCH v4 5/6] examples/kni: add log msgs to show and clear stats Dan Gora
2018-10-17  1:04 ` [dpdk-dev] [PATCH v4 6/6] examples/kni: improve zeroing statistics Dan Gora
2018-10-19  0:23 ` [dpdk-dev] [PATCH v5 0/5] kni: add API to set link status on kernel interface Dan Gora
2018-10-19  0:23   ` [dpdk-dev] [PATCH v5 1/5] " Dan Gora
2018-10-19  0:23   ` [dpdk-dev] [PATCH v5 2/5] kni: set default carrier state of interface Dan Gora
2018-10-19  0:23   ` [dpdk-dev] [PATCH v5 3/5] examples/kni: monitor and update link status continually Dan Gora
2018-10-22 12:51     ` Ferruh Yigit
2018-10-22 20:04       ` Dan Gora
2018-10-19  0:23   ` [dpdk-dev] [PATCH v5 4/5] examples/kni: add log msgs to show and clear stats Dan Gora
2018-10-19  0:23   ` [dpdk-dev] [PATCH v5 5/5] examples/kni: improve zeroing statistics Dan Gora
2018-10-22 13:03   ` [dpdk-dev] [PATCH v5 0/5] kni: add API to set link status on kernel interface Ferruh Yigit
2018-10-22 13:08     ` Thomas Monjalon
2018-10-22 13:14       ` Ferruh Yigit
2018-10-22 13:18         ` Thomas Monjalon
2018-10-24 20:27 ` [dpdk-dev] [PATCH v6 " Dan Gora
2018-10-24 20:27   ` [dpdk-dev] [PATCH v6 1/5] " Dan Gora
2018-10-24 20:27   ` [dpdk-dev] [PATCH v6 2/5] kni: set default carrier state of interface Dan Gora
2018-10-24 20:27   ` [dpdk-dev] [PATCH v6 3/5] examples/kni: monitor and update link status continually Dan Gora
2018-10-24 20:27   ` [dpdk-dev] [PATCH v6 4/5] examples/kni: add log msgs to show and clear stats Dan Gora
2018-10-24 20:46     ` Stephen Hemminger
2018-10-24 20:56       ` Dan Gora
2018-10-24 21:17         ` Stephen Hemminger
2018-10-24 21:45           ` Dan Gora
2018-10-24 20:27   ` [dpdk-dev] [PATCH v6 5/5] examples/kni: improve zeroing statistics Dan Gora
2018-10-24 22:26 ` [dpdk-dev] [PATCH v7 0/5] kni: add API to set link status on kernel interface Dan Gora
2018-10-24 22:26   ` [dpdk-dev] [PATCH v7 1/5] " Dan Gora
2018-10-24 22:26   ` [dpdk-dev] [PATCH v7 2/5] kni: set default carrier state of interface Dan Gora
2018-10-24 22:26   ` [dpdk-dev] [PATCH v7 3/5] examples/kni: monitor and update link status continually Dan Gora
2018-10-24 22:26   ` [dpdk-dev] [PATCH v7 4/5] examples/kni: add log msgs to show and clear stats Dan Gora
2018-10-24 22:26   ` [dpdk-dev] [PATCH v7 5/5] examples/kni: improve zeroing statistics Dan Gora
2018-10-25 12:30   ` [dpdk-dev] [PATCH v7 0/5] kni: add API to set link status on kernel interface Ferruh Yigit
2018-10-26 17:43     ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d0c77251-04d7-29e7-53ef-92ef2ce0f656@intel.com \
    --to=ferruh.yigit@intel.com \
    --cc=dev@dpdk.org \
    --cc=dg@adax.com \
    --cc=iryzhov@nfware.com \
    --cc=stephen@networkplumber.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).