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));
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));
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);