#!/usr/bin/python3 # Copyright 2024 Helmut Grohne # SPDX-License-Identifier: GPL-3 """Construct a network namespace with a host0 interface backed by slirp4netns. """ import os import sys if __file__.split("/")[-2:-1] == ["examples"]: sys.path.insert(0, "/".join(__file__.split("/")[:-2])) import linuxnamespaces def main() -> None: mainpid = os.getpid() rfd, wfd = os.pipe() if os.fork() == 0: os.set_inheritable(rfd, True) os.execlp( "slirp4netns", "slirp4netns", "--exit-fd", "%d" % rfd, "--configure", "--disable-host-loopback", "%d" % mainpid, "host0", ) linuxnamespaces.unshare_user_idmap_nohelper( 0, 0, linuxnamespaces.CloneFlags.NEWUSER | linuxnamespaces.CloneFlags.NEWNET, ) # Leave write end of --exit-fd behind as fd 252. os.dup2(wfd, 252) os.close(wfd) os.execlp(os.environ["SHELL"], os.environ["SHELL"]) if __name__ == "__main__": main()