1 #!/bin/sh /etc/rc.common
3 # Fwknop is developed primarily by the people listed in the file 'AUTHORS'.
4 # Copyright (C) 2009-2014 fwknop developers and contributors. For a full
5 # list of contributors, see the file 'CREDITS'.
12 FWKNOPD_BIN
=/usr
/sbin
/fwknopd
16 generate_configuration
19 procd_set_param
command "$FWKNOPD_BIN" --foreground --syslog-enable
20 procd_set_param respawn
22 if [ $UCI_ENABLED -eq 1 ]; then
23 procd_append_param
command -c /var
/etc
/fwknopd.conf
24 procd_append_param
command -a /var
/etc
/access.conf
27 procd_append_param
command -i "$DEPEND_IFNAME"
28 procd_set_param netdev
"$DEPEND_IFNAME"
35 procd_add_reload_trigger
"fwknopd"
42 1|on|true|
yes|enabled
) _tmp
=1;;
43 0|off|false|no|disabled
) _tmp
=0;;
49 generate_configuration
()
51 [ -f /tmp
/access.conf.tmp
] && rm /tmp
/access.conf.tmp
57 local USER_CONFIG_PATH
=/etc
/fwknop
/fwknopd.conf
58 local DEFAULT_UCI_NETWORK
=wan
59 local DEFAULT_FWKNOPD_IFNAME
=eth0
64 if [ "$type" = "global" ]; then
68 if [ "$option" = "uci_enabled" ] && [ "$(get_bool "$value" 0)" -eq 1 ] ; then
69 > /var
/etc
/fwknopd.conf
70 > /var
/etc
/access.conf
71 chmod 600 /var
/etc
/fwknopd.conf
72 chmod 600 /var
/etc
/access.conf
76 elif [ "$type" = "network" ]; then
80 if [ $UCI_ENABLED -eq 1 ] && [ $option = "network" ]; then
84 elif [ "$type" = "config" ]; then
88 if [ $UCI_ENABLED -eq 1 ] && [ $option = "PCAP_INTF" ]; then
90 echo "$option $value" >> /var
/etc
/fwknopd.conf
#writing each option to fwknopd.conf
91 elif [ $UCI_ENABLED -eq 1 ]; then
92 echo "$option $value" >> /var
/etc
/fwknopd.conf
#writing each option to fwknopd.conf
95 elif [ "$type" = "access" ]
97 if [ -f /tmp
/access.conf.tmp
] ; then
98 cat /tmp
/access.conf.tmp
>> /var
/etc
/access.conf
99 rm /tmp
/access.conf.tmp
104 if [ $UCI_ENABLED -eq 1 ] && [ $option = "SOURCE" ]; then
105 echo "$option $value" >> /var
/etc
/access.conf
#writing each option to access.conf
107 if [ $UCI_ENABLED -eq 1 ] && [ $option != "SOURCE" ]; then
108 echo "$option $value" >> /tmp
/access.conf.tmp
#writing each option to access.conf
112 option_cb
() { return; }
113 if [ -z "$type" ]; then
115 if [ -f /tmp
/access.conf.tmp
] ; then
116 cat /tmp
/access.conf.tmp
>> /var
/etc
/access.conf
117 rm /tmp
/access.conf.tmp
123 if [ -f /etc
/config
/fwknopd
]; then
127 if [ $UCI_ENABLED -eq 0 ]; then
128 if [ -f $USER_CONFIG_PATH ] ; then
129 # Scan user configuration for PCAP_INTF settings
130 DEPEND_IFNAME
="$( sed -ne '/^\s*PCAP_INTF\s\+/ { s/^\s*PCAP_INTF\s\+//; s/\s\+$//; p; q; }' /etc/fwknop/fwknopd.conf )"
131 if [ -n "$DEPEND_IFNAME" ]; then
132 logger
-p daemon.debug
-t "fwknopd[----]" "Found fwknopd.conf configuration, using PCAP_INTF interface $DEPEND_IFNAME"
134 logger
-p daemon.info
-t "fwknopd[----]" "No PCAP_INTF interface specified in fwknopd.conf, fwknopd's default $DEFAULT_FWKNOPD_IFNAME will be used"
135 DEPEND_IFNAME
="$DEFAULT_FWKNOPD_IFNAME"
138 logger
-p daemon.error
-t "fwknopd[----]" "No $USER_CONFIG_PATH found, not starting"
141 elif [ $UCI_ENABLED -eq 1 ]; then
142 if [ -n "$NETWORK" ] && [ -n "$PCAP_INTF" ]; then
143 logger
-p daemon.warn
-t "fwknopd[----]" "Specified both network and PCAP_INTF. Ignoring PCAP_INTF"
144 elif [ -z "$NETWORK" ] && [ -z "$PCAP_INTF" ]; then
145 # Fallback - compatibility with old script, which used wan interface by default
146 logger
-p daemon.info
-t "fwknopd[----]" "Neither network, nor PCAP_INTF interface specified, trying network $DEFAULT_UCI_NETWORK"
147 NETWORK
="$DEFAULT_UCI_NETWORK"
150 if [ -n "$NETWORK" ]; then
151 .
/lib
/functions
/network.sh
152 network_get_physdev DEPEND_IFNAME
"$NETWORK"
153 if [ -n "$DEPEND_IFNAME" ]; then
154 logger
-p daemon.debug
-t "fwknopd[----]" "Resolved network $NETWORK as interface $DEPEND_IFNAME"
156 logger
-p daemon.warn
-t "fwknopd[----]" "Cannot find interface for network $NETWORK, fwknopd's default $DEFAULT_FWKNOPD_IFNAME will be used"
157 DEPEND_IFNAME
="$DEFAULT_FWKNOPD_IFNAME"
159 elif [ -n "$PCAP_INTF" ]; then
160 DEPEND_IFNAME
="$PCAP_INTF"
161 logger
-p daemon.debug
-t "fwknopd[----]" "Using configured PCAP_INTF interface $DEPEND_IFNAME"