1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#!/bin/sh
set -e
DESTDIR=$PWD/live
KVERS=${KVERS:-`uname -r`}
MODULES_DIR="$DESTDIR/lib/modules/$KVERS/misc"
XPP_SYNC=auto
AST_SCRIPT=/etc/init.d/asterisk
# Use this file to pass options to modules:
MODPROBE_FILE=$DESTDIR/modprobe.conf
PERLLIBDIR=`perl -V:sitelib | cut -d "'" -f 2`
# Manual list of modules. They will be loaded by insmod.
# If reside in a subdir, add it explicitly.
MODULES_LOAD="zaptel xpp/xpp xpp/xpd_fxs xpp/xpd_fxo xpp/xpp_usb"
if [ -r $DESTDIR/live.conf ]; then . $DESTDIR/live.conf; fi
# Initialize the Xorcom Astribank (xpp/) using perl utiliites:
# intended to replace all the the three functions below if user has
# installed the zaptel-perl utilities.
xpp_startup() {
# do nothing if there are no astribank devices:
if ! grep -q connected /proc/xpp/xbuses 2>/dev/null; then return 0; fi
echo "Waiting for Astribank devices to initialize:"
cat /proc/xpp/XBUS-[0-9]*/waitfor_xpds 2>/dev/null || true
# overriding locales for the above two, as perl can be noisy
# when locales are missing.
# No register all the devices if they didn't auto-register:
LC_ALL=C zt_registration on
# this one could actually be run after ztcfg:
LC_ALL=C xpp_sync "$XPP_SYNC"
}
# recursively unload a module and its dependencies, if possible.
# where's modprobe -r when you need it?
# inputs: module to unload.
# returns: the result from
unload_module() {
module="$1"
line=`lsmod 2>/dev/null | grep "^$1 "`
if [ "$line" = '' ]; then return; fi # module was not loaded
set -- $line
# $1: the original module, $2: size, $3: refcount, $4: deps list
mods=`echo $4 | tr , ' '`
# xpp_usb keeps the xpds below busy if an xpp hardware is
# connected. Hence must be removed before them:
case "$module" in xpd_*) mods="xpp_usb $mods";; esac
for mod in $mods; do
# run in a subshell, so it won't step over our vars:
(unload_module $mod)
# TODO: the following is probably the error handling we want:
# if [ $? != 0 ]; then return 1; fi
done
rmmod $module
}
usage() {
me=`basename $0`
echo "$me: Run Zaptel in a test environment"
echo 'Version: $Id$'
echo ''
echo "Usage: equivalent of:"
echo "$me install make install"
echo "$me config make config"
echo "$me unload /etc/init.d/zaptel stop"
echo "$me load /etc/init.d/zaptel start"
}
# Give priority to our installed binaries:
PATH=$DESTDIR/sbin:$DESTDIR/usr/sbin:$PATH
export PATH
# TODO: If you already use PERL5DIR, please fix this part:
PERL5LIB="$DESTDIR/$PERLLIBDIR"
export PERL5LIB
case "$1" in
install)
make install DESTDIR=$DESTDIR
;;
config)
make config DESTDIR=$DESTDIR
touch $MODPROBE_FILE
mkdir -p $DESTDIR/etc/asterisk
;;
unload)
$AST_SCRIPT stop
unload_module zaptel
;;
load)
# TODO: Find a way to use modprobe.
# Or implement a way to pass arguments to modules here (yuck)
for module in $MODULES_LOAD; do
insmod $MODULES_DIR/$module.ko
done
xpp_startup
ZAPTEL_FILE=$DESTDIR/etc/zaptel.conf \
ZAPATA_FILE=$DESTDIR/etc/asterisk/zapata-channels.conf \
zapconf
ztcfg
# TODO: fxotune, hpec
# or find a way to reuse init.d start sequence.
# TODO: A local copy of Asterisk, configured with zapconf.
# doable, but trickier.
$AST_SCRIPT start
;;
help)
usage
;;
*)
echo >&2 "$0: Error: incorrect command \"$1\". Aborting"
usage
exit 1
esac
|