Bug 8473: Reboot fixes for ECMP with extra-routes
[netvirt.git] / vpnservice / fibmanager / fibmanager-api / src / main / yang / odl-fib.yang
index 360a5c10fdc43a37bcebdfe89fe7b48701bcc539..d75be2603556201d8fa417d58fa59144fd256ed3 100644 (file)
@@ -8,7 +8,7 @@ module odl-fib {
         description "FIB Manager module";
     }
 
-    grouping ipv4Entries{
+    grouping ipv4Entries {
         list ipv4Entry{
             key  "destPrefix";
             leaf destPrefix {type string;}
@@ -16,25 +16,73 @@ module odl-fib {
         }
     }
 
-    grouping vrfEntries{
-        list vrfEntry{
-            key  "destPrefix";
+    grouping vrfEntryBase {
             leaf destPrefix {
                 type string;
                 mandatory true;
             }
-            leaf label {
-                type uint32;
-                mandatory true;
-            }
-            leaf-list nextHopAddressList {
-                type string;
-                min-elements "1";
+            leaf mac {
+               type string;
             }
             leaf origin {
                 type string;
                 mandatory true;
             }
+            leaf encap-type {
+               description
+                  "This flag indicates how to interpret the existing label field.
+                   A value of mplsgre indicates that the label within route paths will continue to be considered as an MPLS Label.
+                   A value of vxlan indicates that l3vni should be used to advertise to bgp and label will be ignored.";
+
+               type enumeration {
+                  enum mplsgre {
+                     value "0";
+                     description "MPLSOverGRE";
+                  }
+                  enum vxlan {
+                     value "1";
+                     description “VNI";
+                  }
+               }
+               default "mplsgre";
+            }
+
+            leaf l3vni {
+               type uint32;
+            }
+            leaf gateway_mac_address {
+               type string;
+            }
+            leaf parent-vpn-rd {
+               description
+                 "If set will get the vpn-to-dpn information from the parent-vpn-rd";
+               type string;
+            }
+            list route-paths {
+                key "nexthop-address";
+                leaf nexthop-address {
+                    type string;
+                }
+                leaf label {
+                    type uint32;
+                }
+            }
+    }
+
+    grouping vrfEntries {
+        list vrfEntry{
+            key  "destPrefix";
+            uses vrfEntryBase;
+        }
+    }
+
+    grouping macVrfEntries {
+        list macVrfEntry {
+            key  "mac";
+            uses vrfEntryBase;
+            leaf l2vni {
+               type uint32;
+            }
         }
     }
 
@@ -43,12 +91,20 @@ module odl-fib {
             leaf elantag {type uint32;}
     }
 
+    augment "/odl-fib:fibEntries/odl-fib:vrfTables/odl-fib:vrfEntry" {
+        ext:augment-identifier "routerInterface";
+        leaf uuid {type string;}
+        leaf mac-address {type string;}
+        leaf ip-address {type string;}
+    }
+
     container fibEntries {
         config true;
         list vrfTables{
             key "routeDistinguisher";
             leaf routeDistinguisher {type string;}
             uses vrfEntries;
+            uses macVrfEntries;
         }
 
         container ipv4Table{
@@ -72,4 +128,93 @@ module odl-fib {
             leaf parent-vpn-rd { type string; }
          }
     }
-}
\ No newline at end of file
+
+    container extraroute-rds-map {
+        config true;
+        list extraroute-rds {
+            description
+                "List of route distinguishers used to create a unique NLRI for the destination prefix";
+            key "vpnid";
+            leaf vpnid {
+                type uint32;
+            }
+            list dest-prefixes {
+                key "dest-prefix";
+                leaf dest-prefix {
+                    type string;
+                }
+                list allocated-rds {
+                    key nexthop;
+                    leaf nexthop {
+                        type string;
+                        description "Ip address of the VM which is the nexthop for the extra route";
+                    }
+                    leaf rd {type string;}
+                }
+            }
+        }
+   }
+
+   container ip-prefix-map {
+        description "Stores information about a parent vpn and prefix in that parent vpn,
+                    along with what other vpn-instances import the parent vpn";
+        config false;
+        list ip-prefix-info {
+            key "prefix parent-primary-rd";
+            leaf prefix {
+                type string;
+            }
+            leaf parent-primary-rd {
+                type string;
+            }
+            leaf dpn-id {
+                type uint64;
+            }
+            leaf-list vpn-instance-list {
+                type string;
+            }
+            leaf parent-vpnid {
+                type uint32;
+            }
+            leaf vpn-interface-name {
+                type string;
+            }
+            leaf elan-tag {
+                type uint32;
+            }
+            leaf is-subnet-route {
+                type boolean;
+            }
+            leaf encap-type {
+                type enumeration {
+                    enum mplsgre {
+                        value "0";
+                    }
+                    enum vxlan {
+                        value "1";
+                    }
+                }
+                default "mplsgre";
+            }
+            leaf l3vni {
+                type uint32;
+            }
+            leaf l2vni {
+                 type uint32;
+            }
+            list route-paths {
+                 key "nexthop-address";
+                 leaf nexthop-address {
+                      type string;
+                 }
+                 leaf label {
+                      type uint32;
+                 }
+                 leaf gateway_mac_address {
+                      type string;
+                 }
+            }
+        }
+   }
+
+}