meta-flow: Correctly set destination MAC in mf_set_flow_value().
[sliver-openvswitch.git] / vswitchd / vswitch.ovsschema
index f4c63fb..9d91b0f 100644 (file)
-{"name": "ovs_vswitchd_db",
- "comment": "Configuration for one Open vSwitch daemon.",
+{"name": "Open_vSwitch",
+ "version": "6.4.0",
+ "cksum": "923041702 15687",
  "tables": {
-    "OpenVSwitch": {
-        "comment": "Configuration for an Open vSwitch daemon.",
-        "columns": {
-            "bridges": {
-                "comment": "Set of bridges managed by the daemon.",
-                "type": {"key": "uuid", "min": 0, "max": "unlimited"}},
-            "management_id": {
-                "comment": "Exactly 12 hex digits that identify the daemon.",
-                "type": "string"},
-            "controller": {
-                "comment": "Default Controller used by bridges.",
-                "type": {"key": "uuid", "min": 0, "max": 1}},
-            "ssl": {
-                "comment": "SSL used globally by the daemon.",
-                "type": {"key": "uuid", "min": 0, "max": 1}}}},
-    "Bridge": {
-        "comment": "Configuration for a bridge within an OpenVSwitch.",
-        "columns": {
-            "name": {
-                "comment": "Bridge identifier.  Should be alphanumeric and no more than about 8 bytes long.  Must be unique among the names of ports, interfaces, and bridges on a host.",
-                "type": "string"},
-            "datapath_id": {
-                "comment": "OpenFlow datapath ID.  Exactly 12 hex digits.",
-                "type": {"key": "string", "min": 0, "max": 1}},
-            "hwaddr": {
-                "comment": "Ethernet address to use for bridge.  Exactly 12 hex digits in the form XX:XX:XX:XX:XX:XX.",
-                "type": {"key": "string", "min": 0, "max": 1}},
-            "ports": {
-                "comment": "Ports included in the bridge.",
-                "type": {"key": "uuid", "min": 0, "max": "unlimited"}},
-            "mirrors": {
-                "comment": "Port mirroring configuration.",
-                "type": {"key": "uuid", "min": 0, "max": "unlimited"}},
-            "netflow": {
-                "comment": "NetFlow configuration.",
-                "type": {"key": "uuid", "min": 0, "max": "unlimited"}},
-            "controller": {
-                "comment": "OpenFlow controller.  If unset, defaults to that specified by the parent OpenVSwitch.",
-                "type": {"key": "uuid", "min": 0, "max": 1}}}},
-    "Port": {
-        "comment": "A port within a Bridge.  May contain a single Interface or multiple (bonded) Interfaces.",
-        "columns": {
-            "name": {
-                "comment": "Port name.  Should be alphanumeric and no more than about 8 bytes long.    May be the same as the interface name, for non-bonded ports.  Must otherwise be unique among the names of ports, interfaces, and bridges on a host.",
-                "type": "string"},
-            "interfaces": {
-                "comment": "The Port's Interfaces.  If there is more than one, this is a bonded Port.",
-                "type": {"key": "uuid", "min": 1, "max": "unlimited"}},
-            "trunks": {
-                "comment": "The 802.1Q VLAN(s) that this port trunks.  Should be empty if this port trunks all VLAN(s) or if this is not a trunk port.",
-                "type": {"key": "integer", "min": 0, "max": 4096}},
-            "tag": {
-                "comment": "This port's implicitly tagged VLAN.  Should be empty if this is a trunk port.",
-                "type": {"key": "integer", "min": 0, "max": 1}},
-            "updelay": {
-                "comment": "For a bonded port, the number of milliseconds for which carrier must stay up on an interface before the interface is considered to be up.  Ignored for non-bonded ports.",
-                "type": "integer"},
-            "downdelay": {
-                "comment": "For a bonded port, the number of milliseconds for which carrier must stay down on an interface before the interface is considered to be down.  Ignored for non-bonded ports.",
-                "type": "integer"}}},
-    "Interface": {
-        "comment": "An interface within a Port.",
-        "columns": {
-            "name": {
-                "comment": "Interface name.  Should be alphanumeric and no more than about 8 bytes long.  May be the same as the port name, for non-bonded ports.  Must otherwise be unique among the names of ports, interfaces, and bridges on a host.",
-                "type": "string"},
-            "internal": {
-                "comment": "An \"internal\" port is one that is implemented in software as a logical device.",
-                "type": "boolean"},
-            "ingress_policing_rate": {
-                "comment": "Maximum rate for data received on this interface, in kbps.  Set to 0 to disable policing.",
-                "type": "integer"},
-            "ingress_policing_burst": {
-                "comment": "Maximum burst size for data received on this interface, in kb.  The default burst size if set to 0 is 10 kb.",
-                "type": "integer"}}},
-    "Mirror": {
-        "comment": "A port mirror within a Bridge.",
-        "columns": {
-            "name": {
-                "comment": "Arbitrary identifier for the Mirror.",
-                "type": "string"},
-            "select_src_port": {
-                "comment": "Ports on which arriving packets are selected for mirroring.",
-                 "type": {"key": "uuid", "min": 0, "max": "unlimited"}},
-            "select_dst_port": {
-                "comment": "Ports on which departing packets are selected for mirroring.",
-                 "type": {"key": "uuid", "min": 0, "max": "unlimited"}},
-            "select_vlan": {
-                "comment": "VLANs on which packets are selected for mirroring.",
-                "type": {"key": "integer", "min": 0, "max": 4096}},
-            "output_port": {
-                "comment": "Output port for selected packets.  Mutually exclusive with output_vlan.",
-                "type": {"key": "uuid", "min": 0, "max": 1}},
-            "output_vlan": {
-                "comment": "Output VLAN for selected packets.  Mutually exclusive with output_vlan.",
-                "type": {"key": "integer", "min": 0, "max": 1}}}},
-    "Netflow": {
-        "comment": "A Netflow target.",
-        "columns": {
-            "target": {
-                "comment": "Netflow target in the form \"IP:PORT\".",
-                "type": "string"},
-            "engine_type": {
-                "comment": "Engine type to use in NetFlow messages.  Defaults to datapath ID if not specified.",
-                "type": "integer"},
-            "engine_id": {
-                "comment": "Engine ID to use in NetFlow messages.  Defaults to datapath ID if not specified.",
-                "type": "integer"},
-            "add_id_to_interface": {
-                "comment": "Place least-significant 7 bits of engine ID into most significant bits of ingress and egress interface fields of NetFlow records?",
-                "type": "boolean"}}},
-    "Controller": {
-        "comment": "An OpenFlow controller.",
-        "columns": {
-            "target": {
-                "comment": "Connection method for controller, e.g. \"ssl:...\", \"tcp:...\".  The special string \"discover\" enables controller discovery.",
-                "type": "string"},
-            "max_backoff": {
-                "comment": "Maximum number of milliseconds to wait between connection attempts.  Default is implementation-specific.",
-                "type": {"key": "integer", "min": 0, "max": 1}},
-            "inactivity_probe": {
-                "comment": "Maximum number of milliseconds of idle time on connection to controller before sending an inactivity probe message.  Default is implementation-specific.",
-                "type": {"key": "integer", "min": 0, "max": 1}},
-            "fail_mode": {
-                "comment": "Either \"standalone\" or \"secure\", or empty to use the implementation's default.",
-                "type": {"key": "string", "min": 0, "max": 1}},
-            "discovery_accept_regex": {
-                "comment": "If \"target\" is \"discovery\", a POSIX extended regular expression against which the discovered controller location is validated.  If not specified, the default is implementation-specific.",
-                "type": {"key": "string", "min": 0, "max": 1}},
-            "discovery_update_resolv_conf": {
-                "comment": "If \"target\" is \"discovery\", whether to update /etc/resolv.conf when the controller is discovered.  If not specified, the default is implementation-specific.",
-                "type": {"key": "boolean", "min": 0, "max": 1}},
-            "connection_mode": {
-                "comment": "Either \"in-band\" or \"out-of-band\".  If not specified, the default is implementation-specific.",
-                "type": {"key": "string", "min": 0, "max": 1}},
-            "local_ip": {
-                "comment": "If \"target\" is not \"discovery\", the IP address to configure on the local port.",
-                "type": {"key": "string", "min": 0, "max": 1}},
-            "local_netmask": {
-                "comment": "If \"target\" is not \"discovery\", the IP netmask to configure on the local port.",
-                "type": {"key": "string", "min": 0, "max": 1}},
-            "local_gateway": {
-                "comment": "If \"target\" is not \"discovery\", the IP gateway to configure on the local port.",
-                "type": {"key": "string", "min": 0, "max": 1}},
-            "controller_rate_limit": {
-                "comment": "The maximum rate at which packets will be forwarded to the OpenFlow controller, in packets per second.  If not specified, the default is implementation-specific.",
-                "type": {"key": "integer", "min": 0, "max": 1}},
-            "controller_burst_limit": {
-                "comment": "The maximum number of unused packet credits that the bridge will allow to accumulate, in packets.  If not specified, the default is implementation-specific.",
-                "type": {"key": "integer", "min": 0, "max": 1}}}},
-    "SSL": {
-        "comment": "SSL configuration for an OpenVSwitch.",
-        "columns": {
-            "private_key": {
-                "comment": "Name of a PEM file containing the private key used as the switch's identity for SSL connections to the controller.",
-                "type": "string"},
-            "certificate": {
-                "comment": "Name of a PEM file containing a certificate, signed by the certificate authority (CA) used by the controller and manager, that certifies the switch's private key, identifying a trustworthy switch.",
-                "type": "string"},
-            "ca-cert": {
-                "comment": "Name of a PEM file containing the CA certificate used to verify that the switch is connected to a trustworthy controller.",
-                "type": "string"}}}}}
+   "Open_vSwitch": {
+     "columns": {
+       "bridges": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "Bridge"},
+                  "min": 0, "max": "unlimited"}},
+       "manager_options": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "Manager"},
+                  "min": 0, "max": "unlimited"}},
+       "ssl": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "SSL"},
+                  "min": 0, "max": 1}},
+       "other_config": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"}},
+       "external_ids": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}},
+       "next_cfg": {
+         "type": "integer"},
+       "cur_cfg": {
+         "type": "integer"},
+       "capabilities": {
+         "type": {"key": "string",
+                  "value": {"type": "uuid",
+                            "refTable": "Capability"},
+                  "min": 0, "max": "unlimited"}},
+       "statistics": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"},
+         "ephemeral": true},
+       "ovs_version": {
+         "type": {"key": {"type": "string"},
+                  "min": 0, "max": 1}},
+       "db_version": {
+         "type": {"key": {"type": "string"},
+                  "min": 0, "max": 1}},
+       "system_type": {
+         "type": {"key": {"type": "string"},
+                  "min": 0, "max": 1}},
+       "system_version": {
+         "type": {"key": {"type": "string"},
+                  "min": 0, "max": 1}}},
+     "isRoot": true,
+     "maxRows": 1},
+   "Capability": {
+     "columns": {
+       "details": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}}}},
+   "Bridge": {
+     "columns": {
+       "name": {
+         "type": "string",
+         "mutable": false},
+       "datapath_type": {
+         "type": "string"},
+       "datapath_id": {
+         "type": {"key": "string", "min": 0, "max": 1},
+         "ephemeral": true},
+       "stp_enable": {
+         "type": "boolean"},
+       "ports": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "Port"},
+                  "min": 0, "max": "unlimited"}},
+       "mirrors": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "Mirror"},
+                  "min": 0, "max": "unlimited"}},
+       "netflow": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "NetFlow"},
+                  "min": 0, "max": 1}},
+       "sflow": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "sFlow"},
+                  "min": 0, "max": 1}},
+       "controller": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "Controller"},
+                  "min": 0, "max": "unlimited"}},
+       "fail_mode": {
+         "type": {"key": {"type": "string",
+                          "enum": ["set", ["standalone", "secure"]]},
+                  "min": 0, "max": 1}},
+       "status": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"},
+         "ephemeral": true},
+       "other_config": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"}},
+       "external_ids": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"}},
+       "flood_vlans": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 0,
+                          "maxInteger": 4095},
+                  "min": 0, "max": 4096}}},
+     "indexes": [["name"]]},
+   "Port": {
+     "columns": {
+       "name": {
+         "type": "string",
+         "mutable": false},
+       "interfaces": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "Interface"},
+                  "min": 1, "max": "unlimited"}},
+       "trunks": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 0,
+                          "maxInteger": 4095},
+                  "min": 0, "max": 4096}},
+       "tag": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 0,
+                          "maxInteger": 4095},
+                  "min": 0, "max": 1}},
+       "vlan_mode": {
+         "type": {"key": {"type": "string",
+           "enum": ["set", ["trunk", "access", "native-tagged", "native-untagged"]]},
+         "min": 0, "max": 1}},
+       "qos": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "QoS"},
+                  "min": 0, "max": 1}},
+       "mac": {
+         "type": {"key": {"type": "string"},
+                  "min": 0, "max": 1}},
+       "bond_mode": {
+         "type": {"key": {"type": "string",
+           "enum": ["set", ["balance-tcp", "balance-slb", "active-backup", "stable"]]},
+         "min": 0, "max": 1}},
+       "lacp": {
+         "type": {"key": {"type": "string",
+           "enum": ["set", ["active", "passive", "off"]]},
+         "min": 0, "max": 1}},
+       "bond_updelay": {
+         "type": "integer"},
+       "bond_downdelay": {
+         "type": "integer"},
+       "bond_fake_iface": {
+         "type": "boolean"},
+       "fake_bridge": {
+         "type": "boolean"},
+       "status": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"},
+         "ephemeral": true},
+       "statistics": {
+         "type": {"key": "string", "value": "integer", "min": 0, "max": "unlimited"},
+         "ephemeral": true},
+       "other_config": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"}},
+       "external_ids": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"}}},
+     "indexes": [["name"]]},
+   "Interface": {
+     "columns": {
+       "name": {
+         "type": "string",
+         "mutable": false},
+       "type": {
+         "type": "string"},
+       "options": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"}},
+       "ingress_policing_rate": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 0}}},
+       "ingress_policing_burst": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 0}}},
+       "mac": {
+         "type": {"key": {"type": "string"},
+                  "min": 0, "max": 1}},
+       "external_ids": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"}},
+       "ofport": {
+         "type": {"key": "integer", "min": 0, "max": 1},
+         "ephemeral": true},
+       "cfm_mpid": {
+         "type": {
+           "key": {"type": "integer"},
+           "min": 0,
+           "max": 1}},
+       "cfm_remote_mpids": {
+         "type": {
+           "key": {"type": "integer"},
+           "min": 0,
+           "max": "unlimited"},
+         "ephemeral": true},
+       "cfm_fault": {
+         "type": {
+           "key": { "type": "boolean"},
+           "min": 0,
+           "max": 1},
+         "ephemeral": true},
+       "lacp_current": {
+         "type": {"key": {"type": "boolean"},
+                  "min": 0, "max": 1},
+         "ephemeral": true},
+       "other_config": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"}},
+       "statistics": {
+         "type": {"key": "string", "value": "integer", "min": 0, "max": "unlimited"},
+         "ephemeral": true},
+       "status": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"},
+         "ephemeral": true},
+       "admin_state": {
+         "type": {"key": {"type": "string",
+                          "enum": ["set", ["up", "down"]]},
+                  "min": 0, "max": 1},
+         "ephemeral": true},
+       "link_state": {
+         "type": {"key": {"type": "string",
+                          "enum": ["set", ["up", "down"]]},
+                  "min": 0, "max": 1},
+         "ephemeral": true},
+       "link_resets": {
+         "type": {"key": {"type": "integer"},
+                  "min": 0, "max": 1},
+         "ephemeral": true},
+       "link_speed": {
+         "type": {"key": "integer", "min": 0, "max": 1},
+         "ephemeral": true},
+       "duplex": {
+         "type": {"key": {"type": "string",
+                          "enum": ["set", ["half", "full"]]},
+                  "min": 0, "max": 1},
+         "ephemeral": true},
+       "mtu": {
+         "type": {"key": "integer", "min": 0, "max": 1},
+         "ephemeral": true}},
+     "indexes": [["name"]]},
+   "QoS": {
+     "columns": {
+       "type": {
+         "type": "string"},
+       "queues": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 0,
+                          "maxInteger": 4294967295},
+                  "value": {"type": "uuid",
+                            "refTable": "Queue"},
+                  "min": 0, "max": "unlimited"}},
+       "other_config": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}},
+       "external_ids": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}}},
+     "isRoot": true},
+   "Queue": {
+     "columns": {
+       "dscp": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 0,
+                          "maxInteger": 63},
+                  "min": 0, "max": 1}},
+       "other_config": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}},
+       "external_ids": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}}},
+     "isRoot": true},
+   "Mirror": {
+     "columns": {
+       "name": {
+         "type": "string"},
+       "select_all": {
+         "type": "boolean"},
+       "select_src_port": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "Port",
+                          "refType": "weak"},
+                   "min": 0, "max": "unlimited"}},
+       "select_dst_port": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "Port",
+                          "refType": "weak"},
+                   "min": 0, "max": "unlimited"}},
+       "select_vlan": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 0,
+                          "maxInteger": 4095},
+                  "min": 0, "max": 4096}},
+       "output_port": {
+         "type": {"key": {"type": "uuid",
+                          "refTable": "Port",
+                          "refType": "weak"},
+                  "min": 0, "max": 1}},
+       "output_vlan": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 1,
+                          "maxInteger": 4095},
+                  "min": 0, "max": 1}},
+       "statistics": {
+         "type": {"key": "string", "value": "integer",
+                  "min": 0, "max": "unlimited"},
+         "ephemeral": true},
+       "external_ids": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}}}},
+   "NetFlow": {
+     "columns": {
+       "targets": {
+         "type": {"key": {"type": "string"},
+                  "min": 1, "max": "unlimited"}},
+       "engine_type": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 0,
+                          "maxInteger": 255},
+                  "min": 0, "max": 1}},
+       "engine_id": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 0,
+                          "maxInteger": 255},
+                  "min": 0, "max": 1}},
+       "add_id_to_interface": {
+         "type": "boolean"},
+       "active_timeout": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": -1}}},
+       "external_ids": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}}}},
+   "sFlow": {
+     "columns": {
+       "targets": {
+         "type": {"key": "string", "min": 1, "max": "unlimited"}},
+       "sampling": {
+         "type": {"key": "integer", "min": 0, "max": 1}},
+       "polling": {
+         "type": {"key": "integer", "min": 0, "max": 1}},
+       "header": {
+         "type": {"key": "integer", "min": 0, "max": 1}},
+       "agent": {
+         "type": {"key": "string", "min": 0, "max": 1}},
+       "external_ids": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}}}},
+   "Controller": {
+     "columns": {
+       "target": {
+         "type": "string"},
+       "max_backoff": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 1000},
+                  "min": 0, "max": 1}},
+       "inactivity_probe": {
+         "type": {"key": "integer", "min": 0, "max": 1}},
+       "connection_mode": {
+         "type": {"key": {"type": "string",
+                  "enum": ["set", ["in-band", "out-of-band"]]},
+                  "min": 0, "max": 1}},
+       "local_ip": {
+         "type": {"key": {"type": "string"},
+                  "min": 0, "max": 1}},
+       "local_netmask": {
+         "type": {"key": {"type": "string"},
+                  "min": 0, "max": 1}},
+       "local_gateway": {
+         "type": {"key": {"type": "string"},
+                  "min": 0, "max": 1}},
+       "controller_rate_limit": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 100},
+                  "min": 0, "max": 1}},
+       "controller_burst_limit": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 25},
+                  "min": 0, "max": 1}},
+       "external_ids": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}},
+       "is_connected": {
+         "type": "boolean",
+         "ephemeral": true},
+       "role": {
+         "type": {"key": {"type": "string",
+                          "enum": ["set", ["other", "master", "slave"]]},
+                  "min": 0, "max": 1},
+         "ephemeral": true},
+       "status": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"},
+         "ephemeral": true}}},
+   "Manager": {
+     "columns": {
+       "target": {
+         "type": "string"},
+       "max_backoff": {
+         "type": {"key": {"type": "integer",
+                          "minInteger": 1000},
+                  "min": 0, "max": 1}},
+       "inactivity_probe": {
+         "type": {"key": "integer", "min": 0, "max": 1}},
+       "connection_mode": {
+         "type": {"key": {"type": "string",
+                  "enum": ["set", ["in-band", "out-of-band"]]},
+                  "min": 0, "max": 1}},
+       "external_ids": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}},
+       "is_connected": {
+         "type": "boolean",
+         "ephemeral": true},
+       "status": {
+         "type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"},
+         "ephemeral": true}},
+     "indexes": [["target"]]},
+   "SSL": {
+     "columns": {
+       "private_key": {
+         "type": "string"},
+       "certificate": {
+         "type": "string"},
+       "ca_cert": {
+         "type": "string"},
+       "bootstrap_ca_cert": {
+         "type": "boolean"},
+       "external_ids": {
+         "type": {"key": "string", "value": "string",
+                  "min": 0, "max": "unlimited"}}},
+     "maxRows": 1}}}