DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ferruh Yigit <ferruh.yigit@intel.com>
To: Olivier MATZ <olivier.matz@6wind.com>,
	ivan.boule@6wind.com,
	Andrew Rybchenko <arybchenko@solarflare.com>
Cc: Thomas Monjalon <thomas@monjalon.net>, dpdk-dev <dev@dpdk.org>
Subject: Re: [dpdk-dev] [RFC] ethdev: add administrative information in per-port info
Date: Tue, 26 Mar 2019 15:35:23 +0000	[thread overview]
Message-ID: <4d1b374a-1b80-67de-cfdf-e18d3d8cf06c@intel.com> (raw)
Message-ID: <20190326153523.A3ZEzfeboC3tSg1S6I5y0-hXzFXrToFY_7O-ugEW7JQ@z> (raw)
In-Reply-To: <8d7bcd93-15bf-8c2c-96d2-bdd21e75f899@intel.com>

On 3/26/2019 3:09 PM, Ferruh Yigit wrote:
> On 12/12/2017 11:10 AM, olivier.matz at 6wind.com (Olivier MATZ) wrote:
>> Hi Andrew,
>>
>> On Wed, Nov 15, 2017 at 12:09:24PM +0300, Andrew Rybchenko wrote:
>>> On 09/08/2017 12:21 PM, Ivan Boule wrote:
>>>> To help administrative tasks on DPDK ports, add in the data structure
>>>> rte_eth_dev_info the following per-port information to be supplied
>>>> by the dev_infos_get() function exported by a Poll Mode Driver:
>>>>
>>>> - the set of supported link modes,
>>>> - the set of advertised link modes,
>>>> - the type of port connector,
>>>> - autonegotiation enabled or not.
>>>
>>> Sorry for late response. I've lost it from my view until today's discussion
>>> of
>>> deprecation notice.
>>
>> Sorry also for my late answer, and thank you for your comments.
>>
>>> Just for my understanding. I always considered dev_info as place for
>>> more or less stable information like capabilities and physical restrictions.
>>> Port connector perfectly fits it, but advertised link modes and autoneg
>>> status are more dynamic. May be it is a better way to have dedicated API?
>>> Just would like to raise discussion and understand why finally one or
>>> another way will be chosen.
>>
>> Yes, you are right. I think we can find some exceptions:
>>
>> - nb_rx_queues/nb_tx_queues return the current number of configured queues
>> - the speed capabilities may depend on the SFP, which can be hot-plugged
>> - with a failsafe driver, the capabilities/limits depend on the list of
>>   sub-devices
>> - maybe the offload capabilities on a virtio device could depend on the
>>   peer configuration.
>>
>> But, yes, a new API is maybe better to avoid adding another exception.
>> Something like rte_eth_media_get() ?
>>
>>
>>> Also see note below about connectors.
>>>
>>>> Set new administrative fields to a default value in rte_eth_dev_info_get()
>>>> before invoking the dev_infos_get() function exported by a PMD, if any.
>>>>
>>>> Once this API change is accepted, the dev_infos_get() function of PMDs
>>>> will be updated accordingly to set these new fields, along with the
>>>> port_infos_display() function of the testpmd to display them.
>>>>
>>>> Signed-off-by: Ivan Boule <ivan.boule at 6wind.com>
>>>> ---
>>>>   lib/librte_ether/rte_ethdev.c |   1 +
>>>>   lib/librte_ether/rte_ethdev.h | 112 ++++++++++++++++++++++++++++++++++++++++++
>>>>   2 files changed, 113 insertions(+)
>>>>
>>>> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
>>>> index 0597641..4ca51e1 100644
>>>> --- a/lib/librte_ether/rte_ethdev.c
>>>> +++ b/lib/librte_ether/rte_ethdev.c
>>>> @@ -1897,6 +1897,7 @@ rte_eth_dev_info_get(uint8_t port_id, struct rte_eth_dev_info *dev_info)
>>>>   	memset(dev_info, 0, sizeof(struct rte_eth_dev_info));
>>>>   	dev_info->rx_desc_lim = lim;
>>>>   	dev_info->tx_desc_lim = lim;
>>>> +	dev_info->connector = RTE_ETH_CONNECTOR_OTHER;
>>>>   	RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_infos_get);
>>>>   	(*dev->dev_ops->dev_infos_get)(dev, dev_info);
>>>> diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
>>>> index 0adf327..ac49380 100644
>>>> --- a/lib/librte_ether/rte_ethdev.h
>>>> +++ b/lib/librte_ether/rte_ethdev.h
>>>> @@ -935,6 +935,113 @@ struct rte_pci_device;
>>>>   /**
>>>>    * Ethernet device information
>>>>    */
>>>> +
>>>> +/* Types of port connector. */
>>>> +#define RTE_ETH_CONNECTOR_TP        0x00 /**< Twisted Pair */
>>>> +#define RTE_ETH_CONNECTOR_AUI       0x01 /**< Attachment Unit Interface */
>>>> +#define RTE_ETH_CONNECTOR_MII       0x02 /**< Media-Independent Interface */
>>>> +#define RTE_ETH_CONNECTOR_FIBRE     0x03 /**< Fiber */
>>>> +#define RTE_ETH_CONNECTOR_DA        0x05 /**< Direct Attach */
>>>
>>> I thought that examples of connectors are rather RG45, SFP, SFP+, QSFP+,
>>> SFP28, QSFP28.
>>> Media could be twisted pair, fibre, direct attach etc.
>>
>> The types of connectors are derivated from Linux ethtool.
>> But thinking at it, directly copying the defines would cause licensing
>> issues since ethtool is GPL.
>>
>> Unfortunatly, I don't know that much about the different types of
>> connectors and media. I found some inputs on the wikipedia page
>> ( https://en.wikipedia.org/wiki/Ethernet_physical_layer ), but
>> any additional input is welcome :)
>>
>>
>>>> +#define RTE_ETH_CONNECTOR_NONE      0xef
>>>> +#define RTE_ETH_CONNECTOR_OTHER     0xff
>>>> +
>>>> +/* Link modes. */
>>>> +#define RTE_ETH_LINK_MODE_10baseT_Half_BIT            0
>>>> +#define RTE_ETH_LINK_MODE_10baseT_Full_BIT            1
>>>> +#define RTE_ETH_LINK_MODE_100baseT_Half_BIT           2
>>>> +#define RTE_ETH_LINK_MODE_100baseT_Full_BIT           3
>>>> +#define RTE_ETH_LINK_MODE_1000baseT_Half_BIT          4
>>>> +#define RTE_ETH_LINK_MODE_1000baseT_Full_BIT          5
>>>> +#define RTE_ETH_LINK_MODE_Autoneg_BIT                 6
>>>> +#define RTE_ETH_LINK_MODE_TP_BIT                      7
>>>> +#define RTE_ETH_LINK_MODE_AUI_BIT                     8
>>>> +#define RTE_ETH_LINK_MODE_MII_BIT                     9
>>>> +#define RTE_ETH_LINK_MODE_FIBRE_BIT                  10
>>>> +#define RTE_ETH_LINK_MODE_BNC_BIT                    11
>>>> +#define RTE_ETH_LINK_MODE_10000baseT_Full_BIT        12
>>>> +#define RTE_ETH_LINK_MODE_Pause_BIT                  13
>>>> +#define RTE_ETH_LINK_MODE_Asym_Pause_BIT             14
>>>> +#define RTE_ETH_LINK_MODE_2500baseX_Full_BIT         15
>>>> +#define RTE_ETH_LINK_MODE_Backplane_BIT              16
>>>> +#define RTE_ETH_LINK_MODE_1000baseKX_Full_BIT        17
>>>> +#define RTE_ETH_LINK_MODE_10000baseKX4_Full_BIT      18
>>>> +#define RTE_ETH_LINK_MODE_10000baseKR_Full_BIT       19
>>>> +#define RTE_ETH_LINK_MODE_10000baseR_FEC_BIT         20
>>>> +#define RTE_ETH_LINK_MODE_20000baseMLD2_Full_BIT     21
>>>> +#define RTE_ETH_LINK_MODE_20000baseKR2_Full_BIT      22
>>>> +#define RTE_ETH_LINK_MODE_40000baseKR4_Full_BIT      23
>>>> +#define RTE_ETH_LINK_MODE_40000baseCR4_Full_BIT      24
>>>> +#define RTE_ETH_LINK_MODE_40000baseSR4_Full_BIT      25
>>>> +#define RTE_ETH_LINK_MODE_40000baseLR4_Full_BIT      26
>>>> +#define RTE_ETH_LINK_MODE_56000baseKR4_Full_BIT      27
>>>> +#define RTE_ETH_LINK_MODE_56000baseCR4_Full_BIT      28
>>>> +#define RTE_ETH_LINK_MODE_56000baseSR4_Full_BIT      29
>>>> +#define RTE_ETH_LINK_MODE_56000baseLR4_Full_BIT      30
>>>> +#define RTE_ETH_LINK_MODE_25000baseCR_Full_BIT       31
>>>> +#define RTE_ETH_LINK_MODE_25000baseKR_Full_BIT       32
>>>> +#define RTE_ETH_LINK_MODE_25000baseSR_Full_BIT       33
>>>> +#define RTE_ETH_LINK_MODE_50000baseCR2_Full_BIT      34
>>>> +#define RTE_ETH_LINK_MODE_50000baseKR2_Full_BIT      35
>>>> +#define RTE_ETH_LINK_MODE_100000baseKR4_Full_BIT     36
>>>> +#define RTE_ETH_LINK_MODE_100000baseSR4_Full_BIT     37
>>>> +#define RTE_ETH_LINK_MODE_100000baseCR4_Full_BIT     38
>>>> +#define RTE_ETH_LINK_MODE_100000baseLR4_ER4_Full_BIT 39
>>>> +#define RTE_ETH_LINK_MODE_50000baseSR2_Full_BIT      40
>>>> +#define RTE_ETH_LINK_MODE_1000baseX_Full_BIT         41
>>>> +#define RTE_ETH_LINK_MODE_10000baseCR_Full_BIT       42
>>>> +#define RTE_ETH_LINK_MODE_10000baseSR_Full_BIT       43
>>>> +#define RTE_ETH_LINK_MODE_10000baseLR_Full_BIT       44
>>>> +#define RTE_ETH_LINK_MODE_10000baseLRM_Full_BIT      45
>>>> +#define RTE_ETH_LINK_MODE_10000baseER_Full_BIT       46
>>>> +#define RTE_ETH_LINK_MODE_2500baseT_Full_BIT         47
>>>> +#define RTE_ETH_LINK_MODE_5000baseT_Full_BIT         48
>>>> +
>>>> +#define RTE_ETH_LINK_MODE_BIT(link_mode_base_name)		\
>>>> +	(RTE_ETH_LINK_MODE_ ## link_mode_base_name ## _BIT)
>>
>> So, same here, these link modes are from ethtool and should not
>> be used. We could try to build our own from FreeBSD's media
>> type: http://fxr.watson.org/fxr/source/net/if_media.h#L393
>>
>> Thoughts?
> 
> Hi Olivier,
> 
> The patch is waiting for comments since end of 2017, any objection to reject it?
> If this is still relevant would you mind sending a up to date version of it?

For reference, pathwork ids:
https://patches.dpdk.org/patch/28508/


  parent reply	other threads:[~2019-03-26 15:35 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-08  9:21 Ivan Boule
2017-11-15  9:09 ` Andrew Rybchenko
2017-12-12 11:10   ` Olivier MATZ
2019-03-26 15:09     ` Ferruh Yigit
2019-03-26 15:09       ` Ferruh Yigit
2019-03-26 15:35       ` Ferruh Yigit [this message]
2019-03-26 15:35         ` Ferruh Yigit

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=4d1b374a-1b80-67de-cfdf-e18d3d8cf06c@intel.com \
    --to=ferruh.yigit@intel.com \
    --cc=arybchenko@solarflare.com \
    --cc=dev@dpdk.org \
    --cc=ivan.boule@6wind.com \
    --cc=olivier.matz@6wind.com \
    --cc=thomas@monjalon.net \
    /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).