]>
Commit | Line | Data |
---|---|---|
12de71be | 1 | #!/bin/sh |
b0443108 | 2 | # |
ec8b15cb | 3 | # $Id$ |
b0443108 | 4 | # |
7742e157 AF |
5 | # ifup-ppp script for pppd-2.3.5 (with persist & demand options) ver 0.2 |
6 | # Grzegorz Stanislawski <stangrze@open.net.pl> | |
7 | # Features: | |
b9fbc0ca | 8 | # - since persist option is included to pppd it's no need to do werid loops |
7742e157 AF |
9 | # ifup-ppp script. This also makes your logfile grow slower when Your link |
10 | # is down. | |
11 | # - chat-ppp? file with script for chat is now parsed by shell, so You can | |
12 | # include in it shell variables (for example $PHONE, $USERNAME) | |
13 | # You can define any variable in ifcfg-ppp? file and use it in chat-ppp? | |
14 | # You only have to add it's name into DATAFORCHAT variable | |
15 | # Note, that chat-ppp file is now parsed by shell, so you have to escape | |
16 | # with "\" all shell special characters like \$;:)(& etc. | |
a6c22d3d | 17 | |
7742e157 AF |
18 | PATH=/sbin:/usr/sbin:/bin:/usr/bin |
19 | ||
20 | # ifup-post for PPP is handled through /etc/ppp/ip-up | |
7742e157 | 21 | |
f3002e12 JK |
22 | . /etc/sysconfig/network |
23 | . /etc/rc.d/init.d/functions | |
f67ce454 | 24 | . /lib/rc-scripts/functions.network |
8b3e2b71 | 25 | |
a6c22d3d | 26 | CONFIG=$1 |
7742e157 | 27 | source_config |
de1fc6ce JR |
28 | # set all major variables |
29 | setup_ip_param | |
30 | ||
dd4a755f | 31 | if [ "$2" = "boot" ] && is_no "${ONBOOT}"; then |
5e6dfc29 | 32 | exit |
7742e157 | 33 | fi |
a6c22d3d | 34 | if [ ! -x /usr/sbin/pppd ]; then |
5e6dfc29 JR |
35 | nls "%s does not exist or is not executable" "/usr/sbin/pppd" |
36 | nls "%s for %s exiting" "ifup-ppp" "$DEVICE" | |
37 | logger -p daemon.info -t ifup-ppp \ | |
38 | "$(nls '%s does not exist or is not executable for %s' \ | |
39 | "/usr/sbin/pppd" "$DEVICE")" | |
40 | exit 1 | |
a6c22d3d | 41 | fi |
3ed6009f | 42 | |
34c624e7 | 43 | # modprobe ppp modules (udev case) |
170103c8 | 44 | [ ! -e /dev/ppp ] && modprobe -s char-major-108 |
de1fc6ce | 45 | |
7742e157 | 46 | opts="lock" |
a6c22d3d | 47 | |
5e6dfc29 JR |
48 | if [ -z "${REPORTFILE}" ] ; then |
49 | REPORTFILE=/dev/null | |
a6c22d3d AM |
50 | fi |
51 | ||
c3bd5d9f | 52 | if [ -n "${PPPOE_DEV}" ]; then |
5e6dfc29 | 53 | if is_yes "${PPPOE_KERNEL}"; then |
170103c8 | 54 | modprobe -s pppoe |
5e6dfc29 JR |
55 | MODEMMODE="plugin rp-pppoe.so" |
56 | MODEMPORT="${PPPOE_DEV}" | |
57 | else | |
58 | MODEMMODE="pty" | |
59 | MODEMPORT="pppoe -I ${PPPOE_DEV} ${PPPOE_OPT}" | |
60 | fi | |
995264bd | 61 | elif is_yes "${PPPOA_EAGLE}"; then |
5e6dfc29 JR |
62 | EAGLECTRL="/usr/sbin/adictrl" |
63 | if [ ! -x $EAGLECTRL ]; then | |
64 | EAGLECTRL="/usr/sbin/eaglectrl" | |
65 | fi | |
66 | if [ ! -x $EAGLECTRL ]; then | |
67 | nls "%s does not exist or is not executable" "$EAGLECTRL" | |
68 | nls "%s for %s exiting" "ifup-ppp" "$DEVICE" | |
69 | exit 1 | |
70 | fi | |
71 | $EAGLECTRL -w | |
72 | PPPOA_IFACE=$( $EAGLECTRL -i 2>/dev/null) | |
73 | if [ -z "$PPPOA_IFACE" ]; then | |
74 | PPPOA_IFACE="(unknown)" | |
75 | else | |
76 | ip link set "$PPPOA_IFACE" up | |
77 | fi | |
86b5dc44 | 78 | MODEMMODE="pty" |
5e6dfc29 JR |
79 | MODEMPORT="pppoa -I ${PPPOA_IFACE} ${PPPOA_OPT}" |
80 | elif is_yes "${PPPOA_SPEEDTOUCH}"; then | |
81 | if is_yes "${PPPOA_KERNEL}"; then | |
170103c8 | 82 | modprobe -s speedtch |
83 | modprobe -s pppoatm | |
1edbaefa | 84 | if [ -n "${PPPOA_FIRMWARE}" ]; then |
85 | modem_run -k -s -f "${PPPOA_FIRMWARE}" | |
86 | fi | |
5e6dfc29 JR |
87 | MODEMMODE="plugin pppoatm.so" |
88 | MODEMPORT="${PPPOA_VPI}.${PPPOA_VCI}" | |
89 | else | |
90 | modem_run -s -f "${PPPOA_FIRMWARE}" | |
91 | MODEMMODE="pty" | |
92 | MODEMPORT="pppoa3 -v1 -c -vpi ${PPPOA_VPI} -vci ${PPPOA_VCI} ${PPPOA_OPT}" | |
93 | fi | |
7ddff09a | 94 | elif is_yes "${PPPOA}"; then |
4db3dc33 AM |
95 | MODEMMODE="plugin pppoatm.so" |
96 | MODEMPORT="${PPPOA_VPI}.${PPPOA_VCI}" | |
c3bd5d9f | 97 | else |
7dbcc468 ER |
98 | |
99 | if [ -n "$MODEMPORT" -a ! -c "$MODEMPORT" ]; then | |
100 | echo >&2 "MODEMPORT=$MODEMPORT is not a character device!" | |
101 | exit 1 | |
102 | fi | |
103 | ||
5e6dfc29 JR |
104 | if is_no "${DIRECT_CONNECT}" || [ -z "${DIRECT_CONNECT}" ]; then |
105 | PEERCONF=/etc/ppp/peers/${DEVNAME} | |
106 | if [ ! -f ${PEERCONF} ]; then | |
107 | if [ -z "${WVDIALSECT}" ]; then | |
108 | # XXX: REPORTFILE support is problematic here --misiek | |
109 | [ -f "${CHATSCRIPT}" ] || CHATSCRIPT=/etc/sysconfig/interfaces/data/chat-${PARENTDEVNAME} | |
110 | if [ ! -f "${CHATSCRIPT}" ]; then | |
b05fe174 | 111 | nls '%s does not exist, perhaps set $CHATSCRIPT' "${CHATSCRIPT}" |
5e6dfc29 JR |
112 | nls 'ifup-ppp for %s exiting' "${DEVNAME}" |
113 | logger -p daemon.info -t ifup-ppp \ | |
114 | "$(nls '%s does not exist for %s' "${CHATSCRIPT}" "${DEVICE}")" | |
115 | exit 1 | |
116 | fi | |
117 | fi | |
118 | logger -s -p daemon.notice -t ifup-ppp "$(nls 'Setting up a new %s config file' "${PEERCONF}")" | |
119 | if [ -f /etc/ppp/peers/${DEVICE} ]; then | |
120 | cp -f /etc/ppp/peers/${DEVICE} ${PEERCONF} | |
121 | else | |
122 | touch ${PEERCONF} | |
123 | fi | |
124 | if [ "${WVDIALSECT}" ]; then | |
125 | echo "connect \"/usr/bin/wvdial --chat ${WVDIALSECT} --config /etc/wvdial.conf >> ${REPORTFILE} 2>&1 \"" >> ${PEERCONF} | |
126 | else | |
127 | if is_yes "${DEBUG}"; then | |
128 | chatdbg="-v" | |
129 | fi | |
130 | if [ -n "${DATAFORCHAT}" ]; then | |
131 | chatreadenv=-E | |
132 | fi | |
133 | echo "connect \"/usr/sbin/chat $chatreadenv -f ${CHATSCRIPT} -r ${REPORTFILE} ${chatdbg}\"" >> ${PEERCONF} | |
134 | fi | |
dec1e742 | 135 | fi |
5e6dfc29 | 136 | opts="$opts call ${DEVNAME}" |
a6c22d3d | 137 | fi |
a6c22d3d AM |
138 | fi |
139 | ||
44a23ed0 | 140 | if [ -z "$MODEMPORT" ]; then |
06997924 PG |
141 | # Last try: |
142 | if [ "${PPPOA_VPI}" -a "${PPPOA_VCI}" ]; then | |
143 | MODEMPORT=${PPPOA_VPI}.${PPPOA_VCI} | |
144 | else | |
145 | echo >&2 "Missing modemport!" | |
146 | exit 1 | |
147 | fi | |
44a23ed0 ER |
148 | fi |
149 | ||
a6c22d3d | 150 | if [ -z "$HOLDOFF" ]; then |
5e6dfc29 | 151 | HOLDOFF=30 |
a6c22d3d | 152 | fi |
dd4a755f | 153 | if is_yes "${PERSIST}"; then |
5e6dfc29 JR |
154 | if [ -z "${MAXFAIL}" ]; then |
155 | MAXFAIL="0" | |
156 | fi | |
157 | opts="$opts persist holdoff $HOLDOFF maxfail $MAXFAIL" | |
7742e157 | 158 | fi |
dd4a755f | 159 | if is_yes "${DEMAND}"; then |
5e6dfc29 JR |
160 | if [ -z "${IDLE}" ]; then |
161 | IDLE="0" | |
162 | fi | |
163 | opts="$opts demand ktune idle ${IDLE}" | |
a6c22d3d AM |
164 | fi |
165 | if ! is_no "${HARDFLOWCTL}"; then | |
5e6dfc29 | 166 | opts="$opts crtscts" |
7742e157 | 167 | fi |
a6c22d3d | 168 | if is_yes "${MODEMCTL}"; then |
5e6dfc29 | 169 | opts="$opts modem" |
7742e157 | 170 | fi |
5fc3f72d SP |
171 | if is_yes "${SYNC}"; then |
172 | opts="$opts sync" | |
173 | fi | |
dd4a755f | 174 | if is_yes "${ESCAPECHARS}"; then |
5e6dfc29 | 175 | opts="$opts asyncmap FFFFFFFF" |
a6c22d3d | 176 | else |
5e6dfc29 | 177 | opts="$opts asyncmap 00000000" |
7742e157 | 178 | fi |
40e44c36 | 179 | if is_yes "${DEFROUTE}"; then |
5e6dfc29 JR |
180 | # pppd will no longer delete an existing default route |
181 | # so we have to help it out a little here. | |
182 | ip route del 0/0 > /dev/null 2>&1 | |
183 | opts="$opts defaultroute" | |
40e44c36 | 184 | elif ! is_no "${DEFROUTE}"; then |
5e6dfc29 | 185 | opts="$opts defaultroute" |
7742e157 | 186 | fi |
a6c22d3d | 187 | if ! is_no "${PEERDNS}"; then |
5e6dfc29 | 188 | opts="$opts usepeerdns" |
de1fc6ce | 189 | fi |
7742e157 | 190 | if [ -n "${MRU}" ] ; then |
5e6dfc29 | 191 | opts="$opts mru ${MRU}" |
7742e157 AF |
192 | fi |
193 | if [ -n "${MTU}" ] ; then | |
5e6dfc29 | 194 | opts="$opts mtu ${MTU}" |
7742e157 | 195 | fi |
de1fc6ce | 196 | if is_yes "$IPV4_NETWORKING" && [ -n "${IP4ADDR}${REMIP}" ] ; then |
5e6dfc29 JR |
197 | # if either IP address is set, the following will work. |
198 | opts="$opts ${IP4ADDR}:${REMIP}" | |
de1fc6ce | 199 | fi |
a6c22d3d | 200 | if is_yes "$IPV6_NETWORKING"; then |
5e6dfc29 JR |
201 | if is_yes "$IPV6_PPP"; then |
202 | if [ -n "${IP6ADDR}${REMIP6}" ] ; then | |
203 | opts="$opts ipv6 ${IP6ADDR},${REMIP6}" | |
204 | elif is_yes "$IPV6_CP_USEV4"; then | |
205 | opts="$opts ipv6cp-use-ipaddr" | |
206 | elif is_yes "$IPV6_CP_PERSISTENT"; then | |
207 | opts="$opts ipv6cp-use-persistent" | |
208 | fi | |
209 | elif is_no "$IPV6_PPP"; then | |
210 | opts="$opts noipv6" | |
de1fc6ce | 211 | fi |
a6c22d3d | 212 | elif is_no "$IPV6_NETWORKING"; then |
5e6dfc29 | 213 | opts="$opts noipv6" |
a6c22d3d AM |
214 | fi |
215 | if is_yes "${IPX_PPP}"; then | |
5e6dfc29 JR |
216 | opts="$opts ipx" |
217 | if [ -n "${IPX_PPP_NETWORK}" ]; then | |
218 | opts="$opts ipx-network ${IPX_PPP_NETWORK}" | |
219 | fi | |
220 | if [ -n "${IPX_PPP_NODE}" ]; then | |
221 | opts="$opts ipx-node ${IPX_PPP_NODE}" | |
222 | fi | |
223 | if [ -n "${IPX_PPP_ROUTING}" ]; then | |
224 | opts="$opts ipx-routing ${IPX_PPP_ROUTING}" | |
225 | fi | |
7742e157 | 226 | fi |
c3bd5d9f | 227 | |
7742e157 | 228 | if [ -n "${PAPNAME}" ] ; then |
5e6dfc29 | 229 | opts="$opts user ${PAPNAME}" |
7742e157 | 230 | fi |
200ca1e9 | 231 | if [ -n "${REMOTENAME}" ] ; then |
5e6dfc29 | 232 | opts="$opts remotename ${REMOTENAME}" |
200ca1e9 | 233 | fi |
dd4a755f | 234 | if is_yes "${DEBUG}"; then |
5e6dfc29 | 235 | opts="$opts debug" |
7742e157 | 236 | fi |
a6c22d3d | 237 | if is_yes "${AUTH}"; then |
5e6dfc29 | 238 | opts="$opts auth" |
a6c22d3d | 239 | elif is_no "${AUTH}"; then |
5e6dfc29 | 240 | opts="$opts noauth" |
7742e157 | 241 | fi |
f42fe46b | 242 | if is_yes "$PLUGIN_IFCFG_PASSWORD" && [ -n "$PASSWORD" ]; then |
5e6dfc29 JR |
243 | if [ -f "$CONFIG" ]; then |
244 | ifcfg_password_config="$CONFIG" | |
245 | else | |
246 | ifcfg_password_config="/etc/sysconfig/interfaces/$CONFIG" | |
247 | fi | |
248 | opts="$opts plugin ifcfg-password.so ifcfg $ifcfg_password_config" | |
8175323a | 249 | fi |
7742e157 | 250 | |
c3bd5d9f | 251 | if ! is_no "${UNIT}"; then |
5e6dfc29 JR |
252 | UNIT=$(echo "${DEVICE}" | awk ' { gsub(/ppp/,NUL); print $0} ') |
253 | opts="$opts unit ${UNIT}" | |
c3bd5d9f AM |
254 | fi |
255 | ||
c4e87d18 AM |
256 | MODEM="${MODEMPORT}"; export MODEM |
257 | ||
a6c22d3d | 258 | (logger -p daemon.info -t ifup-ppp \ |
5e6dfc29 | 259 | "$(nls 'pppd started for %s on device %s at speed %s' "$DEVICE" \ |
74a7f2e4 | 260 | "$MODEMPORT" "${LINESPEED:-(unspecified)} on unit ${UNIT}")" &)& |
de1fc6ce | 261 | |
dec1e742 | 262 | if [ -n "${DATAFORCHAT}" ]; then |
5e6dfc29 | 263 | export $DATAFORCHAT |
dec1e742 | 264 | fi |
c3bd5d9f | 265 | /usr/sbin/pppd $opts ${MODEMMODE} "${MODEMPORT}" ${LINESPEED} \ |
5e6dfc29 JR |
266 | ipparam ${DEVNAME} linkname ${DEVNAME} \ |
267 | ${PPPOPTIONS} |