netdev-linux: HFSC in linux
[openvswitch] / ovsdb / SPECS
index f5d748c03cb5dd9f33903611adf56222066ebc04..260786edb9bbd37d935344b26864531b90cf9cd9 100644 (file)
@@ -5,6 +5,19 @@
 Basic Notation
 --------------
 
 Basic Notation
 --------------
 
+OVSDB uses JSON, as defined by RFC 4627, for its schema format and its
+wire protocol format.  The JSON implementation in Open vSwitch has the
+following limitations:
+
+     - Null bytes (\u0000) are not allowed in strings.
+
+     - Only UTF-8 encoding is supported.  (RFC 4627 also mentions
+       UTF-16BE, UTF-16LE, and UTF-32.)
+
+     - RFC 4627 says that names within a JSON object should be unique.
+       The Open vSwitch JSON parser discards all but the last value
+       for a name that is specified more than once.
+
 The descriptions below use the following shorthand notations for JSON
 values.  Additional notation is presented later.
 
 The descriptions below use the following shorthand notations for JSON
 values.  Additional notation is presented later.
 
@@ -101,6 +114,7 @@ is represented by <database-schema>, as described below.
     A JSON object with the following members:
 
         "columns": {<id>: <column-schema>, ...}   required
     A JSON object with the following members:
 
         "columns": {<id>: <column-schema>, ...}   required
+        "maxRows": <integer>                      optional
 
     The value of "columns" is a JSON object whose names are column
     names and whose values are <column-schema>s.
 
     The value of "columns" is a JSON object whose names are column
     names and whose values are <column-schema>s.
@@ -122,17 +136,27 @@ is represented by <database-schema>, as described below.
         the database process is stopped and then started again, each
         "_version" also changes to a new random value.
 
         the database process is stopped and then started again, each
         "_version" also changes to a new random value.
 
+    If "maxRows" is specified, as a positive integer, it limits the
+    maximum number of rows that may be present in the table.  This is
+    a "deferred" constraint, enforced only at transaction commit time
+    (see the "transact" request below).  If "maxRows" is not
+    specified, the size of the table is limited only by the resources
+    available to the database server.
+
 <column-schema>
 
     A JSON object with the following members:
 
         "type": <type>                            required
         "ephemeral": <boolean>                    optional
 <column-schema>
 
     A JSON object with the following members:
 
         "type": <type>                            required
         "ephemeral": <boolean>                    optional
+        "mutable": <boolean>                      optional
 
     The "type" specifies the type of data stored in this column.  If
     "ephemeral" is specified as true, then this column's values are
     not guaranteed to be durable; they may be lost when the database
 
     The "type" specifies the type of data stored in this column.  If
     "ephemeral" is specified as true, then this column's values are
     not guaranteed to be durable; they may be lost when the database
-    restarts.
+    restarts.  If "mutable" is specified as false, then this column's
+    values may not be modified after they are initially set with the
+    "insert" operation.
 
 <type>
 
 
 <type>
 
@@ -243,6 +267,8 @@ over HTTP, for these reasons:
 
     * The JSON-RPC specification for HTTP transport is incomplete.
 
 
     * The JSON-RPC specification for HTTP transport is incomplete.
 
+We are using TCP port 6632 for the database JSON-RPC connection.
+
 The database wire protocol consists of the following JSON-RPC methods:
 
 list_dbs
 The database wire protocol consists of the following JSON-RPC methods:
 
 list_dbs
@@ -362,6 +388,11 @@ include at least the following:
         transaction), and this column is not allowed to be empty
         because its <type> has a "min" of 1.
 
         transaction), and this column is not allowed to be empty
         because its <type> has a "min" of 1.
 
+    "error": "constraint violation"
+
+        The number of rows in a table exceeds the maximum number
+        permitted by the table's "maxRows" value (see <table-schema>).
+
 If "params" contains one or more "wait" operations, then the
 transaction may take an arbitrary amount of time to complete.  The
 database implementation must be capable of accepting, executing, and
 If "params" contains one or more "wait" operations, then the
 transaction may take an arbitrary amount of time to complete.  The
 database implementation must be capable of accepting, executing, and
@@ -410,8 +441,10 @@ Request object members:
     "params": [<db-name>, <json-value>, <monitor-requests>]   required
     "id": <nonnull-json-value>                                required
 
     "params": [<db-name>, <json-value>, <monitor-requests>]   required
     "id": <nonnull-json-value>                                required
 
-<monitor-requests> is an object that maps from a table name to a
-<monitor-request>.
+<monitor-requests> is an object that maps from a table name to an
+array of <monitor-request> objects.  For backward compatibility, a
+single <monitor-request> may be used instead of an array; it is
+treated as a single-element array.
 
 Each <monitor-request> is an object with the following members:
 
 
 Each <monitor-request> is an object with the following members:
 
@@ -432,15 +465,16 @@ Response object members:
     "id": same "id" as request
 
 This JSON-RPC request enables a client to replicate tables or subsets
     "id": same "id" as request
 
 This JSON-RPC request enables a client to replicate tables or subsets
-of tables within database <db-name>.  Each <monitor-request> specifies
-a table to be replicated.  The JSON-RPC response to the "monitor"
-includes the initial contents of each table.  Afterward, when changes
-to those tables are committed, the changes are automatically sent to
-the client using the "update" monitor notification.  This monitoring
-persists until the JSON-RPC session terminates or until the client
-sends a "monitor_cancel" JSON-RPC request.
+of tables within database <db-name>.  Each element of
+<monitor-requests> specifies a table to be replicated.  The JSON-RPC
+response to the "monitor" includes the initial contents of each table,
+unless disabled (see below).  Afterward, when changes to those tables
+are committed, the changes are automatically sent to the client using
+the "update" monitor notification.  This monitoring persists until the
+JSON-RPC session terminates or until the client sends a
+"monitor_cancel" JSON-RPC request.
 
 
-Each <monitor-request> describes how to monitor a table:
+Each <monitor-request> describes how to monitor columns in a table:
 
     The circumstances in which an "update" notification is sent for a
     row within the table are determined by <monitor-select>:
 
     The circumstances in which an "update" notification is sent for a
     row within the table are determined by <monitor-select>:
@@ -458,8 +492,13 @@ Each <monitor-request> describes how to monitor a table:
         sent whenever when a row in the table is modified.
 
     The "columns" member specifies the columns whose values are
         sent whenever when a row in the table is modified.
 
     The "columns" member specifies the columns whose values are
-    monitored.  If "columns" is omitted, all columns in the table,
-    except for "_uuid", are monitored.
+    monitored.  It must not contain duplicates.  If "columns" is
+    omitted, all columns in the table, except for "_uuid", are
+    monitored.
+
+If there is more than one <monitor-request> in an array of them, then
+each <monitor-request> in the array should specify both "columns" and
+"select", and the "columns" must be non-overlapping sets.
 
 The "result" in the JSON-RPC response to the "monitor" request is a
 <table-updates> object (see below) that contains the contents of the
 
 The "result" in the JSON-RPC response to the "monitor" request is a
 <table-updates> object (see below) that contains the contents of the