[packages] olsrd: don't try to start smartgw if not all deps are installed
[feed/routing.git] / files / olsrd.init
1 #!/bin/sh /etc/rc.common
2 # Copyright (C) 2008-2012 OpenWrt.org
3
4 START=65
5
6 SERVICE_DAEMONIZE=1
7 SERVICE_WRITE_PID=1
8
9 CONF=/var/etc/olsrd.conf
10 PID=/var/run/olsrd.pid
11 PID6=/var/run/olsrd.ipv6.pid
12
13 OLSRD_OLSRD_SCHEMA='ignore:internal config_file:internal DebugLevel=0 AllowNoInt=yes'
14 OLSRD_IPCCONNECT_SCHEMA='ignore:internal Host:list Net:list2'
15 OLSRD_LOADPLUGIN_SCHEMA='ignore:internal library:internal Host4:list Net4:list2 Host:list Net:list2 Host6:list Net6:list2 Ping:list redistribute:list NonOlsrIf:list name:list lat lon latlon_infile HNA:list2 hosts:list2'
16 OLSRD_INTERFACE_SCHEMA='ignore:internal interface:internal AutoDetectChanges:bool'
17 OLSRD_INTERFACE_DEFAULTS_SCHEMA='AutoDetectChanges:bool'
18
19 T=' '
20 N='
21 '
22
23 log()
24 {
25 logger -t olsrd -p daemon.info -s "$1"
26 }
27
28 validate_varname() {
29 local varname="$1"
30 [ -z "$varname" -o "$varname" != "${varname%%[!A-Za-z0-9_]*}" ] && return 1
31 return 0
32 }
33
34 validate_olsrd_option() {
35 local str="$1"
36 [ -z "$str" -o "$str" != "${str%%[! 0-9A-Za-z./|:_-]*}" ] && return 1
37 return 0
38 }
39
40 system_config() {
41 local cfg="$1"
42 local cfgt
43 local hostname
44 local latlon
45
46 config_get cfgt "$cfg" TYPE
47
48 if [ "$cfgt" = "system" ]; then
49 config_get hostname "$cfg" hostname
50 hostname="${hostname:-OpenWrt}"
51 SYSTEM_HOSTNAME="$hostname"
52 fi
53
54 if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
55 config_get latlon "$cfg" latlon
56 IFS=" ${T}${N},"
57 set -- $latlon
58 unset IFS
59 SYSTEM_LAT="$1"
60 SYSTEM_LON="$2"
61 fi
62
63 if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
64 config_get latlon "$cfg" latitude
65 SYSTEM_LAT="$latlon"
66 config_get latlon "$cfg" longitude
67 SYSTEM_LON="$latlon"
68 fi
69 }
70
71 olsrd_find_config_file() {
72 local cfg="$1"
73 validate_varname "$cfg" || return 0
74
75 config_get_bool ignore "$cfg" ignore 0
76 [ "$ignore" -ne 0 ] && return 0
77 config_get OLSRD_CONFIG_FILE "$cfg" config_file
78
79 return 0
80 }
81
82 warning_invalid_value() {
83 local funcname="warning_invalid_value"
84 local package="$1"
85 validate_varname "$package" || package=
86 local config="$2"
87 validate_varname "$config" || config=
88 local option="$3"
89 validate_varname "$option" || option=
90
91 if [ -n "$package" -a -n "$config" ]; then
92 log "$funcname() in option '$package.$config${option:+.}$option', skipped"
93 else
94 log "$funcname() skipped"
95 fi
96
97 return 0
98 }
99
100 olsrd_write_option() {
101 local param="$1"
102 local cfg="$2"
103 validate_varname "$cfg" || return 1
104 local option="$3"
105 validate_varname "$option" || return 1
106 local value="$4"
107 local option_type="$5"
108
109 if [ "$option_type" = bool ]; then
110 case "$value" in
111 1|on|true|enabled|yes) value=yes;;
112 0|off|false|disabled|no) value=no;;
113 *) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
114 esac
115 fi
116
117 if ! validate_olsrd_option "$value"; then
118 warning_invalid_value olsrd "$cfg" "$option"
119 return 1
120 fi
121
122 if [ "$value" != "${value%%[G-Zg-z_-]*}" ]; then
123 if [ "$option" != "Ip6AddrType" -a "$option" != "LinkQualityMult" -a "$value" != "yes" -a "$value" != "no" ]; then
124 value="\"$value\""
125 fi
126 fi
127
128 echo -n "${N}$param$option $value"
129
130 return 0
131 }
132
133 olsrd_write_plparam() {
134 local funcname="olsrd_write_plparam"
135 local param="$1"
136 local cfg="$2"
137 validate_varname "$cfg" || return 1
138 local option="$3"
139 validate_varname "$option" || return 1
140 local value="$4"
141 local option_type="$5"
142 local _option
143
144 if [ "$option_type" = bool ]; then
145 case "$value" in
146 1|on|true|enabled|yes) value=yes;;
147 0|off|false|disabled|no) value=no;;
148 *) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
149 esac
150 fi
151
152 if ! validate_olsrd_option "$value"; then
153 warning_invalid_value olsrd "$cfg" "$option"
154 return 1
155 fi
156
157 IFS='-_'
158 set -- $option
159 option="$*"
160 unset IFS
161 _option="$option"
162 if [ "$option" = 'hosts' ]; then
163 set -- $value
164 option="$1"
165 shift
166 value="$*"
167 fi
168 if [ "$option" = 'NonOlsrIf' ]; then
169 if validate_varname "$value"; then
170 if network_get_device ifname "$value"; then
171 log "$funcname() Info: mdns Interface '$value' ifname '$ifname' found"
172 else
173 log "$funcname() Warning: mdns Interface '$value' not found, skipped"
174 fi
175 else
176 warning_invalid_value olsrd "$cfg" "NonOlsrIf"
177 fi
178 [ -z "$ifname" ] || value=$ifname
179 fi
180
181 echo -n "${N}${param}PlParam \"$option\" \"$value\""
182
183 return 0
184 }
185
186 config_update_schema() {
187 unset IFS
188 local schema_varname="$1"
189 validate_varname "$schema_varname" || return 1
190 local command="$2"
191 validate_varname "$command" || return 1
192 local option="$3"
193 validate_varname "$option" || return 1
194 local value="$4"
195 local schema
196 local cur_option
197
198 case "$varname" in
199 *_LENGTH) return 0;;
200 *_ITEM*) return 0;;
201 esac
202
203 eval "export -n -- \"schema=\${$schema_varname}\""
204
205 for cur_option in $schema; do
206 [ "${cur_option%%[:=]*}" = "$option" ] && return 0
207 done
208
209 if [ "$command" = list ]; then
210 set -- $value
211 if [ "$#" -ge "3" ]; then
212 schema_entry="$option:list3"
213 elif [ "$#" -ge "2" ]; then
214 schema_entry="$option:list2"
215 else
216 schema_entry="$option:list"
217 fi
218 else
219 schema_entry="$option"
220 fi
221
222 append "$schema_varname" "$schema_entry"
223
224 return 0
225 }
226
227 config_write_options() {
228 unset IFS
229 local schema="$1"
230 local cfg="$2"
231 validate_varname "$cfg" || return 1
232 local write_func="$3"
233 [ -z "$write_func" ] && output_func=echo
234 local write_param="$4"
235 local schema_entry
236 local option
237 local option_length
238 local option_type
239 local default
240 local value
241 local list_size
242 local list_item
243 local list_value
244 local i
245 local position
246
247 for schema_entry in $schema; do
248 default="${schema_entry#*[=]}"
249 [ "$default" = "$schema_entry" ] && default=
250 option="${schema_entry%%[=]*}"
251 IFS=':'
252 set -- $option
253 unset IFS
254 option="$1"
255 option_type="$2"
256 validate_varname "$option" || continue
257 [ -z "$option_type" ] || validate_varname "$option_type" || continue
258 [ "$option_type" = internal ] && continue
259 config_get value "$cfg" "$option"
260
261 if [ -z "$value" ]; then
262 IFS='+'
263 set -- $default
264 unset IFS
265 value=$*
266 elif [ "$value" = '-' -a -n "$default" ]; then
267 continue
268 fi
269
270 [ -z "$value" ] && continue
271
272 case "$option_type" in
273 list) list_size=1;;
274 list2) list_size=2;;
275 list3) list_size=3;;
276 *) list_size=0;;
277 esac
278
279 if [ "$list_size" -gt 0 ]; then
280 config_get option_length "$cfg" "${option}_LENGTH"
281 if [ -n "$option_length" ]; then
282 i=1
283 while [ "$i" -le "$option_length" ]; do
284 config_get list_value "$cfg" "${option}_ITEM$i"
285 "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
286 i=$((i + 1))
287 done
288 else
289 list_value=
290 i=0
291 for list_item in $value; do
292 append "list_value" "$list_item"
293 i=$((i + 1))
294 position=$((i % list_size))
295 if [ "$position" -eq 0 ]; then
296 "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
297 list_value=
298 fi
299 done
300 [ "$position" -ne 0 ] && "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type"
301 fi
302 else
303 "$write_func" "$write_param" "$cfg" "$option" "$value" "$option_type"
304 fi
305 done
306
307 return 0
308 }
309
310 olsrd_write_olsrd() {
311 local cfg="$1"
312 validate_varname "$cfg" || return 0
313 local ignore
314
315 config_get_bool ignore "$cfg" ignore 0
316 [ "$ignore" -ne 0 ] && return 0
317
318 [ "$OLSRD_COUNT" -gt 0 ] && return 0
319
320 config_get ipversion "$cfg" IpVersion
321 if [ "$ipversion" = "6and4" ]; then
322 OLSRD_IPVERSION_6AND4=1
323 config_set "$cfg" IpVersion '6'
324 fi
325 config_get smartgateway "$cfg" SmartGateway
326 config_get smartgatewayuplink "$cfg" SmartGatewayUplink
327
328 config_write_options "$OLSRD_OLSRD_SCHEMA" "$cfg" olsrd_write_option
329 echo
330 OLSRD_COUNT=$((OLSRD_COUNT + 1))
331 return 0
332 }
333
334 olsrd_write_ipcconnect() {
335 local cfg="$1"
336 validate_varname "$cfg" || return 0
337 local ignore
338
339 config_get_bool ignore "$cfg" ignore 0
340 [ "$ignore" -ne 0 ] && return 0
341
342 [ "$IPCCONNECT_COUNT" -gt 0 ] && return 0
343
344 echo -n "${N}IpcConnect${N}{"
345 config_write_options "$OLSRD_IPCCONNECT_SCHEMA" "$cfg" olsrd_write_option "${T}"
346 echo "${N}}"
347 IPCCONNECT_COUNT=$((IPCCONNECT_COUNT + 1))
348
349 return 0
350 }
351
352 olsrd_write_hna4() {
353 local cfg="$1"
354 validate_varname "$cfg" || return 0
355 local ignore
356
357 config_get_bool ignore "$cfg" ignore 0
358 [ "$ignore" -ne 0 ] && return 0
359
360 config_get netaddr "$cfg" netaddr
361 if ! validate_olsrd_option "$netaddr"; then
362 warning_invalid_value olsrd "$cfg" "netaddr"
363 return 0
364 fi
365
366 config_get netmask "$cfg" netmask
367 if ! validate_olsrd_option "$netmask"; then
368 warning_invalid_value olsrd "$cfg" "netmask"
369 return 0
370 fi
371
372 [ "$HNA4_COUNT" -le 0 ] && echo -n "${N}Hna4${N}{"
373 echo -n "${N}${T}${T}$netaddr $netmask"
374 HNA4_COUNT=$((HNA4_COUNT + 1))
375
376 return 0
377 }
378
379 olsrd_write_hna6() {
380 local cfg="$1"
381 validate_varname "$cfg" || return 0
382 local ignore
383
384 config_get_bool ignore "$cfg" ignore 0
385 [ "$ignore" -ne 0 ] && return 0
386
387 config_get netaddr "$cfg" netaddr
388 if ! validate_olsrd_option "$netaddr"; then
389 warning_invalid_value olsrd "$cfg" "netaddr"
390 return 0
391 fi
392
393 config_get prefix "$cfg" prefix
394 if ! validate_olsrd_option "$prefix"; then
395 warning_invalid_value olsrd "$cfg" "prefix"
396 return 0
397 fi
398
399 [ "$HNA6_COUNT" -le 0 ] && echo -n "${N}Hna6${N}{"
400 echo -n "${N}${T}${T}$netaddr $prefix"
401 HNA6_COUNT=$((HNA6_COUNT + 1))
402
403 return 0
404 }
405
406 olsrd_write_loadplugin() {
407 local funcname="olsrd_write_loadplugin"
408 local cfg="$1"
409 validate_varname "$cfg" || return 0
410 local ignore
411 local name
412 local suffix
413 local lat
414 local lon
415 local latlon_infile
416
417 config_get_bool ignore "$cfg" ignore 0
418 [ "$ignore" -ne 0 ] && return 0
419
420 config_get library "$cfg" library
421 if ! validate_olsrd_option "$library"; then
422 warning_invalid_value olsrd "$cfg" "library"
423 return 0
424 fi
425 if ! [ -x "/lib/$library" -o -x "/usr/lib/$library" -o -x "/usr/local/lib/$library" ]; then
426 log "$funcname() Warning: Plugin library '$library' not found, skipped"
427 return 0
428 fi
429
430 case "$library" in
431 olsrd_nameservice.*)
432 config_get name "$cfg" name
433 [ -z "$name" ] && config_set "$cfg" name $SYSTEM_HOSTNAME
434
435 config_get suffix "$cfg" suffix
436 [ -z "$suffix" ] && config_set "$cfg" suffix '.olsr'
437
438 config_get lat "$cfg" lat
439 config_get lon "$cfg" lon
440 config_get latlon_infile "$cfg" latlon_infile
441 if [ \( -z "$lat" -o -z "$lat" \) -a -z "$latlon_infile" ]; then
442 if [ -f '/var/run/latlon.txt' ]; then
443 config_set "$cfg" lat ''
444 config_set "$cfg" lon ''
445 config_set "$cfg" latlon_infile '/var/run/latlon.txt'
446 else
447 config_set "$cfg" lat "$SYSTEM_LAT"
448 config_set "$cfg" lon "$SYSTEM_LON"
449 fi
450 fi
451
452 for f in latlon_file hosts_file services_file resolv_file macs_file; do
453 config_get $f "$cfg" $f
454 done
455
456 [ -z "$latlon_file" ] && config_set "$cfg" latlon_file '/var/run/latlon.js'
457 ;;
458 olsrd_watchdog.*)
459 config_get wd_file "$cfg" file
460 ;;
461 esac
462
463 echo -n "${N}LoadPlugin \"$library\"${N}{"
464 config_write_options "$OLSRD_LOADPLUGIN_SCHEMA" "$cfg" olsrd_write_plparam "${T}"
465 echo "${N}}"
466
467 return 0
468 }
469
470 olsrd_write_interface() {
471 local funcname="olsrd_write_interface"
472 local cfg="$1"
473 validate_varname "$cfg" || return 0
474 local ignore
475 local interfaces
476 local interface
477 local ifnames
478
479 config_get_bool ignore "$cfg" ignore 0
480 [ "$ignore" -ne 0 ] && return 0
481
482 ifnames=
483 config_get interfaces "$cfg" interface
484 for interface in $interfaces; do
485 if validate_varname "$interface"; then
486 if network_get_device IFNAME "$interface"; then
487 ifnames="$ifnames \"$IFNAME\""
488 ifsglobal="$ifsglobal $IFNAME"
489 else
490 log "$funcname() Warning: Interface '$interface' not found, skipped"
491 fi
492 else
493 warning_invalid_value olsrd "$cfg" "interface"
494 fi
495 done
496
497 [ -z "$ifnames" ] && return 0
498
499 echo -n "${N}Interface$ifnames${N}{"
500 config_write_options "$OLSRD_INTERFACE_SCHEMA" "$cfg" olsrd_write_option "${T}"
501 echo "${N}}"
502 INTERFACES_COUNT=$((INTERFACES_COUNT + 1))
503
504 return 0
505 }
506
507 olsrd_write_interface_defaults() {
508 local cfg="$1"
509 validate_varname "$cfg" || return 0
510
511 echo -n "${N}InterfaceDefaults$ifnames${N}{"
512 config_write_options "$OLSRD_INTERFACE_DEFAULTS_SCHEMA" "$cfg" olsrd_write_option "${T}"
513 echo "${N}}"
514
515 return 1
516 }
517
518 olsrd_update_schema() {
519 local command="$1"
520 validate_varname "$command" || return 0
521 local varname="$2"
522 validate_varname "$varname" || return 0
523 local value="$3"
524 local cfg="$CONFIG_SECTION"
525 local cfgt
526 local cur_varname
527
528 config_get cfgt "$cfg" TYPE
529 case "$cfgt" in
530 olsrd) config_update_schema OLSRD_OLSRD_SCHEMA "$command" "$varname" "$value";;
531 IpcConnect) config_update_schema OLSRD_IPCCONNECT_SCHEMA "$command" "$varname" "$value";;
532 LoadPlugin) config_update_schema OLSRD_LOADPLUGIN_SCHEMA "$command" "$varname" "$value";;
533 Interface) config_update_schema OLSRD_INTERFACE_SCHEMA "$command" "$varname" "$value";;
534 InterfaceDefaults) config_update_schema OLSRD_INTERFACE_DEFAULTS_SCHEMA "$command" "$varname" "$value";;
535 esac
536
537 return 0
538 }
539
540 olsrd_write_config() {
541 OLSRD_IPVERSION_6AND4=0
542 OLSRD_COUNT=0
543 config_foreach olsrd_write_olsrd olsrd
544 IPCCONNECT_COUNT=0
545 config_foreach olsrd_write_ipcconnect IpcConnect
546 HNA4_COUNT=0
547 config_foreach olsrd_write_hna4 Hna4
548 [ "$HNA4_COUNT" -gt 0 ] && echo "${N}}"
549 HNA6_COUNT=0
550 config_foreach olsrd_write_hna6 Hna6
551 [ "$HNA6_COUNT" -gt 0 ] && echo "${N}}"
552 config_foreach olsrd_write_loadplugin LoadPlugin
553 INTERFACES_COUNT=0
554 config_foreach olsrd_write_interface_defaults InterfaceDefaults
555 config_foreach olsrd_write_interface Interface
556 echo
557
558 return 0
559 }
560
561 olsrd_setup_smartgw_rules() {
562 local funcname="olsrd_setup_smartgw_rules"
563 # Check if ipip is installed
564 [ -e /etc/modules.d/[0-9]*-ipip ] || {
565 log "$funcname() Warning: kmod-ipip is missing. SmartGateway will not work until you install it."
566 return 1
567 }
568
569 wanifnames=$(ip r l e 0/0 t all | sed -e 's/^.* dev //' |cut -d " " -f 1 | sort | uniq)
570 nowan=0
571 if [ -z "$wanifnames" ]; then
572 nowan=1
573 fi
574
575 IP4T=$(which iptables)
576 IP6T=$(which ip6tables)
577
578 # Delete smartgw firewall rules first
579 for IPT in $IP4T $IP6T; do
580 while $IPT -D forwarding_rule -o tnl_+ -j ACCEPT 2> /dev/null; do :;done
581 for IFACE in $wanifnames; do
582 while $IPT -D forwarding_rule -i tunl0 -o $IFACE -j ACCEPT 2> /dev/null; do :; done
583 done
584 for IFACE in $ifsglobal; do
585 while $IPT -D input_rule -i $IFACE -p 4 -j ACCEPT 2> /dev/null; do :; done
586 done
587 done
588 while $IP4T -t nat -D postrouting_rule -o tnl_+ -j MASQUERADE 2> /dev/null; do :;done
589
590 if [ "$smartgateway" == "yes" ]; then
591 log "$funcname() Notice: Inserting firewall rules for SmartGateway"
592 if [ ! "$smartgatewayuplink" == "none" ]; then
593 if [ "$smartgatewayuplink" == "ipv4" ]; then
594 # Allow everything to be forwarded to tnl_+ and use NAT for it
595 $IP4T -I forwarding_rule -o tnl_+ -j ACCEPT
596 $IP4T -t nat -I postrouting_rule -o tnl_+ -j MASQUERADE
597 # Allow forwarding from tunl0 to (all) wan-interfaces
598 if [ "$nowan"="0" ]; then
599 for IFACE in $wanifnames; do
600 $IP4T -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
601 done
602 fi
603 # Allow incoming ipip on all olsr-interfaces
604 for IFACE in $ifsglobal; do
605 $IP4T -I input_rule -i $IFACE -p 4 -j ACCEPT
606 done
607 elif [ "$smartgatewayuplink" == "ipv6" ]; then
608 $IP6T -I forwarding_rule -o tnl_+ -j ACCEPT
609 if [ "$nowan"="0" ]; then
610 for IFACE in $wanifnames; do
611 $IP6T -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
612 done
613 fi
614 for IFACE in $ifsglobal; do
615 $IP6T -I input_rule -i $IFACE -p 4 -j ACCEPT
616 done
617 else
618 for IPT in $IP4T $IP6T; do
619 $IPT -I forwarding_rule -o tnl_+ -j ACCEPT
620 $IPT -t nat -I postrouting_rule -o tnl_+ -j MASQUERADE
621 if [ "$nowan"="0" ]; then
622 for IFACE in $wanifnames; do
623 $IPT -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
624 done
625 fi
626 for IFACE in $ifsglobal; do
627 $IPT -I input_rule -i $IFACE -p 4 -j ACCEPT
628 done
629 done
630 fi
631 fi
632 fi
633 }
634
635 error() {
636 log "error() ${initscript}: $@"
637 }
638
639 start() {
640 SYSTEM_HOSTNAME=
641 SYSTEM_LAT=
642 SYSTEM_LON=
643 config_load system
644 config_foreach system_config system
645
646 option_cb() {
647 olsrd_update_schema "option" "$@"
648 }
649
650 list_cb() {
651 olsrd_update_schema "list" "$@"
652 }
653
654 . /lib/functions/network.sh
655
656 config_load olsrd
657 reset_cb
658
659 OLSRD_CONFIG_FILE=
660 config_foreach olsrd_find_config_file olsrd
661
662 if [ -z "$OLSRD_CONFIG_FILE" ]; then
663 mkdir -p -- /var/etc/
664 olsrd_write_config > /var/etc/olsrd.conf
665 if [ "$INTERFACES_COUNT" -gt 0 -a "$OLSRD_COUNT" -gt 0 ]; then
666 OLSRD_CONFIG_FILE=/var/etc/olsrd.conf
667 fi
668 fi
669
670 [ -z "$OLSRD_CONFIG_FILE" ] && return 1
671
672 local bindv6only='0'
673 if [ "$OLSRD_IPVERSION_6AND4" -ne 0 ]; then
674 bindv6only="$(sysctl -n net.ipv6.bindv6only)"
675 sysctl -w net.ipv6.bindv6only=1 > /dev/null
676 sed -e '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv6
677 sed -e 's/^IpVersion[ ][ ]*6$/IpVersion 4/' -e 's/^\t\t[A-Fa-f0-9.:]*[:][A-Fa-f0-9.:]*[ ][0-9]*$//' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv4
678 rm $OLSRD_CONFIG_FILE
679
680 # some filenames should get the suffix .ipv6
681 for file in $latlon_file $hosts_file $services_file $resolv_file $macs_file $wd_file;do
682 f=$(echo $file|sed 's/\//\\\//g')
683 sed -i "s/$f/$f.ipv6/g" /var/etc/olsrd.conf.ipv6
684 done
685
686 SERVICE_PID_FILE="$PID6"
687 if service_check /usr/sbin/olsrd; then
688 error "there is already an IPv6 instance of olsrd running (pid: '$(cat $PID6)'), not starting."
689 else
690 service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv6 -nofork
691 fi
692
693 SERVICE_PID_FILE="$PID"
694 if service_check /usr/sbin/olsrd; then
695 error "there is already an IPv4 instance of olsrd running (pid: '$(cat $PID)'), not starting."
696 else
697 service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv4 -nofork
698 fi
699
700 sleep 3
701 sysctl -w net.ipv6.bindv6only="$bindv6only" > /dev/null
702
703 else
704
705 if [ "$ipversion" = "6" ]; then
706 sed -i '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' "$OLSRD_CONFIG_FILE"
707 fi
708
709 SERVICE_PID_FILE="$PID"
710 if service_check /usr/sbin/olsrd; then
711 error "there is already an IPv4 instance of olsrd running (pid: '$(cat $PID)'), not starting."
712 return 1
713 else
714 service_start /usr/sbin/olsrd -f "$OLSRD_CONFIG_FILE" -nofork
715 fi
716 fi
717 olsrd_setup_smartgw_rules
718 }
719
720 stop() {
721 SERVICE_PID_FILE="$PID"
722 service_stop /usr/sbin/olsrd
723
724 SERVICE_PID_FILE="$PID6"
725 service_stop /usr/sbin/olsrd
726 }