--- Linux-Clone/Clone.pm 2022/07/25 10:59:29 1.5 +++ Linux-Clone/Clone.pm 2022/09/03 23:47:02 1.6 @@ -8,8 +8,8 @@ =head1 DESCRIPTION -This module exposes the linux clone(2), unshare(2) and related syscalls to -Perl. +This module exposes the linux clone(2), unshare(2) and some related +syscalls to Perl. =over 4 @@ -34,11 +34,12 @@ Linux::Clone::NEWCGROUP Example: unshare the network namespace and prove that by calling ifconfig, -showing only an unconfigured lo interface. +showing only the unconfigured lo interface. Linux::Clone::unshare Linux::Clone::NEWNET and "unshare: $!"; - system "ifconfig -a"; + Linux::Clone::configure_loopback; + system "ifconfig"; Example: unshare the network namespace, initialise the loopback interface, create a veth interface pair, put one interface into the parent processes @@ -51,13 +52,11 @@ Linux::Clone::unshare Linux::Clone::NEWNET and "unshare: $!"; + Linux::Clone::configure_loopback; + my $ppid = getppid; system " - # configure loopback interface - ip link set lo up - ip route add 127.0.0.0/8 dev lo - # create veth pair ip link add name veth_master type veth peer name veth_slave @@ -90,7 +89,7 @@ Linux::Clone::unshare Linux::Clone::NEWNS and die "unshare: $!"; - # now bind-mount /lib over /etc and ls -l /etc - scary + # now bind-mount /lib over /etc and ls -l /etc - looks scary system "mount -n --bind /lib /etc"; system "ls -l /etc"; @@ -125,9 +124,11 @@ Linux::Clone::PARENT_SETTID (not yet implemented) Linux::Clone::CHILD_SETTID (not yet implemented) Linux::Clone::CHILD_CLEARTID (not yet implemented) + Linux::Clone::PIDFD (not yet implemented) Linux::Clone::DETACHED Linux::Clone::UNTRACED Linux::Clone::IO + Linux::Clone::CSIGNAL exit signal mask Note that for practical reasons you basically must not use C or C, as perl is unlikely to cope @@ -164,6 +165,13 @@ C, C, C and C. +=item Linux::Clone::configure_loopback + +Configures a working loopback interface (basically, does the equivalent of +"ifconfig lo up" which automatically adds ipv4/ipv6 addresses and routes), +which can be useful to get a network namespace going. + +Dies on error and returns nothing. =back @@ -174,12 +182,17 @@ # use common::sense; BEGIN { - our $VERSION = '1.2'; + our $VERSION = '1.3'; require XSLoader; XSLoader::load (__PACKAGE__, $VERSION); } +sub configure_loopback() { + siocsifflags "lo" + and die "Linux::Clone::configure_looopback: unable to bring up loopback interface: $!\n"; +} + 1; =head1 AUTHOR