Published: 8. 2. 2015   Category: Meteorological satellites

EUMETCast with Ayecka SR1 in GNU/Linux

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.

Installation steps

  1. Ayecka SR1 USB management console
  2. Ayecka SR1 network configuration
  3. Ramdisk
  4. EUMETCast Key Unit (EKU) EtokenD
    1. Start etokend:
    2. Start pcscd:
    3. Running tellicast-client
    4. Tellicast troubleshooting
      • License
      • TSL Announcement Channel only Connecting
      • Network check
      • Firewall in CentOS 7
  5. Enhanced System V Init Script
    • Configure main script for EUMETCast
    • EKU Check and USB reset

Ayecka SR1 USB management console

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

Ayecka SR1 network configuration

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.

Ramdisk

There are more options how to create RAM disk, but choose a classic one. Add kernel parameter ramdisk_size, for 512 megabytes use this:

ramdisk_size=524288

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.

EUMETCast Key Unit (EKU) EtokenD

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 v4.2.5.4

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.

Start etokend:

# 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.

Start pcscd:

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.

Running 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!

Tellicast troubleshooting

License

Check page with License at http://localhost:2517/www/client/info.html. There must be, in section Client Identification:

host_key_4:  	****-****-****-****

TSL Announcement Channel only Connecting

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

Network check

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 > 224.223.222.234.7016: UDP, length 1242
21:11:15.836680 IP 192.168.1.1.49997 > 224.223.222.235.7017: UDP, length 1242
21:11:15.836730 IP 192.168.1.1.36247 > 224.223.222.234.7016: UDP, length 1242
21:11:15.836735 IP 192.168.1.1.36247 > 224.223.222.234.7016: UDP, length 1242
21:11:15.837318 IP 192.168.1.1.36247 > 224.223.222.234.7016: UDP, length 1242
21:11:15.837367 IP 192.168.1.1.36247 > 224.223.222.234.7016: UDP, length 1242
21:11:15.837418 IP 192.168.1.1.36247 > 224.223.222.234.7016: UDP, length 1242
21:11:15.837423 IP 192.168.1.1.46744 > 224.223.222.232.microtalon-com: UDP, length 1242
...

Firewall in CentOS 7

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

Enhanced System V Init Script

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.

Configure main script for EUMETCast

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:

EKU Check and USB reset

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
v4.2.5.4

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.