Настройка DVB карт SkyStar1 на FreeBSD

Что ставить? FreeBSD !

Windows в качестве десктопа это еще куда ни шло, но Windows в качестве роутера - это нонсенс. Windows 2003 Server (самая свежая на данный момент операционная система семейства Windows) без установленных заплаток и патчей при подключении к общественным сетям работает 15-20 секунд, а потом выдает сообщение "NT AUTHORITYSYSTEM Failed" и перезагружается. Установка заплат и патчей тоже не панацея - дырки и лазейки в Windows находят чуть ли не каждый день. Напрашивается неутешительный вывод - Windows, Интернет и безопасность вещи не совместимые.

Разбираться в настройках глючных ядер пингвинячьего выводка нет ни сил, ни времени, ни желания.

Последние сомнения отпали после того, как были найдены драйвера для карточки SkyStar1 под FreeBSD.

Драйверов под FreeBSD4-STABLE было найдено два варианта. Один из которых оказался тем самым первым блином, который комом, зато второй вариант оказался рабочим.

0. Готовим ядрышки каленые.

В конфигурацию ядра надо добавить строки:

options IPFIREWALL #firewall

options IPFIREWALL_VERBOSE #enable logging to syslogd(8)

options IPFIREWALL_FORWARD #enable transparent proxy support

options IPFIREWALL_VERBOSE_LIMIT=100 #limit verbosity

options IPDIVERT #divert sockets

options IPSTEALTH #support for stealth forwarding

options TCPDEBUG

options MBUF_STRESS_TEST

options RANDOM_IP_ID

options TCP_DROP_SYNFIN #drop TCP packets with SYN+FIN

options DUMMYNET

options IPFW2

Исключительно для того, чтобы собрать ядро с поддержкой ipfw2 и divert, которые потребуются для настройки маршрутизации.

Конфигурируем, собираем, устанавливаем и тут же опробываем новое ядро.

#config kernelname

#cd ../../kernelname

#make depend && make && make install && reboot

1. Приводим драйвера к нормальному виду.

Проблема заключается в том, что на консоль постоянно сыпятся ошибки вроде:

Apr 15 20:39:55 serv /kernel: skystar: bad net_ioctl c0206947

Apr 15 20:39:55 serv /kernel: skystar: bad net_ioctl SIOCGIFMEDIA

Apr 15 20:39:55 serv /kernel: skystar: bad net_ioctl c020693a

Apr 15 20:39:55 serv /kernel: skystar: bad net_ioctl c01c69eb

Apr 15 20:39:55 serv /kernel: skystar: bad net_ioctl c331693b

Патч убирает именно эти сообщения. Качаем драйвера, распаковываем архив skystar1-20021126b.tgz и качаем патч, убирающий вывод всякой фигни, патч складываем в директорию skystar/driver, патчим, компилируем, копируем полученный модуль в каталог к остальным модулям и создаем символьное устройство.

#fetch http://nobodyman.plhs.ru/download/skystar1-20021126b.tgz

#tar -xzvf skystar1-20021126b.tgz

#cd skystar/driver

#fetch http://nobodyman.plhs.ru/download/skystart.patch

#patch < skystar.patch

#make

#cp skystar.ko /modules/.

#mknod /dev/skystar0 c 92 0

Драйвер готов, теперь очередь за фронтендом к карте.

2. Frontend dvbd.

В процессе настройки dvbd, идущего в комлекте с драйверами, выяснилась одна маленькая неприятность: на спутнике AM22 используется режим спектральной инверсии, который dvbd не поддерживает. К счастью, нашелся вариант dvbd от Serg Gorokhovatsky aka Userg, который исправил именно эту проблему.

Качаем, компилируем, устанавливаем.

#fetch http://nobodyman.plhs.ru/download/dvbd-20050121.tgz

#tar -xzvf dvbd-20050121.tgz

#cd dvbd-20050121/dvbd

#make && make install

3. Настройка dvbd.

Параметры для каждого спутника можно найти на http://www.spacegate.com.ua/rus/install/param.shtml

Создадим свой файл nss6.dvbd.conf следущего содержания для системы, настраиваемой на спутник NSS6:

#==========================================

# DVB receiver configuration file for NSS6

#==========================================

# LNB power on=1/off=0

power 1

# symbol rate [symbol/sec]

symbolrate 27672000

# frequency [kHz]

frequency 11635000

#lnb frequency[kHz]

lnb 9750000

# 22 kHz signal on=1/off=0

ttk 0

# diseqc on=1/off=0

diseqc 1

# AFC on=1/off=0

AFC 1

# FEC 1..8, 0-auto

FEC 0

# polarisation H=1/V=0

polarisation 1

# inversion yes=1/no=0

inversion 0

# interface name to get IP to filter0

interface xl0

# filter 0 - only PID, MAC is calculated from IP

filter_0 1024

# filters 1-9 PID and MAC

filter_1 1024 YY:YY:YY:YY:YY:YY

и am22.dvbd.conf для спутника Express AM22:

#==========================================

# DVB receiver configuration file for AM22

#==========================================

# LNB power on=1/off=0

power 1

# symbol rate [symbol/sec]

