Re: [PATCH net-next v5 12/22] ethtool: provide string sets with GET_STRSET request

From: Jiri Pirko
Date: Fri Mar 29 2019 - 02:52:23 EST


Thu, Mar 28, 2019 at 10:06:07PM CET, jakub.kicinski@xxxxxxxxxxxxx wrote:
>On Thu, 28 Mar 2019 21:43:29 +0100, Michal Kubecek wrote:
>> On Thu, Mar 28, 2019 at 11:52:56AM -0700, Jakub Kicinski wrote:
>> > On Thu, 28 Mar 2019 18:35:24 +0100, Jiri Pirko wrote:
>> > > Thu, Mar 28, 2019 at 03:04:28PM CET, mkubecek@xxxxxxx wrote:
>> > > >On Thu, Mar 28, 2019 at 02:43:13PM +0100, Jiri Pirko wrote:
>> > > >>
>> > > >> I don't like this. This should not be bitfield/set. This should be
>> > > >> simply nested array of enum values:
>> > > >>
>> > > >> enum ethtool_link_mode {
>> > > >> ETHTOOL_LINK_MODE_10baseT_Half,
>> > > >> ETHTOOL_LINK_MODE_10baseT_Full,
>> > > >> ETHTOOL_LINK_MODE_100baseT_Half,
>> > > >> ETHTOOL_LINK_MODE_100baseT_Full,
>> > > >> ETHTOOL_LINK_MODE_1000baseT_Full,
>> > > >> };
>> > > >
>> > > >We already have such enum. The problem with your "no string" approach is
>> > > >that it requires all userspace applications to (1) keep this enum in
>> > >
>> > > That is how it is usually done. UAPI defines ATTRS and values, userspace
>> > > assigns appropriate strings.
>> >
>> > +1 FWIW, I'm with Jiri on the string situation.
>>
>> And I'm still waiting for any of you to tell me how would you handle
>> private flags, stats, tests etc. without the string sets.
>>
>> Ditching the verbose form of bit sets would be a nuisance for userspace
>> using the interface but compared to e.g. having to mix three different
>> kernel interfaces, it's just a minor problem. Ditching the static string
>> sets would mean giving up the opportunity to get rid of having to sync
>> all kinds of tables with every userspace consumer whenever a new flag is
>> introduced. Pity... but still doable. But how do you want to do without
>> the string sets which are provided by drivers?
>
>I don't think there is a disagreement about stuff which is private to
>the driver. The strings have to be exposed there.

Yeah, there is no other way of doing that. However, please check if some
driver-specific setting cannot be moved to devlink with use of devlink
params (we have both devlink driver specific params and per-port
devlink driver specific params).