~upstart-devel/upstart/upstart-jobs

« back to all changes in this revision

Viewing changes to vivid/etc/init.d/tayga

  • Committer: Dimitri John Ledkov
  • Date: 2014-11-19 12:58:41 UTC
  • Revision ID: dimitri.j.ledkov@intel.com-20141119125841-98dr37roy8dvcv3b
auto update

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
#
 
3
# Copyright (c) 2007 Javier Fernandez-Sanguino <jfs@debian.org>
 
4
# Modified by Andrew Shadura <bugzilla@tut.by>
 
5
#
 
6
# This is free software; you may redistribute it and/or modify
 
7
# it under the terms of the GNU General Public License as
 
8
# published by the Free Software Foundation; either version 2,
 
9
# or (at your option) any later version.
 
10
#
 
11
# This is distributed in the hope that it will be useful, but
 
12
# WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
# GNU General Public License for more details.
 
15
#
 
16
# You should have received a copy of the GNU General Public License with
 
17
# the Debian operating system, in /usr/share/common-licenses/GPL;  if
 
18
# not, write to the Free Software Foundation, Inc., 59 Temple Place,
 
19
# Suite 330, Boston, MA 02111-1307 USA
 
20
#
 
21
### BEGIN INIT INFO
 
22
# Provides:          tayga
 
23
# Required-Start:    $network $local_fs $remote_fs
 
24
# Required-Stop:     $remote_fs
 
25
# Should-Start:      
 
26
# Should-Stop:
 
27
# Default-Start:     2 3 4 5
 
28
# Default-Stop:      0 1 6
 
29
# Short-Description: userspace NAT64
 
30
# Description: TAYGA is a stateless NAT64 userspace daemon.  Using the
 
31
#               in-kernel TUN network driver, TAYGA receives IPv4 and
 
32
#               IPv6 packets, translates them to the other protocol,
 
33
#               and sends the translated packets back using the same
 
34
#               TUN interface.
 
35
### END INIT INFO
 
36
 
 
37
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
38
 
 
39
DAEMON=/usr/sbin/tayga # Introduce the server's location here
 
40
NAME=tayga                    # Introduce the short server's name here
 
41
DESC="userspace NAT64"   # Introduce a short description here
 
42
 
 
43
PIDFILE=/var/run/$NAME.pid
 
44
 
 
45
test -x "$DAEMON" || exit 0
 
46
 
 
47
. /lib/lsb/init-functions
 
48
 
 
49
# Default options, these can be overriden by the information
 
50
# at /etc/default/$NAME
 
51
DAEMON_OPTS="--nodetach"          # Additional options given to the server
 
52
 
 
53
DIETIME=10              # Time to wait for the server to die, in seconds
 
54
                        # If this value is set too low you might not
 
55
                        # let some servers to die gracefully and
 
56
                        # 'restart' will not work
 
57
 
 
58
STARTTIME=2             # Time to wait for the server to start, in seconds
 
59
                        # If this value is set each time the server is
 
60
                        # started (on start or restart) the script will
 
61
                        # stall to try to determine if it is running
 
62
                        # If it is not set and the server takes time
 
63
                        # to setup a pid file the log message might
 
64
                        # be a false positive (says it did not start
 
65
                        # when it actually did)
 
66
 
 
67
TUN_DEVICE=$(sed -rn "/^[ \t]*tun-device/s/^[ \t]*tun-device[ \t]+//p" /etc/tayga.conf)
 
68
IPV6_PREFIX=$(sed -rn "/^[ \t]*prefix/s/^[ \t]*prefix[ \t]+//p" /etc/tayga.conf)
 
69
DYNAMIC_POOL=$(sed -rn "/^[ \t]*dynamic-pool/s/^[ \t]*dynamic-pool[ \t]+//p" /etc/tayga.conf)
 
70
CONFIGURE_IFACE="no"
 
71
CONFIGURE_NAT44="no"
 
72
 
 
73
# Include defaults if available
 
74
if [ -f "/etc/default/$NAME" ] ; then
 
75
    . "/etc/default/$NAME"
 
76
fi
 
77
 
 
78
if [ "$RUN" != "yes" ] ; then
 
79
    log_failure_msg "$NAME disabled, please adjust the configuration to your needs "
 
80
    log_failure_msg "and then set RUN to 'yes' in /etc/default/$NAME to enable it."
 
81
    exit 0
 
82
fi
 
83
 
 
84
set -e
 
85
 
 
86
running_pid() {
 
87
# Check if a given process pid's cmdline matches a given name
 
88
    pid="$1"
 
89
    name="$2"
 
90
    [ -z "$pid" ] && return 1
 
91
    [ ! -d "/proc/$pid" ] &&  return 1
 
92
    return 0
 
93
}
 
94
 
 
95
running() {
 
96
# Check if the process is running looking at /proc
 
97
# (works for all users)
 
98
 
 
99
    # No pidfile, probably no daemon present
 
100
    [ ! -f "$PIDFILE" ] && return 1
 
101
    pid=$(cat $PIDFILE)
 
102
    running_pid "$pid" "$DAEMON" || return 1
 
103
    return 0
 
104
}
 
