This simple script transform a linux box into a DVB-S Satellite router to receive data from Eurobird 9E used by EUMETSAT to redistribute weather satellite image.
REQUIRE: DVB Tools SMCroute PCI Card supported by Linux/DVB Tools (ex. Skystar 2)
#!/bin/bash
####################################################################
# #
# Leonardo Rizzi #
# Late night 24/04/2010 #
# Revision 1.0 #
# Tune DVB-S pci card for Eurobird 9E shifted from 13E Hotbird #
# Tune, set net PID, Enable multicasting ecc. ecc. blah blah buuuu #
# #
####################################################################
#Globalvar
DTUNE="/usr/bin/dvbtune"
DNET="/usr/bin/dvbnet"
MROUTE="/usr/sbin/smcroute"
IFCONFIG="/sbin/ifconfig"
SERVICE="eumetsat"
#Set dvbcard 0-3
INT="0"
#Set multicast forwarding interface and ip (by default TelliCast bind on 192.168.238.238)
MINT="eth1"
MIP="192.168.238.238"
#Set absolute frequency in Hz
FREQ=11977000
#Set polarization
POL=H
#Set symbol rate
SYR=27500
#Set PID one space for value separation
PID="100 300 301 302 500 509 510 511"
#Begin start!!
case "$1" in
start)
# Pre-Start check
test -x $DTUNE || { echo "$DTUNE not installed or not configured properly";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
test -x $DNET || { echo "$DNET not installed or not configured properly";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
test -x $MROUTE || { echo "$MROUTE not installed or not configured properly";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
test -x $IFCONFIG || { echo "$IFCONFIG not installed or not configured properly";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
test -d /dev/dvb/adapter$INT || { echo "DVB$INT device not installed or not configured properly";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
# Tuning the dvb frequency
echo ""
echo "Tune the satellite donwlink on interface ${INT}"
${DTUNE} -c ${INT} -f ${FREQ} -p ${POL} -s ${SYR} -m >/dev/null 2>&1 &
# Set address on local forwarding interface and bring it up
echo ""
echo "Set multicast forwarding interface ${MINT}"
${IFCONFIG} ${MINT} ${MIP} multicast up
# Set PID on active dvb interface
echo ""
echo "Set net interface for listed PID:"
for i in ${PID}
do
echo "Bring up PID $i"
${DNET} -a ${INT} -p $i>/dev/null 2>&1
done
# Set address on dvbs interfaces and bring it up
echo ""
echo "Set net interface up:"
for ii in {0..7}
do
echo "Bring up dvb net interface $ii"
${IFCONFIG} dvb${INT}_$ii 192.168.22$ii.238 up >/dev/null 2>&1
done
# Start multicast router
echo ""
echo "Enable Multicast Router"
${MROUTE} -d
#PID 100 multicast forward
echo "Set multicast for PID 100"
${MROUTE} -a dvb0_0 192.168.1.1 224.223.222.34 ${MINT}
${MROUTE} -a dvb0_0 192.168.1.1 224.223.222.36 ${MINT}
${MROUTE} -a dvb0_0 192.168.1.1 224.223.222.40 ${MINT}
${MROUTE} -a dvb0_0 192.168.1.1 224.223.222.223 ${MINT}
#PID 300 multicast forward
echo "Set multicast for PID 300"
${MROUTE} -a dvb0_1 192.168.1.1 224.223.222.21 ${MINT}
${MROUTE} -a dvb0_1 192.168.1.1 224.223.222.31 ${MINT}
${MROUTE} -a dvb0_1 192.168.1.1 224.223.222.32 ${MINT}
${MROUTE} -a dvb0_1 192.168.1.1 224.223.222.37 ${MINT}
${MROUTE} -a dvb0_1 192.168.1.1 224.223.222.226 ${MINT}
${MROUTE} -a dvb0_1 192.168.1.1 224.223.222.252 ${MINT}
${MROUTE} -a dvb0_1 192.168.1.1 224.223.222.253 ${MINT}
#PID 301 multicast forward
echo "Set multicast for PID 301"
${MROUTE} -a dvb0_2 192.168.1.1 224.223.222.23 ${MINT}
${MROUTE} -a dvb0_2 192.168.1.1 224.223.222.33 ${MINT}
${MROUTE} -a dvb0_2 192.168.1.1 224.223.222.38 ${MINT}
${MROUTE} -a dvb0_2 192.168.1.1 224.223.222.39 ${MINT}
${MROUTE} -a dvb0_2 192.168.1.1 224.223.222.35 ${MINT}
${MROUTE} -a dvb0_2 192.168.1.1 224.223.222.227 ${MINT}
${MROUTE} -a dvb0_2 192.168.1.1 224.223.222.251 ${MINT}
#PID 302 multicast forward
echo "Set multicast for PID 302"
${MROUTE} -a dvb0_3 192.168.1.1 224.223.222.25 ${MINT}
#PID 500 multicast forward
echo "Set multicast for PID 500"
${MROUTE} -a dvb0_4 192.168.1.1 224.223.222.1 ${MINT}
${MROUTE} -a dvb0_4 192.168.1.1 224.223.222.22 ${MINT}
${MROUTE} -a dvb0_4 192.168.1.1 224.223.222.28 ${MINT}
${MROUTE} -a dvb0_4 192.168.1.1 224.223.222.27 ${MINT}
${MROUTE} -a dvb0_4 192.168.1.1 224.223.222.29 ${MINT}
${MROUTE} -a dvb0_4 192.168.1.1 224.223.222.30 ${MINT}
#PID 509 multicast forward
echo "Set multicast for PID 509"
${MROUTE} -a dvb0_5 192.168.1.1 224.223.222.248 ${MINT}
${MROUTE} -a dvb0_5 192.168.1.1 224.223.222.249 ${MINT}
${MROUTE} -a dvb0_5 192.168.1.1 224.223.222.250 ${MINT}
#PID 510 multicast forward
echo "Set multicast for PID 510"
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.231 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.232 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.233 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.234 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.235 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.236 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.237 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.239 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.240 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.242 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.243 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.244 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.245 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.246 ${MINT}
${MROUTE} -a dvb0_6 192.168.1.1 224.223.222.247 ${MINT}
sleep 5
;;
stop)
# Stopping the dvb card
echo ""
echo "Stopping Satellite Downlink"
killall dvbtune >/dev/null 2>&1
echo ""
echo "Stopping Multicast Routing"
# Stopping Multicast Router
${MROUTE} -k
# Disable dvbs interfaces and remove active PID
echo ""
echo "Shutting down DVB-S interfaces"
for iii in {0..7}
do
/sbin/ifconfig dvb0_$iii down >/dev/null 2>&1
${DNET} -d $iii >/dev/null 2>&1
done
# Remove and disable multicasting forwarding interface
echo ""
echo "Shutting down multicasting forwarding interface"
${IFCONFIG} ${MINT} del ${MIP} multicast
${IFCONFIG} ${MINT} down
;;
restart)
$0 stop
$0 start
;;
status)
PID1='pidof dvbtune'
echo ""
echo "Tuning subsystem running at pid" $PID1
PID2='pidof smcroute'
echo ""
echo "Mulicast router running at pid" $PID2
;;
multicast)
echo "Multicasting Routing table:"
ip mroute show
;;
*)
echo "Usage: $0 [start|stop|restart|status|multicast]"
;;
esac
exit;s