Skip to content

Deprecate source/destination flow-label and add single flow-label leaf#1452

Open
earies wants to merge 1 commit intoopenconfig:masterfrom
earies:flow-label
Open

Deprecate source/destination flow-label and add single flow-label leaf#1452
earies wants to merge 1 commit intoopenconfig:masterfrom
earies:flow-label

Conversation

@earies
Copy link
Copy Markdown
Contributor

@earies earies commented Mar 20, 2026

  • (M) release/models/acl/openconfig-packet-match.yang
    • Deprecate source-flow-label and destination-flow-label
    • Add flow-label leaf to ipv6-protocol-fields-config grouping
    • Bump openconfig-version to 2.3.0

Change Scope

The IPv6 header contains a single 20-bit flow-label field; there is no distinct source or destination flow-label. Deprecate source-flow-label and destination-flow-label in ipv6-protocol-fields-config and replace with a single flow-label leaf matching the actual header structure.

This was raised 6y back via #346 but was never addressed and was closed/stale.

Platform Implementations

N/A

Tree View

         +--rw policy-forwarding
         |  +--rw config
         |  |  +--rw global-decap-policy?   string
         |  +--ro state
         |  |  +--ro global-decap-policy?   string
         |  +--rw policies
         |  |  +--rw policy* [policy-id]
         |  |     +--rw policy-id    -> ../config/policy-id
         |  |     +--rw config
         |  |     |  +--rw policy-id?   string
         |  |     |  +--rw type?        enumeration
         |  |     +--ro state
         |  |     |  +--ro policy-id?   string
         |  |     |  +--ro type?        enumeration
         |  |     +--rw rules
         |  |        +--rw rule* [sequence-id]
         |  |           +--rw sequence-id        -> ../config/sequence-id
         |  |           +--rw config
         |  |           |  +--rw sequence-id?      uint32
         |  |           |  +--rw address-family?   identityref
         |  |           |  +--rw description?      string
         |  |           +--ro state
         |  |           |  +--ro sequence-id?      uint32
         |  |           |  +--ro address-family?   identityref
         |  |           |  +--ro description?      string
         |  |           |  +--ro matched-pkts?     oc-yang:counter64
         |  |           |  +--ro matched-octets?   oc-yang:counter64
         |  |           +--rw l2
         |  |           |  +--rw config
         |  |           |  |  +--rw source-mac?             oc-yang:mac-address
         |  |           |  |  +--rw source-mac-mask?        oc-yang:mac-address
         |  |           |  |  +--rw destination-mac?        oc-yang:mac-address
         |  |           |  |  +--rw destination-mac-mask?   oc-yang:mac-address
         |  |           |  |  +--rw ethertype?              oc-pkt-match-types:ethertype-type
         |  |           |  +--ro state
         |  |           |     +--ro source-mac?             oc-yang:mac-address
         |  |           |     +--ro source-mac-mask?        oc-yang:mac-address
         |  |           |     +--ro destination-mac?        oc-yang:mac-address
         |  |           |     +--ro destination-mac-mask?   oc-yang:mac-address
         |  |           |     +--ro ethertype?              oc-pkt-match-types:ethertype-type
         |  |           +--rw ipv4
         |  |           |  +--rw config
         |  |           |  |  +--rw source-address?                   oc-inet:ipv4-prefix
         |  |           |  |  +--rw source-address-prefix-set?        -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
         |  |           |  |  +--rw destination-address?              oc-inet:ipv4-prefix
         |  |           |  |  +--rw destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
         |  |           |  |  +--rw fragment-offsets*                 oc-pkt-match-types:fragment-offset-range
         |  |           |  |  +--rw dscp?                             oc-inet:dscp
         |  |           |  |  +--rw dscp-set*                         oc-inet:dscp
         |  |           |  |  +--rw length?                           uint16
         |  |           |  |  +--rw protocol?                         oc-pkt-match-types:ip-protocol-type
         |  |           |  |  +--rw hop-limit?                        uint8
         |  |           |  +--ro state
         |  |           |  |  +--ro source-address?                   oc-inet:ipv4-prefix
         |  |           |  |  +--ro source-address-prefix-set?        -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
         |  |           |  |  +--ro destination-address?              oc-inet:ipv4-prefix
         |  |           |  |  +--ro destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
         |  |           |  |  +--ro fragment-offsets*                 oc-pkt-match-types:fragment-offset-range
         |  |           |  |  +--ro dscp?                             oc-inet:dscp
         |  |           |  |  +--ro dscp-set*                         oc-inet:dscp
         |  |           |  |  +--ro length?                           uint16
         |  |           |  |  +--ro protocol?                         oc-pkt-match-types:ip-protocol-type
         |  |           |  |  +--ro hop-limit?                        uint8
         |  |           |  +--rw icmpv4
         |  |           |     +--rw config
         |  |           |     |  +--rw type?   identityref
         |  |           |     |  +--rw code?   identityref
         |  |           |     +--ro state
         |  |           |        +--ro type?   identityref
         |  |           |        +--ro code?   identityref
         |  |           +--rw ipv6
         |  |           |  +--rw config
         |  |           |  |  +--rw source-address?                   oc-inet:ipv6-prefix
         |  |           |  |  +--rw source-address-prefix-set?        -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
