<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>LaForge's home page (Posts about retro)</title><link>https://laforge.gnumonks.org/</link><description></description><atom:link href="https://laforge.gnumonks.org/blog/tags/retro.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Thu, 24 Oct 2024 20:08:47 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Clock sync trouble with Digium cards and timing cables</title><link>https://laforge.gnumonks.org/blog/20220906-digium_timing_cable_troubles/</link><dc:creator>Harald Welte</dc:creator><description>&lt;p&gt;If you have ever worked with Digium (now part of Sangoma) digital
telephony interface cards such as the TE110/410/420/820 (single to octal
E1/T1/J1 PRI cards), you will probably have seen that they always have a
&lt;em&gt;timing connector&lt;/em&gt;, where the timing information can be passed from one
card to another.&lt;/p&gt;
&lt;p&gt;In PDH/ISDN (or even SDH) networks, it is very important to have a
synchronized clock across the network.  If the clocks are drifting,
there will be underruns or overruns, with associated phase jumps that
are particularly dangerous when analog modem calls are transported.&lt;/p&gt;
&lt;p&gt;In traditional ISDN use cases, the clock is always provided by the
network operator, and any customer/user side equipment is expected to
synchronize to that clock.&lt;/p&gt;
&lt;p&gt;So this Digium timing cable is needed in applications where you have
more PRI lines than possible with one card, but only a subset of your
lines (spans) are connected to the public operator.   The timing cable
should make sure that the clock received on one port from the public
operator should be used as transmit bit-clock on all of the other ports,
no matter on which card.&lt;/p&gt;
&lt;p&gt;Unfortunately this decades-old Digium timing cable approach seems to
suffer from some problems.&lt;/p&gt;
&lt;section id="bursty-bit-clock-changes-until-link-is-up"&gt;
&lt;h2&gt;bursty bit clock changes until link is up&lt;/h2&gt;
&lt;p&gt;The first problem is that downstream port transmit bit clock was jumping
around in bursts every two or so seconds.  You can see an oscillogram of
the E1 master signal (yellow) received by one TE820 card and the
transmit of the slave ports on the other card at
&lt;a class="reference external" href="https://people.osmocom.org/laforge/photos/te820_timingcable_problem.mp4"&gt;https://people.osmocom.org/laforge/photos/te820_timingcable_problem.mp4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you can see, for some seconds the two clocks seem to be in perfect
lock/sync, but in between there are periods of immense clock drift.&lt;/p&gt;
&lt;p&gt;What I'd have expected is the behavior that can be seen at &lt;a class="reference external" href="https://people.osmocom.org/laforge/photos/te820_notimingcable_loopback.mp4"&gt;https://people.osmocom.org/laforge/photos/te820_notimingcable_loopback.mp4&lt;/a&gt; - which shows a similar setup but without the use
of a timing cable: Both the master clock input and the clock
output were connected on the same TE820 card.&lt;/p&gt;
&lt;p&gt;As I found out much later, this problem only occurs until any of the
downstream/slave ports is fully OK/GREEN.&lt;/p&gt;
&lt;p&gt;This is surprising, as any other E1 equipment I've seen always transmits
at a constant bit clock irrespective whether there's any signal in the
opposite direction, and irrespective of whether any other ports are
up/aligned or not.&lt;/p&gt;
&lt;p&gt;But ok, once you adjust your expectations to this Digium peculiarity,
you can actually proceed.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="clock-drift-between-master-and-slave-cards"&gt;
&lt;h2&gt;clock drift between master and slave cards&lt;/h2&gt;
&lt;p&gt;Once any of the spans of a &lt;em&gt;slave&lt;/em&gt; card on the timing bus are fully
aligned, the transmit bit clocks of all of its ports  appear to be in
sync/lock - yay - but unfortunately only at the very first glance.&lt;/p&gt;
&lt;p&gt;When looking at it for more than a few seconds, one can see a slow,
continuous drift of the &lt;em&gt;slave&lt;/em&gt; bit clocks compared to the &lt;em&gt;master&lt;/em&gt; :(&lt;/p&gt;
&lt;p&gt;Some initial measurements show that the clock of the &lt;em&gt;slave&lt;/em&gt; card of the
timing cable is drifting at about 12.5 ppb (parts per billion) when
compared against the &lt;em&gt;master&lt;/em&gt; clock reference.&lt;/p&gt;
&lt;p&gt;This is rather disappointing, given that the whole point of a timing cable
is to ensure you have &lt;em&gt;one&lt;/em&gt; reference clock with all signals locked to
it.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="the-work-around"&gt;
&lt;h2&gt;The work-around&lt;/h2&gt;
&lt;p&gt;If you are willing to sacrifice one port (span) of each card, you can
work around that slow-clock-drift issue by connecting an external
loopback cable.  So the &lt;em&gt;master&lt;/em&gt; card is configured to use the clock
provided by the upstream provider. Its other ports (spans) will transmit
at the &lt;em&gt;exact&lt;/em&gt; recovered clock rate with no drift.  You can use any of
those ports to provide the clock reference to a port on the &lt;em&gt;slave&lt;/em&gt;
card using an external loopback cable.&lt;/p&gt;
&lt;p&gt;In this setup, your &lt;em&gt;slave&lt;/em&gt; card[s] will have perfect bit clock
sync/lock.&lt;/p&gt;
&lt;p&gt;Its just rather sad that you need to sacrifice ports &lt;em&gt;just&lt;/em&gt; for
achieving proper clock sync - something that the timing connectors and
cables claim to do, but in reality don't achieve, at least not in my
setup with the most modern and high-end octal-port PCIe cards (TE820).&lt;/p&gt;
&lt;/section&gt;</description><category>osmocom</category><category>retro</category><category>telecom</category><guid>https://laforge.gnumonks.org/blog/20220906-digium_timing_cable_troubles/</guid><pubDate>Thu, 08 Sep 2022 16:00:00 GMT</pubDate></item><item><title>First steps towards an ITU-T V5.1 / V5.2 implementation</title><link>https://laforge.gnumonks.org/blog/20211011-v52/</link><dc:creator>Harald Welte</dc:creator><description>&lt;p&gt;As some of you may know, I've been starting to collect "vintage"
telecommunications equipment starting from analog modems to ISDN
adapters, but also PBXs and even SDH equipment.  The goal is to keep
this equipment (and related software) alive for demonstration and
practical exploration.&lt;/p&gt;
&lt;p&gt;Some [incomplete] information can be found at
&lt;a class="reference external" href="https://osmocom.org/projects/retro-bbs/wiki/"&gt;https://osmocom.org/projects/retro-bbs/wiki/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Working with PBXs to simulate the PSTN (ISDN/POTS) network is fine to
some extent, but it's of course not the real deal.  You only get
S0-buses and no actual Uk0 like actual ISDN lines of the late 80ies and
90ies.  You have problems with modems not liking the PBX dialtone, etc.&lt;/p&gt;
&lt;p&gt;Hence, I've always wanted to get my hand on some more real-world
central-office telephone network equipment, and I finally have a source
for so-called &lt;a class="reference external" href="https://en.wikipedia.org/wiki/V5_interface"&gt;V5.1/V5.2&lt;/a&gt;
access multiplexers.  Those are like remote extension boxes for the
central office switch (like &lt;a class="reference external" href="https://en.wikipedia.org/wiki/EWSD"&gt;EWSD&lt;/a&gt;
or &lt;a class="reference external" href="https://en.wikipedia.org/wiki/ITT_System_12"&gt;System 12&lt;/a&gt;).  They
aggregate/multiplex a number of analog or ISDN BRI subscriber lines into
E1 lines, while not implementing any of the actual call control or ISDN
signalling logic.  All of that is provided by the actual telephone
switch/exchange.&lt;/p&gt;
&lt;p&gt;So in order to integrate such access multiplexers in my retronetworking
setup, I will have to implement the LE (local exchange) side of the V5.1
and/or V5.2 protocols, as specified in ITU-T &lt;a class="reference external" href="https://www.itu.int/rec/dologin_pub.asp?lang=e&amp;amp;id=T-REC-G.964-200103-I!!PDF-E&amp;amp;type=items"&gt;G.964&lt;/a&gt; and
&lt;a class="reference external" href="https://www.itu.int/rec/dologin_pub.asp?lang=e&amp;amp;id=T-REC-G.965-200103-I!!PDF-E&amp;amp;type=items"&gt;G.965&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the limited spare time I have next to my dayjob and various FOSS
projects, progress will likely be slow.  Nonetheless I started with an
implementation now, and I already had a lot of fun learning about more
details of those interfaces and their related protocols.&lt;/p&gt;
&lt;p&gt;One of the unresolved questions is to what kind of software I would want
to integrate once the V5.x part is resolved.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="http://linux-call-router.de/"&gt;lcr&lt;/a&gt; would probably be the most
ISDN-native approach, but it is mostly unused and quite EOL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Asterisk or FreeSWITCH would of course be obvious candidates, but they
are all relatively alien to ISDN, and hence not very transparent once
you start to do anything but voice calls (e.g. dialup ISDN data calls
in various forms).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="http://yate.null.ro/"&gt;yate&lt;/a&gt; is another potential candidate.  It
already supports classic SS7 including ISUP, so it would be a good
candidate to build an actual ISDN exchange with V5.2 access
multiplexers on the customer-facing side (Q.921+Q.931 on it) and
SS7/ISUP towards other exchanges.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For now I think yate would be the most promising approach.  Time will
tell.&lt;/p&gt;
&lt;p&gt;The final goal would then be to have a setup [e.g. at a future CCC
congress] where we would have SDH add/drop multiplexers in several
halls, and V5.x access multiplexers attached to that, connecting analog
and ISDN BRI lines from individual participants to a software-defined
central exchange.  Ideally actually multiple exchanges, so we can show
the signaling on the V5.x side, the Q.921/Q.931 side and the SS7/ISUP
between the exchanges.&lt;/p&gt;
&lt;p&gt;Given that the next CCC congress is not before December 2022, there is a
chance to actually implement this before then ;)&lt;/p&gt;</description><category>osmocom</category><category>retro</category><category>telecom</category><guid>https://laforge.gnumonks.org/blog/20211011-v52/</guid><pubDate>Sun, 10 Oct 2021 16:00:00 GMT</pubDate></item><item><title>Retronetworking / BBS-Revival setup at #36C3</title><link>https://laforge.gnumonks.org/blog/20200105-36c3-retronetworking/</link><dc:creator>Harald Welte</dc:creator><description>&lt;p&gt;After many years of being involved in various projects at the annual
Chaos Communication Congress (starting from the audio/vidoe recording
team at 15C3), I've finally also departed the GSM team, i.e. the people
who operate (Osmocom based) cellular networks at CCC events.&lt;/p&gt;
&lt;p&gt;The &lt;a class="reference external" href="https://events.ccc.de/camp/2019"&gt;CCC Camp&lt;/a&gt; in August 2019 was
slightly different: Instead of helping an Osmocom based 2G/3G network, I
decided to put up a nextepc-based LTE network and make that use the
2G/3G HLR (osmo-hlr) via a newly-written &lt;a class="reference external" href="http://git.osmocom.org/erlang/osmo_dia2gsup/"&gt;DIAMETER-to-GSUP proxy&lt;/a&gt;.  After lots of hacking
on that proxy and fixing various bugs in nextepc (see my
&lt;a class="reference external" href="https://github.com/laf0rge/nextepc/tree/laforge/cccamp19"&gt;laforge/cccamp2019 branch here&lt;/a&gt;)
this was working rather fine.&lt;/p&gt;
&lt;p&gt;For &lt;a class="reference external" href="https://events.ccc.de/congress/2019"&gt;36C3&lt;/a&gt; in December 2019 I had
something different in mind:  It was supposed to be the first actual
demo of the retronetworking / bbs-revival setup I've been working on
during past months.  This setup in turn is sort-of a continuation of my
talk at 34C3 two years ago: &lt;a class="reference external" href="https://media.ccc.de/v/34c3-9034-bbss_and_early_internet_access_in_the_1990ies"&gt;BBSs and early Intenet access in the 1990ies&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Rather than just talking about it, I wanted to be able to show people
the real thing:  Actual client PCs running (mainly) DOS, dialling over
analog modems and phone lines as well as ISDN-TAs and ISDN lines into
BBSs, together with early Interent access using SLIP and PPP over the
same dial-up lines.&lt;/p&gt;
&lt;p&gt;The actual setup can be seen at the
&lt;a class="reference external" href="http://osmocom.org/projects/retro-bbs/wiki/Dialup_Network_In_A_Box"&gt;Dialup Network In A Box&lt;/a&gt;
wiki page, together with the
&lt;a class="reference external" href="http://osmocom.org/projects/retro-bbs/wiki/36C3"&gt;36C3 specific&lt;/a&gt; wiki
page.&lt;/p&gt;
&lt;p&gt;What took most of the time was - interestingly - mainly two topics:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;A 1U rack-mount system with four E1 ports.  I had lots of old Sangoma
Quad-E1 cards in PCI form-factor available, but wanted to use a PC
with a more modern/faster CPU than those old first-generation Atom
boxes that still had actual PCI slots.  Those new mainboards don't
have PCI but PCIe.  There are plenty of PCIe to PCI bridges and
associated products on the market, which worked fine with virtually
any PCI card I could find, but not with the  Sangoma AFT PCI cards I
wanted to use.  Seconds to minutes after boot, the PCI-PCIe bridges
would always forget their secondary bus number.  I suspected
excessive power consumption or glitches, but couldn't find anything
wrong when looking at the power rails with a scope.  Adding
additional capacitors on every rail also didn't change it.  The
!RESET line is also clean.  It remains a mystery.  I then finally
decided to but a new (expensive) DAHDI 4-port E1 PCIe card to move
ahead.  What a waste of money if you have tons of other E1 cards
around.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Various trouble with FreeSWITCH.  All I wanted/needed was some simple
emulation of a PSTN/ISDN switch, operating in NT mode towards both
the Livingston Portmaster 3 RAS and the Auerswald PBX.  I would have
used &lt;a class="reference external" href="http://linux-call-router.de/"&gt;lcr&lt;/a&gt;, but it supports neither
DAHDI nor Sangoma, but only mISDN - and there are no mISDN cards with
four E1 ports :(  So I decided to go for FreeSWITCH, knowing it has
had a long history of ISDN/PRI/E1 support.  However, it was a big
disappointment.  First, there were some segfaults due to a &lt;a class="reference external" href="https://github.com/osmocom/freeswitch/commit/a341d58fbdf6b8bd7d1dd9509dc5319bee206168"&gt;classic pointer deref before NULL-check&lt;/a&gt;.
Next,  libpri and FreeSWITCH have a &lt;a class="reference external" href="https://github.com/osmocom/freeswitch/commit/5621e2a5edbbeec910988eca9446186f19790ab8"&gt;different idea how channel (timeslot) numbers are structured&lt;/a&gt;,
rendering any call attempt to fail.  Finally, FreeSWITCH decided to
&lt;a class="reference external" href="https://github.com/osmocom/freeswitch/commit/83f6bf5276cf70bb11b84615116b0e5cfc590b9d"&gt;blindly overwrite any bearer capabilities IE with 'speech'&lt;/a&gt;,
even if an ISDN dialup call (unrestricted digital information) was
being handled.  The FreeSWITCH documentation contains tons of
references on channel input/output variables related to that - but it
turns out their &lt;a class="reference external" href="https://github.com/osmocom/freeswitch/commit/2cd558502671b9902e0ed05e52d6b5ff10ecbb59"&gt;libpri integration doesn't set any of those&lt;/a&gt;,
nor use any of them on the outbound side.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Anyway, after a lot more time than expected the setup was operational,
and we could establish modem calls as well as ISDN dialup calls between
the clients and the Portmaster3.  The PM3 in turn then was configured to
forward the dialup sessions via telnet to a variety of BBSs around the
internet.  Some exist still (or again) on the public internet.
Some others were explicitly (re)created by 36C3 participants for this
very BBS-Revival setup.&lt;/p&gt;
&lt;p&gt;My personal favorite was finding &lt;a class="reference external" href="http://blackflag.acid.org/acid-underworld-on-searchlight.html"&gt;ACiD Underworld 2.0&lt;/a&gt;, one
of the few BBSs out there today who support RIPscrip, a protocol used to
render vector graphics, text and even mouse-clickable UI via modem
connection to a DOS/EGA client program called RIPterm.  So we had one
RIPterm installation on Novell DOS7 that was just used for dialling into
ACiD Underworld 2.0.&lt;/p&gt;
&lt;p&gt;Among other things we also tested interoperability between the 1980ies
CCC DIY accoustic coupler "Datenklo" and the Portmaster, and confirmed
that Windows 2000 could establish multilink-PPP not only over two
B-channels (128 kbps) but also over 3 B-Channels (192).&lt;/p&gt;
&lt;p&gt;Running this setup for four days meant 36C3 was a quite different
experience than many previous CCC congresses:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;I was less stressed as I wasn't involved in operating a service that
many people would want to use (GSM).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I got engaged with many more people with whom I would normally not
have entered a conversation, as they were watching the exhibits/demos
and we got to chat about the technology involved and the 'good old
days'.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So all in all, despite the &lt;a class="reference external" href="https://twitter.com/LaF0rge/status/1210463996282884096"&gt;last minute FreeSWITCH-patching&lt;/a&gt;,
it was a much more relaxing and rewarding experience for me.&lt;/p&gt;
&lt;p&gt;Special thanks to&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Sylvain "tnt" Munaut for spending a lot of time with me at the
retronetworking assembly.  The fact that I had an E1 interface around
was a good way for him to continue development on his ICE40 based
bi-directional E1 wiretap.  He also helped with setup and teardown.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;miaoski and evanslify for reviving two of their old BBSs from Taiwan
so we could use them at this event&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The retronetworking setup is intended to operate at many other future
events, whether CCC related, Vintage Computing or otherwise.  It's
relatively small and portable.&lt;/p&gt;
&lt;p&gt;I'm very much looking forward to the next incarnations.  Until then, I
will hopefully have more software configured and operational, including
a variety of local BBSs (running in VMs/containers), together with the
respective networking (FTN, ZConnect, ...) and point software like
CrossPoint.&lt;/p&gt;
&lt;p&gt;If you are interested in helping out with this project: I'm very much
looking for help.  It doesn't matter if you're old and have had BBS
experience back in the day, or if you're a younger person who wants to
learn about communications history.  Any help is appreciated.  Please
reach out to the &lt;a class="reference external" href="mailto:bbs-revival@lists.osmocom.org"&gt;bbs-revival@lists.osmocom.org&lt;/a&gt; mailing list, or directly
to me via e-mail.&lt;/p&gt;</description><category>bbs</category><category>ccc</category><category>osmocom</category><category>retro</category><guid>https://laforge.gnumonks.org/blog/20200105-36c3-retronetworking/</guid><pubDate>Sat, 04 Jan 2020 16:00:00 GMT</pubDate></item></channel></rss>