BPQ Packet Radio Node conversd Interlink

Usually, use of a plain telnet session is sufficient to connect to remote services in BPQ however when the remote service requires a login to occur, sending a prompt to the user and trusting them to input the correct information is unsatisfactory as in some circumstances this can lead to spoofing.

Automating with Expect

The expect tool is used in here to replace the interactive process of logging in with a preset behaviour.

The wrapper script connects to the remote service, in this case- conversd, and sends the command sequence including the callsign of the user to initialize the connection and log the person in with their current callsign connected through the BPQ node.

The callsign itself is provided to the wrapper script by BPQ32 automatically upon connect. The problem with conversd is that it requires a command prefix before the callsign to actually log in.

Install expect

You will need to ensure that the expect tool is installed on your system, and that the path to ‘expect’ matches in the script provided down below, by default this is /usr/bin/expect.

sudo apt install expect

The wrapper script

#!/usr/bin/expect 
gets stdin callsign
spawn -noecho nc IPADDRESS 3600
send "/n $callsign\n"
interact
exit

In the above example, substitute the IPADDRESS with the DNS host name or static IP address of the conversd server you wish to connect to.

You may need to substitute the port number for the one provided to you by the conversd owner. The default is usually port 3600, but it can sometimes differ system to system.

Place this script in a familiar directory, for the sake of example this document will use a sub directory “scripts” within the linbpq home directory.

/home/bpq/scripts/convwrap

Set the correct permissions:

chmod 755 /home/bpq/scripts/convwrap

Calling the wrapper script

The wrapper script by itself doesn’t do all of the work. Incoming connections from BPQ have to pass through to a TCP port that is connected to the wrapper script, this is easily achieved with the openbsd-inetd package.

Install ‘openbsd-inetd’ on your system, if using a Raspbian or Debian based install this is accomplished with:

sudo apt install openbsd-inetd

The openbsd-inetd utilizes two configuration files, these are:

/etc/inetd.conf
/etc/services

Edit the /etc/inetd.conf, insert the following tab-delimited configuration line.

convwrap    stream    tcp    nowait    bpq    /home/bpq/scripts/convwrap

Note that the references to ‘bpq’ here refer to the user ID that the service will run under. In the example, user ‘bpq’ runs the convwrap script from its own home directory. See Appendix 1 for more information on the inetd.conf syntax.

Edit the /etc/services file and insert a fresh port number for this service, e.g port 63000:

convwrap  63000/tcp

Restart inetd so that it loads the above configuration.

sudo service inetd restart

Configuring BPQ32

Insert an APPLICATION line below your existing application definitions, ensure that you select an unused unique application number (the digit after APPLICATION). BPQ has a maximum of 32 application definitions.

APPLICATION 9,WWC,ATTACH 10 127.0.0.1 63000 S,NOCALL-2,ALIAS,255

In the above example:

  • 9’ refers to application number 9, it is important that you choose an application number between 1-32 that is not already in use.
  • WWC is the command alias, a user connected to the BPQ node issues this command to initiate the connection to the wrapper.
  • ATTACH is the internal node command that requires a telnet PORTNUM.
  • 10’ is the telnet PORTNUM associated in bpq32.cfg, it will differ system to system, if your system does not have a telnet port defined, now is the time to do that
  • 127.0.0.1 63000 is the host and TCP port number where the wrapper script is provided (see /etc/services from earlier). 127.0.0.1 always refers to ‘localhost’ or ‘self’ in human terms
  • S’ is the internal node flag that instructs the node to keep the user connected to the node after disconnecting from the wrapper. This is known as ‘Stay’.
  • NOCALL-2 is the optional callsign and SSID you want the wrapper to be reachable via ax25 and NETROM.
  • ALIAS is the optional 1-6 character maximum unique ax25 and NETROM alias of the wrapper. Do NOT use the default- make sure you pick one that does not collide with anyone else on the NETROM network.
  • ‘255’ is the optional NETROM quality to add the prior optional call sign/alias to the NETROM broadcast, as it is a local and hard-wired service, this can be maximum, 255.