-        |  |           |  |  +--rw source-flow-label?                oc-inet:ipv6-flow-label
+        |  |           |  |  x--rw source-flow-label?                oc-inet:ipv6-flow-label
         |  |           |  |  +--rw destination-address?              oc-inet:ipv6-prefix
         |  |           |  |  +--rw destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
-        |  |           |  |  +--rw destination-flow-label?           oc-inet:ipv6-flow-label
+        |  |           |  |  x--rw destination-flow-label?           oc-inet:ipv6-flow-label
+        |  |           |  |  +--rw flow-label?                       oc-inet:ipv6-flow-label
         |  |           |  |  +--rw dscp?                             oc-inet:dscp
         |  |           |  |  +--rw dscp-set*                         oc-inet:dscp
         |  |           |  |  +--rw length?                           uint16
         |  |           |  |  +--rw protocol?                         oc-pkt-match-types:ip-protocol-type
         |  |           |  |  +--rw hop-limit?                        uint8
         |  |           |  +--ro state
         |  |           |  |  +--ro source-address?                   oc-inet:ipv6-prefix
         |  |           |  |  +--ro source-address-prefix-set?        -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
-        |  |           |  |  +--ro source-flow-label?                oc-inet:ipv6-flow-label
+        |  |           |  |  x--ro source-flow-label?                oc-inet:ipv6-flow-label
         |  |           |  |  +--ro destination-address?              oc-inet:ipv6-prefix
         |  |           |  |  +--ro destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
