Commit 35bf34b0 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'netlink-add-display-hint-to-ynl'

Donald Hunter says:

====================
netlink: add display-hint to ynl

Add a display-hint property to the netlink schema, to be used by generic
netlink clients as hints about how to display attribute values.

A display-hint on an attribute definition is intended for letting a
client such as ynl know that, for example, a u32 should be rendered as
an ipv4 address. The display-hint enumeration includes a small number of
networking domain-specific value types.
====================

Link: https://lore.kernel.org/r/20230623201928.14275-1-donald.hunter@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 2ffecf1a 334f39ce
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -195,6 +195,12 @@ properties:
                    description: Max length for a string or a binary attribute.
                    $ref: '#/$defs/len-or-define'
              sub-type: *attr-type
              display-hint: &display-hint
                description: |
                  Optional format indicator that is intended only for choosing
                  the right formatting mechanism when displaying values of this
                  type.
                enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
              # Start genetlink-c
              name-prefix:
                type: string
+10 −1
Original line number Diff line number Diff line
@@ -119,7 +119,8 @@ properties:
              name:
                type: string
              type:
                enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string ]
                description: The netlink attribute type
                enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary ]
              len:
                $ref: '#/$defs/len-or-define'
              byte-order:
@@ -130,6 +131,12 @@ properties:
              enum:
                description: Name of the enum type used for the attribute.
                type: string
              display-hint: &display-hint
                description: |
                  Optional format indicator that is intended only for choosing
                  the right formatting mechanism when displaying values of this
                  type.
                enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
        # End genetlink-legacy

  attribute-sets:
@@ -179,6 +186,7 @@ properties:
              name:
                type: string
              type: &attr-type
                description: The netlink attribute type
                enum: [ unused, pad, flag, binary, u8, u16, u32, u64, s32, s64,
                        string, nest, array-nest, nest-type-value ]
              doc:
@@ -226,6 +234,7 @@ properties:
                    description: Max length for a string or a binary attribute.
                    $ref: '#/$defs/len-or-define'
              sub-type: *attr-type
              display-hint: *display-hint
              # Start genetlink-c
              name-prefix:
                type: string
+6 −0
Original line number Diff line number Diff line
@@ -168,6 +168,12 @@ properties:
                    description: Max length for a string or a binary attribute.
                    $ref: '#/$defs/len-or-define'
              sub-type: *attr-type
              display-hint: &display-hint
                description: |
                  Optional format indicator that is intended only for choosing
                  the right formatting mechanism when displaying values of this
                  type.
                enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]

      # Make sure name-prefix does not appear in subsets (subsets inherit naming)
      dependencies:
+107 −0
Original line number Diff line number Diff line
@@ -33,6 +33,20 @@ definitions:
        name: n-bytes
        type: u64
        doc: Number of matched bytes.
  -
    name: ovs-key-ethernet
    type: struct
    members:
      -
        name: eth-src
        type: binary
        len: 6
        display-hint: mac
      -
        name: eth-dst
        type: binary
        len: 6
        display-hint: mac
  -
    name: ovs-key-mpls
    type: struct
@@ -49,10 +63,12 @@ definitions:
        name: ipv4-src
        type: u32
        byte-order: big-endian
        display-hint: ipv4
      -
        name: ipv4-dst
        type: u32
        byte-order: big-endian
        display-hint: ipv4
      -
        name: ipv4-proto
        type: u8
@@ -66,6 +82,45 @@ definitions:
        name: ipv4-frag
        type: u8
        enum: ovs-frag-type
  -
    name: ovs-key-ipv6
    type: struct
    members:
      -
        name: ipv6-src
        type: binary
        len: 16
        byte-order: big-endian
        display-hint: ipv6
      -
        name: ipv6-dst
        type: binary
        len: 16
        byte-order: big-endian
        display-hint: ipv6
      -
        name: ipv6-label
        type: u32
        byte-order: big-endian
      -
        name: ipv6-proto
        type: u8
      -
        name: ipv6-tclass
        type: u8
      -
        name: ipv6-hlimit
        type: u8
      -
        name: ipv6-frag
        type: u8
  -
    name: ovs-key-ipv6-exthdrs
    type: struct
    members:
      -
        name: hdrs
        type: u16
  -
    name: ovs-frag-type
    name-prefix: ovs-frag-type-
