New tables:
Network_Function: Each row contains {inport, outport, health_check}
Network_Function_Group: Each row contains a list of Network_Function entities.
                        Min and max length of this list is 1.
                        It also contains a unique id (1 and 255) generated by
                        northd and and a reference to the current active NF.
                        The mode field is for future extension when we want
                        to support both inline and mirror modes.
Network_Function_Health_Check: Each row contains configuration for probes in
                        options field:
                        {interval, timeout, success_count, failure_count}

Modified table:
ACL: The ACL entity would have a new optional field that is a reference to a
     Network_Function_Group entity. Only accepted for stateful allow ACLs.

Acked-by: Naveen Yerramneni <naveen.yerramn...@nutanix.com>
Signed-off-by: Sragdhara Datta Chaudhuri <sragdha.chau...@nutanix.com>
---
 ovn-nb.ovsschema |  64 +++++++++++++++++++++++-
 ovn-nb.xml       | 123 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 185 insertions(+), 2 deletions(-)

diff --git a/ovn-nb.ovsschema b/ovn-nb.ovsschema
index f55930a2e..353a53905 100644
--- a/ovn-nb.ovsschema
+++ b/ovn-nb.ovsschema
@@ -1,7 +1,7 @@
 {
     "name": "OVN_Northbound",
-    "version": "7.12.0",
-    "cksum": "2749576410 39903",
+    "version": "7.13.0",
+    "cksum": "109127550 43083",
     "tables": {
         "NB_Global": {
             "columns": {
@@ -184,6 +184,61 @@
                              "min": 0, "max": "unlimited"}}},
             "indexes": [["name"]],
             "isRoot": false},
+        "Network_Function_Health_Check": {
+            "columns": {
+                "name": {"type": "string"},
+                "options": {
+                     "type": {"key": "string",
+                              "value": "string",
+                              "min": 0,
+                              "max": "unlimited"}},
+                "external_ids": {
+                    "type": {"key": "string", "value": "string",
+                             "min": 0, "max": "unlimited"}}},
+            "isRoot": true},
+        "Network_Function": {
+            "columns": {
+                "name": {"type": "string"},
+                "outport": {"type": {"key": {"type": "uuid",
+                                             "refTable": "Logical_Switch_Port",
+                                             "refType": "strong"},
+                                     "min": 1, "max": 1}},
+                "inport": {"type": {"key": {"type": "uuid",
+                                            "refTable": "Logical_Switch_Port",
+                                            "refType": "strong"},
+                                    "min": 1, "max": 1}},
+                "health_check": {"type": {
+                    "key": {"type": "uuid",
+                            "refTable": "Network_Function_Health_Check",
+                            "refType": "strong"},
+                    "min": 0, "max": 1}},
+                "external_ids": {
+                    "type": {"key": "string", "value": "string",
+                             "min": 0, "max": "unlimited"}}},
+            "isRoot": true},
+        "Network_Function_Group": {
+            "columns": {
+                "name": {"type": "string"},
+                "network_function": {"type":
+                                  {"key": {"type": "uuid",
+                                           "refTable": "Network_Function",
+                                           "refType": "strong"},
+                                           "min": 0, "max": "unlimited"}},
+                "network_function_active": {"type":
+                                  {"key": {"type": "uuid",
+                                           "refTable": "Network_Function",
+                                           "refType": "strong"},
+                                           "min": 0, "max": 1}},
+                "mode": {"type": {"key": {"type": "string",
+                                          "enum": ["set", ["inline"]]}}},
+                "id": {
+                     "type": {"key": {"type": "integer",
+                                      "minInteger": 0,
+                                      "maxInteger": 255}}},
+                "external_ids": {
+                    "type": {"key": "string", "value": "string",
+                             "min": 0, "max": "unlimited"}}},
+            "isRoot": true},
         "Forwarding_Group": {
             "columns": {
                 "name": {"type": "string"},
@@ -297,6 +352,11 @@
                                                ["allow", "allow-related",
                                                 "allow-stateless", "drop",
                                                 "reject", "pass"]]}}},
