This tutorial describes how to setup tellicast-client software for reception of EUMETCast with Ayecka SR1.
I have tested this installation steps in Fedora 20 and CentOS 7 on different computers based on x86_64 architecture and kernel version 3.10.0.
I expect to do all operations as root. Although EUMETSAT delivers software packages will several support script, there are not completely up to date and for better diagnostics and setting it is better during the first setup to start everything manually as it is described below.
All important settings related to Ayecka SR1 are described on page EUMETCAST EUROPE MIGRATING FROM DVB-S TO DVB-S2 in document PDF_DVB_SR1_GUIDE.pdf and on this page they are some details that can help you to setup your GNU/Linux station.
First of all connect USB "CONTROL" connector, there is automatically added a new device, listed by lsusb:
Bus 001 Device 027: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
This USB serial interface appear probably as /dev/ttyUSB0 (or different ttyUSBx if you have any other USB serial installed).
This device with id 10c4:ea60 works as new serial port, find your new serial port in listing of dmesg below. You can notice that module cp210x is registered.
[690451.862820] usb 1-4.4.1: new full-speed USB device number 27 using ehci-pci [690451.951860] usb 1-4.4.1: New USB device found, idVendor=10c4, idProduct=ea60 [690451.951865] usb 1-4.4.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [690451.951867] usb 1-4.4.1: Product: CP2102 USB to UART Bridge Controller [690451.951869] usb 1-4.4.1: Manufacturer: Silicon Labs [690451.951870] usb 1-4.4.1: SerialNumber: 0001 [690453.890105] usbcore: registered new interface driver cp210x [690453.890137] usbserial: USB Serial support registered for cp210x [690453.890177] cp210x 1-4.4.1:1.0: cp210x converter detected [690453.890651] usb 1-4.4.1: cp210x converter now attached to ttyUSB0
You can also check that it in /proc/tty/driver/usbserial:
# cat /proc/tty/driver/usbserial usbserinfo:1.0 driver:2.0 0: module:cp210x name:"cp210x" vendor:10c4 product:ea60 num_ports:1 port:0 path:usb-0000:00:12.2-4.4.1
Ayecka's serial port speed is 115200 Bs, 8 bit, no parity and 1 stop bit:
# stty -F /dev/ttyUSB0 speed 115200 baud; line = 0; kill = ^H; min = 100; time = 2; -icrnl -imaxbel -opost -onlcr -isig -icanon -echo
There are several possibilities to access console via this port, the first is screen:
screen /dev/ttyUSB0 115200,cs8
To quit screen session press sequence Ctrl+a Ctrl+k and y to question Really kill this window [y/n].
The second option is Linux version of PuTTY, set device /dev/ttyUSB0 and speed 115200.
I've tries also serial communication program minicom, but you must disable hardware flow control in menu Serial port setup:
+-----------------------------------------------------------------------+ | A - Serial Device : /dev/ttyUSB0 | | | | C - Callin Program : | | D - Callout Program : | | E - Bps/Par/Bits : 115200 8N1 | | F - Hardware Flow Control : No | | G - Software Flow Control : No | | | | Change which setting? | +-----------------------------------------------------------------------+
Start minicom with command:
# minicom -D /dev/ttyUSB0 -s
After connecting serial port press '0' (zero) to establish communication! There will be information similar to this one, note that my SR1 is already tuned to satellite transponder.
================================================================================ SR1c Serial No. 111770 30AAC Run Time: 0:26:51 Software Version 1.05b232 Hardware Version 2.00 Firmware Version 2.02b922 RX1: Active, Locked EUMETCast DVB-S2 1513.000 MHz, DVB-S2 8PSK 3/5, 32.994 Msps, ACM, 8.6 dB RX2: Active, Not Locked Profile 1 1100.000 MHz, Auto ================================================================================ 1. Configuration 2. Status 3. Network 4. System 5. Statistics 6. ACM Client >
Throught USB serial management console you can configure parameters for ethernet port, its IP and netmask. Then you can connect to this IP by telnet, default login and password is telnet/telnet. Menu has no option to exit, so you should use combination Ctrl+] which enables telnet prompt and then command 'close' to shut down telnet session.
Possible problem:I've realized that some cables could have problem to transfer data in 115200 Bd speed over USB
I have SR1 connected through RJ45 cross cable to gigabit ethernet card which is enp0s25. You can see my setting below:
Network ======= 1. Management IP Address 192.168.0.2 2. Management IP Mask 255.255.255.0 3. Management Ethernet Address CC-F6-7A-05-1D-CD 4. Management IP Multicast Off 5. Management DSCP 0 6. Management VLAN ID 0 7. Management Default Gateway 0.0.0.0 8. Management DHCP Client Off 9. Management Port State Enabled A. LAN IP Address 192.168.0.3 B. LAN IP Mask 255.255.255.0 C. LAN Ethernet Address CC-F6-7A-05-1D-CC D. LAN IP Multicast On E. Router IP Address 0.0.0.0 F. LAN DHCP Client Off G. ARP Management H. Air IP Address 192.168.1.161 I. Air Ethernet Address CC-F6-7A-05-1D-CB J. Isolate Networks Connected
Card enp0s25 is set to IP address 192.168.0.1:
ip address add 192.168.0.1/24 dev enp0s25
In the case of any problem, you can ping management IP address and check if the link is connected by ethtool enp0s25.
There are more options how to create RAM disk, but choose a classic one. Add kernel parameter ramdisk_size, for 512 megabytes use this:
The number is multiplied by size of block 1024, so it is in kilobytes. CentOS 7 uses grub2 boot manager, you will need to add this kernel parameter to file /etc/default/grub to option GRUB_CMDLINE_LINUX. Mine grub setting are:
# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 ramdisk_size=524288 " GRUB_DISABLE_RECOVERY="true"
To enable new grub configuration run command grub2-mkconfig:
grub2-mkconfig -o /boot/grub2/grub.cfg
It will save the new configuration and ramdisk will be available after reboot. After reboot, check /proc/cmdline to see if ramdisk option to kernel was correctly passed by grub2.
# cat /proc/cmdline BOOT_IMAGE=/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=295b584d-6c62-4f0c-b5d1-298069824024 ro vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 ramdisk_size=524288
To enable ramdisk /dev/ram0 load kernel module brd:
# modprobe brd rd_size=524288
You can use command modinfo brd to check module parameters.
Then create a file system use:
# mke2fs -m 0 /dev/ram0
Option -m 0 will switch off reserved space.
And finally, mount it to existing directory:
# mount /dev/ram0 /mnt/ramdisk
With df check if everytning is ok:
# df | grep ram0 /dev/ram0 516040 448588 56968 89% /mnt/ramdisk
There is also second option through tmpfs:
# mkdir -p /mnt/ramdisk # mount -t tmpfs -o size=512m none /mnt/ramdisk
Because this one is more simple and no restart is needed, I've tried it first, but there was a lot of "Lost messages" in tellicast-client log. Probably because tmpfs is part of virtual memory and can be swapped to hard drive if necessary.
After connection of EKU token, check the lsusb output, EKU must lighting red and there will be this device in the listing:
Bus 004 Device 003: ID 0529:0514 Aladdin Knowledge Systems eToken Pro v188.8.131.52
You need to download following packages from EUMETSAT FTP server:
You will need to install all packages and start separately etokend and pcscd and all their 32bit dependencies:
# yum install compat-libstdc++-33.i686 # yum install libusb.i688 # rpm -ihv aksrte-3-15.84p3.i386.rpm pcsc-lite-1.2.0-3.i386.rpm
If you have both version, the newer version of pcsc-lite for 64bit platform and the old one, you need to install old version with:
# rpm -ihv pcsc-lite-1.2.0-3.i386.rpm --force
It will coexist with another pcsc-lite version, because it will be installed in /usr/local/ directory.
I suggest to test if all dynamic libraries for these program are installed, in my system it is:
# ldd /usr/local/etoken/aksrte-3-15.84p3/etokend linux-gate.so.1 => (0xf77d6000) libpthread.so.0 => /lib/libpthread.so.0 (0xf77a8000) libstdc++-libc6.2-2.so.3 => /lib/libstdc++-libc6.2-2.so.3 (0xf7763000) libm.so.6 => /lib/libm.so.6 (0xf7720000) libc.so.6 => /lib/libc.so.6 (0xf7562000) /lib/ld-linux.so.2 (0xf77d7000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf7546000) # ldd /usr/local/sbin/pcscd linux-gate.so.1 => (0xf77d2000) libusb-0.1.so.4 => /lib/libusb-0.1.so.4 (0xf77b8000) libdl.so.2 => /lib/libdl.so.2 (0xf77b3000) libpthread.so.0 => /lib/libpthread.so.0 (0xf7799000) libc.so.6 => /lib/libc.so.6 (0xf75db000) libusb-1.0.so.0 => /lib/libusb-1.0.so.0 (0xf75c6000) /lib/ld-linux.so.2 (0xf77d3000)
There must be no "not found" link or program will not start properly.
# mount --bind /dev/bus /proc/bus # ln -s /sys/kernel/debug/usb/devices /dev/bus/usb/devices # /usr/local/etoken/aksrte-3-15.84p3/etokend # ps xau | grep etokend root 4902 0.0 0.0 3032 664 ? Ss 20:04 0:00 /usr/local/etoken/aksrte-3-15.84p3/etokend
The process etokend must run before pcsc-lite is enabled.
Content of /etc/reader.conf:
# Aladdin eToken virtual reader #0 FRIENDLYNAME "AKS ifdh" #DEVICENAME AKSifdh DEVICENAME /dev/null LIBPATH /usr/local/lib/aksifdh.so CHANNELID 0x11111111
Notice the commented line with DEVICENAME AKSifdh, I needed to replace it with /dev/null in Fedora 20, but in CentOS 7 it was okay as it is.
# /usr/local/sbin/pcscd -c /etc/reader.conf -f -d stdout pcscdaemon.c:246 main: using new config file: /etc/reader.conf pcscdaemon.c:251 main: pcscd set to foreground pcscdaemon.c:265 main: debug messages to stdout readerfactory.c:1391 RFInitializeReader: Attempting startup of AKS ifdh 0 0. readerfactory.c:1133 RFBindFunctions: Loading IFD Handler 2.0 pcscdaemon.c:445 main: pcsc-lite daemon ready. hotplug_libusb.c:179 No bundle files in pcsc drivers directory: /usr/local/pcsc/drivers hotplug_libusb.c:180 Disabling USB support for pcscd winscard_msg.c:250 SHMProcessEvents: Common channel packet arrival winscard_msg.c:290 SHMProcessEvents: correctly processed client: 0 winscard.c:81 SCardEstablishContext: Establishing Context: 17032333 winscard_msg.c:290 SHMProcessEvents: correctly processed client: 0 winscard.c:149 SCardConnect: Attempting Connect to AKS ifdh 0 0 winscard.c:245 SCardConnect: Active Protocol: 2 winscard.c:252 SCardConnect: hCard Identity: 1c1b5 winscard_msg.c:290 SHMProcessEvents: correctly processed client: 0 winscard.c:818 SCardBeginTransaction: Status: 0. winscard_msg.c:290 SHMProcessEvents: correctly processed client: 0 winscard.c:1293 SCardTransmit: Send Protocol: 1 winscard_msg.c:290 SHMProcessEvents: correctly processed client: 0 winscard.c:1293 SCardTransmit: Send Protocol: 1
I was also playing with version 1.8.13, which need to be installed separately, because 64bit version do not link with 32bit library aksifdh.so. Unfortunately, it will cause this:
dyn_unix.c:106:DYN_GetAddress() IFDHCreateChannelByName: /usr/local/lib/aksifdh.so: undefined symbol: IFDHCreateChannelByName
It is look like that it is working, you can see some communication between pcscd and etokend, but later, there will be host_key_4 empty and no communication with tellicast-client.
Final step is to execute tellicast-client:
/usr/local/bin/tc-recv -c /etc/recv.ini
# ldd /usr/local/bin/tc-recv linux-gate.so.1 => (0xf770f000) libdl.so.2 => /lib/libdl.so.2 (0xf76fd000) libm.so.6 => /lib/libm.so.6 (0xf76ba000) libc.so.6 => /lib/libc.so.6 (0xf74fc000) /lib/ld-linux.so.2 (0xf7710000)
Be sure you have set all configuration like you licence (user_name/user_key) and interface_address in /etc/recv.ini. Also choose products you are interested in enabling several channels in file /etc/recv-channels.ini, you can use page EUMETCAST / Reception Station Set-up and Product Navigator.
You can access tellicast-client page on http://localhost:2517. If there are active channels your configuration was sucesful!
Check page with License at http://localhost:2517/www/client/info.html. There must be, in section Client Identification:
If Tellicast cannot connect any channels check if reverse path filter is disabled, here for all and also device enp0s25:
# cat /proc/sys/net/ipv4/conf/all/rp_filter 0 # cat /proc/sys/net/ipv4/conf/enp0s25/rp_filter 0
echo "0" > /proc/sys/net/ipv4/conf/enp0s25/rp_filter
To save rp_filter setting put options permanently to /etc/sysctl.d/99-sysctl.conf (or in some distros to /etc/sysctl.conf):
net.ipv4.conf.default.rp_filter=0 net.ipv4.conf.all.rp_filter=0 net.ipv4.ip_forward=1 net.core.rmem_max=1500000 net.core.wmem_max=1500000
Check communication between Ayecka and ethernet interface enp0s25 by tcpdump. If Ayecka is sending data, you will see a lot of UDP packets with IP addresses starting 224.223.222.xxx. These IP addresses are related to each EUMETCast channel.
# tcpdump -i enp0s25 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on enp0s25, link-type EN10MB (Ethernet), capture size 65535 bytes 21:11:15.836630 IP 192.168.1.1.36247 > 184.108.40.206.7016: UDP, length 1242 21:11:15.836680 IP 192.168.1.1.49997 > 220.127.116.11.7017: UDP, length 1242 21:11:15.836730 IP 192.168.1.1.36247 > 18.104.22.168.7016: UDP, length 1242 21:11:15.836735 IP 192.168.1.1.36247 > 22.214.171.124.7016: UDP, length 1242 21:11:15.837318 IP 192.168.1.1.36247 > 126.96.36.199.7016: UDP, length 1242 21:11:15.837367 IP 192.168.1.1.36247 > 188.8.131.52.7016: UDP, length 1242 21:11:15.837418 IP 192.168.1.1.36247 > 184.108.40.206.7016: UDP, length 1242 21:11:15.837423 IP 192.168.1.1.46744 > 220.127.116.11.microtalon-com: UDP, length 1242 ...
I'm using inteface enp0s25 just for communication with Ayecka SR-1 over crossover cable, so there is no necessity to have firewall enabled. Check its settings and change zone to trusted, when all network connections are accepted:
# firewall-cmd --state running # firewall-cmd --get-zone-of-interface=enp0s25 public # firewall-cmd --zone=trusted --change-interface=enp0s25 success
Enable a port 2517, the default port of Tellicast Client (there is zone public enabled on main network interface):
# firewall-cmd --zone=public --add-port=2517/tcp --permanent # firewall-cmd --reload
I've created my own initialization script in SysV style to enabling a reception and you can easily modify it for your own purposes. It starts and stops etokend, pcscd and Tellicast in right order, also it sets all process priority to maximum (nice -20) and has also more informative status that shows PID of running deamons, RX status and license status.
This scripts were tested in CentOS 7 and Fedora 21. Although both distributions use systemd, they are also compatible with SystemV init scripts. It contains all necessary setting and also creates symlink to USB device and checks proper settings of multicast ethernet device.
After installation of all components, check the variables in the script header for proper settings.
Script eumetcast is copied into directory /etc/init.d/ and it is enabled by chkconfig. It can be used with parameters: start, stop, reset and status.
Example of status output when everything works properly:
# /etc/init.d/eumetcast status etokend is running with PID = 23075. pcscd is running with PID = 23081. tc-recv is running with PID = 23093 23116 23117. Host 192.168.0.2 is on. RX Status 1, Configuration 1 ============================ 1. Tuner Status Locked 2. Demodulator Status Locked 3. Transport Status Locked 4. Demodulator Frequency Offset -568 KHz 5. Demodulator Es/N0 7.8 dB 6. Signal Input Level -16.0 dBm 7. Demodulator BER 0.00 e-7 8. Bad Frame Count 10206 9. Bad Packet Count 32422 A. Demodulator Link Margin 1.9 dB B. Modulation Order and Code Rate DVB-S2 8PSK 3/5 C. Link Adaptation ACM D. Pilots On E. Frame Type Normal F. Roll Off 20% G. FPGA Loaded License status of host_key_4: ****-****-****-**** Checking enp0s25 enp0s25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::21c:c0ff:fe77:5ab9 prefixlen 64 scopeid 0x20<link> ether 00:1c:c0:77:5a:b9 txqueuelen 1000 (Ethernet) RX packets 142100076 bytes 173708934545 (161.7 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 73439 bytes 4755738 (4.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 10 memory 0xe3300000-e3320000
You may notice a few things:
I discovered that the EKU randomly lost its license during Tellicast reception. When it happened, a restart of all deamons with the previous script was necessary. When I installed a new server everything worked fine, but then I experienced these multiple restarts of EKU. I tried to disable all unnecessary services or services which could slow down performance like SELinux. It got worse and suddenly one night the server started to beep warningly with an overheated CPU. I stopped playing with the EKU license monitoring and started to fix the server case temperature. Then I realized that the EKU licence loss happens when lmsensors detect higher temperature. And yes, the problem of loosing the EKU license was caused by an overheated PC. How is this possible? Probably, when the Intel CPUs detect overheating, they put No-Operation (NOP) instructions into the processing pipeline.In the end it can lower the temperature because the processor circuits gain some free time, but it also lowers processing power. This can probably cause timeouts in process switching, EKU timeouts and the eventual loss of license.
I opened the server case and reassembled disk positions to give space for the distribution of heat and the resetting problem disappeared.
Script eku_check is installed in /usr/local/bin, it contains in its header the following parameters:
Script eku_reset is installed in /usr/local/bin gets ID of EUMETCast Key Unit (EKU). For my EKU it is ‘0529:0514’. You can obtain this number from output of lsusb command, e.g:
Bus 008 Device 010: ID 0529:0514 Aladdin Knowledge Systems eToken Pro v18.104.22.168
It detects Bus and Device address and calls compiled program usbreset which resets given USB device. In many cases the restart of pcscd+etokend+tc-recv helps itself, but I’ve found that sometimes it does not work and need this warm restart of EKU in my observations.