50-net-eth 1.67 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#!/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
if type -t NetworkManager >&/dev/null ||
   type -t connmand >&/dev/null; then
	NMCTL=yes
else
	NMCTL=no
fi

16 17
ETCNET_IFDIR="/etc/net/ifaces"
SYSTEMD_IFDIR="/etc/systemd/network"
18 19

write_iface() {
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
	case "$proto" in
	dhcp)
		;;
	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"
37
	mkdir -p "$dir"
38
	append=
39 40
	case "$proto" in
	dhcp)
41
		append="DHCP_TIMEOUT=7"
42 43 44 45 46 47 48 49 50 51 52
		;;
	static)
		echo "$ipv4addr" > "$dir/ipv4address"
		[ -z "$ipv4gw" ] ||
			echo "default via $ipv4gw" > "$dir/ipv4route"
		;;
	esac
	{
		echo "TYPE=eth"
		echo "BOOTPROTO=$proto"
		echo "NM_CONTROLLED=$NMCTL"
53
		echo "DISABLED=$NMCTL"
Michael Shigorin's avatar
Michael Shigorin committed
54
		echo "#USE_IFPLUGD=yes"
55
		[ -z "$append" ] || echo "$append"
56 57 58
	} > "$dir/options"
}

59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
write_systemd_iface() {
	case "$proto" in
	dhcp)
		echo "[Match]"
		echo "Name=$iface"
		echo
		echo "[Network]"
		echo "DHCP=yes"
		;;
	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"
}

81 82 83 84 85 86 87
[ -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