Skip to content

Commit

Permalink
tnl-arp-cache: fix log error when using tnl/arp/set with IPv6
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Ben Pfaff <[email protected]>
  • Loading branch information
Thadeu Lima de Souza Cascardo authored and blp committed Nov 10, 2015
1 parent 9835576 commit 5f639b6
Showing 1 changed file with 18 additions and 4 deletions.
22 changes: 18 additions & 4 deletions lib/tnl-arp-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,18 +236,32 @@ tnl_arp_cache_flush(struct unixctl_conn *conn, int argc OVS_UNUSED,
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;
struct in_addr ip;
struct in6_addr ip6;

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;
}
Expand Down

0 comments on commit 5f639b6

Please sign in to comment.