Commit ed2042cc authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller
Browse files

netlink: specs: support setting prefix-name per attribute



Ethtool's PSE PoDL has a attr nest with different prefixes:

/* Power Sourcing Equipment */
enum {
	ETHTOOL_A_PSE_UNSPEC,
	ETHTOOL_A_PSE_HEADER,			/* nest - _A_HEADER_* */
	ETHTOOL_A_PODL_PSE_ADMIN_STATE,		/* u32 */
	ETHTOOL_A_PODL_PSE_ADMIN_CONTROL,	/* u32 */
	ETHTOOL_A_PODL_PSE_PW_D_STATUS,		/* u32 */

Header has a prefix of ETHTOOL_A_PSE_ and other attrs prefix of
ETHTOOL_A_PODL_PSE_ we can't cover them uniformly.
If PODL was after PSE life would be easy.

Now we either need to add prefixes to attr names which is yucky
or support setting prefix name per attr.

Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 33eedb00
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -195,6 +195,10 @@ properties:
                    description: Max length for a string or a binary attribute.
                    $ref: '#/$defs/len-or-define'
              sub-type: *attr-type
              # Start genetlink-c
              name-prefix:
                type: string
              # End genetlink-c

      # Make sure name-prefix does not appear in subsets (subsets inherit naming)
      dependencies:
+4 −0
Original line number Diff line number Diff line
@@ -226,6 +226,10 @@ properties:
                    description: Max length for a string or a binary attribute.
                    $ref: '#/$defs/len-or-define'
              sub-type: *attr-type
              # Start genetlink-c
              name-prefix:
                type: string
              # End genetlink-c
              # Start genetlink-legacy
              struct:
                description: Name of the struct type used for the attribute.
+5 −2
Original line number Diff line number Diff line
@@ -58,8 +58,11 @@ class Type(SpecAttr):
        delattr(self, "enum_name")

    def resolve(self):
        self.enum_name = f"{self.attr_set.name_prefix}{self.name}"
        self.enum_name = c_upper(self.enum_name)
        if 'name-prefix' in self.attr:
            enum_name = f"{self.attr['name-prefix']}{self.name}"
        else:
            enum_name = f"{self.attr_set.name_prefix}{self.name}"
        self.enum_name = c_upper(enum_name)

    def is_multi_val(self):
        return None