Thread Links Date Links
Thread Prev Thread Next Thread Index Date Prev Date Next Date Index

[802.3_YANG] Yanglint for config validatation



Hi

 

(I’m hoping the message makes it through the reflectors after re-subscribing ).

I used Yanglint on the lldp modules. 802.1Qcz 

Attached is a test file and some output.  Note I fixed some warnings in yanglint. (yanglint require full prefixes in the YANG file.)

 

Using yanglint for this is fairly straight forward but the config it a bit tedious.

How I do it:

I  create an XML file (sample attached) that has the following format:

 

<if:interfaces

   xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces"

   xmlns:ia="urn:ietf:params:xml:ns:yang:iana-if-type">

<!—the prefix is shortened to a small set “if” etc  you can use the full one but the xml is verbose.-->

<if:interface>

      <if:name>eth0</if:name>

      <if:type>ia:ethernetCsmacd</if:type>

      <!--if:oper-status>up</if:oper-status-->

    </if:interface>

 

The XML I generate from the tree file an using only read/write objects.  You can do read only objects too but then you need to fill in a lot of data that may no be obvious and the conditional yang kicks in.  I tried interfaces and it keep wanting more and more data.

You can use the output of pyang that produces xml. I find it faster to build my own tags.

You need to follow the tree structure but the order in the tree is not strict.

I use group substitution to change “interface” into <if:interface> and duplicate and change the second occurrence to  </if:interface>

 

Then with a file of begin/end tags I add the tree structure.

 

<ll:lldp

  xmlns:ll="urn:ieee:std:802.1AB:yang:ieee802-dot1ab-lldp"

  xmlns:ab="urn:ieee:std:802.1Q:yang:ieee802-dot1ab-types"

  xmlns:llb="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-basic-tlv"

  xmlns:lle="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-evb-tlv" 

  xmlns:lld="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-dcbx-tlv" 

  xmlns:llc="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-cn-tlv" 

  xmlns:lli="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-ci-tlv" 

  xmlns:llr="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-tr-tlv" 

  xmlns:rt="urn:ietf:params:xml:ns:yang:ietf-routing-types"

  xmlns:yt="urn:ietf:params:xml:ns:yang:ietf-yang-types"

  xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces"

  xmlns:ia="urn:ietf:params:xml:ns:yang:iana-if-type">

  <ll:lldp-id>lldp1</ll:lldp-id>

  <ll:message-fast-tx>100</ll:message-fast-tx>

  <ll:message-tx-hold-multiplier>2</ll:message-tx-hold-multiplier>

  <ll:message-tx-interval>30</ll:message-tx-interval>

  <ll:reinit-delay>2</ll:reinit-delay>

  <ll:tx-credit-max>5</ll:tx-credit-max>

  <ll:tx-fast-init>4</ll:tx-fast-init>

  <ll:notification-interval>30</ll:notification-interval>

  <llr:topology-recognition-tlv-extension>

    <llr:topology-level>2</llr:topology-level>

  </llr:topology-recognition-tlv-extension>

 

Then I run Yanglint and load the modules.  I prefer the json output.

$ yanglint

> load iana-if-type

> load ieee802-dot1ab-lldp

> load ieee802-dot1q-lldp-basic-tlv

> load ieee802-dot1q-lldp-evb-tlv

> load ieee802-dot1q-lldp-dcbx-tlv

> load ieee802-dot1q-lldp-cn-tlv

> load ieee802-dot1q-lldp-cn-tlv

> load ieee802-dot1q-lldp-tr-tlv

> data  -t config   -f json test-lldp_basic1.xml

 

