From 0093bb8ced5784468daf8e66783e6be3782e8fea Mon Sep 17 00:00:00 2001 From: Daniel Lezcano Date: Tue, 18 May 2010 19:13:26 +0200 Subject: [PATCH] added locally modified files for broadcast support Signed-off-by: Daniel Lezcano --- src/lxc/conf.c | 9 +++++---- src/lxc/conf.h | 2 +- src/lxc/confile.c | 17 ++++++++++++----- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 2c9bc4e1d..a0c7a7c4a 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -943,8 +943,8 @@ static int setup_ipv4_addr(struct lxc_list *ip, int ifindex) inetdev = iterator->elem; - err = lxc_ip_addr_add(AF_INET, ifindex, - &inetdev->addr, inetdev->prefix); + err = lxc_ipv4_addr_add(ifindex, &inetdev->addr, + &inetdev->bcast, inetdev->prefix); if (err) { ERROR("failed to setup_ipv4_addr ifindex %d : %s", ifindex, strerror(-err)); @@ -965,8 +965,9 @@ static int setup_ipv6_addr(struct lxc_list *ip, int ifindex) inet6dev = iterator->elem; - err = lxc_ip_addr_add(AF_INET6, ifindex, - &inet6dev->addr, inet6dev->prefix); + err = lxc_ipv6_addr_add(ifindex, &inet6dev->addr, + &inet6dev->mcast, &inet6dev->acast, + inet6dev->prefix); if (err) { ERROR("failed to setup_ipv6_addr ifindex %d : %s", ifindex, strerror(-err)); diff --git a/src/lxc/conf.h b/src/lxc/conf.h index 845126607..32135b656 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h @@ -62,7 +62,7 @@ struct lxc_route { */ struct lxc_inet6dev { struct in6_addr addr; - struct in6_addr bcast; + struct in6_addr mcast; struct in6_addr acast; int prefix; }; diff --git a/src/lxc/confile.c b/src/lxc/confile.c index 8c1b3ddd1..993f9704f 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -405,16 +405,23 @@ static int config_network_ipv4(const char *key, char *value, return -1; } - if (bcast) - if (!inet_pton(AF_INET, bcast, &inetdev->bcast)) { - SYSERROR("invalid ipv4 address: %s", value); - return -1; - } + if (bcast && !inet_pton(AF_INET, bcast, &inetdev->bcast)) { + SYSERROR("invalid ipv4 broadcast address: %s", value); + return -1; + } /* no prefix specified, determine it from the network class */ inetdev->prefix = prefix ? atoi(prefix) : config_ip_prefix(&inetdev->addr); + /* if no broadcast address, let compute one from the + * prefix and address + */ + if (!bcast) { + inetdev->bcast.s_addr = + htonl(INADDR_BROADCAST << (32 - inetdev->prefix)); + inetdev->bcast.s_addr &= inetdev->addr.s_addr; + } lxc_list_add(&netdev->ipv4, list);