code: func GetSandboxForExternalKey(basePath string, key string) (Sandbox, error) {
  	if err := createNamespaceFile(key); err != nil {
  		return nil, err
  	}
  
  	if err := mountNetworkNamespace(basePath, key); err != nil {
  		return nil, err
  	}
  	n := &networkNamespace{path: key, nextIfIndex: make(map[string]int)}
  
  	sboxNs, err := netns.GetFromPath(n.path)
  	if err != nil {
  		return nil, fmt.Errorf("failed get network namespace %q: %v", n.path, err)
  	}
  	defer sboxNs.Close()
  
  	n.nlHandle, err = netlink.NewHandleAt(sboxNs, syscall.NETLINK_ROUTE)
  	if err != nil {
  		return nil, fmt.Errorf("failed to create a netlink handle: %v", err)
  	}
  
  	err = n.nlHandle.SetSocketTimeout(ns.NetlinkSocketsTimeout)
  	if err != nil {
  		logrus.Warnf("Failed to set the timeout on the sandbox netlink handle sockets: %v", err)
  	}
  
  	// As starting point, disable IPv6 on all interfaces
  	err = setIPv6(n.path, "all", false)
  	if err != nil {
  		logrus.Warnf("Failed to disable IPv6 on all interfaces on network namespace %q: %v", n.path, err)
  	}
  
  	if err = n.loopbackUp(); err != nil {
  		n.nlHandle.Delete()
  		return nil, err
  	}
  
  	return n, nil
  }
docs: // GetSandboxForExternalKey returns sandbox object for the supplied path