Commit af852f1f authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

netlink: specs: enforce strict naming of properties



Add a regexp to make sure all names which may end up being visible
to the user consist of lower case characters, numbers and dashes.
Underscores keep sneaking into the specs, which is not visible
in the C code but makes the Python and alike inconsistent.

Note that starting with a number is okay, as in C the full
name will include the family name.

For legacy families we can't enforce the naming in the family
name or the multicast group names, as these are part of the
binary uAPI of the kernel.

For classic netlink we need to allow capital letters in names
of struct members. TC has some structs with capitalized members.

Reviewed-by: default avatarDonald Hunter <donald.hunter@gmail.com>
Link: https://patch.msgid.link/20250624211002.3475021-11-kuba@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent eef0eaec
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -6,6 +6,9 @@ $schema: https://json-schema.org/draft-07/schema

# Common defines
$defs:
  name:
    type: string
    pattern: ^[0-9a-z-]+$
  uint:
    type: integer
    minimum: 0
@@ -76,7 +79,7 @@ properties:
      additionalProperties: False
      properties:
        name:
          type: string
          $ref: '#/$defs/name'
        header:
          description: For C-compatible languages, header which already defines this value.
          type: string
@@ -103,7 +106,7 @@ properties:
                additionalProperties: False
                properties:
                  name:
                    type: string
                    $ref: '#/$defs/name'
                  value:
                    type: integer
                  doc:
@@ -132,7 +135,7 @@ properties:
            additionalProperties: False
            properties:
              name:
                type: string
                $ref: '#/$defs/name'
              type:
                description: The netlink attribute type
                enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary ]
@@ -169,7 +172,7 @@ properties:
        name:
          description: |
            Name used when referring to this space in other definitions, not used outside of the spec.
          type: string
          $ref: '#/$defs/name'
        name-prefix:
          description: |
            Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
@@ -206,7 +209,7 @@ properties:
            additionalProperties: False
            properties:
              name:
                type: string
                $ref: '#/$defs/name'
              type: &attr-type
                description: The netlink attribute type
                enum: [ unused, pad, flag, binary, bitfield32,
@@ -348,7 +351,7 @@ properties:
          properties:
            name:
              description: Name of the operation, also defining its C enum value in uAPI.
              type: string
              $ref: '#/$defs/name'
            doc:
              description: Documentation for the command.
              type: string
+10 −7
Original line number Diff line number Diff line
@@ -6,6 +6,9 @@ $schema: https://json-schema.org/draft-07/schema

# Common defines
$defs:
  name:
    type: string
    pattern: ^[0-9a-z-]+$
  uint:
    type: integer
    minimum: 0
@@ -29,7 +32,7 @@ additionalProperties: False
properties:
  name:
    description: Name of the genetlink family.
    type: string
    $ref: '#/$defs/name'
  doc:
    type: string
  protocol:
@@ -48,7 +51,7 @@ properties:
      additionalProperties: False
      properties:
        name:
          type: string
          $ref: '#/$defs/name'
        header:
          description: For C-compatible languages, header which already defines this value.
          type: string
@@ -75,7 +78,7 @@ properties:
                additionalProperties: False
                properties:
                  name:
                    type: string
                    $ref: '#/$defs/name'
                  value:
                    type: integer
                  doc:
@@ -96,7 +99,7 @@ properties:
        name:
          description: |
            Name used when referring to this space in other definitions, not used outside of the spec.
          type: string
          $ref: '#/$defs/name'
        name-prefix:
          description: |
            Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
@@ -121,7 +124,7 @@ properties:
            additionalProperties: False
            properties:
              name:
                type: string
                $ref: '#/$defs/name'
              type: &attr-type
                enum: [ unused, pad, flag, binary,
                        uint, sint, u8, u16, u32, u64, s8, s16, s32, s64,
@@ -243,7 +246,7 @@ properties:
          properties:
            name:
              description: Name of the operation, also defining its C enum value in uAPI.
              type: string
              $ref: '#/$defs/name'
            doc:
              description: Documentation for the command.
              type: string
@@ -327,7 +330,7 @@ properties:
            name:
              description: |
                The name for the group, used to form the define and the value of the define.
              type: string
              $ref: '#/$defs/name'
            flags: *cmd_flags

  kernel-family:
+12 −6
Original line number Diff line number Diff line
@@ -6,6 +6,12 @@ $schema: https://json-schema.org/draft-07/schema

# Common defines
$defs:
  name:
    type: string
    pattern: ^[0-9a-z-]+$
  name-cap:
    type: string
    pattern: ^[0-9a-zA-Z-]+$
  uint:
    type: integer
    minimum: 0
@@ -71,7 +77,7 @@ properties:
      additionalProperties: False
      properties:
        name:
          type: string
          $ref: '#/$defs/name'
        header:
          description: For C-compatible languages, header which already defines this value.
          type: string
@@ -98,7 +104,7 @@ properties:
                additionalProperties: False
                properties:
                  name:
                    type: string
                    $ref: '#/$defs/name'
                  value:
                    type: integer
                  doc:
@@ -124,7 +130,7 @@ properties:
            additionalProperties: False
            properties:
              name:
                type: string
                $ref: '#/$defs/name-cap'
              type:
                description: |
                  The netlink attribute type. Members of type 'binary' or 'pad'
@@ -183,7 +189,7 @@ properties:
        name:
          description: |
            Name used when referring to this space in other definitions, not used outside of the spec.
          type: string
          $ref: '#/$defs/name'
        name-prefix:
          description: |
            Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
@@ -220,7 +226,7 @@ properties:
            additionalProperties: False
            properties:
              name:
                type: string
                $ref: '#/$defs/name'
              type: &attr-type
                description: The netlink attribute type
                enum: [ unused, pad, flag, binary, bitfield32,
@@ -408,7 +414,7 @@ properties:
          properties:
            name:
              description: Name of the operation, also defining its C enum value in uAPI.
              type: string
              $ref: '#/$defs/name'
            doc:
              description: Documentation for the command.
              type: string