-        |  |           |  |  +--ro destination-flow-label?           oc-inet:ipv6-flow-label
+        |  |           |  |  x--ro destination-flow-label?           oc-inet:ipv6-flow-label
+        |  |           |  |  +--ro flow-label?                       oc-inet:ipv6-flow-label
         |  |           |  |  +--ro dscp?                             oc-inet:dscp
         |  |           |  |  +--ro dscp-set*                         oc-inet:dscp
         |  |           |  |  +--ro length?                           uint16
         |  |           |  |  +--ro protocol?                         oc-pkt-match-types:ip-protocol-type
         |  |           |  |  +--ro hop-limit?                        uint8
         |  |           |  +--rw icmpv6
         |  |           |     +--rw config
         |  |           |     |  +--rw type?   identityref
         |  |           |     |  +--rw code?   identityref
         |  |           |     +--ro state
         |  |           |        +--ro type?   identityref
         |  |           |        +--ro code?   identityref
         |  |           +--rw transport
         |  |           |  +--rw config
         |  |           |  |  +--rw source-port?                  oc-pkt-match-types:port-num-range
         |  |           |  |  +--rw source-port-set?              -> /oc-sets:defined-sets/port-sets/port-set/name
         |  |           |  |  +--rw destination-port?             oc-pkt-match-types:port-num-range
         |  |           |  |  +--rw destination-port-set?         -> /oc-sets:defined-sets/port-sets/port-set/name
         |  |           |  |  +--rw detail-mode?                  enumeration
         |  |           |  |  +--rw explicit-detail-match-mode?   enumeration
         |  |           |  |  +--rw explicit-tcp-flags*           identityref
         |  |           |  |  +--rw builtin-detail?               enumeration
         |  |           |  +--ro state
         |  |           |     +--ro source-port?                  oc-pkt-match-types:port-num-range
         |  |           |     +--ro source-port-set?              -> /oc-sets:defined-sets/port-sets/port-set/name
         |  |           |     +--ro destination-port?             oc-pkt-match-types:port-num-range
         |  |           |     +--ro destination-port-set?         -> /oc-sets:defined-sets/port-sets/port-set/name
         |  |           |     +--ro detail-mode?                  enumeration
         |  |           |     +--ro explicit-detail-match-mode?   enumeration
         |  |           |     +--ro explicit-tcp-flags*           identityref
         |  |           |     +--ro builtin-detail?               enumeration
         |  |           +--rw action
         |  |           |  +--rw config
         |  |           |  |  x--rw discard?                           boolean
         |  |           |  |  +--rw decapsulate-gre?                   boolean
         |  |           |  |  +--rw decap-network-instance?            -> /network-instances/network-instance/config/name
         |  |           |  |  +--rw decap-fallback-network-instance?   -> /network-instances/network-instance/config/name
         |  |           |  |  +--rw log?                               boolean
         |  |           |  |  +--rw post-decap-network-instance?       -> /network-instances/network-instance/config/name
         |  |           |  |  +--rw network-instance?                  -> /network-instances/network-instance/config/name
         |  |           |  |  +--rw path-selection-group?              -> ../../../../../../../path-selection-groups/path-selection-group/config/group-id
         |  |           |  |  +--rw next-hop?                          oc-inet:ip-address
         |  |           |  |  +--rw next-hop-group?                    -> ../../../../../../../../static/next-hop-groups/next-hop-group/config/name
         |  |           |  |  +--rw decapsulate-mpls-in-udp?           boolean
         |  |           |  |  +--rw decapsulate-gue?                   boolean
         |  |           |  |  x--rw ip-ttl?                            uint8
         |  |           |  +--ro state
         |  |           |  |  x--ro discard?                           boolean
         |  |           |  |  +--ro decapsulate-gre?                   boolean
         |  |           |  |  +--ro decap-network-instance?            -> /network-instances/network-instance/config/name
         |  |           |  |  +--ro decap-fallback-network-instance?   -> /network-instances/network-instance/config/name
         |  |           |  |  +--ro log?                               boolean
         |  |           |  |  +--ro post-decap-network-instance?       -> /network-instances/network-instance/config/name
         |  |           |  |  +--ro network-instance?                  -> /network-instances/network-instance/config/name
         |  |           |  |  +--ro path-selection-group?              -> ../../../../../../../path-selection-groups/path-selection-group/config/group-id
         |  |           |  |  +--ro next-hop?                          oc-inet:ip-address
         |  |           |  |  +--ro next-hop-group?                    -> ../../../../../../../../static/next-hop-groups/next-hop-group/config/name
         |  |           |  |  +--ro decapsulate-mpls-in-udp?           boolean
         |  |           |  |  +--ro decapsulate-gue?                   boolean
         |  |           |  |  x--ro ip-ttl?                            uint8
         |  |           |  +--rw encapsulate-gre
         |  |           |  |  +--rw config
         |  |           |  |  |  +--rw identifying-prefix?   oc-inet:ip-prefix
         |  |           |  |  +--ro state
         |  |           |  |  |  +--ro identifying-prefix?   oc-inet:ip-prefix
         |  |           |  |  +--rw targets
         |  |           |  |     +--rw target* [id]
         |  |           |  |        +--rw id        -> ../config/id
         |  |           |  |        +--rw config
         |  |           |  |        |  +--rw id?            string
         |  |           |  |        |  +--rw source?        oc-inet:ip-address
         |  |           |  |        |  +--rw destination?   oc-inet:ip-prefix
         |  |           |  |        |  +--rw ip-ttl?        uint8
         |  |           |  |        +--ro state
         |  |           |  |           +--ro id?            string
         |  |           |  |           +--ro source?        oc-inet:ip-address
         |  |           |  |           +--ro destination?   oc-inet:ip-prefix
         |  |           |  |           +--ro ip-ttl?        uint8
         |  |           |  +--rw ipv4
         |  |           |  |  +--rw config
         |  |           |  |  |  +--rw dscp?   oc-inet-types:dscp
         |  |           |  |  |  +--rw ttl?    uint8
         |  |           |  |  +--ro state
         |  |           |  |     +--ro dscp?   oc-inet-types:dscp
         |  |           |  |     +--ro ttl?    uint8
         |  |           |  +--rw ipv6
         |  |           |  |  +--rw config
         |  |           |  |  |  +--rw dscp?        oc-inet-types:dscp
         |  |           |  |  |  +--rw hop-limit?   uint8
         |  |           |  |  +--ro state
         |  |           |  |     +--ro dscp?        oc-inet-types:dscp
         |  |           |  |     +--ro hop-limit?   uint8
         |  |           |  +--rw mpls
         |  |           |  |  +--rw config
         |  |           |  |  |  +--rw mpls-traffic-class?   oc-mplst:mpls-tc
         |  |           |  |  +--ro state
         |  |           |  |     +--ro mpls-traffic-class?   oc-mplst:mpls-tc
         |  |           |  +--rw forwarding
         |  |           |  |  +--rw config
         |  |           |  |  |  +--rw forwarding-action?      identityref