Testing

Test the wrapper using the simple telnet program. Connect to the wrapper port, it should show the following:

bpq@pe1rrr:~/scripts $ telnet localhost 63000
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

In order to emulate what BPQ will do, type in your callsign and hit enter.

pe1rrr
/n pe1rrr
*
* Access to channel 0 has been removed from this server.
*

FYI: No password found.
Try /help mkpass.

conversd @ Rijen_NL Ping-Pong conversd saupp-1.62a
* Type /HELP for help.
* Welcome to RRRWWC Worldwide Converse Server
* Use /help for commands.
* ========================================================
*
*** There are 18 users on 9 channels online.
*** Will try local default channel 3333.
*** You created a new channel 3333.
*** Personal data set from file: Red, Rijen, JO21LO
*** Nickname set from file: Red

🙂


Appendix 1

From the inetd.conf documentation:

service type protocol wait user server cmdline
service

The service name. Service names are translated to port numbers by looking them up in the services file (often /etc/services) for TCP and UDP services, or the portmap daemon for RPC services.

type

The type of socket the service will use. This will be either stream, for connection-oriented protocols, or dgram, for datagram protocols. TCP-based services should always use stream, while UDP-based services should use dgram.

protocol

The communication protocol used by the service. This must be a protocol listed in the protocols file (usually found in the same directory as the inetd configuration file). This is usually tcp or udp. RPC services prepend rpc/ to the type.

wait

Whether the service can process multiple requests at one time. This option applies only to dgram sockets. If the service in question can process multiple requests, this should be wait. Otherwise, and for stream sockets, this should be nowait.

user

The user under which the process should run. Oftentimes this will be root, but if the daemon does not require root privileges, you should consider running it under a less privileged user. Programs which you do not particularly trust, or that you know have security problems are prime candidates to be run under a less privileged user.

server

The absolute pathname of the daemon to be executed. Internal services are marked by the keyword internal.

cmdline

The command-line arguments to the daemon. The first argument should be the short name of the program. This is a traditional Unix convention which is normally hidden by the shell.

What’s the Vector 4000, uh Victor?

Preface

This began as a journal blog entry just about a newly acquired antenna however I have expanded it to include some backstory about the early days of my youth before I became a fully licensed radio amateur, a little bit of my life from the age 14 and up.

I hope you enjoy the read, please let me know if there are things that you would like to hear about in the future. This story is not embellished, though it does lack some pieces I had originally intended to publish but the things I wanted to include with the permission of a friend unfortunately didn’t materialize in time but will hopefully make it into another journal entry at some point in the near future.


QRM

That afternoon, my radio had been particularly noisy with the usual noisy pest- skip from the continent. All the channels were full of it, just a splatter of constant atonal screeching- the all too familiar FM carriers colliding from people too far away to hear one another. The whine and raspy hash of mashed up signals mixed with Italian and Spanish SSB wobble & warble breakthrough- it was useless trying to get out anywhere “local”.

While clunking the channel selector on the radio I settled on some unusually strong signals. I’d heard POCSAG pagers from the local hospital before but these were entirely different and I could tell that some, but not all were coming in on the skip. I really didn’t know what I was listening to but the tones were pleasant and definitely structured in packets. A header, a data burst and a tail, each one a little bit like the loading sounds from a cassette loaded computer game.

It just to happened that I’d actually been flipping through the Maplins catalogue while sat on the bog. Looking back now, it was probably a bit weird but for me at the time, it was how I chose how to blow all of my saved up birthday & pocket money.

I’d seen the kit several times in the mag already but not really bothered to read the item description before, but I’d got a spark from the idea that it might actually be for this type of signal so I looked it up. A packet radio modem kit, 1200 baud speed. Hmmm.

I had a hunch. After a neatly coordinated bus and train trip to and from the Maplins in Coventry, I’d bought home a pile of components and a plastic box.

After successfully constructing and then setting up the modem with the radio and then configuring the terribly old and slow Compaq Deskpro XT PC with the Baycom software, the first packets decoded floored me.

