#define RETRY_LIMIT 10
int
-pl_chcontext(xid_t ctx, uint64_t bcaps, const struct sliver_resources *slr)
+pl_chcontext(xid_t ctx, uint64_t bcaps, const struct sliver_resources *slr,
+ int unshare_netns)
{
int retry_count = 0;
int net_migrated = 0;
if (vc_get_cflags(ctx, &vc_flags))
{
- uint32_t unshare_flags;
+ uint32_t unshare_flags;
if (errno != ESRCH)
return -1;
- /* Unshare the net namespace if the slice if requested in the local slice configuration */
- unshare_flags = get_space_flag(ctx);
+ /* Unshare the net namespace if requested in the slice configuration */
+ unshare_flags = unshare_netns ? CLONE_NEWNET : 0;
/* context doesn't exist - create it */
if (create_context(ctx, bcaps, unshare_flags))
migrate:
if (net_migrated || !vc_net_migrate(ctx))
{
- uint32_t unshare_flags;
- /* Unshare the net namespace if the slice if requested in the local slice configuration */
- unshare_flags = get_space_flag(ctx);
- if (unshare_flags != 0) {
- unshare_flags |=vc_get_space_mask();
- vc_enter_namespace(ctx, unshare_flags);
- }
+ uint32_t unshare_flags;
+
+ /* Unshare the net namespace if requested in the slice configuration */
+ unshare_flags = unshare_netns ? CLONE_NEWNET : 0;
+
+ if (unshare_flags != 0) {
+ unshare_flags |=vc_get_space_mask();
+ vc_enter_namespace(ctx, unshare_flags);
+ }
if (!vc_tag_migrate(ctx) && !vc_ctx_migrate(ctx, 0))
break; /* done */