@@ -11493,216 +11495,218 @@
      |        |              +--ro matched-octets?    oc-yang:counter64
      |        +--rw queues
      |        |  +--rw queue* [name]
      |        |     +--rw name      -> ../config/name
      |        |     +--rw config
      |        |     |  +--rw name?                       string
      |        |     |  +--rw queue-management-profile?   -> ../../../../../../../queue-management-profiles/queue-management-profile/config/name
      |        |     +--ro state
      |        |        +--ro name?                       string
      |        |        +--ro queue-management-profile?   -> ../../../../../../../queue-management-profiles/queue-management-profile/config/name
      |        |        +--ro max-queue-len?              oc-yang:counter64
      |        |        +--ro avg-queue-len?              oc-yang:counter64
      |        |        +--ro transmit-pkts?              oc-yang:counter64
      |        |        +--ro transmit-octets?            oc-yang:counter64
      |        |        +--ro dropped-pkts?               oc-yang:counter64
      |        |        +--ro dropped-octets?             oc-yang:counter64
      |        |        +--ro ecn-marked-pkts?            oc-yang:counter64
      |        |        +--ro ecn-marked-octets?          oc-yang:counter64
      |        |        +--ro ecn-selected-pkts?          oc-yang:counter64
      |        |        +--ro ecn-selected-octets?        oc-yang:counter64
      |        +--rw scheduler-policy
      |           +--rw config
      |           |  +--rw name?   -> ../../../../../../scheduler-policies/scheduler-policy/config/name
      |           +--ro state
      |           |  +--ro name?   -> ../../../../../../scheduler-policies/scheduler-policy/config/name
      |           +--ro schedulers
      |              +--ro scheduler* [sequence]
      |                 +--ro sequence    -> ../state/sequence
      |                 +--ro state
      |                    +--ro sequence?            -> ../../../../../../../../scheduler-policies/scheduler-policy[name=current()/../../../../config/name]/schedulers/scheduler/config/sequence
      |                    +--ro conforming-pkts?     oc-yang:counter64
      |                    +--ro conforming-octets?   oc-yang:counter64
      |                    +--ro exceeding-pkts?      oc-yang:counter64
      |                    +--ro exceeding-octets?    oc-yang:counter64
      |                    +--ro violating-pkts?      oc-yang:counter64
      |                    +--ro violating-octets?    oc-yang:counter64
      +--rw classifiers
      |  +--rw classifier* [name]
      |     +--rw name      -> ../config/name
      |     +--rw config
      |     |  +--rw name?   string
      |     |  +--rw type?   enumeration
      |     +--ro state
      |     |  +--ro name?   string
      |     |  +--ro type?   enumeration
      |     +--rw terms
      |        +--rw term* [id]
      |           +--rw id            -> ../config/id
      |           +--rw config
      |           |  +--rw id?   string
      |           +--ro state
      |           |  +--ro id?   string
      |           +--rw conditions
      |           |  +--rw l2
      |           |  |  +--rw config
      |           |  |  |  +--rw source-mac?             oc-yang:mac-address
      |           |  |  |  +--rw source-mac-mask?        oc-yang:mac-address
      |           |  |  |  +--rw destination-mac?        oc-yang:mac-address
      |           |  |  |  +--rw destination-mac-mask?   oc-yang:mac-address
      |           |  |  |  +--rw ethertype?              oc-pkt-match-types:ethertype-type
      |           |  |  +--ro state
      |           |  |     +--ro source-mac?             oc-yang:mac-address
      |           |  |     +--ro source-mac-mask?        oc-yang:mac-address
      |           |  |     +--ro destination-mac?        oc-yang:mac-address
      |           |  |     +--ro destination-mac-mask?   oc-yang:mac-address
      |           |  |     +--ro ethertype?              oc-pkt-match-types:ethertype-type
      |           |  +--rw ipv4
      |           |  |  +--rw config
      |           |  |  |  +--rw source-address?                   oc-inet:ipv4-prefix
      |           |  |  |  +--rw source-address-prefix-set?        -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
      |           |  |  |  +--rw destination-address?              oc-inet:ipv4-prefix
      |           |  |  |  +--rw destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
      |           |  |  |  +--rw fragment-offsets*                 oc-pkt-match-types:fragment-offset-range
      |           |  |  |  +--rw dscp?                             oc-inet:dscp
      |           |  |  |  +--rw dscp-set*                         oc-inet:dscp
      |           |  |  |  +--rw length?                           uint16
      |           |  |  |  +--rw protocol?                         oc-pkt-match-types:ip-protocol-type
      |           |  |  |  +--rw hop-limit?                        uint8
      |           |  |  +--ro state
      |           |  |  |  +--ro source-address?                   oc-inet:ipv4-prefix
      |           |  |  |  +--ro source-address-prefix-set?        -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
      |           |  |  |  +--ro destination-address?              oc-inet:ipv4-prefix
      |           |  |  |  +--ro destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
      |           |  |  |  +--ro fragment-offsets*                 oc-pkt-match-types:fragment-offset-range
      |           |  |  |  +--ro dscp?                             oc-inet:dscp
      |           |  |  |  +--ro dscp-set*                         oc-inet:dscp
      |           |  |  |  +--ro length?                           uint16
      |           |  |  |  +--ro protocol?                         oc-pkt-match-types:ip-protocol-type
      |           |  |  |  +--ro hop-limit?                        uint8
      |           |  |  +--rw icmpv4
      |           |  |     +--rw config
      |           |  |     |  +--rw type?   identityref
      |           |  |     |  +--rw code?   identityref
      |           |  |     +--ro state
      |           |  |        +--ro type?   identityref
      |           |  |        +--ro code?   identityref
      |           |  +--rw ipv6
      |           |  |  +--rw config
      |           |  |  |  +--rw source-address?                   oc-inet:ipv6-prefix
      |           |  |  |  +--rw source-address-prefix-set?        -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