Readable data traveling through the air from France, the Netherlands, Germany, Italy, Spain and probably more- incredible!

This was gonna be huge for me and my mates. Unlimited “online” chatting, connected so no need to use the mic to talk all night- we could chatter & trollolol on about cheese without any distractions or interruptions or sleep- today in the age of smartphones this is seriously taken for granted.

Ramsey Packet Modem PDF


The BBS

By 1996 ENG01A BBS had served quite a large portion of the Midlands during its four or so years of operation. The radio also served as a digital packet repeater (digipeater) during frequent radio path openings to the continent as well as a “hotspot” for forwarding mail up to Cannock and across to Birmingham. Some of my mates even used my system to hop to distant stations on the continent during “sporadic-E”-layer ionospheric propagation– it was awesome to watch in action!

The BBS in its final form was a machine comprised of a “custom built” 486 DX built from 2nd hand scrap, with a Kantronics KPC-3 Terminal Node Controller (TNC) connected to a “Superstar 3900” CB radio- operating on Channel 24. (27.235MHz). Running inside a shed that would easily spike at over 35°C during the summer months, the gear was punished pretty severely!

Networked to the secondary machine located in my old teenage bedroom via a massive run of RG-213 coaxial Ethernet cable, enabling remote access, saving uncountable trips down to the owl house attached shed during freezing cold or miserably wet British weather.

Teenage Bedroom & secondary BBS circa 1997: Beige

Fast Moves

By aged 17, having passed the RAE (amateur radio exam qualification), and then diving head first into the internet, it was not long before an online relationship quickly matured to a very real life getting-engaged situation. A sudden and swift decision on my part to save money on the phone bill and weekly plane tickets- I ultimately quit my job and moved to live in the Netherlands, with some hard graft put in at Ericsson R&D, we finally purchased our first home together in 2001.

The shack, as it arrived from England in the Netherlands.
All but one of these radios originally belonged to Pete (G4KQU, now EI4JR).

Early Bloomers

CB radio had been booming & blooming in the Netherlands with digital packet radio networks for almost a decade. Dutch legislation had effectively enabled the digital adoption by deregulating the Citizens Band entirely. This lead the way for manufacturers to legally advertise and sell packet radio equipment to quite a substantially larger market than just radio hams. A stark contrast compared with the UK.

Later, unlicensed usage and the allowance of data over RF would be ratified and somewhat protected in the CEPT specification with several channels/frequencies specifically set aside for packet/data.

The CB and ham packet stations in the Netherlands eventually began to decline beyond a sustainable network in the mid-2000s. For the CBers, The sunspot cycle had come to an end and so too did the interest in long distance (DX). For the hams, there were fresher new digital-mode pastures to play with now that the internet had most certainly won.


COVID-19

The lockdown due to the COVID-19 pandemic has seen a noticeable increase of activity on amateur radio as people- perhaps likely perturbed by everything going on- have come back to their radios. As a consequence the packet community has been busy helping a number of hams set their packet stations back up again. Yay! 🎉

The idea to put up a new 10 meter band antenna began to gather momentum as personal forecasts for 2021 predicted it likely to be up to another year locked indoors- something we are already quite familiar with due to Ilona’s cancer treatment in 2019. So I purchased a shiny new antenna from the local ham shop and it was delivered the very next day:

Woah.

The Vector 4000 is a J-Pole style antenna.

The radiator is the short stub on the lower left that couples to the large vertical in the center.

At the top of the antenna is a wire ball for hypothetically reducing corona discharge- high voltage RF (radio frequency) sparking into the air when running very high power. Though I suspect this is yet another window dressing feature of CB antennas- its probably for the looks. I operate almost exclusively within my limits and I have consideration for my densely packed in neighbors so it’ll never be presented with more than 100 watts of power.

The circular basket? Probably extra capacitive coupling for the radiator element, though- jury is still out on this one… Looks cool though 😎 📡

If only we could see RF with our eyes… 👀

The Vector 4000 next to the 20 meter band inverted Delta Loop. The Loop is roughly 9 meters wide, as you can see the Vector 4000 kinda dwarfs it.

