summary refs log tree commit diff
path: root/tools/nm-guest-data
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2024-05-05 00:07:30 +0200
committerMichael Biebl <biebl@debian.org>2024-05-05 00:07:30 +0200
commit34bb501be08aa2b313d88e67d6e0a7e0a3f9cfa6 (patch)
tree4e6220877828be4c6f261de09ec0cb2d80e32389 /tools/nm-guest-data
parentbba2e4b4de668db525cbfdfc35292e5a0b51671a (diff)
New upstream version 1.47.90 upstream/1.47.90
Diffstat (limited to 'tools/nm-guest-data')
-rw-r--r--tools/nm-guest-data/.gitignore2
-rw-r--r--tools/nm-guest-data/README.md10
-rw-r--r--tools/nm-guest-data/bin-_nm-in-container-setup.sh.in13
-rw-r--r--tools/nm-guest-data/bin-nm-deploy.sh.in14
-rw-r--r--tools/nm-guest-data/bin-nm-env-prepare.sh.in163
-rw-r--r--tools/nm-guest-data/etc-bashrc-motd.my.in4
-rw-r--r--tools/nm-guest-data/etc-bashrc.my.in45
-rw-r--r--tools/nm-guest-data/etc-motd-container.in75
-rw-r--r--tools/nm-guest-data/etc-motd-vm.in63
-rw-r--r--tools/nm-guest-data/etc-rc.local.in8
-rw-r--r--tools/nm-guest-data/home-bash_history.in31
-rw-r--r--tools/nm-guest-data/home-behaverc.in2
-rw-r--r--tools/nm-guest-data/home-gdb_history.in2
-rw-r--r--tools/nm-guest-data/home-gdbinit.in2
-rw-r--r--tools/nm-guest-data/nm-90-my.conf.in19
-rw-r--r--tools/nm-guest-data/nm-95-user.conf.in0
-rw-r--r--tools/nm-guest-data/systemd-10-host-net.link.in6
-rw-r--r--tools/nm-guest-data/systemd-20-nm.override.in5
-rw-r--r--tools/nm-guest-data/systemd-dhcp-host.service.in14
19 files changed, 478 insertions, 0 deletions
diff --git a/tools/nm-guest-data/.gitignore b/tools/nm-guest-data/.gitignore
new file mode 100644
index 00000000..f87048d7
--- /dev/null
+++ b/tools/nm-guest-data/.gitignore
@@ -0,0 +1,2 @@
+/data-*
+/containerfile
diff --git a/tools/nm-guest-data/README.md b/tools/nm-guest-data/README.md
new file mode 100644
index 00000000..2b6aac3a
--- /dev/null
+++ b/tools/nm-guest-data/README.md
@@ -0,0 +1,10 @@
+Run NetworkManager in Container for Development
+===============================================
+
+Run `nm-in-container` script for running NetworkManager in a non-root,
+privileged  podman container. Run `nm-in-vm` to do it in a vitual machine.
+This is useful for testing NetworkManager for development.
+
+Try `./nm-in-container --help` or `./nm-in-vm --help` to see options.  Inside
+the container, see the bash history for useful commands and read the hints in
+"/etc/motd".
diff --git a/tools/nm-guest-data/bin-_nm-in-container-setup.sh.in b/tools/nm-guest-data/bin-_nm-in-container-setup.sh.in
new file mode 100644
index 00000000..837daf77
--- /dev/null
+++ b/tools/nm-guest-data/bin-_nm-in-container-setup.sh.in
@@ -0,0 +1,13 @@
+#!/bin/bash -e
+
+if [ ! -d /tmp/sys2 ]; then
+    # `ip -netns t exec ...` will try to mount sysfs. But kernel rejects that in
+    # the container, unless a writable sysfs is already mounted. Due to --priviledged,
+    # we have /sys mounted rw, however, ip will first unmount /sys before trying to
+    # remount it. We thus need it mounted as rw one additional time.
+    #
+    # Let's do this setup step once, and never clean it up.
+    # https://github.com/containers/podman/issues/11887#issuecomment-938706628
+    mkdir /tmp/sys2
+    mount -t sysfs --make-private sysfs /tmp/sys2
+fi
diff --git a/tools/nm-guest-data/bin-nm-deploy.sh.in b/tools/nm-guest-data/bin-nm-deploy.sh.in
new file mode 100644
index 00000000..9b5385b1
--- /dev/null
+++ b/tools/nm-guest-data/bin-nm-deploy.sh.in
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+set -ex
+
+cd /NetworkManager
+
+if [ -f ./config.log ] ; then
+    make -j 5 install
+else
+    meson install -C build
+fi
+
+systemctl daemon-reload
+systemctl restart NetworkManager.service
diff --git a/tools/nm-guest-data/bin-nm-env-prepare.sh.in b/tools/nm-guest-data/bin-nm-env-prepare.sh.in
new file mode 100644
index 00000000..e26fb167
--- /dev/null
+++ b/tools/nm-guest-data/bin-nm-env-prepare.sh.in
@@ -0,0 +1,163 @@
+#!/bin/bash
+
+set -e
+
+die() {
+    printf '%s\n' "$*"
+    exit 1
+}
+
+do_cleanup() {
+    local IDX="$1"
+    local NAME_PREFIX="${2:-net}"
+    local PEER_PREFIX="${3:-d_}"
+    local NETNS_PREFIX="${4:-tt}"
+
+    logger --id "nm-env-prepare-$IDX" "cleanup start # $@"
+
+    pkill -F "/tmp/nm-dnsmasq-$PEER_PREFIX$IDX.pid" dnsmasq &>/dev/null || :
+    rm -rf "/tmp/nm-dnsmasq-$PEER_PREFIX$IDX.pid"
+
+    pkill -F "/tmp/nm-radvd-$PEER_PREFIX$IDX.pid" radvd &>/dev/null || :
+    rm -rf "/tmp/nm-radvd-$PEER_PREFIX$IDX.pid"
+
+    pkill -F "/tmp/nm-pppoe-$PEER_PREFIX$IDX.pid" pppoe-server &>/dev/null || :
+    rm -rf "/tmp/nm-pppoe-$PEER_PREFIX$IDX.pid"
+    rm -rf "/tmp/nm-pppoe-allip-$PEER_PREFIX$IDX"
+
+    rm -rf "/tmp/nm-radvd-$PEER_PREFIX$IDX.conf"
+
+    ip -netns "$NETNS_PREFIX$IDX" link del "$PEER_PREFIX$IDX" &>/dev/null || :
+
+    ip netns del "$NETNS_PREFIX$IDX" &>/dev/null || :
+
+    logger --id "nm-env-prepare-$IDX" "cleanup complete # $@"
+}
+
+do_setup() {
+    local IDX="$1"
+    local NAME_PREFIX="${2:-net}"
+    local PEER_PREFIX="${3:-d_}"
+    local NETNS_PREFIX="${4:-tt}"
+
+    logger --id "nm-env-prepare-$IDX" "setup start # $@"
+
+    ip netns add "$NETNS_PREFIX$IDX"
+    ip -netns "$NETNS_PREFIX$IDX" link set name lo up
+
+    ip -netns "$NETNS_PREFIX$IDX" link add "$NAME_PREFIX$IDX" type veth peer "$PEER_PREFIX$IDX"
+    ip -netns "$NETNS_PREFIX$IDX" link set name "$NAME_PREFIX$IDX" addr aa:0f:f1:ce:00:$(printf '%02x' $IDX)
+    ip -netns "$NETNS_PREFIX$IDX" link set name "$PEER_PREFIX$IDX" addr cc:0f:f1:ce:00:$(printf '%02x' $IDX)
+    ip -netns "$NETNS_PREFIX$IDX" link set name "$PEER_PREFIX$IDX" up
+
+    ip -netns "$NETNS_PREFIX$IDX" addr add "192.168.$((120 + IDX)).1/23" dev "$PEER_PREFIX$IDX"
+    ip -netns "$NETNS_PREFIX$IDX" addr add "192:168:$((120 + IDX))::1/64" dev "$PEER_PREFIX$IDX"
+
+    # PPPoE inside the rootless container is not actually working, because
+    # /dev/ppp is not accessible. Still start it, so that we at least can
+    # test how far it goes...
+    echo "192.168.$((120 + $IDX)).180-200" > "/tmp/nm-pppoe-allip-$PEER_PREFIX$IDX"
+    ip netns exec "$NETNS_PREFIX$IDX" \
+        pppoe-server \
+            -X "/tmp/nm-pppoe-$PEER_PREFIX$IDX.pid" \
+            -S isp \
+            -C isp \
+            -L "192.168.$((120 + IDX)).1" \
+            -p "/tmp/nm-pppoe-allip-$PEER_PREFIX$IDX" \
+            -I "$PEER_PREFIX$IDX" \
+            &
+
+    ip netns exec "$NETNS_PREFIX$IDX" \
+        dnsmasq \
+            --conf-file=/dev/null \
+            --pid-file="/tmp/nm-dnsmasq-$PEER_PREFIX$IDX.pid" \
+            --no-hosts \
+            --keep-in-foreground \
+            --bind-interfaces \
+            --log-debug \
+            --log-queries \
+            --log-dhcp \
+            --except-interface=lo \
+            --clear-on-reload \
+            --listen-address="192.168.$((120 + $IDX)).1" \
+            --listen-address="192:168:$((120 + IDX))::1" \
+            --dhcp-range="192.168.$((120 + $IDX)).100,192.168.$((120 + $IDX)).150,2m" \
+            --dhcp-range="192:168:$((120 + IDX))::1:1000,192:168:$((120 + IDX))::1:2000,64,2m" \
+            --dhcp-option=option:dns-server,8.8.8.8,8.8.4.4 \
+            --dhcp-option=option6:dns-server \
+            --no-ping \
+            &
+
+    cat <<EOF > "/tmp/nm-radvd-$PEER_PREFIX$IDX.conf"
+interface $PEER_PREFIX$IDX
+{
+        AdvSendAdvert on;
+        AdvManagedFlag on;
+        prefix 192:168:$((120 + IDX))::/64
+        {
+                AdvOnLink on;
+        };
+
+};
+EOF
+    ip netns exec "$NETNS_PREFIX$IDX" \
+        radvd \
+            --config "/tmp/nm-radvd-$PEER_PREFIX$IDX.conf" \
+            --pidfile "/tmp/nm-radvd-$PEER_PREFIX$IDX.pid" \
+            --logmethod syslog \
+            -d 5 \
+            &
+
+    ip -netns ""$NETNS_PREFIX$IDX"" link set name "$NAME_PREFIX$IDX" netns $$
+
+    logger --id "nm-env-prepare-$IDX" "setup complete: netns=$NETNS_PREFIX$IDX, iface=$NAME_PREFIX$IDX, peer=$PEER_PREFIX$IDX # $@"
+}
+
+do_redo() {
+    do_cleanup "$@"
+    do_setup "$@"
+}
+
+###############################################################################
+
+IDX=1
+NAME_PREFIX=net
+PEER_PREFIX=
+CMD=redo
+for (( i=1 ; i<="$#" ; )) ; do
+    c="${@:$i:1}"
+    i=$((i+1))
+    case "$c" in
+        redo|setup|cleanup)
+            CMD="$c"
+            ;;
+        --prefix|-p)
+            NAME_PREFIX="${@:$i:1}"
+            test -n "$NAME_PREFIX" || die "missing argument to --prefix"
+            i=$((i+1))
+            ;;
+        --peer-prefix)
+            PEER_PREFIX="${@:$i:1}"
+            test -n "$PEER_PREFIX" || die "missing argument to --peer-prefix"
+            i=$((i+1))
+            ;;
+        --idx|-i)
+            test $i -le "$#" || die "missing argument to --idx"
+            IDX="${@:$i:1}"
+            i=$((i+1))
+            ;;
+        *)
+            die "invalid argument"
+            ;;
+    esac
+done
+
+if [ -z "$PEER_PREFIX" ]; then
+    if [ "$NAME_PREFIX" = net ]; then
+        PEER_PREFIX=d_
+    else
+        PEER_PREFIX="d_${NAME_PREFIX}_"
+    fi
+fi
+
+do_$CMD "$IDX" "$NAME_PREFIX" "$PEER_PREFIX"
diff --git a/tools/nm-guest-data/etc-bashrc-motd.my.in b/tools/nm-guest-data/etc-bashrc-motd.my.in
new file mode 100644
index 00000000..510d30f8
--- /dev/null
+++ b/tools/nm-guest-data/etc-bashrc-motd.my.in
@@ -0,0 +1,4 @@
+if test "$SHOW_MOTD" != 0; then
+  cat /etc/motd
+  export SHOW_MOTD=0
+fi
diff --git a/tools/nm-guest-data/etc-bashrc.my.in b/tools/nm-guest-data/etc-bashrc.my.in
new file mode 100644
index 00000000..88f2f9aa
--- /dev/null
+++ b/tools/nm-guest-data/etc-bashrc.my.in
@@ -0,0 +1,45 @@
+alias m="make -j 8"
+alias n="ninja -C build"
+
+alias l='ls -l --color=auto'
+
+ulimit -c unlimited
+
+export G_DEBUG=fatal-warnings
+
+unset DEBUGINFOD_URLS
+
+export NMCI_DEBUG=1
+
+export TERM=xterm
+
+Clean() {
+    systemctl stop NetworkManager
+    rm -i -rf /run/NetworkManager
+    nm-env-prepare.sh
+}
+
+Cat-Timestamp() {
+    while IFS=$'\n' read line; do
+        printf "[%s]: %s\n" "1689938340.403232924" "$line"
+    done
+}
+
+Journald-clear() {
+    rm -rf /var/log/journal/????????????????????????????????/*
+    systemctl restart systemd-journald
+}
+
+nm_run_gdb() {
+    systemctl stop NetworkManager.service
+    gdb --args "${1:-/opt/test/sbin/NetworkManager}" --debug
+}
+
+nm_run_normal() {
+    systemctl stop NetworkManager.service
+    "${1:-/opt/test/sbin/NetworkManager}" --debug 2>&1 | tee /tmp/nm-log.txt
+}
+
+. /usr/share/git-core/contrib/completion/git-prompt.sh
+PS1="\[\033[01;36m\]\u@\h\[\033[00m\]:\t:\[\033[01;34m\]\w\$(__git_ps1 \" \[\033[01;36m\](%s)\[\033[00m\]\")\[\033[00m\]$ "
+export GIT_PS1_SHOWDIRTYSTATE=1
diff --git a/tools/nm-guest-data/etc-motd-container.in b/tools/nm-guest-data/etc-motd-container.in
new file mode 100644
index 00000000..131f815c
--- /dev/null
+++ b/tools/nm-guest-data/etc-motd-container.in
@@ -0,0 +1,75 @@
+*** nm-in-container:
+
+find NetworkManager bind mounted at {{BASEDIR_NM}}
+run `nm-env-prepare.sh setup --idx 1` to setup test interfaces
+
+Coredumps: coredumps are not namespaced, so by default they will
+be sent to coredumpctl of the outer host, which has no idea where
+to get the debugging symbols from. A possible workaround is setting
+
+  $ echo '/tmp/core.%e.%p' | sudo tee /proc/sys/kernel/core_pattern
+
+so that core dumps get written to file. Afterwards, restore with
+
+  $ echo '|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h' | sudo tee /proc/sys/kernel/core_pattern
+
+from /usr/lib/sysctl.d/50-coredump.conf.
+
+For example, configure NetworkManager with
+  $ ./configure \
+           --enable-address-sanitizer=no \
+           --enable-compile-warnings=yes \
+           --enable-concheck \
+           --enable-config-plugin-ibft=yes \
+           --enable-gtk-doc \
+           --enable-ifcfg-rh=yes \
+           --enable-ifcfg-suse \
+           --enable-ifnet \
+           --enable-ifupdown=yes \
+           --enable-introspection \
+           --enable-json-validation=yes \
+           --enable-maintainer-mode \
+           --enable-more-logging \
+           --enable-more-warnings=error \
+           --enable-ovs=yes \
+           --enable-polkit=yes \
+           --enable-teamdctl=yes \
+           --enable-undefined-sanitizer=no \
+           --enable-vala=yes \
+           --enable-wimax \
+           --localstatedir=/var \
+           --prefix=/opt/test \
+           --sysconfdir=/etc \
+           --with-config-dhcp-default=internal \
+           --with-config-dns-rc-manager-default=auto \
+           --with-consolekit=yes \
+           --with-consolekit=yes \
+           --with-crypto=nss \
+           --with-dhclient=yes \
+           --with-dhcpcanon=yes \
+           --with-dhcpcd=yes \
+           --with-iwd=yes \
+           --with-libnm-glib=yes \
+           --with-modem-manager-1 \
+           --with-netconfig=/bin/nowhere/netconfig \
+           --with-nm-cloud-setup=yes \
+           --with-nmcli=yes \
+           --with-nmtui=yes \
+           --with-ofono=yes \
+           --with-resolvconf=/bin/nowhere/resolvconf \
+           --with-session-tracking=systemd \
+           --with-suspend-resume=systemd \
+           --with-systemd-logind=yes \
+           --with-valgrind=yes \
+           --enable-tests="${NM_BUILD_TESTS:-yes}" \
+           --with-more-asserts="${NM_BUILD_MORE_ASSERTS:-1000}" \
+           "${NM_CONFIGURE_OTPS[@]}"
+Test with:
+  $ systemctl stop NetworkManager; /opt/test/sbin/NetworkManager --debug 2>&1 | tee -a /tmp/nm-log.txt
+
+Or better, configure with `contrib/fedora/rpm/configure-for-system.sh`,
+subsequent `make && make install` will overwrite your system's NetworkManager,
+and you can test it with `systemctl daemon-reload ; systemctl restart NetworkManager`.
+
+Run NM-ci tests after creating eth1 with
+`nm-env-prepare.sh --prefix eth -i 1 && sleep 1 && nmcli device connect eth1`.
diff --git a/tools/nm-guest-data/etc-motd-vm.in b/tools/nm-guest-data/etc-motd-vm.in
new file mode 100644
index 00000000..10ae1f9f
--- /dev/null
+++ b/tools/nm-guest-data/etc-motd-vm.in
@@ -0,0 +1,63 @@
+*** nm-in-vm:
+
+find NetworkManager bind mounted at {{BASEDIR_NM}}
+run `nm-env-prepare.sh setup --idx 1` to setup test interfaces
+
+For example, configure NetworkManager with
+  $ ./configure \
+           --enable-address-sanitizer=no \
+           --enable-compile-warnings=yes \
+           --enable-concheck \
+           --enable-config-plugin-ibft=yes \
+           --enable-gtk-doc \
+           --enable-ifcfg-rh=yes \
+           --enable-ifcfg-suse \
+           --enable-ifnet \
+           --enable-ifupdown=yes \
+           --enable-introspection \
+           --enable-json-validation=yes \
+           --enable-maintainer-mode \
+           --enable-more-logging \
+           --enable-more-warnings=error \
+           --enable-ovs=yes \
+           --enable-polkit=yes \
+           --enable-teamdctl=yes \
+           --enable-undefined-sanitizer=no \
+           --enable-vala=yes \
+           --enable-wimax \
+           --localstatedir=/var \
+           --prefix=/opt/test \
+           --sysconfdir=/etc \
+           --with-config-dhcp-default=internal \
+           --with-config-dns-rc-manager-default=auto \
+           --with-consolekit=yes \
+           --with-consolekit=yes \
+           --with-crypto=nss \
+           --with-dhclient=yes \
+           --with-dhcpcanon=yes \
+           --with-dhcpcd=yes \
+           --with-iwd=yes \
+           --with-libnm-glib=yes \
+           --with-modem-manager-1 \
+           --with-netconfig=/bin/nowhere/netconfig \
+           --with-nm-cloud-setup=yes \
+           --with-nmcli=yes \
+           --with-nmtui=yes \
+           --with-ofono=yes \
+           --with-resolvconf=/bin/nowhere/resolvconf \
+           --with-session-tracking=systemd \
+           --with-suspend-resume=systemd \
+           --with-systemd-logind=yes \
+           --with-valgrind=yes \
+           --enable-tests="${NM_BUILD_TESTS:-yes}" \
+           --with-more-asserts="${NM_BUILD_MORE_ASSERTS:-1000}" \
+           "${NM_CONFIGURE_OTPS[@]}"
+Test with:
+  $ systemctl stop NetworkManager; /opt/test/sbin/NetworkManager --debug 2>&1 | tee -a /tmp/nm-log.txt
+
+Or better, if using Fedora, configure with `contrib/fedora/rpm/configure-for-system.sh`,
+subsequent `make && make install` will overwrite your system's NetworkManager,
+and you can test it with `systemctl daemon-reload ; systemctl restart NetworkManager`.
+
+Run NM-ci tests after creating eth1 with
+`nm-env-prepare.sh --prefix eth -i 1 && sleep 1 && nmcli device connect eth1`.
diff --git a/tools/nm-guest-data/etc-rc.local.in b/tools/nm-guest-data/etc-rc.local.in
new file mode 100644
index 00000000..d59a8d76
--- /dev/null
+++ b/tools/nm-guest-data/etc-rc.local.in
@@ -0,0 +1,8 @@
+#!/bin/bash -e
+
+/usr/bin/_nm-in-container-setup.sh
+
+cat <<EOF > /etc/resolv.conf
+# Generated by /etc/rc.d/rc.local
+nameserver 8.8.8.8
+EOF
diff --git a/tools/nm-guest-data/home-bash_history.in b/tools/nm-guest-data/home-bash_history.in
new file mode 100644
index 00000000..d97c561e
--- /dev/null
+++ b/tools/nm-guest-data/home-bash_history.in
@@ -0,0 +1,31 @@
+NM-log
+NM-log /tmp/nm-log.txt
+behave -f html --stop -t ipv4_method_static_with_IP ./features/scenarios/ipv4.feature
+behave -f html --stop ./features/scenarios/vrf.feature
+cd {{BASEDIR_NM}}
+cd /NetworkManager-ci
+cd /NetworkManager
+for i in {1..9}; do nm-env-prepare.sh --prefix eth -i $i; done
+Journald-clear
+journalctl | NM-log
+journalctl --since '3 min ago' | NM-log
+m
+make
+make install
+n
+nm-deploy.sh
+nm-env-prepare.sh
+nm-env-prepare.sh --prefix eth -i 1
+nm-env-prepare.sh --prefix eth -i 1 && sleep 1 && nmcli device connect eth1
+nm_run_gdb
+nm_run_normal
+gdb /usr/sbin/NetworkManager /tmp/core.NetworkManager.
+nmcli connection add type pppoe con-name ppp-net1 ifname ppp-net1 pppoe.parent net1 service isp username test password networkmanager autoconnect no
+nmcli device connect eth1
+systemctl stop NetworkManager; /opt/test/sbin/NetworkManager --debug 2>&1 | tee -a ./nm-log.txt
+systemctl stop NetworkManager; gdb -ex run --args /opt/test/sbin/NetworkManager --debug
+systemctl stop NetworkManager
+systemctl daemon-reload ; systemctl restart NetworkManager
+(cd /NetworkManager && n && n install && systemctl daemon-reload && systemctl restart NetworkManager.service)
+(cd /NetworkManager && m && m install && systemctl daemon-reload && systemctl restart NetworkManager.service)
+systemctl status NetworkManager
diff --git a/tools/nm-guest-data/home-behaverc.in b/tools/nm-guest-data/home-behaverc.in
new file mode 100644
index 00000000..ebb49fa7
--- /dev/null
+++ b/tools/nm-guest-data/home-behaverc.in
@@ -0,0 +1,2 @@
+[behave.formatters]
+html = behave_html_formatter:HTMLFormatter
diff --git a/tools/nm-guest-data/home-gdb_history.in b/tools/nm-guest-data/home-gdb_history.in
new file mode 100644
index 00000000..39fb9abf
--- /dev/null
+++ b/tools/nm-guest-data/home-gdb_history.in
@@ -0,0 +1,2 @@
+run
+run --debug 2>&1 | tee /tmp/nm-log.txt
diff --git a/tools/nm-guest-data/home-gdbinit.in b/tools/nm-guest-data/home-gdbinit.in
new file mode 100644
index 00000000..f55a669a
--- /dev/null
+++ b/tools/nm-guest-data/home-gdbinit.in
@@ -0,0 +1,2 @@
+set history save
+set history filename ~/.gdb_history
diff --git a/tools/nm-guest-data/nm-90-my.conf.in b/tools/nm-guest-data/nm-90-my.conf.in
new file mode 100644
index 00000000..72aeb110
--- /dev/null
+++ b/tools/nm-guest-data/nm-90-my.conf.in
@@ -0,0 +1,19 @@
+[main]
+no-auto-default=*
+debug=RLIMIT_CORE,fatal-warnings
+
+[logging]
+level=TRACE
+domains=ALL,VPN_PLUGIN:TRACE
+
+[device-managed-0]
+match-device=interface-name:d_*,interface-name:tap*
+managed=0
+
+[device-managed-1]
+match-device=interface-name:net*,interface-name:eth*
+managed=1
+
+[device-host-net]
+match-device=interface-name:host_net
+managed=0
diff --git a/tools/nm-guest-data/nm-95-user.conf.in b/tools/nm-guest-data/nm-95-user.conf.in
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tools/nm-guest-data/nm-95-user.conf.in
diff --git a/tools/nm-guest-data/systemd-10-host-net.link.in b/tools/nm-guest-data/systemd-10-host-net.link.in
new file mode 100644
index 00000000..6425d926
--- /dev/null
+++ b/tools/nm-guest-data/systemd-10-host-net.link.in
@@ -0,0 +1,6 @@
+[Match]
+Driver=virtio_net
+
+[Link]
+NamePolicy=
+Name=host_net
diff --git a/tools/nm-guest-data/systemd-20-nm.override.in b/tools/nm-guest-data/systemd-20-nm.override.in
new file mode 100644
index 00000000..d8f251e4
--- /dev/null
+++ b/tools/nm-guest-data/systemd-20-nm.override.in
@@ -0,0 +1,5 @@
+# Overrides for NetworkManager.service with nm-in-container
+# Placed in /etc/systemd/system/NetworkManager.service.d/
+[Service]
+Environment=G_DEBUG=fatal-warnings
+Environment=NM_OBFUSCATE_PTR=0
diff --git a/tools/nm-guest-data/systemd-dhcp-host.service.in b/tools/nm-guest-data/systemd-dhcp-host.service.in
new file mode 100644
index 00000000..844e766c
--- /dev/null
+++ b/tools/nm-guest-data/systemd-dhcp-host.service.in
@@ -0,0 +1,14 @@
+[Unit]
+Description=dhclient service to get connectivity with the host
+After=network.target
+
+[Service]
+Type=simple
+Restart=on-failure
+User=root
+RestartSec=5
+ExecStart=dhclient -d host_net
+ExecStop=dhclient -r host_net
+
+[Install]
+WantedBy=multi-user.target