105
 
 
106
start_server() {
 
107
    if [ "$CONFIGURE_IFACE" = "yes" ] ; then
 
108
                "$DAEMON" --mktun | logger -t "$NAME" -i
 
109
                ip link set "$TUN_DEVICE" up
 
110
                [ -n "$DYNAMIC_POOL" ] && ip route add "$DYNAMIC_POOL" dev "$TUN_DEVICE"
 
111
                [ -n "$IPV6_PREFIX" ] && ip route add "$IPV6_PREFIX" dev "$TUN_DEVICE"
 
112
                [ -n "$IPV4_TUN_ADDR" ] && ip addr add "$IPV4_TUN_ADDR" dev "$TUN_DEVICE"
 
113
                [ -n "$IPV6_TUN_ADDR" ] && ip addr add "$IPV6_TUN_ADDR" dev "$TUN_DEVICE"
 
114
    fi
 
115
    [ "$CONFIGURE_NAT44" = "yes" ] && [ -n "$DYNAMIC_POOL" ] && iptables -t nat -A POSTROUTING -s "$DYNAMIC_POOL" -j MASQUERADE || true
 
116
 
 
117
        start-stop-daemon --start --quiet \
 
118
                -b --exec "$DAEMON" --  --pidfile "$PIDFILE" $DAEMON_OPTS
 
119
}
 
120
 
 
121
stop_server() {
 
122
        start-stop-daemon --stop --quiet --pidfile "$PIDFILE"
 
123
        errcode=$?
 
124
        if [ "$CONFIGURE_IFACE" = "yes" ] ; then
 
125
                ip link set "$TUN_DEVICE" down
 
126
                "$DAEMON" --rmtun | logger -t "$NAME" -i
 
127
        fi
 
128
        [ "$CONFIGURE_NAT44" = "yes" ] && [ -n "$DYNAMIC_POOL" ] && iptables -t nat -D POSTROUTING -s "$DYNAMIC_POOL" -j MASQUERADE || true
 
129
        rm -f "$PIDFILE"
 
130
 
 
131
        return $errcode
 
132
}
 
133
 
 
134
force_stop() {
 
135
# Force the process to die killing it manually
 
136
    [ ! -e "$PIDFILE" ] && return
 
137
    if running ; then
 
138
        kill -15 $pid
 
139
        # Is it really dead?
 
140
        sleep "$DIETIME"s
 
141
        if running ; then
 
142
            kill -9 $pid
 
143
            sleep "$DIETIME"s
 
144
            if running ; then
 
145
                echo "Cannot kill $NAME (pid=$pid)!"
 
146
                exit 1
 
147
            fi
 
148
        fi
 
149
    fi
 
150
    rm -f "$PIDFILE"
 
151
}
 
152
 
 
153
 
 
154
case "$1" in
 
155
  start)
 
156
        log_daemon_msg "Starting $DESC" "$NAME"
 
157
        # Check if it's running first
 
158
        if running ;  then
 
159
            log_progress_msg "apparently already running"
 
160
            log_end_msg 0
 
161
            exit 0
 
162
        fi
 
163
        if start_server ; then
 
164
            # NOTE: Some servers might die some time after they start,
 
165
            # this code will detect this issue if STARTTIME is set
 
166
            # to a reasonable value
 
167
            [ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time 
 
168
            if  running ;  then
 
169
                # It's ok, the server started and is running
 
170
                log_end_msg 0
 
171
            else
 
172
                # It is not running after we did start
 
173
                log_end_msg 1
 
174
            fi
 
175
        else
 
176
            # Either we could not start it
 
177
            log_end_msg 1
 
178
        fi
 
179
        ;;
 
180
  stop)
 
181
        log_daemon_msg "Stopping $DESC" "$NAME"
 
182
        if running ; then
 
183
            # Only stop the server if we see it running
 
184
            errcode=0
 
185
            stop_server || errcode=$?
 
186
            log_end_msg $errcode
 
187
        else
 
188
            # If it's not running don't do anything
 
189
            log_progress_msg "apparently not running"
 
190
            log_end_msg 0
 
191
            exit 0
 
192
        fi
 
193
        ;;
 
194
  force-stop)
 
195
        # First try to stop gracefully the program
 
196
        $0 stop
 
197
        if running; then
 
198
            # If it's still running try to kill it more forcefully
 
199
            log_daemon_msg "Stopping (force) $DESC" "$NAME"
 
200
            errcode=0
 
201
            force_stop || errcode=$?
 
202
            log_end_msg $errcode
 
203
        fi
 
204
        ;;
 
205
  restart|force-reload)
 
206
        log_daemon_msg "Restarting $DESC" "$NAME"
 
207
        errcode=0
 
208
        stop_server || errcode=$?
 
209
        # Wait some sensible amount, some server need this
 
210
        [ -n "$DIETIME" ] && sleep $DIETIME
 
211
        start_server || errcode=$?
 
212
        [ -n "$STARTTIME" ] && sleep $STARTTIME
 
213
        running || errcode=$?
 
214
        log_end_msg $errcode
 
215
        ;;
 
216
  status)
 
217
 
 
218
        log_daemon_msg "Checking status of $DESC" "$NAME"
 
219
        if running ;  then
 
220
            log_progress_msg "running"
 
221
            log_end_msg 0
 
222
        else
 
223
            log_progress_msg "apparently not running"
 
224
            log_end_msg 1
 
225
            exit 1
 
226
        fi
 
227
        ;;
 
228
  # Use this if the daemon cannot reload
 
229
  reload)
 
230
        log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon"
 
231
        log_warning_msg "cannot re-read the config file (use restart)."
 
232
        ;;
 
233
  *)
 
234
        N=/etc/init.d/$NAME
 
235
        echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2
 
236
        exit 1
 
237
        ;;
 
238
esac
 
239
 
 
240
exit 0