Performance

Yay! 😁 I’m once again able to work 10 meter band digital modes, so you may hear me on FT8 or WSPR from time to time.

I have checked the packet signals on 11 meters (CB)- there is a bit of “local” FM packet activity from stations about 80-100km away, but it is too weak to decode- unfortunate!

Luckily I am able to log into those packet stations remotely via the internet gateway and can remotely trigger their transmitters, so far I have worked out who I can hear: NL9UTR and NL9SHB – Utrecht and Den Bosch respectively. Bit of a reach to Rijen apparently. 😿

Due to quite high levels of neighborhood interference from power-line networking, solar panels, crappy laptop chargers and ISM band encroachment- its a constant S5 of noise here, even with local phase cancellation mitigation on the packet frequency. However, during good skip conditions, signals from abroad can easily be 20db+ so its a bit of a mixed bag- now on to some testing ⚡️

Early Signal Reports

Above are a couple of maps showing my experiment on the 10 meter amateur band with FT-8, an insanely narrowband slow digital transmission capable of penetrating signal-to-noise ratios previously only touchable by Morse code.

With the use of advanced digital signal processing machine FT-8 can decode signals that are barely perceptible to the human ear.

Read up on WSJT-modes here.

The maps were created with the use of the reverse beacon network– a bunch of automated listening stations. The RBN is mostly unmanned ham equipment left running while the operator is away, decoding and reporting what they can hear to a central database on the Internet, (pskreporter.info for example).


Conclusion

So the Vector 4000 is basically as good as I remember it being back in the 90s. It is limited in use though, as one cannot tune it to anything other than the designed band.

The resonance drops way off after 1.5MHz bandwidth curve so don’t be expecting this to work as a multi band antenna.

For 10 meters, the Vector 4000 is an exceptional performer, the reception across the shortwave spectrum is also decent but not overwhelmingly as you might expect for a vertical.

Weather robustness – this Vector 4000 has happily survived some close-to-gale force winds recently, metal fatigue is a factor I may yet have to contend with as the aluminum joints aren’t all that large or convincingly strong. My previous Vector 4000 back in the 90s suffered from a severe clobbering from an Oak tree, breaking it in half, though if not for that, it probably would have lasted many more years.

All of the bolts, joints and connections have been triple wrapped in “Scotch 23” electrical self amalgamating tape which does offer some extra tensile strength as well as waterproofing, so we will have to see!


Bonus quiz round: what “B” was the name of a successful British television game-show popular with the 90s youth?

Go to Page 2 to find the answer!

I’ll have a Sporadic-E please Bob

You will see several mentions of Sporadic-E on this site, so I’ve taken a shot here at explaining the phenomenon in my own words. I hope you enjoy the tangent from the usual posts, but if you are already versed in solar physics feel free to skip along- wait maybe you won’t get that reference unless you read this bit… 🤔

Credit: The ESA/NASA Solar and Heliospheric Observatory (SOHO)

Sporadic E events- a phenomenon frequently observed in the early 90s as the increased frequency of the Sun’s coronal mass ejections created observable disturbances in the Earth’s ionosphere.

The phenomena occurs naturally every 11-year cycle, waxing and waning between the peaks- known as the solar maximum– during these periods, the most sunspots are produced.

Sunspots are a product of the complex interactions between the suns powerful magnetic fields and the fusion reactions occurring deep within the core of the sun. Magnetic fields twist and contort through the plasma as the sun rotates on its axis, eventually some of these powerful magnetic fields can no longer hold on to their couplings and break apart in violent and destructive solar flares, scattering the sun’s plasma deep into space. Sometimes, directly at Earth.

The difference between a solar maximum and a solar minimum.


Powerful magnetic interactions during solar flare events also cause magnetic disturbances that travel at the speed of light towards Earth. These are known as geomagnetic storms and can in the most extreme cases cause severe problems for the electrical grids that deliver power to our industry and homes, as well as damage satellites that operate out beyond the protection of our magnetic field.