-     |           |  |  |  +--rw source-flow-label?                oc-inet:ipv6-flow-label
+     |           |  |  |  x--rw source-flow-label?                oc-inet:ipv6-flow-label
      |           |  |  |  +--rw destination-address?              oc-inet:ipv6-prefix
      |           |  |  |  +--rw destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
-     |           |  |  |  +--rw destination-flow-label?           oc-inet:ipv6-flow-label
+     |           |  |  |  x--rw destination-flow-label?           oc-inet:ipv6-flow-label
+     |           |  |  |  +--rw flow-label?                       oc-inet:ipv6-flow-label
      |           |  |  |  +--rw dscp?                             oc-inet:dscp
      |           |  |  |  +--rw dscp-set*                         oc-inet:dscp
      |           |  |  |  +--rw length?                           uint16
      |           |  |  |  +--rw protocol?                         oc-pkt-match-types:ip-protocol-type
      |           |  |  |  +--rw hop-limit?                        uint8
      |           |  |  +--ro state
      |           |  |  |  +--ro source-address?                   oc-inet:ipv6-prefix
      |           |  |  |  +--ro source-address-prefix-set?        -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
-     |           |  |  |  +--ro source-flow-label?                oc-inet:ipv6-flow-label
+     |           |  |  |  x--ro source-flow-label?                oc-inet:ipv6-flow-label
      |           |  |  |  +--ro destination-address?              oc-inet:ipv6-prefix
      |           |  |  |  +--ro destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
