lookup_ip will emit an error when used with an IPv6 address, like below.
2015-10-20T18:48:22.357Z|00036|socket_util|ERR|"2001:cafe::92" is not a valid IP address
Verify if address looks like IPv6 before giving it to either lookup_ip or
lookup_ipv6.
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
unixctl_command_reply(conn, "OK");
}
unixctl_command_reply(conn, "OK");
}
+static int
+lookup_any(const char *host_name, struct in6_addr *address)
+{
+ if (addr_is_ipv6(host_name)) {
+ return lookup_ipv6(host_name, address);
+ } else {
+ int r;
+ struct in_addr ip;
+ r = lookup_ip(host_name, &ip);
+ if (r == 0) {
+ in6_addr_set_mapped_ipv4(address, ip.s_addr);
+ }
+ return r;
+ }
+ return ENOENT;
+}
+
static void
tnl_arp_cache_add(struct unixctl_conn *conn, int argc OVS_UNUSED,
const char *argv[], void *aux OVS_UNUSED)
{
const char *br_name = argv[1];
struct eth_addr mac;
static void
tnl_arp_cache_add(struct unixctl_conn *conn, int argc OVS_UNUSED,
const char *argv[], void *aux OVS_UNUSED)
{
const char *br_name = argv[1];
struct eth_addr mac;
- if (lookup_ip(argv[2], &ip) == 0) {
- in6_addr_set_mapped_ipv4(&ip6, ip.s_addr);
- } else if (lookup_ipv6(argv[2], &ip6) != 0) {
+ if (lookup_any(argv[2], &ip6) != 0) {
unixctl_command_reply_error(conn, "bad IP address");
return;
}
unixctl_command_reply_error(conn, "bad IP address");
return;
}