Approximately three days after a geomagnetic storm, the sub-light-speed particles ejected from the sun arrive at Earth and hit the magnetic field, and if powerful enough can sometimes reach the upper ionosphere. These particles are extremely high-energy, if they were to reach the surface of Earth they would have a devastating and deadly effect on biological organisms.

The magnetic field of Earth is generated by the planet’s liquid core- much like a bicycle dynamo, the magnetic interaction though rotation of the different densities of liquid metal in the core produce strong magnetic fields that protrude out from the north and south poles, enveloping the Earth with a magnetic shield.

As the sun shines, it also emits solar radiation in the form of a constant stream of charged particles- this ambient bombardment is known as the solar wind.

Aurora Borealis as captured from the International Space Station

The solar wind speed increases dramatically during sunspot activity, putting greater pressure on Earth’s magnetic envelope. As the magnetic field interacts with the solar wind, particles billow around the envelope towards the poles- the weakest points of the magnetic field- where the charged particles interact with the oxygen and nitrogen gas in the upper atmosphere- this can be observed visually as the Aurora Borealis and Aurora Australis.

Sporadic-E is the name designated for the unpredictable property of the ionosphere when the solar wind travels deep and at high enough energy through the ionosphere that it causes a plasma to occur. This plasma is conductive, and therefore capable of reflecting radio frequency back to the ground.

This is how high frequency (HF) radio waves that would otherwise be absorbed by the ambient ionosphere propagate great distances beyond line of sight. Although the radio waves always travel in a straight line from the source, they can bounce off the sporadic plasma and back towards the ground. In combination with the ocean, this can sometimes happen multiple times before the radio wave is intercepted by a radio receiver. This is colloquially known as radio skip.

Other forms of radio propagation such as Tropospheric Ducting affect VHF and higher frequencies.

For the most part the F1 and F2 layers form from the separation of the radio-absorbing D layer at night when the solar wind reduces pressure on the magnetic field facing away from the sun, as Earth rotates from day to night- this allows shortwave to propagate further which is why distant radio stations can only be heard coming through in the evening hours.

Sporadic-E layers of the ionosphere are responsible for the majority of radio propagation phenomenon at upper-HF frequencies, such frequencies as the common CEPT and UK CB radio specification and the 10, 6 and 4 meter amateur radio band.

New Release: Let’s Go!

Sunset Panorama

Now available on all digital platforms for easy and cheesy-peas access is Let’s Go! A short but sweet 30 minute EP, (that means Extra Peas). The tracks are designed to be shuffled, the track list puts the music in an order of moods-

From motivational dream beat to optimistic, good vibes riding a traditional folk rock track, literally the embodiment of the phrase “Let’s Go!”. Surfing into the night taking flight into a thunderstorm to flying above the clouds is Into The Night. The track Keep Going is a powerful grab you by the cheeks and squeeze your face track interspersed with zen inducing contrasting new-age oldfieldisms to give you a breather before getting back to the grind.

Jupiter Descending – a cyberpunk fictional vision of the future of AI, or is it… 👀

Included in this EP is the single Hanami Nights, since she should be heard. Just wait for the drop. It’ll put you in a good place.

Genres: New Age, Prog Rock, Electronic with traditional Japanese influences & more.

Listen free below or on your favourite music provider, available everywhere.

Angels upon the wind: Tubular Dogs

Tubular Beach

A message in a bottle, found by a wise man, he travelled up the highest mountain, far above the clouds where he opened the bottle, as the cold wind blew upon the bottle she began to whisper to the wise man, a song of secrets. The wise man carefully lay the bottle down on the mountain top, where the wind would continue to blow, carrying the song far far away, across all the lands, and all the oceans. The wind blew and blew, her song reached deep into the darkest forests, into the deepest despair and lifted the minds of those lost souls as she slowly but surely lured them back home.

A parody and yet also a homage to Mike Oldfield’s Tubular Bells.

Listen below and order your copy from Amazon, iTunes or your favourite music store (From February 1st 2021)

Gilze-Rijen Airbase on LiveATC