-     |           |  |  |  +--ro destination-flow-label?           oc-inet:ipv6-flow-label
+     |           |  |  |  x--ro destination-flow-label?           oc-inet:ipv6-flow-label
+     |           |  |  |  +--ro flow-label?                       oc-inet:ipv6-flow-label
      |           |  |  |  +--ro dscp?                             oc-inet:dscp
      |           |  |  |  +--ro dscp-set*                         oc-inet:dscp
      |           |  |  |  +--ro length?                           uint16
      |           |  |  |  +--ro protocol?                         oc-pkt-match-types:ip-protocol-type
      |           |  |  |  +--ro hop-limit?                        uint8
      |           |  |  +--rw icmpv6
      |           |  |     +--rw config
      |           |  |     |  +--rw type?   identityref
      |           |  |     |  +--rw code?   identityref
      |           |  |     +--ro state
      |           |  |        +--ro type?   identityref
      |           |  |        +--ro code?   identityref
      |           |  +--rw transport
      |           |  |  +--rw config
      |           |  |  |  +--rw source-port?                  oc-pkt-match-types:port-num-range
      |           |  |  |  +--rw source-port-set?              -> /oc-sets:defined-sets/port-sets/port-set/name
      |           |  |  |  +--rw destination-port?             oc-pkt-match-types:port-num-range
      |           |  |  |  +--rw destination-port-set?         -> /oc-sets:defined-sets/port-sets/port-set/name
      |           |  |  |  +--rw detail-mode?                  enumeration
      |           |  |  |  +--rw explicit-detail-match-mode?   enumeration
      |           |  |  |  +--rw explicit-tcp-flags*           identityref
      |           |  |  |  +--rw builtin-detail?               enumeration
      |           |  |  +--ro state
      |           |  |     +--ro source-port?                  oc-pkt-match-types:port-num-range
      |           |  |     +--ro source-port-set?              -> /oc-sets:defined-sets/port-sets/port-set/name
      |           |  |     +--ro destination-port?             oc-pkt-match-types:port-num-range
      |           |  |     +--ro destination-port-set?         -> /oc-sets:defined-sets/port-sets/port-set/name
      |           |  |     +--ro detail-mode?                  enumeration
      |           |  |     +--ro explicit-detail-match-mode?   enumeration
      |           |  |     +--ro explicit-tcp-flags*           identityref
      |           |  |     +--ro builtin-detail?               enumeration
      |           |  +--rw mpls
      |           |     +--rw config
      |           |     |  +--rw traffic-class?       oc-mpls:mpls-tc
      |           |     |  +--rw start-label-value?   oc-mpls:mpls-label
      |           |     |  +--rw end-label-value?     oc-mpls:mpls-label
      |           |     |  +--rw ttl-value?           uint8
      |           |     +--ro state
      |           |        +--ro traffic-class?       oc-mpls:mpls-tc
      |           |        +--ro start-label-value?   oc-mpls:mpls-label
      |           |        +--ro end-label-value?     oc-mpls:mpls-label
      |           |        +--ro ttl-value?           uint8
      |           +--rw actions
      |              +--rw config
      |              |  +--rw target-group?   -> ../../../../../../../forwarding-groups/forwarding-group/config/name
      |              +--ro state
      |              |  +--ro target-group?   -> ../../../../../../../forwarding-groups/forwarding-group/config/name
      |              +--rw remark
      |                 +--rw config
      |                 |  +--rw set-dscp?      uint8
      |                 |  +--rw set-dot1p?     uint8
      |                 |  +--rw set-mpls-tc?   uint8
      |                 +--ro state
      |                    +--ro set-dscp?      uint8
      |                    +--ro set-dot1p?     uint8
      |                    +--ro set-mpls-tc?   uint8
      +--rw forwarding-groups
      |  +--rw forwarding-group* [name]
      |     +--rw name      -> ../config/name
      |     +--rw config
      |     |  +--rw name?                     string
      |     |  +--rw fabric-priority?          uint8
      |     |  +--rw output-queue?             -> ../../../../queues/queue/config/name
      |     |  +--rw unicast-output-queue?     -> ../../../../queues/queue/config/name
      |     |  +--rw multicast-output-queue?   -> ../../../../queues/queue/config/name
      |     +--ro state
      |        +--ro name?                     string
      |        +--ro fabric-priority?          uint8
      |        +--ro output-queue?             -> ../../../../queues/queue/config/name
      |        +--ro unicast-output-queue?     -> ../../../../queues/queue/config/name
      |        +--ro multicast-output-queue?   -> ../../../../queues/queue/config/name
      +--rw queues
      |  +--rw queue* [name]
      |     +--rw name      -> ../config/name
      |     +--rw config
      |     |  +--rw name?       string
      |     |  +--rw queue-id?   uint8
      |     +--ro state
      |        +--ro name?       string
      |        +--ro queue-id?   uint8
      +--rw scheduler-policies
      |  +--rw scheduler-policy* [name]
      |     +--rw name          -> ../config/name
      |     +--rw config
      |     |  +--rw name?   string
      |     +--ro state
      |     |  +--ro name?   string
      |     +--rw schedulers
      |        +--rw scheduler* [sequence]
      |           +--rw sequence                -> ../config/sequence
      |           +--rw config
      |           |  +--rw sequence?   uint32
      |           |  +--rw type?       identityref
      |           |  +--rw priority?   enumeration
      |           +--ro state
      |           |  +--ro sequence?   uint32
      |           |  +--ro type?       identityref
      |           |  +--ro priority?   enumeration
      |           +--rw inputs
      |           |  +--rw input* [id]

  * (M) release/models/acl/openconfig-packet-match.yang
    - Deprecate source-flow-label and destination-flow-label
    - Add flow-label leaf to ipv6-protocol-fields-config grouping
    - Bump openconfig-version to 2.3.0
