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:09:02 +0000	[thread overview]
Message-ID: <8d7bcd93-15bf-8c2c-96d2-bdd21e75f899@intel.com> (raw)
Message-ID: <20190326150902.MYD6BfmvpKDo-KtVXb_wZQGUPYVjp2I0kHUHTOEl5Cs@z> (raw)
In-Reply-To: <20171212111055.wc3cyg2zzcmkmfip@platinum>

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?

Thanks,
ferruh


  reply	other threads:[~2019-03-26 15:09 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 [this message]
2019-03-26 15:09       ` Ferruh Yigit
2019-03-26 15:35       ` Ferruh Yigit
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=8d7bcd93-15bf-8c2c-96d2-bdd21e75f899@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).