summaryrefslogtreecommitdiff
path: root/contrib/scripts/nm-in-container.d/data-nm-env-prepare.sh
blob: c98d2766a1ec40f7744b284dcbfad199a7579638 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/bin/bash

set -e

die() {
    printf '%s\n' "$*"
    exit 1
}

cleanup() {
    local IDX="$1"

    pkill -F "/tmp/nm-dnsmasq-d_$IDX.pid" dnsmasq &>/dev/null || :
    : > "/tmp/nm-dnsmasq-d_$IDX.pid"

    ip link del "d_$IDX" &>/dev/null || :
}

setup() {
    local IDX="$1"

    cleanup "$IDX"

    ip link add "net$IDX" type veth peer "d_$IDX"
    ip link set "d_$IDX" up

    ip addr add "192.168.$((120 + $IDX)).1/23" dev "d_$IDX"

    dnsmasq \
        --conf-file=/dev/null \
        --pid-file="/tmp/nm-dnsmasq-d_$IDX.pid" \
        --no-hosts \
        --keep-in-foreground \
        --bind-interfaces \
        --except-interface=lo \
        --clear-on-reload \
        --listen-address="192.168.$((120 + $IDX)).1" \
        --dhcp-range="192.168.$((120 + $IDX)).100,192.168.$((120 + $IDX)).150" \
        --no-ping \
        &
}

IDX=1
CMD=
for (( i=1 ; i<="$#" ; )) ; do
    c="${@:$i:1}"
    i=$((i+1))
    case "$c" in
        setup|cleanup)
            CMD="$c"
            ;;
        --idx|-i)
            test $i -le "$#" || die "missing argument to --idx"
            IDX="${@:$i:1}"
            i=$((i+1))
            ;;
        *)
            die "invalid argument"
            ;;
    esac
done

test "$CMD" != "" || die "missing command (setup|cleanup)"

$CMD "$IDX"