@earies earies requested a review from a team as a code owner March 20, 2026 15:49
@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses a long-standing inaccuracy in the openconfig-packet-match.yang model by correcting the representation of the IPv6 flow-label. Previously, the model incorrectly defined separate source and destination flow-labels. The changes streamline the model to align with the actual IPv6 header specification, where only a single flow-label exists. This update improves the model's fidelity and ensures consistency with network protocols.

Highlights

  • IPv6 Flow Label Correction: The source-flow-label and destination-flow-label leaves within the ipv6-protocol-fields-config grouping have been deprecated. These have been replaced by a single flow-label leaf to accurately reflect the IPv6 header structure, which contains only one flow-label field.
  • YANG Model Version Update: The openconfig-version in the openconfig-packet-match.yang model has been incremented from 2.2.0 to 2.3.0.
  • Changelog Entry Added: A new revision entry for 2026-03-20 has been added to the YANG module, documenting the deprecation and replacement of the IPv6 flow-label definitions.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request deprecates source-flow-label and destination-flow-label in favor of a single flow-label leaf, which aligns the model with the IPv6 header specification. The model version is bumped and a revision history is added. I have a couple of suggestions to improve the clarity of the descriptions for the deprecated leaves.

Comment on lines 421 to +426
description
"Source IPv6 Flow label.";
"Source IPv6 Flow label.

Deprecated: use flow-label instead. The IPv6 header contains a
single flow-label field; there is no distinct source or
destination flow-label.";
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The description is a bit contradictory as it first states 'Source IPv6 Flow label.' and then explains that this concept is incorrect. For better clarity, it's better to only keep the deprecation notice.

      description
        "Deprecated: use flow-label instead.  The IPv6 header contains a
        single flow-label field; there is no distinct source or
        destination flow-label.";

Comment on lines +448 to +453
description
"Destination IPv6 Flow label.

Deprecated: use flow-label instead. The IPv6 header contains a
single flow-label field; there is no distinct source or
destination flow-label.";
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The description is a bit contradictory as it first states 'Destination IPv6 Flow label.' and then explains that this concept is incorrect. For better clarity, it's better to only keep the deprecation notice.

      description
        "Deprecated: use flow-label instead.  The IPv6 header contains a
        single flow-label field; there is no distinct source or
        destination flow-label.";

@dplore dplore moved this to Ready to discuss in OC Operator Review Mar 25, 2026
@dplore
Copy link
Copy Markdown
Member

dplore commented Mar 25, 2026

/gcbrun

@OpenConfigBot
Copy link
Copy Markdown

No major YANG version changes in commit 739d5f7

@earies
Copy link
Copy Markdown
Contributor Author

earies commented Apr 15, 2026

cc: @ElodinLaarz @dplore @rgwilton @jsterne for comment/review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Ready to discuss

Development

Successfully merging this pull request may close these issues.

3 participants