symbolrate 20318000

# frequency [kHz]

frequency 10966750

#lnb frequency[kHz]

lnb 9750000

# 22 kHz signal on=1/off=0

ttk 0

# diseqc on=1/off=0

diseqc 0

# AFC on=1/off=0

AFC 1

# FEC 1..8, 0-auto

FEC 0

# polarisation H=1/V=0

polarisation 0

inversion 1

# interface name to get IP to filter0

interface xl0

# filter 0 - only PID, MAC is calculated from IP

filter_0 7000

# filters 1-9 PID and MAC

filter_1 7000 YY:YY:YY:YY:YY:YY

В приведенном коде изменяем YY:YY:YY:YY:YY:YY на MAC-адрес Вашей skystar1, а xl0 на Ваш наземный интерфейс. Расположим полученные файлы в /usr/local/etc.

4. Запуск модуля ядра и демона dvbd.

Загружаем полученный модуль.

#kldload skystar.ko

После старта модуля на консоль должно выпасть примерно следующее:

Apr 15 20:44:36 serv /kernel: skystar0: mem 0xf9fffc00-

Apr 15 20:44:36 serv /kernel: DEBUG: skystar_attach called

Apr 15 20:44:36 serv /kernel: skystar0: DEBUG: skystar memory buffers allocated.

Apr 15 20:44:37 serv /kernel: skystar0: skystar_attach: rev:1, mem:0x00000001.

Apr 15 20:44:37 serv /kernel: skystar0: DEBUG: initializing DVB hardware...

Apr 15 20:44:37 serv /kernel: DEBUG: booting ARM ...

Apr 15 20:44:37 serv /kernel: bootarm: debi test OK

Apr 15 20:44:37 serv /kernel: bootarm: load boot code

Apr 15 20:44:37 serv last message repeated 25 times

Apr 15 20:44:37 serv /kernel: bootarm: load dram code

Apr 15 20:44:37 serv /kernel: bootarm: load dpram code

Apr 15 20:44:37 serv /kernel: dvb: ARM firmware successfully loaded.

Apr 15 20:44:37 serv /kernel: DEBUG: OutCommand d06:(0) called

Apr 15 20:44:37 serv /kernel: dvb: firmware = 2c001fc0

Apr 15 20:44:37 serv /kernel: skystar: i2c_busy_rise_and_fall: error in address phase

Apr 15 20:44:37 serv /kernel: skystar: i2c_write_out; error in address phase

Apr 15 20:44:37 serv /kernel: skystar: i2c_transfer: error in address phase

Apr 15 20:44:37 serv /kernel: skystar: i2c_reset: busy_state detected

Apr 15 20:44:37 serv /kernel: saa7146: i2c_reset: error_state detected, status:0x0000

Apr 15 20:44:37 serv /kernel: skystar: STV0299 found, assume rev 1.5

Apr 15 20:44:37 serv /kernel: DEBUG: init_net

Apr 15 20:44:37 serv /kernel: skystar0: MAC address: YY:YY:YY:YY:YY:YY

Apr 15 20:44:37 serv /kernel: DEBUG: OutCommand b00:(4) called

Apr 15 20:44:37 serv /kernel: DEBUG: OutCommand b06:(8) called

Apr 15 20:44:37 serv /kernel: DEBUG: OutCommand b06:(8) called

Apr 15 20:44:37 serv /kernel: skystar: set22k: 1

Apr 15 20:44:37 serv /kernel: DEBUG: OutCommand b02:(2) called

Если требуемая картинка наблюдается, то все нормально - карта найдена, а модуль загружен, и можно продолжать. Если нет, то, вероятно, у Вас не skystar1.

Назначаем устройству dvb0 (нашей skystar1) IP, выданный провайдером спутника.

#/sbin/ifconfig dvb0 inet 192.168.XXX.XXX/32

Запускаем фронтенд для NSS6:

/usr/bin/dvbd -c /usr/local/etc/nss6.dvbd.conf

или для Express AM22:

/usr/bin/dvbd -c /usr/local/etc/am22.dvbd.conf

Строки:

Network device: xl0

Filter_0: PID=YYYY

Local ip is XXX:XXX:XXX:XXX

D:Setting filter ...

D:setfilter OK

Sync = 31 Afc = 0 Agc = 225 Nest = 7455 Vber = 0 Err = 0 Level = 58%

в консоли означают, что dvbd запущен. Особое внимание стоит обратить на Sync = 31 и Level = 58%, при меньших значениях долгожданного интернета не получится.

Создадим скрипт 0000_skystar.sh в /usr/local/etc/rc.d, который при старте системы будет загружать модуль skystar.ko и запускать демона dvbd следующего содержания:

#!/bin/sh

/sbin/kldload skystar.ko

/sbin/ifconfig dvb0 inet 192.168.XXX.XXX/32

/usr/bin/dvbd -q -c /usr/local/etc/am22.dvbd.conf

DVB карта работает, сигнал до спутника есть, а о настройке gre туннеля в следующей статье.

P.S. Соблюдать технологический процесс надо - кроликов сначала душат, а потом глотают.

Обновлено: 12.03.2015