Over the last year LiveATC.net has been provided with several live audio feeds that can be streamed here.

There are now several feeds on LiveATC.net covering the military base Gilze-Rijen and the Gilze-Rijen CTR. The airbase is approximately 2km from my location and more of less in the approach one of the runways.

The airbase is home to a fleet of Apache, Chinook and Cougar helicopters and home to a museum of World War 2 aircraft such as the Mitchel B25 and Spitfire. There are also a number of light aircraft and gliders that use the runway from a clubhouse located nearby and civilian aircraft entering the CTR are required to contact the tower during operational hours, so it can get quite active at times.

The language spoken on frequency is usually English, with the exception of some civilian CTR interlopers. The military aircraft frequently practice manoeuvres in coordination with NATO.

Up until recently every 4 years the airbase would host an international air show often attracting in excess of 250,000 visitors per day. Unfortunately due to the pandemic this has been cancelled for obvious reasons.

Hardware & Software

The setup consists of two RTL-SDR dongles redundantly chained together to a single vertical antenna, each dongle working independently on two different Raspberry Pi systems. This gives continuous operation if one of the SDRs locks up.

rtl_airband is used to manage, tune the SDRs, mix (if needed) and encode the streams. rtl_airband makes use of the Raspberry Pi’s GPU to offload some of the processing form the CPU, which is quite neat.

The rtl_airband encoders connect directly to a local icecast server. LiveATC then pulls the streams from the icecast server at roughly 8kb/s per mono feed.

My setup has an additional feed- a mix of the Ground and Tower frequencies, each separated into either the Left or Right stereo channel.

rtl_airband configuration

devices:
({
# mode = "scan";
type = "rtlsdr";
serial = "ehgr_71ppm";
gain = 35;
centerfreq = 125.500;
correction = 71;
mode = "multichannel";
sample_rate = 0.96;
channels:
(
{
freq = 125.330;
squelch = 24;
outputs: (
{
type = "icecast";
server = "192.168.1.xx";
port = 9000;
mountpoint = "ehgr-fallback";
name = "EHGR Tower Backup (rtl_airband, UHF)";
genre = "ATC";
username = "source";
password = "password";
},
{
disable = true;
type = "mixer";
name = "mixer1";
balance = -0.75;
ampfactor = 1.0;
}
);
},
{
freq = 278.125;
disable = true;
squelch = 24;
outputs: (
{
type = "icecast";
server = "192.168.1.xx";
port = 9000;
mountpoint = "ehgr-ground";
name = "EHGR Ground UHF";
genre = "ATC";
username = "source";
password = "password";
},
{
type = "mixer";
name = "mixer1";
balance = 0.75;
ampfactor = 1.0;
}
);
}
);
}
);

mixers: {
mixer1: {
outputs: (
{
type = "icecast";
server = "192.168.1.xx";
port = 9090;
mountpoint = "ehgr-twrgnd";
name = "EHGR Tower & Ground Mix"
genre = "ATC";
username = "source";
password = "password";
}
);
},
mixer2: {
outputs: (
{
type = "icecast";
server = "icecast.server.example.org";
port = 8080;
mountpoint = "mixer2.mp3";
name = "Ground + Delivery (not used just an example)"
genre = "ATC";
username = "source";
password = "mypassword";
}
);
}
};

Redundancy

The above setup is duplicated on another Raspberry Pi that feeds into a different icecast mount point.

If icecast loses the feed from the SDR illustrated above, it will automatically drop the fallback feed. In the unlikely event of both feeds going down, then the icecast server selects the fallback’s fallback.

This consists of a looped MP3 fed by a continuously running instance of ezstream with a nice digitally synthesised voice apologising for the inconvenience! Beep beep beep…

When the feeds recover, icecast automatically reconnects the listeners (LiveATC) back to the main feeds.

Stardust Otamatones

This is a cover of Stardust Memories by Volker Tripp aka Jester of the demo group Sanity. The lead melody has been muted and instead performed by a swathe of ludicrous Otamatones, behold the Otamatone orchestra!

Originally released into the wild circa 2011.