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'.
11 FWKNOPD_BIN
=/usr
/sbin
/fwknopd
15 generate_configuration
18 procd_set_param
command "$FWKNOPD_BIN" --foreground --syslog-enable
19 procd_set_param respawn
21 if [ $UCI_ENABLED -eq 1 ]; then
22 procd_append_param
command -c /var
/etc
/fwknopd.conf
23 procd_append_param
command -a /var
/etc
/access.conf
26 procd_append_param
command -i "$DEPEND_IFNAME"
27 procd_set_param netdev
"$DEPEND_IFNAME"
34 procd_add_reload_trigger
"fwknopd"
41 1|on|true|
yes|enabled
) _tmp
=1;;
42 0|off|false|no|disabled
) _tmp
=0;;
48 generate_configuration
()
50 [ -f /tmp
/access.conf.tmp
] && rm /tmp
/access.conf.tmp
56 local USER_CONFIG_PATH
=/etc
/fwknop
/fwknopd.conf
57 local DEFAULT_UCI_NETWORK
=wan
58 local DEFAULT_FWKNOPD_IFNAME
=eth0
63 if [ "$type" = "global" ]; then
67 if [ "$option" = "uci_enabled" ] && [ "$(get_bool "$value" 0)" -eq 1 ] ; then
68 > /var
/etc
/fwknopd.conf
69 > /var
/etc
/access.conf
70 chmod 600 /var
/etc
/fwknopd.conf
71 chmod 600 /var
/etc
/access.conf
75 elif [ "$type" = "network" ]; then
79 if [ $UCI_ENABLED -eq 1 ] && [ $option = "network" ]; then
83 elif [ "$type" = "config" ]; then
87 if [ $UCI_ENABLED -eq 1 ] && [ $option = "PCAP_INTF" ]; then
89 echo "$option $value" >> /var
/etc
/fwknopd.conf
#writing each option to fwknopd.conf
90 elif [ $UCI_ENABLED -eq 1 ]; then
91 echo "$option $value" >> /var
/etc
/fwknopd.conf
#writing each option to fwknopd.conf
94 elif [ "$type" = "access" ]
96 if [ -f /tmp
/access.conf.tmp
] ; then
97 cat /tmp
/access.conf.tmp
>> /var
/etc
/access.conf
98 rm /tmp
/access.conf.tmp
103 if [ $UCI_ENABLED -eq 1 ] && [ $option = "SOURCE" ]; then
104 echo "$option $value" >> /var
/etc
/access.conf
#writing each option to access.conf
106 if [ $UCI_ENABLED -eq 1 ] && [ $option != "SOURCE" ]; then
107 echo "$option $value" >> /tmp
/access.conf.tmp
#writing each option to access.conf
111 option_cb
() { return; }
112 if [ -z "$type" ]; then
114 if [ -f /tmp
/access.conf.tmp
] ; then
115 cat /tmp
/access.conf.tmp
>> /var
/etc
/access.conf
116 rm /tmp
/access.conf.tmp
122 if [ -f /etc
/config
/fwknopd
]; then
126 if [ $UCI_ENABLED -eq 0 ]; then
127 if [ -f $USER_CONFIG_PATH ] ; then
128 # Scan user configuration for PCAP_INTF settings
129 DEPEND_IFNAME
="$( sed -ne '/^\s*PCAP_INTF\s\+/ { s/^\s*PCAP_INTF\s\+//; s/\s\+$//; p; q; }' /etc/fwknop/fwknopd.conf )"
130 if [ -n "$DEPEND_IFNAME" ]; then
131 logger
-p daemon.debug
-t "fwknopd[----]" "Found fwknopd.conf configuration, using PCAP_INTF interface $DEPEND_IFNAME"
133 logger
-p daemon.info
-t "fwknopd[----]" "No PCAP_INTF interface specified in fwknopd.conf, fwknopd's default $DEFAULT_FWKNOPD_IFNAME will be used"
134 DEPEND_IFNAME
="$DEFAULT_FWKNOPD_IFNAME"
137 logger
-p daemon.error
-t "fwknopd[----]" "No $USER_CONFIG_PATH found, not starting"
140 elif [ $UCI_ENABLED -eq 1 ]; then
141 if [ -n "$NETWORK" ] && [ -n "$PCAP_INTF" ]; then
142 logger
-p daemon.warn
-t "fwknopd[----]" "Specified both network and PCAP_INTF. Ignoring PCAP_INTF"
143 elif [ -z "$NETWORK" ] && [ -z "$PCAP_INTF" ]; then
144 # Fallback - compatibility with old script, which used wan interface by default
145 logger
-p daemon.info
-t "fwknopd[----]" "Neither network, nor PCAP_INTF interface specified, trying network $DEFAULT_UCI_NETWORK"
146 NETWORK
="$DEFAULT_UCI_NETWORK"
149 if [ -n "$NETWORK" ]; then
150 .
/lib
/functions
/network.sh
151 network_get_physdev DEPEND_IFNAME
"$NETWORK"
152 if [ -n "$DEPEND_IFNAME" ]; then
153 logger
-p daemon.debug
-t "fwknopd[----]" "Resolved network $NETWORK as interface $DEPEND_IFNAME"
155 logger
-p daemon.warn
-t "fwknopd[----]" "Cannot find interface for network $NETWORK, fwknopd's default $DEFAULT_FWKNOPD_IFNAME will be used"
156 DEPEND_IFNAME
="$DEFAULT_FWKNOPD_IFNAME"
158 elif [ -n "$PCAP_INTF" ]; then
159 DEPEND_IFNAME
="$PCAP_INTF"
160 logger
-p daemon.debug
-t "fwknopd[----]" "Using configured PCAP_INTF interface $DEPEND_IFNAME"