Internet Engineering Task Force S. Dontula
Internet-Draft ATT
Intended status: Standards Track T. Li
Expires: March 7, 2020 Arista Networks
September 4, 2019

YANG Data Model for Dynamic Flooding
draft-dontula-lsr-yang-dynamic-flooding-00

Abstract

This document defins YANG data models that can be used to configure and manage Dynamic Flooding for IS-IS and OSPF.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on March 7, 2020.

Copyright Notice

Copyright (c) 2019 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.


Table of Contents

1. Requirements Language

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

2. Introduction

This document defines a YANG data model for IS-IS and OSPF routing protocols.

3. OSPF Data Model

module ietf-dynamic-flooding-ospf {
	yang-version 1.1;
	namespace "urn:ietf:params:xml:ns:yang:ietf-dynamic-flooding-ospf";

	prefix ospf-df;

	import ietf-ospf {
		prefix "ospf";
		reference "RFC XXXX - YANG model for Open Shortest Path First (OSPF).
			Please replace XXXX with published RFC number for draft-ietf-ospf-yang-21.";
	}

	import ietf-yang-types {
		prefix "yang";
		reference "RFC 6991 - Common YANG Data Types";
	}

	import ietf-routing {
		prefix "rt";
		reference "RFC 8349 - A YANG Data Model for Routing Management (NMDA Version)";
	}

	organization
		"IETF LSR - Link State Routing Working Group";

	contact
		"
		WG Web:
			<https://datatracker.ietf.org/group/lsr/about/>
		WG List:
			<mailto: lsr@ietf.org>

		Editor:	Srinath Dontula
				<mailto: sd947e@att.com>
		Author: Tony Li
				<mailto: tony.li@tony.li>
		Author: Peter Psenak
				<mialto: ppsenak@cisco.com>
		Author: Les Ginsberg
				<mailto: ginsberg@cisco.com>
		Author: Huaimo Chen
				<mailto: hcen@futurewei.com>
		Author: Tony Przygienda
				<mailto: prz@juniper.net>
		Author: Dave Cooper
				<mailto: dave.cooper@centurylink.com>
		Author: Luay Jalil
				<mailto: luay.jalil@verizon.com>";

	description
		"
		This YANG module contains a collection of YANG definitions for dynamic flooding
		OSPF.

		Copyright (c) 2019 IETF Trust and the persons identified as the document authors.
		All rights reserved.