{

  "ietf-interfaces:interfaces": {

    "interface": [

      {

        "name": "eth0",

        "type": "iana-if-type:ethernetCsmacd",

        "ieee802-dot1q-bridge:bridge-port": {

 

        }

      },

      {

        "name": "eth1",

        "type": "iana-if-type:ethernetCsmacd",

        "ieee802-dot1q-bridge:bridge-port": {

 

        }

      }

    ]

  },

  "ieee802-dot1ab-lldp:lldp": [

    {

      "lldp-id": "lldp1",

      "message-fast-tx": 100,

      "message-tx-hold-multiplier": 2,

      "message-tx-interval": 30,

      "reinit-delay": 2,

      "tx-credit-max": 5,

      "tx-fast-init": 4,

      "notification-interval": 30,

      "ieee802-dot1q-lldp-tr-tlv:topology-recognition-tlv-extension": {

        "topology-level": 2

 

See the attached files for a complete setup.

 

Cheers

Don

 

 


To unsubscribe from the STDS-802-3-YANG list, click the following link: https://listserv.ieee.org/cgi-bin/wa?SUBED1=STDS-802-3-YANG&A=1

<if:interfaces
  xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces"
  xmlns:ia="urn:ietf:params:xml:ns:yang:iana-if-type">
    <if:interface>
      <if:name>eth0</if:name>
      <if:type>ia:ethernetCsmacd</if:type>
      <!--if:oper-status>up</if:oper-status-->
    </if:interface>
    <if:interface>
      <if:name>eth1</if:name>
      <if:type>ia:ethernetCsmacd</if:type>
      <!--if:oper-status>up</if:oper-status-->
    </if:interface>
  </if:interfaces>
<ll:lldp
  xmlns:ll="urn:ieee:std:802.1AB:yang:ieee802-dot1ab-lldp"
  xmlns:ab="urn:ieee:std:802.1Q:yang:ieee802-dot1ab-types"
  xmlns:llb="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-basic-tlv"
  xmlns:lle="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-evb-tlv"  
  xmlns:lld="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-dcbx-tlv"  
  xmlns:llc="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-cn-tlv"  
  xmlns:lli="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-ci-tlv"  
  xmlns:llr="urn:ieee:std:802.1Q:yang:ieee802-dot1q-lldp-tr-tlv"  
  xmlns:rt="urn:ietf:params:xml:ns:yang:ietf-routing-types"
  xmlns:yt="urn:ietf:params:xml:ns:yang:ietf-yang-types"
  xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces"
  xmlns:ia="urn:ietf:params:xml:ns:yang:iana-if-type">
  <ll:lldp-id>lldp1</ll:lldp-id> 
  <ll:message-fast-tx>100</ll:message-fast-tx>
  <ll:message-tx-hold-multiplier>2</ll:message-tx-hold-multiplier>
  <ll:message-tx-interval>30</ll:message-tx-interval>
  <ll:reinit-delay>2</ll:reinit-delay>
  <ll:tx-credit-max>5</ll:tx-credit-max>
  <ll:tx-fast-init>4</ll:tx-fast-init>
  <ll:notification-interval>30</ll:notification-interval>
  <llr:topology-recognition-tlv-extension>
    <llr:topology-level>2</llr:topology-level>
  </llr:topology-recognition-tlv-extension>

  <ll:port> 
    <ll:name>eth0</ll:name>
    <ll:admin-status>tx-and-rx</ll:admin-status>
    <ll:notification-enable>false</ll:notification-enable>
    <ll:tlvs-tx-enable> </ll:tlvs-tx-enable>
    <ll:message-fast-tx>200</ll:message-fast-tx>
    <ll:message-tx-hold-multiplier>3</ll:message-tx-hold-multiplier>
    <ll:message-tx-interval>60</ll:message-tx-interval>
    <ll:reinit-delay>3</ll:reinit-delay>
    <ll:tx-credit-max>4</ll:tx-credit-max>
    <ll:tx-fast-init>3</ll:tx-fast-init>
    <ll:notification-interval>60</ll:notification-interval>
    <ll:management-address-tx-port>
      <ll:address-subtype>ipv4</ll:address-subtype>
      <ll:man-address>VQ==</ll:man-address>
      <ll:tx-enable>false</ll:tx-enable>
    </ll:management-address-tx-port>
    <llb:tlvs-tx-org-basic-enable>
      port-vlan-id 
      port-protocol-vlan-id 
      vlan-name protocol-identity 
      vid-user-digest  
      management-vid 
      link-aggregation  
    </llb:tlvs-tx-org-basic-enable>  
    <llb:port-vlan-id-tlv-extension>
      <llb:port-vlan-id>100</llb:port-vlan-id> 
    </llb:port-vlan-id-tlv-extension>
    <llb:port-and-protocol-vlan-id-extension>
      <llb:port-vlan-id>100</llb:port-vlan-id> 
      <llb:flags>
	port-and-protocol-vlan-supported 
	port-and-protocol-vlan-enabled 
      </llb:flags>
    </llb:port-and-protocol-vlan-id-extension>
    <llb:port-vlan-name-tlv-extension>
       <llb:vlan-id>100</llb:vlan-id>
       <llb:port-vlan-name>Fortune100 </llb:port-vlan-name>
    </llb:port-vlan-name-tlv-extension>
    <llb:protocol-identity-tlv-extension>
       <llb:protocol-identity>IEEE</llb:protocol-identity> 
    </llb:protocol-identity-tlv-extension>
    <llb:link-aggregation-tlv-extension>
      <llb:aggregation-status>
        aggregation-capability 
        aggregation-status 
        port-typeLS 
        port-typeMS
      </llb:aggregation-status> 
       <llb:aggregated-port-id>42</llb:aggregated-port-id>
    </llb:link-aggregation-tlv-extension>
    <lle:tlvs-tx-org-evb-enable>
       evb 
       cdcp
    </lle:tlvs-tx-org-evb-enable>
    <lle:evb-tlv-extension>
    <lle:evb-tlv-info-string>KYA=</lle:evb-tlv-info-string>
    </lle:evb-tlv-extension>
    <lle:cdcp-tlv-extension>
    <lle:cdcp-tlv-info-string>KgA=</lle:cdcp-tlv-info-string>
    </lle:cdcp-tlv-extension>
    <lld:tlvs-tx-org-dcbx-enable> 
            ets-configuration 
            ets-recommendation 
            pfc 
            application-priority 
            application-vlan
    </lld:tlvs-tx-org-dcbx-enable>
    <lld:ets-configuration-tlv-extension>
      <lld:ets-config-willing>true</lld:ets-config-willing>
      <lld:ets-config-credit-based-shaper>true</lld:ets-config-credit-based-shaper>
      <lld:ets-config-traffic-classes-supported>8</lld:ets-config-traffic-classes-supported>
      <lld:ets-config-priority-assignment-table>
        <lld:ets-priority>5</lld:ets-priority>
        <lld:ets-priority-traffic-class>5</lld:ets-priority-traffic-class>
      </lld:ets-config-priority-assignment-table>
      <lld:ets-config-priority-assignment-table>
        <lld:ets-priority>4</lld:ets-priority>
        <lld:ets-priority-traffic-class>4</lld:ets-priority-traffic-class>
      </lld:ets-config-priority-assignment-table>
      <lld:ets-config-tc-bandwidth-table>
        <lld:ets-traffic-class>4</lld:ets-traffic-class>
       <lld:ets-percentage-bandwidth>80</lld:ets-percentage-bandwidth>
      </lld:ets-config-tc-bandwidth-table>
      <lld:ets-config-tsa-assignment-table>
        <lld:ets-tsa-traffic-class>1</lld:ets-tsa-traffic-class>
        <lld:ets-transmission-selection-algorithm>42</lld:ets-transmission-selection-algorithm>
      </lld:ets-config-tsa-assignment-table>
    </lld:ets-configuration-tlv-extension>
    <lld:ets-recommendation-tlv-extension>
      <lld:ets-recommendation-priority-assignment-table>
        <lld:ets-priority>1</lld:ets-priority>
        <lld:ets-priority-traffic-class>1</lld:ets-priority-traffic-class>
      </lld:ets-recommendation-priority-assignment-table>
        <lld:ets-recommendation-tc-bandwidth-table>
        <lld:ets-traffic-class>1</lld:ets-traffic-class>
      <lld:ets-percentage-bandwidth>65</lld:ets-percentage-bandwidth>
      </lld:ets-recommendation-tc-bandwidth-table>
      <lld:ets-recommendation-tsa-assignment-table>
        <lld:ets-tsa-traffic-class>1</lld:ets-tsa-traffic-class>
        <lld:ets-transmission-selection-algorithm>strict-priority</lld:ets-transmission-selection-algorithm>
      </lld:ets-recommendation-tsa-assignment-table>
    </lld:ets-recommendation-tlv-extension>
    <lld:pfc-tlv-extension>
      <lld:pfc-willing>true</lld:pfc-willing>
      <lld:pfc-macsec-bypass-capable>true</lld:pfc-macsec-bypass-capable>
      <lld:pfc-number-tc-capable>2</lld:pfc-number-tc-capable>
      <lld:pfc-enable>priority0 priority1 priority2 priority3 priority4 priority5 priority6 priority7 
      </lld:pfc-enable>
    </lld:pfc-tlv-extension>
    <lld:application-priority-tlv-extension>
      <lld:application-priority-table>
        <lld:application-priority>1</lld:application-priority>
        <lld:application-priority-selector>tcp-sctp-udp-dccp-sel</lld:application-priority-selector>
        <lld:application-priority-protocol>65535</lld:application-priority-protocol>
      </lld:application-priority-table>
      <lld:application-vlan-tlv-extension>
        <lld:application-vlan-table>
        <lld:application-vlan>10</lld:application-vlan>
        <lld:application-vlan-selector>tcp-sctp-udp-dccp-sel</lld:application-vlan-selector>
        <lld:application-vlan-protocol>0</lld:application-vlan-protocol>
      </lld:application-vlan-table>
      </lld:application-vlan-tlv-extension>
    </lld:application-priority-tlv-extension>
    <llc:tlvs-tx-org-congestion-notification-enable>true</llc:tlvs-tx-org-congestion-notification-enable>
    <llc:congestion-notification-tlv-extension>
      <llc:per-priority-xmit-cnpv-capable>
         priority0 priority1 priority2 priority3 priority4 priority5 priority6 priority7 
      </llc:per-priority-xmit-cnpv-capable>
      <llc:per-priority-xmit-ready>
         priority0 priority1 priority2 priority3 priority4 priority5 priority6 priority7 
      </llc:per-priority-xmit-ready>
    </llc:congestion-notification-tlv-extension>
    <lli:tlvs-tx-org-ci-enable>congestion-isolation</lli:tlvs-tx-org-ci-enable>
    <lli:congestion-isolation-tlv-extension>
      <lli:queue-map>
        <lli:priority>0</lli:priority>
        <lli:abs-traffic-class-plus-one>monitored-queue-tc-1</lli:abs-traffic-class-plus-one>
      </lli:queue-map>
      <lli:queue-map>
        <lli:priority>1</lli:priority>
        <lli:abs-traffic-class-plus-one>monitored-queue-tc-2</lli:abs-traffic-class-plus-one>
      </lli:queue-map>
      <lli:cim-encap-length>48</lli:cim-encap-length>
    </lli:congestion-isolation-tlv-extension>
    <llr:tlvs-tx-org-tr-enable>topology-recognition</llr:tlvs-tx-org-tr-enable>
    <llr:topology-recognition-tlv-extension>
      <llr:port-orientation>unknown</llr:port-orientation>
    </llr:topology-recognition-tlv-extension>
    </ll:port>
 </ll:lldp> 
$ yanglint
> load iana-if-type
> load ieee802-dot1ab-lldp
> load ieee802-dot1q-lldp-basic-tlv
> load ieee802-dot1q-lldp-evb-tlv
> load ieee802-dot1q-lldp-dcbx-tlv
> load ieee802-dot1q-lldp-cn-tlv
> load ieee802-dot1q-lldp-cn-tlv
> load ieee802-dot1q-lldp-tr-tlv
> data  -t config   -f json test-lldp_basic1.xml
{
  "ietf-interfaces:interfaces": {
    "interface": [
      {
        "name": "eth0",
        "type": "iana-if-type:ethernetCsmacd",
        "ieee802-dot1q-bridge:bridge-port": {

        }
      },
      {
        "name": "eth1",
        "type": "iana-if-type:ethernetCsmacd",
        "ieee802-dot1q-bridge:bridge-port": {

        }
      }
    ]
  },
  "ieee802-dot1ab-lldp:lldp": [
    {
      "lldp-id": "lldp1",
      "message-fast-tx": 100,
      "message-tx-hold-multiplier": 2,
      "message-tx-interval": 30,
      "reinit-delay": 2,
      "tx-credit-max": 5,
      "tx-fast-init": 4,
      "notification-interval": 30,
      "ieee802-dot1q-lldp-tr-tlv:topology-recognition-tlv-extension": {
        "topology-level": 2
      },
      "port": [
        {
          "name": "eth0",
          "admin-status": "tx-and-rx",
          "notification-enable": false,
          "tlvs-tx-enable": "",
          "message-fast-tx": 200,
          "message-tx-hold-multiplier": 3,
          "message-tx-interval": 60,
          "reinit-delay": 3,
          "tx-credit-max": 4,
          "tx-fast-init": 3,
          "notification-interval": 60,
          "management-address-tx-port": [
            {
              "address-subtype": "ipv4",
              "man-address": "VQ==",
              "tx-enable": false
            }
          ],
          "ieee802-dot1q-lldp-basic-tlv:tlvs-tx-org-basic-enable": "port-vlan-id port-protocol-vlan-id vlan-name protocol-identity vid-user-digest management-vid link-aggregation",
          "ieee802-dot1q-lldp-basic-tlv:port-vlan-id-tlv-extension": {
            "port-vlan-id": 100
          },
          "ieee802-dot1q-lldp-basic-tlv:port-and-protocol-vlan-id-extension": {
            "port-vlan-id": 100,
            "flags": "port-and-protocol-vlan-supported port-and-protocol-vlan-enabled"
          },
          "ieee802-dot1q-lldp-basic-tlv:port-vlan-name-tlv-extension": {
            "vlan-id": 100,
            "port-vlan-name": "Fortune100 "
          },
          "ieee802-dot1q-lldp-basic-tlv:protocol-identity-tlv-extension": {
            "protocol-identity": "IEEE"
          },
          "ieee802-dot1q-lldp-basic-tlv:link-aggregation-tlv-extension": {
            "aggregation-status": "aggregation-capability aggregation-status port-typeLS port-typeMS",
            "aggregated-port-id": 42
          },
          "ieee802-dot1q-lldp-evb-tlv:tlvs-tx-org-evb-enable": "evb cdcp",
          "ieee802-dot1q-lldp-evb-tlv:evb-tlv-extension": {
            "evb-tlv-info-string": "KYA="
          },
          "ieee802-dot1q-lldp-evb-tlv:cdcp-tlv-extension": {
            "cdcp-tlv-info-string": "KgA="
          },
          "ieee802-dot1q-lldp-dcbx-tlv:tlvs-tx-org-dcbx-enable": "ets-configuration ets-recommendation pfc application-priority application-vlan",
          "ieee802-dot1q-lldp-dcbx-tlv:ets-configuration-tlv-extension": {
            "ets-config-willing": true,
            "ets-config-credit-based-shaper": true,
            "ets-config-traffic-classes-supported": 8,
            "ets-config-priority-assignment-table": [
              {
                "ets-priority": 5,
                "ets-priority-traffic-class": 5
              },
              {
                "ets-priority": 4,
                "ets-priority-traffic-class": 4
              }
            ],
            "ets-config-tc-bandwidth-table": [
              {
                "ets-traffic-class": 4,
                "ets-percentage-bandwidth": 80
              }
            ],
            "ets-config-tsa-assignment-table": [
              {
                "ets-tsa-traffic-class": 1,
                "ets-transmission-selection-algorithm": 42
              }
            ]
          },
          "ieee802-dot1q-lldp-dcbx-tlv:ets-recommendation-tlv-extension": {
            "ets-recommendation-priority-assignment-table": [
              {
                "ets-priority": 1,
                "ets-priority-traffic-class": 1
              }
            ],
            "ets-recommendation-tc-bandwidth-table": [
              {
                "ets-traffic-class": 1,
                "ets-percentage-bandwidth": 65
              }
            ],
            "ets-recommendation-tsa-assignment-table": [
              {
                "ets-tsa-traffic-class": 1,
                "ets-transmission-selection-algorithm": "strict-priority"
              }
            ]
          },
          "ieee802-dot1q-lldp-dcbx-tlv:pfc-tlv-extension": {
            "pfc-willing": true,
            "pfc-macsec-bypass-capable": true,
            "pfc-number-tc-capable": 2,
            "pfc-enable": "priority0 priority1 priority2 priority3 priority4 priority5 priority6 priority7"
          },
          "ieee802-dot1q-lldp-dcbx-tlv:application-priority-tlv-extension": {
            "application-priority-table": [
              {
                "application-priority": 1,
                "application-priority-selector": "tcp-sctp-udp-dccp-sel",
                "application-priority-protocol": 65535
              }
            ]
          },
          "ieee802-dot1q-lldp-cn-tlv:tlvs-tx-org-congestion-notification-enable": true,
          "ieee802-dot1q-lldp-cn-tlv:congestion-notification-tlv-extension": {
            "per-priority-xmit-cnpv-capable": "priority0 priority1 priority2 priority3 priority4 priority5 priority6 priority7",
            "per-priority-xmit-ready": "priority0 priority1 priority2 priority3 priority4 priority5 priority6 priority7"
          },
          "ieee802-dot1q-lldp-ci-tlv:tlvs-tx-org-ci-enable": "congestion-isolation",
          "ieee802-dot1q-lldp-ci-tlv:congestion-isolation-tlv-extension": {
            "queue-map": [
              {
                "priority": 0,
                "abs-traffic-class-plus-one": "monitored-queue-tc-1"
              },
              {
                "priority": 1,
                "abs-traffic-class-plus-one": "monitored-queue-tc-2"
              }
            ],
            "cim-encap-length": 48
          },
          "ieee802-dot1q-lldp-tr-tlv:tlvs-tx-org-tr-enable": "topology-recognition",
          "ieee802-dot1q-lldp-tr-tlv:topology-recognition-tlv-extension": {
            "port-orientation": "unknown"
          }
        }
      ]
    }
  ]
}


________________________________________________________________________
To unsubscribe from the STDS-802-3-YANG list, click the following link: https://listserv.ieee.org/cgi-bin/wa?SUBED1=STDS-802-3-YANG&A=1