Skip to content

Commit

Permalink
route-table-bsd: Provide gateway info
Browse files Browse the repository at this point in the history
For userspace tunneling.

Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Acked-by: Ben Pfaff <blp@nicira.com>
  • Loading branch information
yamt committed Dec 10, 2014
1 parent 88ffdc9 commit a7701e2
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions lib/route-table-bsd.c
Expand Up @@ -47,6 +47,7 @@ route_table_fallback_lookup(ovs_be32 ip, char name[], ovs_be32 *gw)
static int seq;
int i, len, namelen, rtsock;
const pid_t pid = getpid();
bool got_ifp = false;

rtsock = socket(PF_ROUTE, SOCK_RAW, 0);
if (rtsock < 0)
Expand Down Expand Up @@ -81,6 +82,7 @@ route_table_fallback_lookup(ovs_be32 ip, char name[], ovs_be32 *gw)
return false;
}

*gw = 0;
sa = (struct sockaddr *)(rtm + 1);
for (i = 1; i; i <<= 1) {
if (rtm->rtm_addrs & i) {
Expand All @@ -92,8 +94,12 @@ route_table_fallback_lookup(ovs_be32 ip, char name[], ovs_be32 *gw)
namelen = IFNAMSIZ - 1;
memcpy(name, ifp->sdl_data, namelen);
name[namelen] = '\0';
*gw = 0;
return true;
got_ifp = true;
} else if (i == RTA_GATEWAY && sa->sa_family == AF_INET) {
const struct sockaddr_in *sin_dst =
ALIGNED_CAST(struct sockaddr_in *, sa);

*gw = sin_dst->sin_addr.s_addr;
}
#if defined(__FreeBSD__)
sa = (struct sockaddr *)((char *)sa + SA_SIZE(sa));
Expand All @@ -104,7 +110,7 @@ route_table_fallback_lookup(ovs_be32 ip, char name[], ovs_be32 *gw)
#endif
}
}
return false;
return got_ifp;
}

uint64_t
Expand Down

0 comments on commit a7701e2

Please sign in to comment.