		Redistribution and use in source and binary forms, with or without modification,
		is permitted pursuant to, and subject to the license terms contained in, the
		Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal
		Provisions Relating to IETF Documents
		(https://trustee.ietf.org/license-info)

		This version of this YANG module is part of RFC XXXX; see the RFC itself for 
		full legal notices. Replace XXXX with published RFC number for
		draft-ietf-lsr-dynamic-flooding-03
		";

	revision 2019-06-28 {
		description
			"Initial draft version."
		reference 
			"RFC XXXX: A YANG data model for OSPF Dense topology";
	}

	feature dynamic-flooding-ospf {
		description
			"suport for OSPF dynamic flooding";
		reference " RFC XXXX - Dynamic Flooding on Dense Graphs";
	}

	identity ospfv2-router-information-opaque-lsa {
		base ospf:ospfv2-area-scope-opaque-lsa;
		description 
			"OSPFv2 Router information LSA Types 0x0904, 0x0A04, 0x0B04, for 
			Link-scope, area-scope and AS-scope";
	}

	identity ospfv2-dynamic-flooding-opaque-lsa {
		base ospf:ospfv2-opaque-lsa-type;
		description "OSPFv2 Dynamic Flooding Opaque LSA - Type TBD";
	}

	identity ospfv3-dynamic-flooding-lsa {
		base ospf:ospfv3-lsa-type;
		description "OSPFv3 Dynamic Flooding LSA - Type TBD";
	}


	grouping ospf-area-leader-tlv {
		description "Area leader TLV for OSPFv2/OSPFv3. A TLV of RI LSA";
		leaf priority {
			type uint8;
			description "Router's priority for Area leader";
		}
		leaf Algorithm {
			type uint8;
			description "Routers Algorithm to calculate Flooding Topology.";
		}
	}

	grouping dynamic-flooding-tlv {
		description "Dynamic-flooding TLV for OSPFv2/OSPFv3. A TLV of RI LSA";
		leaf-list algorithm {
			type uint8;
			description "List of Algorithm's supported by the advertising node";
			}
		}

	grouping ospfv2-area-leader-rid-tlv {
		description "definition for OSPFv2 area-leader router-ID TLV. Needs to be defined";
	}

	grouping ospfv3-area-leader-rid-tlv {
		description "definition for OSPFv3 area-leader router-ID TLV. Needs to be defined";
	}

	grouping flooding-path-tlv {
		description "definition for OSPFv2/OSPFv3 Flooding Path TLV";
	}

	grouping flooding-request-bit{
		description "definition for adding Floding request bit (FR-bit) to LLS type-1 extended options"

	}

	grouping link-attribute-bits-tlv{
		description "definition for link-attribute-bits-tlv, a sub-tlv for OSPFv2 Extended link TLV
					 and a sub-tlv for OSPFv3 router-link TLV";
	}

/*
* Dynamic flooding config augmentation to OSPF Module
*/
	augment "/ospf:ospf/ospf:areas/ospf:area/" {
		if-feature dynamic-flooding-ospf
		container dynamic-flooding {
			description "to Enable/Disable dynamic flooding for this specific OSPF area";
			leaf enable {
				type boolean;
				description "Enable/Disable dynamic-flooding";
			}
		}
	}

/*
* Dynamic flooding state augmentation to OSPF module
*/


	augment "/ospf:ospf/ospf:areas/ospf:area/ospf:database/ospf:area-scope-lsa-type/"
			+ "ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version/ospf:ospfv3/"
			+ "ospf:body/ospf:router-information" {
		description "dynamic flooding TLVs";
		if-feature dynamic-flooding-ospf;
		container area-leader-tlv {
			description "Area-leader-tlv";
			uses ospf-area-leader-tlv;
		}
		container dynamic-flooding-tlv {
			description "dynamic-flooding-tlv";
			uses dynamic-flooding-tlv;
		}
	}
	augment "/ospf:ospf/ospf:areas/ospf:area/ospf:database/ospf:area-scope-lsa-type/"
			+ "ospf:area-scope-lsas/ospf:area-scope-lsa/ospf:version/ospf:ospfv2"
			+ "/ospf:body/ospf:opaque" {
		description "dynamic flooding TLVs";
		if-feature dynamic-flooding-ospf;
		container area-leader-tlv {
			description "Area-leader-tlv";
			uses ospf-area-leader-tlv;
		}
		container dynamic-flooding-tlv {
			description "dynamic-flooding-tlv";
			uses dynamic-flooding-tlv;
		}
	}
}

4. IS-IS Data Model

This data model augments the IS-IS YANG model with extensions to support Dynamic Flooding.

module ietf-isis-dynflood {
  yang-version 1.1;

  // IETF:
  namespace "urn:ietf:params:xml:ns:yang:ietf-isis-dynflood";
  // OpenConfig:
  // namespace "http://openconfig.net/yang/openconfig-isis-dynflood";

  prefix isis-dynflood;

  // OpenConfig:
  // import openconfig-network-instance {
  //   prefix oc-netinst;
  // }

  // NB: This module is currently under development and is intended to augment
  // the IETF IS-IS module (currently draft-ietf-isis-yang-isis-cfg-35).
  // While that is in process, we are developing against the openconfig model, and
  // references to IETF paths are commented out.

  // IETF:
  import ietf-routing {
    prefix "rt";
    reference "RFC 8349 - A YANG Data Model for Routing Management (NMDA Version)";
  }

  import ietf-isis {
    prefix "isis";
    reference "https://tools.ietf.org/id/draft-ietf-isis-yang-isis-cfg-35.txt";
  }

  organization "IETF LSR Working Group";
  contact "WG List: <mailto:lsr@ietf.org>";
  description "

     First draft of a YANG model for IS-IS dynamic flooding.

     Copyright (c) 2019 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.

  Authors:
    Srinath Dontula
      <mailto:sd947e@att.com>

    Tony Li
      <mailto:tony.li@tony.li>";

  revision 2019-08-22 {
    description "Initial revision";
    reference "RFC XXXX";
  }

  // OpenConfig:
  // typedef extended-system-id {
  //   type string {
  //     pattern
  //       '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.'
  //       +'[0-9][0-9]';
  //   }
  //   description
  //     "This type defines IS-IS system-id using pattern. The extended
  //      system-id contains the pseudonode number in addition to the
  //      system-id.
  //      An example system-id is 0143.0438.AEF0.00";
  // }

  feature area-leader {
    description "Election of a leader for the area.";
  }

  feature dynamic-flooding {
    if-feature area-leader;
    description "Compute a reduced flooding topology.";
  }

  grouping area-leader-global-cfg {
    description "Enable area leader capability";
    leaf value {
      type boolean;
      default false;
      description "Enable area leader capability";
    }
  }

  grouping area-leader-priority-cfg {
    description "Set the area leader priority";
    leaf value {
      type uint8;
      default 200;
      description "Area leader priority";
    }
  }

