[add-port a a1],
[add-bond a bond0 a2 a3],
[br-set-external-id a key0 value0],
- [port-set-external-id a1 key1 value1],
- [iface-set-external-id a2 key2 value2],
- [iface-set-external-id a2 key3 value3],
- [iface-set-external-id a3 key4 value4],
+ [set port a1 external-ids:key1=value1],
+ [set interface a2 external-ids:key2=value2],
+ [set interface a2 external-ids:key3=value3],
+ [set interface a3 external-ids:key4=value4],
[br-get-external-id a],
[br-get-external-id a key0],
[br-get-external-id a key1],
[br-get-external-id a],
[br-set-external-id a key0],
[br-get-external-id a],
- [port-get-external-id a1],
- [iface-get-external-id a2],
- [iface-get-external-id a3])], [0], [
+ [get port a1 external-ids],
+ [get interface a2 external-ids],
+ [get interface a3 external-ids])], [0], [
key0=othervalue
-key1=value1
-key2=value2\nkey3=value3
-key4=value4
+{"key1"="value1"}
+{"key2"="value2", "key3"="value3"}
+{"key4"="value4"}
], [], [OVS_VSCTL_CLEANUP])
AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
[br-get-external-id a],
- [port-get-external-id a1],
- [iface-get-external-id a2],
- [iface-get-external-id a3])], [0],
+ [get port a1 external-ids],
+ [get interface a2 external-ids],
+ [get interface a3 external-ids])], [0],
[
-key1=value1
-key2=value2\nkey3=value3
-key4=value4
+{"key1"="value1"}
+{"key2"="value2", "key3"="value3"}
+{"key4"="value4"}
], [], [OVS_VSCTL_CLEANUP])
CHECK_BRIDGES([a, a, 0])
CHECK_PORTS([a], [a1], [bond0])
\fIbridge\fR, overwriting any previous value. If \fIvalue\fR is
omitted, then \fIkey\fR is removed from \fIbridge\fR's set of external
IDs (if it was present).
+.IP
+For real bridges, the effect of this command is similar to that of a
+\fBset\fR or \fBremove\fR command in the \fBexternal\-ids\fR column of
+the \fBBridge\fR table. For fake bridges, it actually modifies keys
+with names prefixed by \fBfake\-bridge\-\fR in the \fBPort\fR table.
.
.IP "\fBbr\-get\-external\-id \fIbridge\fR [\fIkey\fR]"
Queries the external IDs on \fIbridge\fR. If \fIkey\fR is specified,
the output is the value for that \fIkey\fR or the empty string if
\fIkey\fR is unset. If \fIkey\fR is omitted, the output is
\fIkey\fB=\fIvalue\fR, one per line, for each key-value pair.
+.IP
+For real bridges, the effect of this command is similar to that of a
+\fBget\fR command in the \fBexternal\-ids\fR column of the
+\fBBridge\fR table. For fake bridges, it queries keys with names
+prefixed by \fBfake\-bridge\-\fR in the \fBPort\fR table.
.
.SS "Port Commands"
.
Prints the name of the bridge that contains \fIport\fR on standard
output.
.
-.IP "\fBport\-set\-external\-id \fIport key\fR [\fIvalue\fR]"
-Sets or clears an ``external ID'' value on \fIport\fR. These value
-are intended to identify entities external to Open vSwitch with which
-\fIport\fR is associated, e.g. the port's identifier in a
-virtualization management platform. The Open vSwitch database schema
-specifies well-known \fIkey\fR values, but \fIkey\fR and \fIvalue\fR
-are otherwise arbitrary strings.
-.IP
-If \fIvalue\fR is specified, then \fIkey\fR is set to \fIvalue\fR for
-\fIport\fR, overwriting any previous value. If \fIvalue\fR is
-omitted, then \fIkey\fR is removed from \fIport\fR's set of external
-IDs (if it was present).
-.
-.IP "\fBbr\-get\-external\-id \fIport\fR [\fIkey\fR]"
-Queries the external IDs on \fIport\fR. If \fIkey\fR is specified,
-the output is the value for that \fIkey\fR or the empty string if
-\fIkey\fR is unset. If \fIkey\fR is omitted, the output is
-\fIkey\fB=\fIvalue\fR, one per line, for each key-value pair.
-.
.SS "Interface Commands"
.
These commands examine the interfaces attached to an Open vSwitch
Prints the name of the bridge that contains \fIiface\fR on standard
output.
.
-.IP "\fBiface\-set\-external\-id \fIiface key\fR [\fIvalue\fR]"
-Sets or clears an ``external ID'' value on \fIiface\fR. These value
-are intended to identify entities external to Open vSwitch with which
-\fIiface\fR is associated, e.g. the interface's identifier in a
-virtualization management platform. The Open vSwitch database schema
-specifies well-known \fIkey\fR values, but \fIkey\fR and \fIvalue\fR
-are otherwise arbitrary strings.
-.IP
-If \fIvalue\fR is specified, then \fIkey\fR is set to \fIvalue\fR for
-\fIiface\fR, overwriting any previous value. If \fIvalue\fR is
-omitted, then \fIkey\fR is removed from \fIiface\fR's set of external
-IDs (if it was present).
-.
-.IP "\fBbr\-get\-external\-id \fIiface\fR [\fIkey\fR]"
-Queries the external IDs on \fIiface\fR. If \fIkey\fR is specified,
-the output is the value for that \fIkey\fR or the empty string if
-\fIkey\fR is unset. If \fIkey\fR is omitted, the output is
-\fIkey\fB=\fIvalue\fR, one per line, for each key-value pair.
-.
.SS "OpenFlow Controller Connectivity"
.
\fBovs\-vswitchd\fR can perform all configured bridging and switching
add-bond BRIDGE PORT IFACE... add bonded port PORT in BRIDGE from IFACES\n\
del-port [BRIDGE] PORT delete PORT (which may be bonded) from BRIDGE\n\
port-to-br PORT print name of bridge that contains PORT\n\
- port-set-external-id PORT KEY VALUE set KEY on PORT to VALUE\n\
- port-set-external-id PORT KEY unset KEY on PORT\n\
- port-get-external-id PORT KEY print value of KEY on PORT\n\
- port-get-external-id PORT list key-value pairs on PORT\n\
A bond is considered to be a single port.\n\
\n\
Interface commands (a bond consists of multiple interfaces):\n\
list-ifaces BRIDGE print the names of all interfaces on BRIDGE\n\
iface-to-br IFACE print name of bridge that contains IFACE\n\
- iface-set-external-id IFACE KEY VALUE set KEY on IFACE to VALUE\n\
- iface-set-external-id IFACE KEY unset KEY on IFACE\n\
- iface-get-external-id IFACE KEY print value of KEY on IFACE\n\
- iface-get-external-id IFACE list key-value pairs on IFACE\n\
\n\
Controller commands:\n\
get-controller [BRIDGE] print the controller for BRIDGE\n\
free_info(&info);
}
-static void
-cmd_port_set_external_id(struct vsctl_context *ctx)
-{
- struct vsctl_info info;
- struct vsctl_port *port;
- char **keys, **values;
- size_t n;
-
- get_info(ctx->ovs, &info);
- port = find_port(&info, ctx->argv[1], true);
- set_external_id(port->port_cfg->key_external_ids,
- port->port_cfg->value_external_ids,
- port->port_cfg->n_external_ids,
- ctx->argv[2], ctx->argc >= 4 ? ctx->argv[3] : NULL,
- &keys, &values, &n);
- ovsrec_port_set_external_ids(port->port_cfg, keys, values, n);
- free(keys);
- free(values);
-
- free_info(&info);
-}
-
-static void
-cmd_port_get_external_id(struct vsctl_context *ctx)
-{
- struct vsctl_info info;
- struct vsctl_port *port;
-
- get_info(ctx->ovs, &info);
- port = find_port(&info, ctx->argv[1], true);
- get_external_id(port->port_cfg->key_external_ids,
- port->port_cfg->value_external_ids,
- port->port_cfg->n_external_ids,
- "", ctx->argc >= 3 ? ctx->argv[2] : NULL, &ctx->output);
- free_info(&info);
-}
-
static void
cmd_br_to_vlan(struct vsctl_context *ctx)
{
free_info(&info);
}
-static void
-cmd_iface_set_external_id(struct vsctl_context *ctx)
-{
- struct vsctl_info info;
- struct vsctl_iface *iface;
- char **keys, **values;
- size_t n;
-
- get_info(ctx->ovs, &info);
- iface = find_iface(&info, ctx->argv[1], true);
- set_external_id(iface->iface_cfg->key_external_ids,
- iface->iface_cfg->value_external_ids,
- iface->iface_cfg->n_external_ids,
- ctx->argv[2], ctx->argc >= 4 ? ctx->argv[3] : NULL,
- &keys, &values, &n);
- ovsrec_interface_set_external_ids(iface->iface_cfg, keys, values, n);
- free(keys);
- free(values);
-
- free_info(&info);
-}
-
-static void
-cmd_iface_get_external_id(struct vsctl_context *ctx)
-{
- struct vsctl_info info;
- struct vsctl_iface *iface;
-
- get_info(ctx->ovs, &info);
- iface = find_iface(&info, ctx->argv[1], true);
- get_external_id(iface->iface_cfg->key_external_ids,
- iface->iface_cfg->value_external_ids,
- iface->iface_cfg->n_external_ids,
- "", ctx->argc >= 3 ? ctx->argv[2] : NULL, &ctx->output);
- free_info(&info);
-}
-
static void
cmd_get_controller(struct vsctl_context *ctx)
{
{"add-bond", 4, INT_MAX, cmd_add_bond, "--fake-iface"},
{"del-port", 1, 2, cmd_del_port, "--if-exists"},
{"port-to-br", 1, 1, cmd_port_to_br, ""},
- {"port-set-external-id", 2, 3, cmd_port_set_external_id, ""},
- {"port-get-external-id", 1, 2, cmd_port_get_external_id, ""},
/* Interface commands. */
{"list-ifaces", 1, 1, cmd_list_ifaces, ""},
{"iface-to-br", 1, 1, cmd_iface_to_br, ""},
- {"iface-set-external-id", 2, 3, cmd_iface_set_external_id, ""},
- {"iface-get-external-id", 1, 2, cmd_iface_get_external_id, ""},
/* Controller commands. */
{"get-controller", 0, 1, cmd_get_controller, ""},
# needed by the controller. This is called by the "vif" script,
# which is run when virtual interfaces are added and removed.
-# Copyright (C) 2009 Nicira Networks, Inc.
+# Copyright (C) 2009, 2010 Nicira Networks, Inc.
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
vif_info.append(('xs-vif-uuid', vif_rec["uuid"]))
vif_info.append(('xs-vm-uuid', vm_uuid))
for key, value in vif_info:
- print("-- iface-set-external-id vif%s.%s %s %s"
+ print("-- set interface vif%s.%s external-ids:\"%s\"=\"%s\""
% (domid, devid, key, value))
# vNetManager needs to know the network UUID(s) associated with