vpnmanager: update vpn instance families based on subnetmap updates only
[netvirt.git] / vpnservice / vpnmanager / vpnmanager-api / src / main / yang / odl-l3vpn.yang
index 76dc9af1e38dad2b8c684c2650ab8f4405146cb5..910c0d29216af74e85b4c074fa9ef96e6aab50e0 100644 (file)
@@ -4,8 +4,12 @@ module odl-l3vpn {
 
     import yang-ext {prefix ext; revision-date "2013-07-09";}
     import l3vpn { prefix l3vpn; revision-date "2014-08-15"; }
-    import ietf-yang-types { prefix "yang"; }
+    import ietf-yang-types { prefix "yang"; revision-date "2013-07-15"; }
     import odl-interface { prefix odlif; revision-date "2016-04-06"; }
+    import neutronvpn {
+        prefix nvpn;
+        revision-date "2015-06-02";
+    }
 
     revision "2013-09-11" {
         description "L3 VPN Service module";
@@ -14,10 +18,39 @@ module odl-l3vpn {
     grouping adjacency-list{
         list adjacency{
             key "ip_address";
-            leaf nextHopIp { type string; }
+            leaf-list next-hop-ip-list { type string; }
             leaf ip_address {type string;}
+            leaf adjacency_type {
+                description "The type of adjacency";
+                type enumeration {
+                    enum "primary-adjacency" {
+                        value 1;
+                        description
+                            "Primary adjacency type.";
+                    }
+                    enum "learnt-ip" {
+                        value 2;
+                        description
+                            "Learnt ip adjacency type.";
+                    }
+                    enum "extra-route" {
+                        value 3;
+                        description
+                            "Extra route adjacency type.";
+                    }
+                }
+                default "extra-route";
+            }
             leaf label { type uint32; config "false"; } /* optional */
             leaf mac_address {type string;} /* optional */
+            leaf subnet_id {type yang:uuid;} /* optional */
+            leaf subnet_gateway_mac_address {type string; config "false";} /* optional */
+            leaf vrf-id { type string; config "false"; }
+            leaf phys-network-func {
+                type boolean;
+                default false;
+                description "Value of True indicates this is an adjacency of a device in a provider network";
+            }
         }
     }
 
@@ -52,27 +85,57 @@ module odl-l3vpn {
               leaf vpn-interface-name {
                   type string;
               }
+              leaf subnet-id {
+                  type yang:uuid;
+              }
+              leaf prefix-cue {
+                  type enumeration {
+                      enum none {
+                          value "0";
+                          description "Nothing special";
+                      }
+                      enum nat {
+                          value "1";
+                          description "NAT prefix";
+                      }
+                      enum phys-net-func {
+                          value "2";
+                          description "Physical Network Function(PNF) prefix";
+                      }
+                      enum subnet-route {
+                          value "3";
+                          description "Subnet Route prefix";
+                      }
+                  }
+                  default "none";
+              }
            }
         }
     }
 
-    container vpn-to-extraroute {
+    container vpn-to-extraroutes {
         config false;
         list vpn {
-           key vrf-id;
-           leaf vrf-id {
-              description
-                 "The vrf-id command configures a route distinguisher (RD)
-                  for the IPv4 or IPv6 address family of a VPN instance or
-                  vpn instance name for internal vpn case.";
-              type string;
+           key vpn-name;
+           leaf vpn-name {
+               type string;
+               description "VPN Instance name";
            }
-           list extraroute {
-              key prefix;
-              leaf prefix {type string;}
-              leaf nexthop-ip {
+           list extra-routes {
+               key vrf-id;
+               leaf vrf-id {
+                  description
+                     "The vrf-id configures unique route distinguisher (RD) for each ipv4
+                      or ipv6 prefix when its nexthop-ip-list connected to same compute node";
                   type string;
-              }
+               }
+               list routes {
+                  key prefix;
+                  leaf prefix {type string;}
+                  leaf-list nexthop-ip-list {
+                      type string;
+                  }
+               }
            }
         }
     }
@@ -97,6 +160,42 @@ module odl-l3vpn {
        }
     }
 
+    container vpn-id-to-vpn-instance {
+           list vpn-ids {
+              key vpn-id;
+              leaf vpn-id {
+                 type uint32;
+              }
+              leaf vpn-instance-name {
+                 type string;
+              }
+              leaf vrf-id {
+                  description
+                     "The vrf-id command configures a route distinguisher (RD)
+                      for the IPv4 or IPv6 address family of a VPN instance or
+                      vpn instance name for internal vpn case.";
+                  type string;
+              }
+              leaf external-vpn {
+                  type boolean;
+                  description "The VPN is external?";
+              }
+           }
+    }
+
+    container evpn-rd-to-networks {
+        description "Holds the networks to which given evpn is attached";
+        list evpn-rd-to-network {
+           key rd;
+           leaf rd {
+             type string;
+           }
+           leaf network-id {
+             type string;
+           }
+        }
+    }
+
     container vpn-instance-op-data {
         config false;
         list vpn-instance-op-data-entry {
@@ -110,6 +209,11 @@ module odl-l3vpn {
               type string;
            }
 
+           leaf vpn-instance-name {
+               description "Typical the VPN Uuid";
+               type string;
+           }
+
            leaf vpn-interface-count { type uint32; }
            uses vpn-route-list;
            list vpn-to-dpn-list {
@@ -124,37 +228,183 @@ module odl-l3vpn {
                   }
                }
                list ip-addresses {
-                  key ip-address;
-                  leaf ip-address {
-                      type string;
+                   key ip-address;
+                   leaf ip-address { type string; }
+                   leaf ip-address-source {
+                        description
+                         "This field indicates whether the IP address here is an External-Fixed-Ip(Owned by Router).
+                          or Floating-Ip(Used by Ports).";
+                        type enumeration {
+                            enum "ExternalFixedIP";
+                            enum "FloatingIP";
+                        }
+                   }
+               }
+               leaf dpn-state {
+                  description
+                  "This flag indicates the state of the DPN.
+                   Active state indicates atleast one vpn interface present on that DPN for the vpn.
+                   Inactive state indicates no vpn interface present on that DPN for this vpn.";
+
+                  type enumeration {
+                     enum active {
+                        value "0";
+                        description
+                        "Active state";
+                     }
+                     enum inactive {
+                        value "1";
+                        description
+                        "Inactive state";
+                     }
                   }
+                  default "active";
                }
            }
-        }
-    }
+           leaf ipv4-configured {
+              type boolean;
+              description
+                 "This VPN Instance handles IPv4 traffic";
+              default false;
+           }
+           leaf ipv6-configured {
+              type boolean;
+              description
+                 "This VPN Instance handles IPv6 traffic";
+              default false;
+           }
+           leaf type {
+              description
+                 "The type of the VPN Instance.
+                  L3 indicates it is an L3VPN.
+                  L2 indicates it is an EVPN";
 
-    typedef task-state {
-         type enumeration {
-           enum na {
-             value "0";
-             description
-              "Task not applicable";
+              type enumeration {
+                 enum l3 {
+                    value "0";
+                    description “L3VPN";
+                 }
+                 enum l2{
+                    value "1";
+                    description "EVPN";
+                 }
+              }
+              default "l3";
+           }
+           leaf l3vni {
+              type uint32;
            }
-           enum pending {
-             value "1";
-             description
-              "Task is in pending state";
+           container vpnTargets {
+              description
+                "The vpn-target command configures the export or import VPN target
+                 extended community attribute for the VPN instance IPv4/IPv6 address
+                 family.
+                 Format is ASN:nn or IP-address:nn.";
+
+              list vpnTarget {
+                 key "vrfRTValue";
+                 max-elements "unbounded";
+                 min-elements "0";
+                 description
+                    "L3vpn vpntarget configure class";
+
+                 leaf vrfRTValue {
+                    description
+                       "Vpn-target: adds VPN target extended community attribute to the
+                        export or import VPN target extended community list. The
+                        vpn-target can be expressed in either of the following formats:
+                        (1)16-bit AS number:32-bit user-defined number
+                           For example, 1:3. The AS number ranges from 0 to 65535. The
+                           user-defined number ranges from 0 to 4294967295. The AS number
+                           and the user-defined number cannot be 0s at the same time.
+                           That is, a VPN target cannot be 0:0.
+                        (2)32-bit IP address:16-bit user-defined number
+                           For example, 192.168.122.15:1. The IP address ranges from
+                           0.0.0.0 to 255.255.255.255. The user-defined number ranges from
+                           0 to 65535.
+                        (3)32-bit IP address:16-bit user-defined number
+                           For example, 192.168.122.15:1. An IP address ranges from
+                           0.0.0.0 to 255.255.255.255. A user-defined number ranges from 0
+                           to 65535.";
+                    type string {
+                       length "3..21";
+                    }
+                 }
+
+                 leaf vrfRTType {
+                    description
+                       "Specifies the vpn target type, export-extcommunity:
+                        specifies the extended community attributes carried in routing
+                        information to be sent. import-extcommunity: receives routing
+                        information carrying specified extended community attributes.";
+
+                    type enumeration {
+                       enum export_extcommunity {
+                          value "0";
+                          description "export-extcommunity:";
+                       }
+                       enum import_extcommunity {
+                          value "1";
+                          description "import-extcommunity:";
+                       }
+                       enum both {
+                          value "2";
+                          description "export-extcommunity & import-extcommunity:";
+                       }
+                    }
+                 }
+              }
            }
-           enum done {
-             value "2";
-             description
-              "Task has been completed";
+           leaf vpn-state {
+              description
+                 "Represents a stage in this VpnInstance's lifecycle.";
+              type enumeration {
+                 enum created {
+                    value "0";
+                    description
+                    "VPNInstance is successfully created";
+                 }
+                 enum pending_delete {
+                    value "3";
+                    description
+                    "VpnInstance marked for deletion.";
+                 }
+              }
+              default "created";
+           }
+           leaf-list rd {
+              type string;
            }
-         }
-         description
-          "This value the status of any task.
-           The possible values are NA, PENDING or DONE.
-           ";
+        }
+    }
+
+
+    typedef task-state {
+        type enumeration {
+            enum idle {
+                value "0";
+                description "Task in idle state";
+            }
+            enum pending_advertise {
+                value "1";
+                description "Task is pending advertisement state";
+            }
+            enum pending_withdraw {
+                value "2";
+                description "Task is pending withdrawal state";
+            }
+            enum advertised {
+                value "3";
+                description "Task is in advertised state";
+            }
+            enum withdrawn {
+                value "4";
+                description "Task is in withdrawn state";
+            }
+        }
+        description
+            "This value the status of any task.
+             The possible values are IDLE, PENDING_ADVERTISE, PENDING_WITHDRAW, ADVERTISED, WITHDRAWN.";
     }
 
 
@@ -183,9 +433,13 @@ module odl-l3vpn {
             }
             leaf route-adv-state {
                 type task-state;
-                description "The status of the subnet route advertisement. Route advertisement could be in a NA, PENDING or DONE state.";
+                description "The status of the subnet route advertisement/withdrawal";
+            }
+            leaf last-adv-state {
+                type task-state;
+                description "The previous status of the subnet route advertisement/withdrawal.";
             }
-            leaf elan-tag{
+            leaf elan-tag {
                 type uint32;
             }
             list subnet-to-dpn {
@@ -200,6 +454,13 @@ module odl-l3vpn {
                     }
                 }
             }
+            leaf label {
+                type uint32;
+            }
+            leaf l3vni {
+                type uint32;
+            }
+            uses nvpn:network-attributes;
 
         }
     }
@@ -222,24 +483,55 @@ module odl-l3vpn {
         }
     }
 
+
     grouping dpn-in-vpn-event {
-            leaf dpn-id { type uint64; }
-            leaf vpn-name { type string; }
-            leaf rd { type string; }
+        leaf dpn-id { type uint64; }
+        leaf vpn-name { type string; }
+        leaf rd { type string; }
+    }
+
+    notification add-dpn-event {
+        container add-event-data {
+           uses dpn-in-vpn-event;
         }
+    }
 
-        notification add-dpn-event {
-            container add-event-data {
-               uses dpn-in-vpn-event;
-            }
+    notification remove-dpn-event {
+        container remove-event-data {
+           uses dpn-in-vpn-event;
         }
+    }
 
-        notification remove-dpn-event {
-            container remove-event-data {
-               uses dpn-in-vpn-event;
-            }
+    notification add-interface-to-dpn-on-vpn-event {
+        container add-interface-event-data {
+           uses dpn-in-vpn-event;
+           leaf interface-name { type string; }
+           leaf vpn-id { type uint32; }
         }
+    }
 
+    notification remove-interface-from-dpn-on-vpn-event {
+        container remove-interface-event-data {
+           uses dpn-in-vpn-event;
+           leaf interface-name { type string; }
+           leaf vpn-id { type uint32; }
+        }
+    }
+
+    /*
+     * Configured Transport Type for l3vpn service.
+     */
+    container conf-transport-type-l3vpn {
+        leaf transport-type {
+            mandatory "true";
+            type identityref {
+                base odlif:tunnel-type-base;
+            }
+            description
+                "L3VPN service will use this config to setup
+                the transport type for tunnels between DPNs.";
+        }
+    }
 
     /* container to maintain mapping between neutron router and DPN(s) on which vpn-interfaces for router are present */
     container neutron-router-dpns {
@@ -258,6 +550,19 @@ module odl-l3vpn {
         }
     }
 
+    /* container to maintain mapping between DPN(s) and the routers */
+    container dpn-routers {
+        config false;
+        list dpn-routers-list {
+            key dpn-id;
+            leaf dpn-id { type uint64;}
+            list routers-list {
+                key router;
+                leaf router { type string;}
+            }
+        }
+    }
+
     container router-interfaces {
         list router-interface {
             key interface-name;
@@ -266,18 +571,54 @@ module odl-l3vpn {
         }
     }
 
-    /*
-     * Configured Transport Type for l3vpn service.
-     */
-    container conf-transport-type-l3vpn {
-        leaf transport-type {
-            mandatory "true";
-            type identityref {
-                base odlif:tunnel-type-base;
+    container learnt-vpn-vip-to-port-data {
+        config false;
+        list learnt-vpn-vip-to-port {
+            key "vpn-name port-fixedip";
+            leaf vpn-name { type string; }
+            leaf port-fixedip { type string; }
+            leaf port-name { type string; }
+            leaf mac-address { type string; }
+            leaf creation-time { type string; }
+        }
+    }
+
+    container evpn-config {
+        config true;
+        leaf multi-homing-mode {
+            type enumeration {
+                enum "none";
+                enum "all-active";
+                enum "single-active";
             }
-            description
-                "L3VPN service will use this config to setup
-                the transport type for tunnels between DPNs.";
+            default "none";
+        }
+        leaf irb-mode {
+            type enumeration {
+                enum "symmetric";
+                enum "asymmetric";
+            }
+            default "symmetric";
+        }
+    }
+
+    container l3vpn-lb-nexthops {
+        config false;
+        list nexthops {
+            key "nexthop-key";
+            leaf nexthop-key { type string; }
+            leaf group-id { type string; }
+            leaf-list target-device-id { type string; } //dpId or ip-address
+        }
+    }
+
+    container dpid-l3vpn-lb-nexthops {
+        config false;
+        list dpn-lb-nexthops {
+            key "src-dp-id dst-device-id";
+            leaf src-dp-id { type uint64; }
+            leaf dst-device-id { type string; } //dpId or ip-address
+            leaf-list nexthop-key { type string; }
         }
     }
 }