  grouping area-leader-algorithm-cfg {
    description "Select the flooding topology computation algorithm";
    leaf value {
      type uint8;
      default 0;
      description "Dynamic flooding algorithm selection";
    }
  }

  grouping area-leader-parameters {
    description "Area leader configuration parameters";
    container area-leader {
      description "Area leader configuration parameters";
      container config {
        description "Area leader configuration";
        container enable {
          if-feature area-leader;
          description "Area leader global enable configuration";
          uses area-leader-global-cfg;
          container level-1 {
            description "level-1 specific configuration";
            uses area-leader-global-cfg;
          }
          container level-2 {
            description "level-2 specific configuration";
            uses area-leader-global-cfg;
          }
        }
  
        container priority {
          if-feature area-leader;
          description "Area leader priority configuration";
          uses area-leader-priority-cfg;
          container level-1 {
            description "level-1 specific configuration";
            uses area-leader-priority-cfg;
          }
          container level-2 {
            description "level-2 specific configuration";
            uses area-leader-priority-cfg;
          }
        }
  
        container algorithm {
          if-feature dynamic-flooding;
          description "Area leader algorithm configuration";
          uses area-leader-algorithm-cfg;
          container level-1 {
            description "level-1 specific configuration";
            uses area-leader-algorithm-cfg;
          }
          container level-2 {
            description "level-2 specific configuration";
            uses area-leader-algorithm-cfg;
          }
        }
      }
    }
  }

  grouping dynamic-flooding-global-cfg {
    description "Enable dynamic flooding capability";
    leaf value {
      type boolean;
      default false;
      description "Enable dynamic flooding capability";
    }
  }

  grouping dynamic-flooding-parameters {
    description "Dynamic flooding configuration parameters";
    container dynamic-flooding {
      description "Dynamic flooding configuration parameters";
      container config {
        description "Dynamic flooding configuration";
        container enable {
          if-feature dynamic-flooding;
          description "Dynamic flooding global enable configuration";
          uses dynamic-flooding-global-cfg;
          container level-1 {
            description "level-1 specific configuration";
            uses dynamic-flooding-global-cfg;
          }
          container level-2 {
            description "level-2 specific configuration";
            uses dynamic-flooding-global-cfg;
          }
        }
      }
    }
  }

  // IETF:
  augment "/rt:routing/rt:control-plane-protocols/"
    +"rt:control-plane-protocol/isis:isis" {
  // OpenConfig:
  // augment "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:global" {
    description "Area leader and dynamic flooding configuration additions";
    uses area-leader-parameters;
    uses dynamic-flooding-parameters;
  }

  grouping dynamic-flooding-paths {
    description "List of paths in the topology";
    list paths {
      config false;
      description "A list of paths";
      leaf-list path {
        type uint16;
        description "A list of node indicies";
      }
    }
  }

  grouping dynamic-flooding-topology {
    description "List of paths in the topology";
    list paths {
      config false;
      description "A list of paths";
      leaf-list path {
        type string;
        description "A list of node names";
      }
    }
  }

  grouping dynamic-flooding-interfaces {
    description "List of flooding topology interfaces";
    list interfaces {
      config false;
      description "List of interfaces and their temporary status";
      leaf inteface {
        type string;
        description "Interface name";
      }
      leaf temporary {
        type boolean;
        description "Set for partition repair or new adjacencies";
      }
    }
  }

  grouping area-leader-state {
    description "Area leader state information";
    container area-leader-state {
      description "Area leader election result";
      leaf area-leader {
        type string;
        description "Hostname of the area leader";
      }
    }
  }

  grouping dynamic-flooding-state {
    description "State information for dynamic flooding";
    container area-node-ids {
      if-feature dynamic-flooding;
      description "Area node ids and indices";
      container area-node-ids {
        description "List of nodes and indices";
        list node-index {
          key index;
          description "List of nodes and their indices";
          leaf index {
            type uint16;
            description "Index for the node";
          }
          leaf node-id {
            // OpenConfig:
            // type extended-system-id;
            // IETF:
            type isis:extended-system-id;
            description "Node id for the node";
          }
        }
      }
    }
    container dynamic-flooding-paths {
      if-feature dynamic-flooding;
      description "Flooding topology with explicit paths";
      uses dynamic-flooding-paths;
    }
    container dynamic-flooding-topology {
      if-feature dynamic-flooding;
      description "Flooding topology with system names";
      uses dynamic-flooding-topology;
    }
    container dynamic-flooding-interfaces {
      if-feature dynamic-flooding;
      description "Interfaces on the flooding topology";
      uses dynamic-flooding-interfaces;
    }
  }

