From 3b1cb457f4e28baac062f0fe6a87ff06ed4c02e0 Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Tue, 14 Oct 2008 17:04:13 +0000 Subject: [PATCH] if ((mask & space_mask.mask) != mask) return -EINVAL; Looks like vc_set_space wants vc_space_mask to be present in the flags. -- M src/planetlab.c --- src/planetlab.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/planetlab.c b/src/planetlab.c index b236b9d..447c858 100644 --- a/src/planetlab.c +++ b/src/planetlab.c @@ -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)) -- 2.43.0