diff mbox series

[net-next] tools: ynl-gen: lift type requirement for attribute subsets

Message ID 20230919142139.1167653-1-jiri@resnulli.us (mailing list archive)
State Changes Requested
Delegated to: Netdev Maintainers
Headers show
Series [net-next] tools: ynl-gen: lift type requirement for attribute subsets | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net-next
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 9 this patch: 9
netdev/cc_maintainers success CCed 5 of 5 maintainers
netdev/build_clang success Errors and warnings before: 9 this patch: 9
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 9 this patch: 9
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 40 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Jiri Pirko Sept. 19, 2023, 2:21 p.m. UTC
From: Jiri Pirko <jiri@nvidia.com>

In case an attribute is used in a subset, the type has to be currently
specified. As the attribute is already defined in the original set, this
is a redundant information in yaml file, moreover, may lead to
inconsistencies.

Example:
attribute-sets:
    ...
    name: pin
    enum-name: dpll_a_pin
    attributes:
      ...
      -
        name: parent-id
        type: u32
      ...
  -
    name: pin-parent-device
    subset-of: pin
    attributes:
      -
        name: parent-id
        type: u32             <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Remove the requirement from schema files to specify the "type" and add
check and bail out if "type" is not set.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
---
 Documentation/netlink/genetlink-c.yaml      | 2 +-
 Documentation/netlink/genetlink-legacy.yaml | 2 +-
 Documentation/netlink/genetlink.yaml        | 2 +-
 Documentation/netlink/netlink-raw.yaml      | 2 +-
 tools/net/ynl/ynl-gen-c.py                  | 2 ++
 5 files changed, 6 insertions(+), 4 deletions(-)

Comments

Paolo Abeni Sept. 28, 2023, 10:15 a.m. UTC | #1
On Tue, 2023-09-19 at 16:21 +0200, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@nvidia.com>
> 
> In case an attribute is used in a subset, the type has to be currently
> specified. As the attribute is already defined in the original set, this
> is a redundant information in yaml file, moreover, may lead to
> inconsistencies.
> 
> Example:
> attribute-sets:
>     ...
>     name: pin
>     enum-name: dpll_a_pin
>     attributes:
>       ...
>       -
>         name: parent-id
>         type: u32
>       ...
>   -
>     name: pin-parent-device
>     subset-of: pin
>     attributes:
>       -
>         name: parent-id
>         type: u32             <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> 
> Remove the requirement from schema files to specify the "type" and add
> check and bail out if "type" is not set.
> 
> Signed-off-by: Jiri Pirko <jiri@nvidia.com>

What about updating accordingly the existing specs? They are used as
references, I think it would be better if the info there would be
consistent.

I think the tool still allows writing something alike:

    attributes:
      ...
      -
        name: parent-id
        type: u32
      ...
  -
    name: pin-parent-device
    subset-of: pin
    attributes:
      -
        name: parent-id
        type: string

(mismatching types). What about adding an explicit test to prevent
specifying again the types for already defined attributes?

Cheers,

Paolo
Jiri Pirko Sept. 29, 2023, 11:18 a.m. UTC | #2
Thu, Sep 28, 2023 at 12:15:22PM CEST, pabeni@redhat.com wrote:
>On Tue, 2023-09-19 at 16:21 +0200, Jiri Pirko wrote:
>> From: Jiri Pirko <jiri@nvidia.com>
>> 
>> In case an attribute is used in a subset, the type has to be currently
>> specified. As the attribute is already defined in the original set, this
>> is a redundant information in yaml file, moreover, may lead to
>> inconsistencies.
>> 
>> Example:
>> attribute-sets:
>>     ...
>>     name: pin
>>     enum-name: dpll_a_pin
>>     attributes:
>>       ...
>>       -
>>         name: parent-id
>>         type: u32
>>       ...
>>   -
>>     name: pin-parent-device
>>     subset-of: pin
>>     attributes:
>>       -
>>         name: parent-id
>>         type: u32             <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>> 
>> Remove the requirement from schema files to specify the "type" and add
>> check and bail out if "type" is not set.
>> 
>> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
>
>What about updating accordingly the existing specs? They are used as
>references, I think it would be better if the info there would be
>consistent.

Okay, will check that out. I will try to update some.


>
>I think the tool still allows writing something alike:
>
>    attributes:
>      ...
>      -
>        name: parent-id
>        type: u32
>      ...
>  -
>    name: pin-parent-device
>    subset-of: pin
>    attributes:
>      -
>        name: parent-id
>        type: string
>
>(mismatching types). What about adding an explicit test to prevent
>specifying again the types for already defined attributes?

Good point. Will check.


>
>Cheers,
>
>Paolo
>
diff mbox series

Patch

diff --git a/Documentation/netlink/genetlink-c.yaml b/Documentation/netlink/genetlink-c.yaml
index 9806c44f604c..80d8aa2708c5 100644
--- a/Documentation/netlink/genetlink-c.yaml
+++ b/Documentation/netlink/genetlink-c.yaml
@@ -142,7 +142,7 @@  properties:
           type: array
           items:
             type: object
-            required: [ name, type ]
+            required: [ name ]
             additionalProperties: False
             properties:
               name:
diff --git a/Documentation/netlink/genetlink-legacy.yaml b/Documentation/netlink/genetlink-legacy.yaml
index 12a0a045605d..2a21aae525a4 100644
--- a/Documentation/netlink/genetlink-legacy.yaml
+++ b/Documentation/netlink/genetlink-legacy.yaml
@@ -180,7 +180,7 @@  properties:
           type: array
           items:
             type: object
-            required: [ name, type ]
+            required: [ name ]
             additionalProperties: False
             properties:
               name:
diff --git a/Documentation/netlink/genetlink.yaml b/Documentation/netlink/genetlink.yaml
index 3d338c48bf21..9e8354f80466 100644
--- a/Documentation/netlink/genetlink.yaml
+++ b/Documentation/netlink/genetlink.yaml
@@ -115,7 +115,7 @@  properties:
           type: array
           items:
             type: object
-            required: [ name, type ]
+            required: [ name ]
             additionalProperties: False
             properties:
               name:
diff --git a/Documentation/netlink/netlink-raw.yaml b/Documentation/netlink/netlink-raw.yaml
index 896797876414..9aeb64b27ada 100644
--- a/Documentation/netlink/netlink-raw.yaml
+++ b/Documentation/netlink/netlink-raw.yaml
@@ -187,7 +187,7 @@  properties:
           type: array
           items:
             type: object
-            required: [ name, type ]
+            required: [ name ]
             additionalProperties: False
             properties:
               name:
diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py
index 897af958cee8..b378412a9d7a 100755
--- a/tools/net/ynl/ynl-gen-c.py
+++ b/tools/net/ynl/ynl-gen-c.py
@@ -723,6 +723,8 @@  class AttrSet(SpecAttrSet):
             self.c_name = ''
 
     def new_attr(self, elem, value):
+        if 'type' not in elem:
+            raise Exception(f"Type has to be set for attribute {elem['name']}")
         if elem['type'] in scalars:
             t = TypeScalar(self.family, self, elem, value)
         elif elem['type'] == 'unused':