if ((mask & space_mask.mask) != mask)
authorSapan Bhatia <sapanb@cs.princeton.edu>
Tue, 14 Oct 2008 17:04:13 +0000 (17:04 +0000)
committerSapan Bhatia <sapanb@cs.princeton.edu>
Tue, 14 Oct 2008 17:04:13 +0000 (17:04 +0000)
      return -EINVAL;
Looks like vc_set_space wants vc_space_mask to be present in the flags.

--
M    src/planetlab.c

src/planetlab.c

index b236b9d..447c858 100644 (file)
@@ -66,7 +66,6 @@ create_context(xid_t ctx, uint64_t bcaps, uint32_t unshare_flags)
   struct vc_ctx_caps   vc_caps;
   struct vc_net_flags  vc_nf;
   struct vc_net_caps   vc_ncaps;
-  uint32_t unshare_mask;
 
   /* Create network context */
   if (vc_net_create(ctx) == VC_NOCTX) {
@@ -98,9 +97,10 @@ process:
   if (vc_ctx_create(ctx, 0) == VC_NOCTX)
     return -1;
 
-    if (unshare_mask != 0) {
-      unshare(unshare_mask);
-      vc_set_namespace(ctx, unshare_mask);
+    if (unshare_flags != 0) {
+      unshare(unshare_flags);
+      unshare_flags |= vc_space_mask();
+      vc_set_namespace(ctx, unshare_flags);
   }
 
   /* Set capabilities - these don't take effect until SETUP flag is unset */
@@ -152,15 +152,15 @@ pl_chcontext(xid_t ctx, uint64_t bcaps, const struct sliver_resources *slr)
 
       if (vc_get_cflags(ctx, &vc_flags))
        {
-        uint32_t unshare_mask;
+        uint32_t unshare_flags;
          if (errno != ESRCH)
            return -1;
 
        /* Unshare the net namespace if the slice if requested in the local slice configuration */
-        unshare_mask = get_space_flag(ctx);
+        unshare_flags = get_space_flag(ctx);
 
          /* context doesn't exist - create it */
-         if (create_context(ctx, bcaps, unshare_mask))
+         if (create_context(ctx, bcaps, unshare_flags))
            {
              if (errno == EEXIST)
                /* another process beat us in a race */
@@ -192,12 +192,12 @@ pl_chcontext(xid_t ctx, uint64_t bcaps, const struct sliver_resources *slr)
     migrate:
       if (net_migrated || !vc_net_migrate(ctx))
        {
-        uint32_t unshare_mask;
+        uint32_t unshare_flags;
       /* Unshare the net namespace if the slice if requested in the local slice configuration */
-      unshare_mask = get_space_flag(ctx);
-      if (unshare_mask != 0) {
-          vc_enter_namespace(ctx, unshare_mask);
-          unshare(unshare_mask);
+      unshare_flags = get_space_flag(ctx);
+      if (unshare_flags != 0) {
+          unshare|=vc_space_flags();
+          vc_enter_namespace(ctx, unshare_flags);
       }
 
          if (!vc_tag_migrate(ctx) && !vc_ctx_migrate(ctx, 0))