]> git.puffer.fish Git - matthieu/frr.git/commitdiff
yang: Defining yang files for pim
authorSarita Patra <saritap@vmware.com>
Tue, 21 Apr 2020 11:55:18 +0000 (04:55 -0700)
committerSarita Patra <saritap@vmware.com>
Wed, 22 Apr 2020 16:21:28 +0000 (09:21 -0700)
Signed-off-by: Sarita Patra <saritap@vmware.com>
lib/subdir.am
yang/frr-pim-rp.yang [new file with mode: 0644]
yang/frr-pim.yang [new file with mode: 0644]
yang/subdir.am

index ed6cf31b34a9272be510f0bdcfbbc16715bc6882..f3f709fd2451cd3a6fa9af7568d736d68da81d92 100644 (file)
@@ -120,6 +120,8 @@ nodist_lib_libfrr_la_SOURCES = \
        yang/frr-module-translator.yang.c \
        yang/frr-nexthop.yang.c \
        yang/frr-igmp.yang.c \
+       yang/frr-pim.yang.c \
+       yang/frr-pim-rp.yang.c \
        # end
 
 vtysh_scan += \
diff --git a/yang/frr-pim-rp.yang b/yang/frr-pim-rp.yang
new file mode 100644 (file)
index 0000000..f1fa116
--- /dev/null
@@ -0,0 +1,133 @@
+module frr-pim-rp {
+  yang-version "1.1";
+  namespace "http://frrouting.org/yang/pim-rp";
+
+  prefix frr-pim-rp;
+
+  import ietf-inet-types {
+    prefix "inet";
+  }
+
+  import ietf-routing-types {
+    prefix "rt-types";
+  }
+
+  import frr-routing {
+    prefix "frr-rt";
+  }
+
+  import frr-pim {
+    prefix "frr-pim";
+  }
+
+  organization
+    "Free Range Routing";
+
+  contact
+    "FRR Users List:       <mailto:frog@lists.frrouting.org>
+     FRR Development List: <mailto:dev@lists.frrouting.org>";
+
+  description
+    "The module defines a collection of YANG definitions common for
+     all PIM (Protocol Independent Multicast) RP (Rendezvous Point) model.";
+
+  revision 2017-03-09 {
+    description
+      "Initial revision.";
+    reference
+      "RFC XXXX: A YANG Data Model for PIM RP";
+  }
+
+  typedef ipv4-multicast-group-address-prefix {
+    type inet:ipv4-prefix{
+      pattern '(2((2[4-9])|(3[0-9]))\.)(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(/(([4-9])|([1-2][0-9])|(3[0-2])))';
+    }
+    description
+      "This type represents an IPv4 multicast group prefix,
+       which is in the range from 224.0.0.0 to 239.255.255.255.";
+    }
+
+  typedef ipv6-multicast-group-address-prefix {
+    type inet:ipv6-prefix {
+      pattern
+        '(((FF|ff)[0-9a-fA-F]{2}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(/((1[6-9])|([2-9][0-9])|(1[0-1][0-9])|(12[0-8])))';
+      pattern
+        '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)(/.+)';
+    }
+    description
+      "This type represents an IPv6 multicast group prefix,
+       which is in the range of FF00::/8.";
+  }
+
+  typedef ip-multicast-group-address-prefix {
+    description "The IP-Multicast-Group-Address-Prefix type represents an IP multicast address
+    prefix and is IP version neutral. The format of the textual representations implies the IP
+    version. It includes a prefix-length, separated by a '/' sign.";
+    type union {
+      type ipv4-multicast-group-address-prefix;
+      type ipv6-multicast-group-address-prefix;
+    }
+  } // typedef ip-multicast-group-address-prefix
+
+  typedef plist-ref {
+    type string;
+  }
+
+  /*
+   * Groupings
+   */
+  grouping static-rp-container {
+    description
+      "Grouping of static RP container.";
+
+    container static-rp {
+      description
+        "Containing static RP attributes.";
+
+      list rp-list {
+        key "rp-address";
+        description
+          "A list of RP addresses.";
+
+        leaf rp-address {
+          type inet:ip-address;
+          description
+            "Specifies a static RP address.";
+        }
+
+        choice group-list-or-prefix-list {
+          description "Use group-list or prefix-list";
+          case group-list {
+            leaf-list group-list{
+              type ip-multicast-group-address-prefix;  
+              description
+                "List of multicast group address.";
+            }
+          }
+          case prefix-list {
+            leaf prefix-list {
+              type plist-ref;
+              description
+                "Group prefix-list filter";
+            }
+          }
+        }
+      }
+    } // static-rp
+  } // static-rp-container
+
+  /*
+   * Configuration data nodes
+   */
+  augment "/frr-rt:routing/frr-rt:control-plane-protocols/"
+    + "frr-rt:control-plane-protocol/frr-pim:pim/"
+    + "frr-pim:address-family" {
+    description "PIM RP augmentation.";
+
+    container rp {
+      description
+        "PIM RP configuration data.";
+      uses static-rp-container;
+    } // rp
+  } // augment
+}
diff --git a/yang/frr-pim.yang b/yang/frr-pim.yang
new file mode 100644 (file)
index 0000000..500936e
--- /dev/null
@@ -0,0 +1,446 @@
+module frr-pim {
+  yang-version "1.1";
+  namespace "http://frrouting.org/yang/pim";
+
+  prefix frr-pim;
+
+  import frr-interface {
+    prefix frr-interface;
+  }
+
+  import frr-routing {
+    prefix "frr-rt";
+  }
+
+  import ietf-routing-types {
+    prefix "rt-types";
+  }
+
+  import ietf-inet-types {
+    prefix "inet";
+  }
+
+  organization
+    "Free Range Routing";
+
+  contact
+    "FRR Users List:       <mailto:frog@lists.frrouting.org>
+     FRR Development List: <mailto:dev@lists.frrouting.org>";
+
+  description
+    "The module defines a collection of YANG definitions common for
+     PIM (Protocol Independent Multicast) model.";
+
+  revision 2017-03-09 {
+    description
+      "Initial revision.";
+    reference
+      "RFC XXXX: A YANG Data Model for PIM";
+  }
+
+  identity pimd {
+    base frr-rt:routing-protocol;
+    description
+      "'Pim' routing pseudo-protocol.";
+  }
+
+  typedef plist-ref {
+    type string;
+  }
+
+  /*
+   * Groupings
+   */
+
+  grouping global-pim-config-attributes {
+    description
+      "A grouping defining pim global attributes.";
+
+    leaf ecmp {
+      type empty;
+      description
+        "Enable PIM ECMP.";
+    }
+
+    leaf ecmp-rebalance {
+      type empty;
+      description
+        "Enable PIM ECMP Rebalance.";
+    }
+
+    leaf join-prune-interval {
+      type uint16 {
+        range "60..600";
+      }
+      default "60";
+      description
+        "Join Prune Send Interval in seconds.";
+    }
+
+    leaf keep-alive-timer {
+      type uint16 {
+        range "31..60000";
+      }
+      default "210";
+      description
+        "Keep alive Timer in seconds.";
+    }
+
+    leaf rp-keep-alive-timer {
+      type uint16 {
+        range "31..60000";
+      }
+      default "210";
+      description
+        "RP keep alive Timer in seconds.";
+    }
+
+    leaf packets {
+      type uint8 {
+        range "1..100";
+      }
+      default "3";
+      description
+        "Number of packets to process at one time per fd.";
+    }
+
+    leaf register-suppress-time {
+      type uint16 {
+        range "5..60000";
+      }
+      default "60";
+      description
+        "Register Suppress Timer.";
+    }
+  }
+
+  grouping per-af-global-pim-config-attributes {
+    description
+      "A grouping defining per address family pim global attributes";
+
+    leaf send-v6-secondary {
+      when "../frr-pim:address-family = 'frr-rt:ipv4'" {
+        description
+          "Only applicable to IPv4 address family.";
+      }
+      type empty;
+      description
+        "Send v6 secondary addresses.";
+    }
+
+    container spt-switchover {
+      description
+        "SPT-Switchover.";
+
+      leaf spt-action {
+        type enumeration {
+          enum "PIM_SPT_IMMEDIATE" {
+            value 0;
+            description
+              "Immediate switch to SPT Tree.";
+          }
+          enum "PIM_SPT_INFINITY" {
+            value 1;
+            description
+              "Never switch to SPT Tree.";
+          }
+        }
+        default "PIM_SPT_IMMEDIATE";
+        description
+          "SPT-Switchover action";
+      }
+
+      leaf spt-infinity-prefix-list {
+        when "../spt-action = 'PIM_SPT_INFINITY'" {
+          description
+            "This leaf is only valid when the spt action
+             is PIM_SPT_INFINITY.";
+        }
+        type plist-ref;
+        description
+          "Prefix-List to control which groups to switch.";
+      }
+    }
+
+    leaf ssm-prefix-list {
+        type plist-ref;
+        description
+          "Prefix-list used to define Source-Specific Multicast address range.";
+    }
+
+    leaf-list ssm-pingd-source-ip {
+      type inet:ip-address;
+      description
+        "Enable ssmpingd operation.";
+    }
+
+    container msdp-mesh-group {
+      presence
+        "Configure MSDP mesh-group.";
+
+      leaf mesh-group-name {
+        type string;
+        description
+          "MSDP mesh group name.";
+      }
+
+      leaf-list member-ip {
+        type inet:ip-address;
+        description
+          "Peer ip address.";
+      }
+
+      leaf source-ip {
+        type inet:ip-address;
+        description
+          "Source ip address for the TCP connection.";
+      }
+    }
+
+    list msdp-peer {
+      key "peer-ip";
+      description
+        "Configure MSDP peer.";
+
+      leaf peer-ip {
+        type inet:ip-address;
+        description
+          "MSDP peer IP address.";
+      }
+
+      leaf source-ip {
+        type inet:ip-address;
+        description
+          "MSDP source IP address.";
+      }
+    }
+
+    container mlag {
+      description
+        "Multi-chassis link aggregation.";
+
+     leaf peerlink-rif {
+        type frr-interface:interface-ref;
+        description
+         "Outgoing interface name.";
+      }
+
+      leaf reg-address {
+        type inet:ip-address;
+        description
+          "reg address.";
+      }
+
+      leaf my-role {
+        type enumeration {
+          enum "MLAG_ROLE_NONE" {
+            value 0;
+            description
+              "MLAG role none.";
+          }
+          enum "MLAG_ROLE_PRIMARY" {
+            value 1;
+            description
+              "MLAG role primary.";
+          }
+
+          enum "MLAG_ROLE_SECONDARY" {
+            value 2;
+            description
+              "MLAG role secondary.";
+          }
+        }
+        default "MLAG_ROLE_NONE";
+        description
+          "Mlag role.";
+      }
+
+      leaf peer-state {
+       type boolean;
+       default "false";
+       description
+         "Peer state";
+      }
+    }
+
+    leaf register-accept-list {
+        type plist-ref;
+        description
+          "Only accept registers from a specific source prefix list.";
+    }
+  } // per-af-global-pim-config-attributes
+
+  grouping interface-pim-config-attributes {
+    description
+      "A grouping defining pim interface attributes.";
+
+    leaf pim-enable {
+      type empty;
+      description
+        "Enable PIM flag on the interface.";
+    }
+
+    leaf dr-priority {
+      type uint32 {
+        range "1..4294967295";
+      }
+      default 1;
+      description
+        "DR (Designated Router) priority";
+    }
+
+    leaf hello-interval {
+      type uint16 {
+        range "1..180";
+      }
+      default "30";
+      description
+        "Hello interval";
+    }
+
+    leaf hello-holdtime {
+      type uint16 {
+        range "1..180";
+      }
+      description
+        "Hello holdtime";
+    }
+
+    container bfd {
+      presence
+        "Enable BFD support on the interface.";
+
+      leaf min-rx-interval {
+        type uint16 {
+          range "50..60000";
+        }
+        default "300";
+          description
+            "Required min receive interval";
+      }
+
+      leaf min-tx-interval {
+        type uint16 {
+          range "50..60000";
+        }
+        default "300";
+        description
+          "Desired min transmit interval";
+      }
+
+      leaf detect_mult {
+        type uint8 {
+          range "2..255";
+        }
+        default "3";
+        description
+          "Detect Multiplier";
+      }
+    }
+
+    leaf bsm {
+      type empty;
+      description
+        "Enables BSM support on the interface.";
+    }
+
+    leaf unicast-bsm {
+      type empty;
+      description
+        "Accept/Send unicast BSM on the interface.";
+    }
+
+    leaf active-active {
+      type empty;
+      description
+        "Mark interface as Active-Active for MLAG operations.";
+    }
+  } // interface-pim-config-attributes
+
+  grouping per-af-interface-pim-config-attributes {
+    description
+      "A grouping defining pim interface attributes per address family.";
+
+    leaf use-source {
+      type inet:ip-address;
+      description
+        "Primary address of the interface set by user.";
+    }
+
+    leaf multicast-boundary-oil {
+      type plist-ref;
+      description
+        "Prefix-List to define multicast boundary";
+    }
+
+    list mroute {
+      key "source-addr group-addr";
+      description
+        "Add multicast route.";
+
+      leaf oif {
+        type frr-interface:interface-ref;
+        description
+          "Outgoing interface name.";
+      }
+
+      leaf source-addr {
+        type inet:ip-address;
+        description
+          "Multicast source address.";
+      }
+
+      leaf group-addr {
+        type rt-types:ip-multicast-group-address;
+        description
+          "Multicast group address.";
+      }
+    }
+  } // per-af-interface-pim-config-attributes
+
+  /*
+   * Global Configuration data nodes
+   */
+  augment "/frr-rt:routing/frr-rt:control-plane-protocols/"
+        + "frr-rt:control-plane-protocol" {
+    container pim {
+      when "../frr-rt:type = 'frr-pim:pimd'" {
+        description
+          "This container is only valid for the 'pim' routing
+           protocol.";
+      }
+      description
+        "PIM configuration data.";
+
+      uses global-pim-config-attributes;
+
+      list address-family {
+        key "address-family";
+        description
+          "Each list entry for one address family.";
+        uses frr-rt:address-family;
+        uses per-af-global-pim-config-attributes;
+
+      } //address-family
+    } // pim
+  } // augment
+
+  /*
+   * Per-interface configuration data
+   */
+  augment "/frr-interface:lib/frr-interface:interface" {
+    container pim {
+      description
+        "PIM interface parameters.";
+      uses interface-pim-config-attributes;
+      list address-family {
+        key "address-family";
+        description
+          "Each list entry for one address family.";
+        uses frr-rt:address-family;
+        uses per-af-interface-pim-config-attributes;
+      }
+    }
+  }
+}
+
index 5393781d22b71a8f8817de807d58f9dfc51e9002..6caf9fc5f3d233ce02ad761484170d7254070f35 100644 (file)
@@ -31,6 +31,8 @@ dist_yangmodels_DATA += yang/frr-routing.yang
 dist_yangmodels_DATA += yang/ietf/ietf-routing-types.yang
 dist_yangmodels_DATA += yang/frr-igmp.yang
 dist_yangmodels_DATA += yang/ietf/ietf-interfaces.yang
+dist_yangmodels_DATA += yang/frr-pim.yang
+dist_yangmodels_DATA += yang/frr-pim-rp.yang
 
 if BFDD
 dist_yangmodels_DATA += yang/frr-bfdd.yang