Fix setting the broadcast address.
authorDaniel Hokka Zakrisson <daniel@hozac.com>
Fri, 10 Aug 2007 15:28:42 +0000 (15:28 +0000)
committerDaniel Hokka Zakrisson <daniel@hozac.com>
Fri, 10 Aug 2007 15:28:42 +0000 (15:28 +0000)
git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2584 94cd875c-1c1d-0410-91d2-eb244daf1a30

lib/syscall_netadd-net.hc
src/naddress.c

index 6238f41..e7e7105 100644 (file)
@@ -26,10 +26,17 @@ vc_net_add_net(nid_t nid, struct vc_net_addr const *info)
   struct vcmd_net_addr_v0              k_info;
   size_t                               i;
 
-  k_info.type             = info->vna_type & (VC_NXA_TYPE_IPV4|VC_NXA_TYPE_IPV6);
+  k_info.type             = info->vna_type & (VC_NXA_TYPE_IPV4|VC_NXA_TYPE_IPV6|VC_NXA_MOD_BCAST);
   k_info.count            = 1;
-  switch (info->vna_type & ~VC_NXA_TYPE_ADDR) {
+
+  if ((k_info.type | VC_NXA_TYPE_ADDR) != info->vna_type) {
+    errno = EINVAL;
+    return -1;
+  }
+
+  switch (k_info.type) {
     case VC_NXA_TYPE_IPV4:
+    case VC_NXA_TYPE_IPV4 | VC_NXA_MOD_BCAST:
       k_info.ip[0].s_addr   = info->vna_v4_ip.s_addr;
       k_info.mask[0].s_addr = info->vna_v4_mask.s_addr;
       break;
@@ -38,9 +45,6 @@ vc_net_add_net(nid_t nid, struct vc_net_addr const *info)
        k_info.ip[i].s_addr = info->vna_v6_ip.s6_addr32[i];
       k_info.mask[0].s_addr = info->vna_prefix;
       break;
-    default:
-      errno = EINVAL;
-      return -1;
   }
 
   return vserver(VCMD_net_add_v0, NID_USER2KERNEL(nid), &k_info);
index e890396..f413e49 100644 (file)
@@ -347,7 +347,7 @@ readBcast(char const *str, struct vc_ips **ips)
     }
   }
   (*ips)->a.vna_v4_ip.s_addr = bcast;
-  (*ips)->a.vna_type = VC_NXA_TYPE_IPV4 | VC_NXA_MOD_BCAST;
+  (*ips)->a.vna_type = VC_NXA_TYPE_IPV4 | VC_NXA_MOD_BCAST | VC_NXA_TYPE_ADDR;
   (*ips)->next = calloc(1, sizeof(struct vc_ips));
   *ips = (*ips)->next;
 }