50-net-eth 2.09 KB
Newer Older
1 2 3 4 5 6 7 8
#!/bin/sh
# parse interface configuration tuples:
#   iface:proto[:ipv4addr/netmask[:ipv4gw]]
# and write it down as intended

fatal() { echo "error: $*" >&2; exit 1; }

# simple etcnet configurations are also picked up by NM
9 10
if [ -n "$GLOBAL_NMCTL" ]; then
	NMCTL="$GLOBAL_NMCTL"
11
else
12 13 14 15 16 17
	if type -t NetworkManager >&/dev/null ||
	   type -t connmand >&/dev/null; then
		NMCTL=yes
	else
		NMCTL=no
	fi
18 19
fi

20 21
ETCNET_IFDIR="/etc/net/ifaces"
SYSTEMD_IFDIR="/etc/systemd/network"
22 23

write_iface() {
24
	case "$proto" in
25
	dhcp*)
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
		;;
	static)
		[ -n "$ipv4addr" ] || fatal "ipv4addr missing"
		;;
	*)
		fatal "unknown proto value: $proto"
		;;
	esac
	[ -d "$ETCNET_IFDIR" ] && write_etcnet_iface ||:
	[ -d "$SYSTEMD_IFDIR" ] && write_systemd_iface ||:
}

# these use global variables
write_etcnet_iface() {
	dir="$ETCNET_IFDIR/$iface"
41
	mkdir -p "$dir"
42
	append=
43
	case "$proto" in
44
	dhcp*)
45
		append="DHCP_TIMEOUT=$GLOBAL_NET_ETH_TIMEOUT"
46 47 48 49 50 51 52 53 54 55 56
		;;
	static)
		echo "$ipv4addr" > "$dir/ipv4address"
		[ -z "$ipv4gw" ] ||
			echo "default via $ipv4gw" > "$dir/ipv4route"
		;;
	esac
	{
		echo "TYPE=eth"
		echo "BOOTPROTO=$proto"
		echo "NM_CONTROLLED=$NMCTL"
57
		echo "DISABLED=$NMCTL"
Michael Shigorin's avatar
Michael Shigorin committed
58
		echo "#USE_IFPLUGD=yes"
59
		[ -z "$append" ] || echo "$append"
60 61 62
	} > "$dir/options"
}

63 64
write_systemd_iface() {
	case "$proto" in
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
	dhcp4)
		echo "[Match]"
		echo "Name=$iface"
		echo
		echo "[Network]"
		echo "DHCP=ipv4"
		echo "IPv6AcceptRA=no"
		echo "LinkLocalAddressing=ipv4"
		echo
		echo "[DHCP]"
		echo "UseMTU=yes"
		echo "UseDomains=yes"
		echo "UseNTP=yes"
		echo
		;;
80 81 82 83 84 85
	dhcp)
		echo "[Match]"
		echo "Name=$iface"
		echo
		echo "[Network]"
		echo "DHCP=yes"
86 87 88 89 90 91
		echo
		echo "[DHCP]"
		echo "UseMTU=yes"
		echo "UseDomains=yes"
		echo "UseNTP=yes"
		echo
92 93 94 95 96 97 98 99 100 101 102 103 104 105
		;;
	static)
		echo "[Match]"
		echo "Name=$iface"
		echo
		echo "[Network]"
		echo "Address=$ipv4addr"
		[ -z "$ipv4gw" ] ||
			echo "Gateway=$ipv4gw"
		echo "LinkLocalAddressing=no"
		;;
	esac > "$SYSTEMD_IFDIR/$iface.network"
}

106 107 108 109 110 111 112
[ -z "$GLOBAL_NET_ETH" ] ||
	echo "$GLOBAL_NET_ETH" \
	| tr ' ' '\n' \
	| while IFS=':' read iface proto ipv4addr ipv4gw; do
		[ -n "$iface" -a -n "$proto" ] || continue
		write_iface
	done