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