While debugging a broken OVN environment yesterday, the problem turned out to be invalid entries in the logical port addresses column. In particular, the following command had been used:
$ ovn-nbctl lport-set-addresses lp0 MAC IP instead of: $ ovn-nbctl lport-set-addresses lp0 "MAC IP" This is really easy to mess up, so add some simple validation to the lport-set-addresses command. If the beginning of an argument is ever an IP address, it's wrong. In passing, also add a note to the ovn-nb db documentation to note that the order of "MAC IP" is required, as "IP MAC" is not valid. Signed-off-by: Russell Bryant <russ...@ovn.org> --- v1->v2: - Whitelist mac addresses instead of blacklisting IP addresses, as suggested by Ben. ovn/ovn-nb.xml | 5 +++++ ovn/utilities/ovn-nbctl.c | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/ovn/ovn-nb.xml b/ovn/ovn-nb.xml index ef34c9b..4e414ce 100644 --- a/ovn/ovn-nb.xml +++ b/ovn/ovn-nb.xml @@ -285,6 +285,11 @@ if any, uses this information to avoid issuing ARP requests for logical switch ports. </p> + + <p> + Note that the order here is important. The Ethernet address must + be listed before the IP address. + </p> </dd> <dt><code>unknown</code></dt> diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c index 8522c7e..34ad3f4 100644 --- a/ovn/utilities/ovn-nbctl.c +++ b/ovn/utilities/ovn-nbctl.c @@ -25,6 +25,7 @@ #include "fatal-signal.h" #include "json.h" #include "ovn/lib/ovn-nb-idl.h" +#include "packets.h" #include "poll-loop.h" #include "process.h" #include "smap.h" @@ -665,6 +666,21 @@ nbctl_lport_set_addresses(struct ctl_context *ctx) return; } + int i; + for (i = 2; i < ctx->argc; i++) { + struct eth_addr ea; + + if (strcmp(ctx->argv[i], "unknown") && + !ovs_scan(ctx->argv[i], ETH_ADDR_SCAN_FMT, + ETH_ADDR_SCAN_ARGS(ea))) { + VLOG_ERR("Invalid address format (%s). See ovn-nb(5). " + "Hint: An Ethernet address must be " + "listed before an IP address, together as a single " + "argument.", ctx->argv[i]); + return; + } + } + nbrec_logical_port_set_addresses(lport, (const char **) ctx->argv + 2, ctx->argc - 2); } -- 2.5.0 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev