]> git.ipfire.org Git - people/stevee/network.git/blob - hooks/ipv4-static
network: New package.
[people/stevee/network.git] / hooks / ipv4-static
1 #!/bin/sh
2 ########################################################################
3 # Begin $NETWORK_DEVICES/services/ipv4-static
4 #
5 # Description : IPV4 Static Boot Script
6 #
7 # Authors : Nathan Coulson - nathan@linuxfromscratch.org
8 # Kevin P. Fleming - kpfleming@linuxfromscratch.org
9 #
10 # Version : 00.00
11 #
12 # Notes :
13 #
14 ########################################################################
15
16 . /lib/network/hook-header
17
18 HOOK_NAME="ipv4-static"
19 HOOK_TYPE="zone"
20
21 function check_config() {
22 args=
23 if [ -z "${IP}" ]; then
24 log_failure_msg "IP variable missing, cannot continue."
25 exit ${EXIT_CONF_ERROR}
26 fi
27
28 if [ -z "${PREFIX}" -a -z "${PEER}" ]; then
29 log_warning_msg "PREFIX variable missing, assuming 24."
30 PREFIX=24
31 args="${args} ${IP}/${PREFIX}"
32 elif [ -n "${PREFIX}" -a -n "${PEER}" ]; then
33 log_failure_msg "PREFIX and PEER both specified, cannot continue."
34 exit ${EXIT_CONF_ERROR}
35 elif [ -n "${PREFIX}" ]; then
36 args="${args} ${IP}/${PREFIX}"
37 elif [ -n "${PEER}" ]; then
38 args="${args} ${IP} peer ${PEER}"
39 fi
40
41 if [ -n "${BROADCAST}" ]; then
42 args="${args} broadcast ${BROADCAST}"
43 fi
44
45 if [ -n "${SOURCE}" ]; then
46 args="${args} src ${SOURCE}"
47 fi
48 }
49
50 case "${action}" in
51 help)
52 ;;
53
54 info)
55 echo "HOOK_NAME=$HOOK_NAME"
56 echo "HOOK_TYPE=$HOOK_TYPE"
57 ;;
58
59 status)
60 check_config
61 echo -e "# ${CLR_BOLD_CYN}IPv4 static: ${IP}/${PREFIX}${NORMAL}"
62 if [ -n "${GATEWAY}" ]; then
63 echo "# Gateway: ${GATEWAY}"
64 echo -n "# Reachable: "
65 if ping -c1 -w1 -I ${zone} ${GATEWAY} &>/dev/null; then
66 echo -e "${CLR_BOLD_GRN}yes${NORMAL}"
67 else
68 echo -e "${CLR_BOLD_RED}no${NORMAL}"
69 fi
70 fi
71 ip addr show ${zone} | grep "inet " | fgrep -q "${IP}/${PREFIX}"
72 exit ${?}
73 ;;
74
75 pre-up)
76 ;;
77
78 post-up)
79 check_config
80 if ! device_has_ipv4 ${zone} ${IP}; then
81 MESSAGE="Adding IPv4 address ${IP} to zone ${zone} interface..."
82 ip addr add ${args} dev ${zone}
83 evaluate_retval
84 fi
85
86 if [ -n "${GATEWAY}" ]; then
87 if ip route | grep -q default; then
88 log_warning_msg "Gateway already setup; skipping." ${WARNING}
89 else
90 MESSAGE="Setting up default gateway..."
91 ip route add default via ${GATEWAY} dev ${zone}
92 evaluate_retval
93 fi
94 fi
95 ;;
96
97 pre-down)
98 check_config
99 if [ -n "${GATEWAY}" ]; then
100 MESSAGE="Removing default gateway..."
101 ip route del default
102 evaluate_retval
103 fi
104
105 if device_has_ipv4 ${zone} ${IP}; then
106 MESSAGE="Removing IPv4 address ${IP} from zone ${zone}..."
107 ip addr del ${args} dev ${zone}
108 evaluate_retval
109 fi
110 ;;
111
112 post-down)
113 ;;
114
115 add)
116 while [ $# -gt 0 ]; do
117 case "$1" in
118 --ip=*)
119 IP=${1#--ip=}
120 ;;
121 --prefix=*)
122 PREFIX=${1#--prefix=}
123 ;;
124 --peer=*)
125 PEER=${1#--peer=}
126 ;;
127 --broadcast=*)
128 BROADCAST=${1#--broadcast=}
129 ;;
130 --source=*)
131 SOURCE=${1#--source=}
132 ;;
133 --gateway=*)
134 GATEWAY=${1#--gateway=}
135 ;;
136 *)
137 echo "Unknown option: $1" >&2
138 exit 1
139 ;;
140 esac
141 shift
142 done
143 #check_config
144 cat <<EOF >${CONFIG_ZONES}/${zone}/ipv4-static_$IP
145 HOOK="${HOOK_NAME}"
146 IP="${IP}"
147 PREFIX="${PREFIX}"
148 PEER="${PEER}"
149 BROADCAST="${BROADCAST}"
150 SOURCE="${SOURCE}"
151 GATEWAY="${GATEWAY}"
152 EOF
153 [ "$?" = "0" ] && exit ${EXIT_OK} || exit ${EXIT_ERROR}
154 ;;
155
156 rem)
157 ;;
158
159 discover)
160 exit ${EXIT_ERROR}
161 ;;
162
163 *)
164 echo "Usage: ${0} {config|pre-up|post-up|pre-down|post-down|status} [interface]"
165 exit ${EXIT_ERROR}
166 ;;
167 esac
168
169 # End $NETWORK_DEVICES/services/ipv4-static