blob: eb8f7a237bce85fd18f1ee30c2f30f37245cbdf4 [file] [log] [blame]
David K. Bainbridge317e7d72016-05-11 08:31:44 -07001#!/bin/bash
2
3IFACE_MGMT=$1
4NET_MGMT=$2
5NET_BRIDGE=$3
6MGMTBR=$4
7
8ip2int()
9{
10 local a b c d
11 { IFS=. read a b c d; } <<< $1
12 echo $(((((((a << 8) | b) << 8) | c) << 8) | d))
13}
14
15int2ip()
16{
17 local ui32=$1; shift
18 local ip n
19 for n in 1 2 3 4; do
20 ip=$((ui32 & 0xff))${ip:+.}$ip
21 ui32=$((ui32 >> 8))
22 done
23 echo $ip
24}
25
26netmask()
27{
28 local mask=$((0xffffffff << (32 - $1))); shift
29 int2ip $mask
30}
31
32
33broadcast()
34{
35 local addr=$(ip2int $1); shift
36 local mask=$((0xffffffff << (32 -$1))); shift
37 int2ip $((addr | ~mask))
38}
39
40network()
41{
42 local addr=$(ip2int $1); shift
43 local mask=$((0xffffffff << (32 -$1))); shift
44 int2ip $((addr & mask))
45}
46
47first()
48{
49 local addr=$(ip2int $1)
50 addr=`expr $addr + 1`
51 int2ip $addr
52}
53
54MBITS=`echo "$NET_MGMT" | cut -d/ -f2`
55MNETW=`echo "$NET_MGMT" | cut -d/ -f1`
56MMASK=`netmask $MBITS`
57MHOST=`first $MNETW`
58
59BBITS=`echo "$NET_BRIDGE" | cut -d/ -f2`
60BNETW=`echo "$NET_BRIDGE" | cut -d/ -f1`
61BMASK=`netmask $BBITS`
62BHOST=`first $BNETW`
63
64OUT=$(mktemp -u)
65cat /etc/network/interfaces | awk '/## CORD - DO NOT EDIT BELOW THIS LINE/{exit};1' | awk "/^auto / { if (\$2 == \"${IFACE_MGMT}\") { IN=1 } else {IN=0} } /^iface / { if (\$2 == \"${IFACE_MGMT}\") { IN=1 } else {IN=0}} /^#/ || /^\s*\$/ { IN=0 } IN==0 {print} IN==1 { print \"#\" \$0 }" > $OUT
66
67cat <<EOT >> $OUT
68## CORD - DO NOT EDIT BELOW THIS LINE
69
70auto ${IFACE_MGMT}
71iface ${IFACE_MGMT} inet static
72 address ${MHOST}
73 network ${MNETW}
74 netmask ${MMASK}
75 gateway ${MHOST}
76
77auto ${MGMTBR}
78iface ${MGMTBR} inet static
79 address ${BHOST}
80 network ${BNETW}
81 netmask ${BMASK}
82 gateway ${BHOST}
83EOT
84
85diff /etc/network/interfaces $OUT 2>&1 > /dev/null
86if [ $? -ne 0 ]; then
87 cp /etc/network/interfaces /etc/network/interfaces.last
88 cp $OUT /etc/network/interfaces
89 echo -n "true"
90else
91 echo -n "false"
92fi
93
94rm $OUT