  // IETF:
  augment "/rt:routing/rt:control-plane-protocols/"
    +"rt:control-plane-protocol/isis:isis" {
  // OpenConfig:
  // augment "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels/oc-netinst:level/oc-netinst:state" {
    description "Area leader and dynamic flooding state additions";
    uses area-leader-state;
    uses dynamic-flooding-state;
  }

  grouping subtlv27-area-leader {
    description "Router capability subTLV for area leader capability";
    container area-leader {
      description "Area leader subTLV for router capabilities";
      leaf priority {
        type uint8;
        description "Area leader priority";
      }
      leaf algorithm {
        type uint8;
        description "Algorithm index for computing the flooding topology";
      }
    }
  }

  grouping subtlv28-dynamic-flooding {
    description "Dynamic flooding capability subTLV";
    container dynamic-flooding {
      description "Dynamic flooding capability subTLV";
      leaf-list algorithms {
        type uint8;
        description "Supported algorithm indices for distributed mode";
      }
    }
  }

  // OpenConfig:
  // augment "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp/oc-netinst:tlvs/oc-netinst:tlv/oc-netinst:router-capabilities/oc-netinst:capability/oc-netinst:subtlvs/oc-netinst:subtlv" {
  // IETF:
  augment "/rt:routing/rt:control-plane-protocols"
    +"/rt:control-plane-protocol/isis:isis"
    +"/isis:database/isis:levels/isis:lsp/isis:router-capabilities/isis:router-capability" {
    description "Additional router capability subTLVs for dynamic flooding";
    uses subtlv27-area-leader;
    uses subtlv28-dynamic-flooding;
  }

  grouping tlv17-area-node-ids {
    description "TLV 17: Area Node IDs";
    container area-node-ids {
      description "Dynamic flooding node id assignment TLV";
      leaf starting-index {
        type uint8;
        description "Starting index for the node ids in this TLV.";
      }
      leaf flags {
        type bits {
          bit last {
            position 0;
            description "Set if this is the highest set of indices in the area.";
          }
        }
        description "Flags field in the TLV.";
      }
      leaf-list nodes {
        // OpenConfig:
        // type extended-system-id;
        // IETF:
        type isis:extended-system-id;
        description "Nodes being assigned indices";
      }
    }
  }

  grouping tlv18-flooding-path {
    description "Flooding topology path TLV";
    container flooding-path {
      description "Dynamic flooding path TLV";
      leaf-list nodes {
        type uint16;
        description "Nodes in the path";
      }
    }
  }

  // OpenConfig:
  // augment "/oc-netinst:network-instances/oc-netinst:network-instance/oc-netinst:protocols/oc-netinst:protocol/oc-netinst:isis/oc-netinst:levels/oc-netinst:level/oc-netinst:link-state-database/oc-netinst:lsp/oc-netinst:tlvs/oc-netinst:tlv" {
  // IETF:
  augment "/rt:routing/rt:control-plane-protocols"
    +"/rt:control-plane-protocol/isis:isis/isis:database/isis:levels/isis:lsp" {
    description "Additional TLVs for dynamic flooding";
    uses tlv17-area-node-ids;
    uses tlv18-flooding-path;
  }
}

5. Acknowledgements

The authors would like to thank Derek Yeung, Nidhi Bhaskar, and Kavitha Prasad for their comments and assistance.

6. Security Considerations

This document introduces no new security issues.

7. Normative References

[I-D.ietf-isis-yang-isis-cfg] Litkowski, S., Yeung, D., Lindem, A., Zhang, Z. and L. Lhotka, "YANG Data Model for IS-IS Protocol", Internet-Draft draft-ietf-isis-yang-isis-cfg-35, March 2019.
[I-D.ietf-lsr-dynamic-flooding] Li, T., Psenak, P., Ginsberg, L., Chen, H., Przygienda, T., Cooper, D., Jalil, L. and S. Dontula, "Dynamic Flooding on Dense Graphs", Internet-Draft draft-ietf-lsr-dynamic-flooding-03, June 2019.
[ISO10589] International Organization for Standardization, "Intermediate System to Intermediate System Intra-Domain Routing Exchange Protocol for use in Conjunction with the Protocol for Providing the Connectionless-mode Network Service (ISO 8473)", ISO/IEC 10589:2002, Nov. 2002.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997.
[RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328, DOI 10.17487/RFC2328, April 1998.
[RFC7950] Bjorklund, M., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, August 2016.

Authors' Addresses

Srinath Dontula ATT 200 S. Laurel Ave Middletown, New Jersey 07748 United States of America EMail: sd947e@att.com
Tony Li Arista Networks 5453 Great America Parkway Santa Clara, California 95054 United States of America EMail: tony.li@tony.li