Commit 8f632a0a authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'net-tools-ynl-fixes'



Jakub Kicinski says:

====================
tools: ynl: fix subset use and change default value for attrs/ops

Fix a problem in subsetting, which will become apparent when
the devlink family comes after the merge window. Even tho none
of the existing families need this, we don't want someone to
get "inspired" by the current, incorrect code when using specs
in other languages.

Change the default value for the first attr/op. This is a slight
behavior change so needs to go in now. The diffstat of the last
patch should serve as the clearest justification there..
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents ad93bab6 bcec7171
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -11,7 +11,6 @@ attribute-sets:
      -
        name: dev-index
        type: u32
        value: 1
      -
        name: dev-name
        type: string
@@ -25,7 +24,6 @@ attribute-sets:
      -
        name: index
        type: u32
        value: 1
      -
        name: name
        type: string
@@ -39,14 +37,12 @@ attribute-sets:
        name: bit
        type: nest
        nested-attributes: bitset-bit
        value: 1
  -
    name: bitset
    attributes:
      -
        name: nomask
        type: flag
        value: 1
      -
        name: size
        type: u32
@@ -61,7 +57,6 @@ attribute-sets:
      -
        name: index
        type: u32
        value: 1
      -
        name: value
        type: string
@@ -71,7 +66,6 @@ attribute-sets:
      -
        name: string
        type: nest
        value: 1
        multi-attr: true
        nested-attributes: string
  -
@@ -80,7 +74,6 @@ attribute-sets:
      -
        name: id
        type: u32
        value: 1
      -
        name: count
        type: u32
@@ -96,14 +89,12 @@ attribute-sets:
        name: stringset
        type: nest
        multi-attr: true
        value: 1
        nested-attributes: stringset
  -
    name: strset
    attributes:
      -
        name: header
        value: 1
        type: nest
        nested-attributes: header
      -
@@ -119,7 +110,6 @@ attribute-sets:
    attributes:
      -
        name: header
        value: 1
        type: nest
        nested-attributes: header
      -
@@ -132,7 +122,6 @@ attribute-sets:
    attributes:
      -
        name: header
        value: 1
        type: nest
        nested-attributes: header
      -
@@ -180,7 +169,6 @@ attribute-sets:
    attributes:
      -
        name: pad
        value: 1
        type: pad
      -
        name: reassembly-errors
@@ -205,7 +193,6 @@ attribute-sets:
    attributes:
      -
        name: header
        value: 1
        type: nest
        nested-attributes: header
      -
@@ -251,13 +238,11 @@ operations:

      do: &strset-get-op
        request:
          value: 1
          attributes:
            - header
            - stringsets
            - counts-only
        reply:
          value: 1
          attributes:
            - header
            - stringsets
+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ attribute-sets:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: port
        type: u16
@@ -71,6 +72,7 @@ operations:
    -
      name: unspec
      doc: unused
      value: 0

    -
      name: add
+0 −2
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ attribute-sets:
        name: ifindex
        doc: netdev ifindex
        type: u32
        value: 1
        checks:
          min: 1
      -
@@ -66,7 +65,6 @@ operations:
    -
      name: dev-get
      doc: Get / dump information about a netdev.
      value: 1
      attribute-set: dev
      do:
        request:
+8 −2
Original line number Diff line number Diff line
@@ -197,9 +197,15 @@ value
Numerical attribute ID, used in serialized Netlink messages.
The ``value`` property can be skipped, in which case the attribute ID
will be the value of the previous attribute plus one (recursively)
and ``0`` for the first attribute in the attribute set.
and ``1`` for the first attribute in the attribute set.

Note that the ``value`` of an attribute is defined only in its main set.
Attributes (and operations) use ``1`` as the default value for the first
entry (unlike enums in definitions which start from ``0``) because
entry ``0`` is almost always reserved as undefined. Spec can explicitly
set value to ``0`` if needed.

Note that the ``value`` of an attribute is defined only in its main set
(not in subsets).

enum
~~~~
+17 −10
Original line number Diff line number Diff line
@@ -95,7 +95,8 @@ class SpecAttrSet(SpecElement):
        self.attrs = collections.OrderedDict()
        self.attrs_by_val = collections.OrderedDict()

        val = 0
        if self.subset_of is None:
            val = 1
            for elem in self.yaml['attributes']:
                if 'value' in elem:
                    val = elem['value']
@@ -104,6 +105,12 @@ class SpecAttrSet(SpecElement):
                self.attrs[attr.name] = attr
                self.attrs_by_val[attr.value] = attr
                val += 1
        else:
            real_set = family.attr_sets[self.subset_of]
            for elem in self.yaml['attributes']:
                attr = real_set[elem['name']]
                self.attrs[attr.name] = attr
                self.attrs_by_val[attr.value] = attr

    def new_attr(self, elem, value):
        return SpecAttr(self.family, self, elem, value)
@@ -245,7 +252,7 @@ class SpecFamily(SpecElement):
        self._resolution_list.append(elem)

    def _dictify_ops_unified(self):
        val = 0
        val = 1
        for elem in self.yaml['operations']['list']:
            if 'value' in elem:
                val = elem['value']
@@ -256,7 +263,7 @@ class SpecFamily(SpecElement):
            self.msgs[op.name] = op

    def _dictify_ops_directional(self):
        req_val = rsp_val = 0
        req_val = rsp_val = 1
        for elem in self.yaml['operations']['list']:
            if 'notify' in elem:
                if 'value' in elem:
Loading