+                "network_function_group": {"type": {"key": {"type": "uuid",
+                                           "refTable": 
"Network_Function_Group",
+                                           "refType": "strong"},
+                                           "min": 0,
+                                           "max": 1}},
                 "log": {"type": "boolean"},
                 "severity": {"type": {"key": {"type": "string",
                                               "enum": ["set",
diff --git a/ovn-nb.xml b/ovn-nb.xml
index 4a7581807..1d84bc3ee 100644
--- a/ovn-nb.xml
+++ b/ovn-nb.xml
@@ -2648,6 +2648,13 @@ or
       </p>
     </column>
 
+    <column name="network_function_group">
+      <p>
+        Group of network functions to which the traffic matching this ACL
+        is redirected.
+      </p>
+    </column>
+
     <group title="options">
       <p>
         ACLs options.
@@ -5935,4 +5942,120 @@ or
       </column>
     </group>
   </table>
+
+
+  <table name="Network_Function_Group" title="network function group">
+    <p>
+      Each row contains a list of <ref table="Network_Function"/>. Health
+      monitoring of each Network_Function in the list would be done based
+      on parameters defined in <ref table="Network_Function_Health_Check"/>.
+      Traffic redirection would be done towards one of the active
+      Network_Functions. If all are detected to be down, one of the
+      Network_Functions is chosen for redirection.
+    </p>
+
+    <column name="name">
+      Name of the <ref table="Network_Function_Group"/>. Name should be unique.
+    </column>
+
+    <column name="id">
+      A unique integer between 1 and 255, assigned to the
+      network function group.
+    </column>
+
+    <column name="network_function">
+      A list of network functions which belong to this group.
+    </column>
+
+    <column name="network_function_active">
+      Current active network function. This column is populated by northd.
+    </column>
+
+    <column name="mode">
+      Network-function mode. The "inline" mode means the network-function
+      is directly in the path of network traffic - traffic being redirected
+      through it.
+    </column>
+
+    <group title="Common Columns">
+      <column name="external_ids">
+        See <em>External IDs</em> at the beginning of this document.
+      </column>
+    </group>
+  </table>
+
+  <table name="Network_Function" title="network function">
+    <p>
+      Each row represents one network function entity. This contains a pair
+      of logical_switch_ports. Traffic matching the ACL are redirected to the
+      inport for from-lport and to the outport for the to-lport ACLs. Once
+      it comes out of the other port, it gets forwarded nomally. The response
+      traffic gets redirected to the outport for from-lport and to the inport
+      for the to-lport ACLs, and when it comes out of the other port, it
+      gets forwarded.
+    </p>
+
+    <column name="name">
+      Name of the <ref table="Network_Function"/>. Name should be unique.
+    </column>
+
+    <column name="inport">
+      Logical port UUID where request traffic for from-lport ACL and response
+      traffic for to-lport ACL are redirected.
+    </column>
+
+    <column name="outport">
+      Logical port UUID where request traffic for to-lport ACL and response
+      traffic for from-lport ACL are redirected.
+    </column>
+
+    <column name="health_check">
+      Health check associated with this network function.
+    </column>
+
+    <group title="Common Columns">
+      <column name="external_ids">
+        See <em>External IDs</em> at the beginning of this document.
+      </column>
+    </group>
+  </table>
+
+  <table name="Network_Function_Health_Check" title="network function health 
check">
+    <p>
+      Each row represents one network function health check.
+    </p>
+
+    <column name="name">
+      Name of the <ref table="Network_Function_Health_Check"/>.
+      Name should be unique.
+    </column>
+
+
+    <group title="Health check options">
+      <column name="options" key="interval" type='{"type": "integer"}'>
+        The interval, in seconds, between health checks.
+      </column>
+
+      <column name="options" key="timeout" type='{"type": "integer"}'>
+        The time, in seconds, after which a health check times out.
+      </column>
+
+      <column name="options" key="success_count" type='{"type": "integer"}'>
+        The number of successful checks after which the Network_Function is
+        considered online.
+      </column>
+
+      <column name="options" key="failure_count" type='{"type": "integer"}'>
+        The number of failure checks after which the Network_Function is
+        considered offline.
+      </column>
+    </group>
+
+    <group title="Common Columns">
+      <column name="external_ids">
+        See <em>External IDs</em> at the beginning of this document.
+      </column>
+    </group>
+  </table>
+
 </database>
-- 
2.39.3

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to