@@ -129,6 +184,51 @@ definitions:
      -
        name: icmp-code
        type: u8
  -
    name: ovs-key-arp
    type: struct
    members:
      -
        name: arp-sip
        type: u32
        byte-order: big-endian
      -
        name: arp-tip
        type: u32
        byte-order: big-endian
      -
        name: arp-op
        type: u16
        byte-order: big-endian
      -
        name: arp-sha
        type: binary
        len: 6
        display-hint: mac
      -
        name: arp-tha
        type: binary
        len: 6
        display-hint: mac
  -
    name: ovs-key-nd
    type: struct
    members:
      -
        name: nd_target
        type: binary
        len: 16
        byte-order: big-endian
      -
        name: nd-sll
        type: binary
        len: 6
        display-hint: mac
      -
        name: nd-tll
        type: binary
        len: 6
        display-hint: mac
  -
    name: ovs-key-ct-tuple-ipv4
    type: struct
@@ -345,6 +445,7 @@ attribute-sets:
          value of the OVS_FLOW_ATTR_KEY attribute. Optional for all
          requests. Present in notifications if the flow was created with this
          attribute.
        display-hint: uuid
      -
        name: ufid-flags
        type: u32
@@ -374,6 +475,7 @@ attribute-sets:
      -
        name: ethernet
        type: binary
        struct: ovs-key-ethernet
        doc: struct ovs_key_ethernet
      -
        name: vlan
@@ -390,6 +492,7 @@ attribute-sets:
      -
        name: ipv6
        type: binary
        struct: ovs-key-ipv6
        doc: struct ovs_key_ipv6
      -
        name: tcp
@@ -410,10 +513,12 @@ attribute-sets:
      -
        name: arp
        type: binary
        struct: ovs-key-arp
        doc: struct ovs_key_arp
      -
        name: nd
        type: binary
        struct: ovs-key-nd
        doc: struct ovs_key_nd
      -
        name: skb-mark
@@ -457,6 +562,7 @@ attribute-sets:
      -
        name: ct-labels
        type: binary
        display-hint: hex
        doc: 16-octet connection tracking label
      -
        name: ct-orig-tuple-ipv4
@@ -486,6 +592,7 @@ attribute-sets:
      -
        name: ipv6-exthdrs
        type: binary
        struct: ovs-key-ipv6-exthdrs
        doc: struct ovs_key_ipv6_exthdr
  -
    name: action-attrs
+10 −0
Original line number Diff line number Diff line
@@ -154,6 +154,9 @@ class SpecAttr(SpecElement):
        is_multi      bool, attr may repeat multiple times
        struct_name   string, name of struct definition
        sub_type      string, name of sub type
        len           integer, optional byte length of binary types
        display_hint  string, hint to help choose format specifier
                      when displaying the value
    """
    def __init__(self, family, attr_set, yaml, value):
        super().__init__(family, yaml)
@@ -164,6 +167,8 @@ class SpecAttr(SpecElement):
        self.struct_name = yaml.get('struct')
        self.sub_type = yaml.get('sub-type')
        self.byte_order = yaml.get('byte-order')
        self.len = yaml.get('len')
        self.display_hint = yaml.get('display-hint')


class SpecAttrSet(SpecElement):
@@ -229,12 +234,17 @@ class SpecStructMember(SpecElement):
        type        string, type of the member attribute
        byte_order  string or None for native byte order
        enum        string, name of the enum definition
        len         integer, optional byte length of binary types
        display_hint  string, hint to help choose format specifier
                      when displaying the value
    """
    def __init__(self, family, yaml):
        super().__init__(family, yaml)
        self.type = yaml['type']
        self.byte_order = yaml.get('byte-order')
        self.enum = yaml.get('enum')
        self.len = yaml.get('len')
        self.display_hint = yaml.get('display-hint')


class SpecStruct(SpecElement):
Loading