27/03/2016 - v2.5 YO2LOJ reports 2 warnings with regards to system.c and 
the date/time stamp function. While I do not get one, I also do not get 
one with his supplied patch... so I included it. The patch affects the 
differences between 32 and 64 bit OS timestamps. Now the OS bit 
shouldn't matter. Thanks Marius! (That's why we have ya on the team)

Ported the calibrate tool from F1OAT to the URONode suite. I could have 
rewritten the whole thing from scratch but why the need to reinvent the 
wheel? There was some recoding I had to do so that it'd compile under 
URONode but that was somewhat minor. Usage is the same: 
calibrate -t [ms] interface. 
This port is similar in theory to what I did with Craig Small's axdigi package.

Cleaned up routines in Makefile. I'll probably have several and 
hopefully they will go unnoticed. One critical thing I did notice and 
I'm surprised no one reported this was if flexnet wasn't selected, and 
one ran a "make install" or "make upgrade" - it would exit as soon as it 
tried to install a non-existant binary (FlexD). This left the axdigi 
module to go un-installed/upgraded. This is a very important module to 
install as it allows for interface to multi-interface digipeating. 
Anyway, I got off my butt and fixed this amongst other things.

Fixed the way the system handled parsing of the info file that carried 
the stats for Memory and Swap usage: /proc/meminfo.  In some cases, the 
node couldn't properly parse the swap statistics in the "Status" 
command. Now, regardless of which kernel is being used, the proper stats 
will be parsed and the percentage arithmetic will be properly applied to 
show final percentage used. An example of the output:

Memory:            Available  Used       Free       perc. Used
------------------ ---------- ---------- ---------- ----------
Physical:          4048024 kB 3206552 kB 841472  kB  79 %
    Swap:          1881084 kB 0       kB 1881084 kB   0 %

I really don't know why this was such a difficult thing for me to fix 
but I got it after months of pondering. This fixes a known non-critial 
bug :D After fixing this bug however I created another one that would 
cause a divide-by-zero segfault. Someone asked me to configure a box 
remotely for them and they didn't add a swap partition at all! Now if 
there's none or it's simply not activated, the node's 'STatus' report 
will reflect such. Thanks to the NY EOC folks for creating this error so 
I could find this bug before relase xD

Fixing texts in gateway.c and mheard.c where it still referenced the 
word "port(s)" instead of "interface(s)" as it should. Also cleaned up 
some minor error reporting. Also made some changes in how some aborts 
are displayed, and also invalid callsign error reporting. For example, 
an aborted connect will now show: 
c n1uro-3 
UNIVLE:N1URO-5} link setup (ax2)... 

UNIVLE:N1URO-5} Connection aborted. 
The same as with an aborted telnet session.

Pings now will show: ping www.comcast.com 
ICMP Echo request sent to: 68.87.29.59

UNIVLE:N1URO-5} Ping aborted.

and a connect attempt that doesn't exist in any tables or links: 
c g4apl 
UNIVLE:N1URO-5} G4APL not found, please retry your entry. 
I'm sure I'll figure out some more as time goes on. Always a little something 
to do :)

One thing I noticed was an error in the Ping routine. The "Maximum size" 
of a ping was preset to 248 bytes. On an ax25 link, this doesn't even 
leave room for the IP headers, nevermind the ax25 headers! In thinking 
this over, and not knowing if the IP path would be over vanilla ax25 OR 
perhaps via NetRom, I decided to make the Maximum content per ping at 
128 bytes. This should also be just large enough to allow ALL ascii 
characters a chance to be included in 1 ping frame. Ex: 

n1uro-15@n1uro.ampr.org:/uronode$ ping k1yon 129 
Maximum size is 128 
n1uro-15@n1uro.ampr.org:/uronode$ ping k1yon 128 
ICMP Echo request sent to: 44.88.4.1 
ICMP Echo reply received from: 44.88.4.1 
Ping completed in: 151ms (ttl=63) 
n1uro-15@n1uro.ampr.org:/uronode$

While at it, I made changes to the online help file for ping and to 
uronode.8 man page. 

Also I noticed while working on a new site for EastNet, I somehow omitted an 
install line in the Makefile for flexd.8. This not only is fixed but I also 
expanded a bit on the limited text that was inside.

Cleaned up a text display bug in the Status report. Swap: was not right 
column justified with the rest of the memory stats. This was handled in 
command.c

Added a routine in configure to check for "make" as I've seen new 
installs where make is not installed but gcc is. Needless to say you 
can't "make" a binary if "make" does not exist ;->

Also added a notification in flexd where when started to inform you that 
the poll cycle has started. You may see it connect to test the existance 
of an ax25 socket for the remote end when you first start flexd. This 
starts the timer for your poll sequence in flexd.conf.

While I was at it (and with a decent nudge from Tomasz SP2L) I did some 
further digging and found (with the aid of Thomas DL9SAU) that the 
getsockopt routine itself was showing failure because the socket wasn't 
initially established prior to the polling loop. In adjusting it's 
settings this appears to help relieve the initial error getsockopt() was 
showing upon start of flexd. Now flexd should login to the remote 
immediately upon start and pull down the desti table of the remote node. 
Thanks Thomas and Tomasz :)

In digging through the flexd source some more, and enjoying the fact 
that the configs can be changed "on the fly" without having to restart 
the system in most cases, or disrupt activity that's in session on or 
through the node, I added a call to update the destinations upon a 
"killall -HUP flexd". This allows the node sysop to change the flex-gate 
they wish to poll without having to stop and restart flexd, and grab an 
immediate destinations list. Remember to do the following: 
- add the route in uronode.routes 
- change the flex gateway in flexd.conf 
- killall -HUP flexd 
... and your new config and destination will instantly be live. Also, you can 
-HUP your flexd to force an update as well. 

Fixed a non-critical bug in axdigi where killing the daemon would NOT 
clear the pidfile in /var/run. Always a stale pidfile was left over, and 
as a quick fix I had the daemon delete the pidfile through a system call upon
start. A hack but worked. NOW, the daemon will remove the pidfile upon 
exit as it should.

Wrote a set of SystemD files since xinetd/inet will soon be eliminated in
favor of SystemD. I've tested the files on both a Pi running Raspbian
wheezy and on my Fedora testbed. Important Note:
IF you spawn your incoming telnet connects with SystemD, it's very possible
that SystemD *will* convert your incoming IPv4 to internal IPv6 sockets. 
You may handle this by forcing IPv4 in your SystemD uronode.socket file.
While as of this version URONode will handle *incoming* IPv6, I haven't
written any outbound routines for IPv6. To my knowledge, there's no need
for it and I don't know if we'll ever have such a need on ham-based
networks for IPv6. URONode *is* the first packet node however, to support
IPv6... a historical milestone I do believe.

While I was testing SystemD and finally realizing that the above IPv6
conversions were true, I created a menu system for IPv6 to make it a lot
cleaner than it already was... actually it had none. Since it's also
spawned by SystemD, I made that the prompt for IPv6...
SystemD - n1uro@fedora.n1uro.ampr.org:
I was going to dupe the IPv4 prompt but decided it should have it's own
to follow with the scope of how I maintain this project. So far everything
in regards to both SystemD and IPv6 seem to be working fine.

31/03/2016 - v2.5.1 (Maintenance release)
Added better error handling output to FlexD and axDigi. Now they tell you
when they've properly received your -HUP, your -TERM or your start. This 
should help you all in better debugging your backend engines (FlexD, axDigi,
etc.)

Added a -b flag to the installer routines by suggestion of Marius YO2LOJ
so one with an existing install won't have their files totally overwritten
however they'll be backed up with a *~ flag instead during "make install".
The preferred method for upgrading an existing node as always is by using
"make upgrade" which only copies over the files required for that version.
Once in a while a new field will be added or one deleted from the file
uronode.conf, or one of the others and I've noticed sysops don't pay
any attention to the new field requirements (ex: RoseId is the latest
add). Compare the fields in files before just copying them back over!

Gus I0OJJ and our own Bob VE3TOK reported strangeness in certain ALIAS
commands. I tried like heck to reproduce it here and on machines I take
care of. I knew where the issue layed but not fully being able to get
it to reproduce was a royal "b". After sending Bob code to test, he
was able to get positive results and checked it in for me.

While at it Bob increased the buffer for the reader within FlexD. Seems
Xnet may require a larger buffer than FlexNet for some reason? Bob also
checked that in. Thanks Bob.

18/04/2016 - v2.6
Removed stale and unused axdigi.conf file. Thanks to David KI6ZHD for
pointing this out that I had a stale file in the archive. This file
belonged to another digi daemon I was going to revive instead of Craig
Small's multi-interface crossport digi daemon. I find that especially
with FlexNet, a multi-interface crossport digipeat system not only is
unique to the native linux kernel BUT is also very efficient. If you
have a stale copy of axdigi.conf floating around, please delete this.

Added a question to engage or disengage interactive configure/make mode.
This idea came to me from a query I received by KI6ZHD. If you choose NOT
to use interactive mode, than you must run make/make upgrade/make install
manually. Note: ALL options including rose and flexnet WILL BE COMPILED IN.

Tomasz SP2L was seeing carriage returns when administering his server
remotely and sending SIGHUP to flexd in the terminal messages confirming
the -HUP. Removed.

Added a version output for FlexD and tweeked the one for axdigi. Now both
helper daemons will display its versions based on URONode's version and
some very brief information about themselves. flexd -v or flexd -h
along with axdigi -v or axdigi -h will bring up this information.

Decided that since there's so many commands beginning with M I would move
the MHeard command to a Jheard command. This keeps the commandset more in
line with other systems except for TheNet and X1J-4, and separates that one
command away from the volume of M's. While at it I also made a JL for
Just heard Long. If you specify an interface, Jheard/JLong engages only for 
that interface. Note - JLong will say: it may time out HFers. I also had to 
modify Makefile and rework the help files to match. While at it I needed to
modify the uronode.8 MAN page.

Gave Makefile a more modernized compile line option. I'm hoping this will
keep URONode one of packet's better robust nodes.

I noticed some sites were violating Software2000's NetRom specifications
by defaulting reconnect on still in their uronode.conf files. I had thought
that I fixed this in an earlier release. Perhaps I did and then migrated
an old .c file back into the mix? (wouldn't be the first time I've done
that by mistake!) Anyway... three key things Software2000 was insistant upon
were NO CTEXT, NO RECONNECT, NO GOODBYE MESSAGES. If you've noticed, I've
taken ALL that out of URONode. These things were done as to not confuse
robot scripts such as PBBS mail forwarding sessions. While other systems
may wish to continue to violate the NetRom protocol (and others) I will
do everything in my power NOT to.

I have made a diff file for JNOS2.0K that makes it a bit more user 
compatible with URONode, and other linux-based nodes. For almost 30 years
TCP port 3694 has been used for inbound telnet for linux-based nodes, and
URONode is no exception... just as IP protocol 93 is for axip and UDP
port 93 is for axudp (again other systems love to violate protocols, we
try not to). Besides my little isms that I like in xNOS which I often
contributed to K2MF for MFNOS, I've began to do similar for JNOS. I'm adding
the .diff file in the main code distribution so if you do run JNOS 2.0K as
your PBBS TCP port 3694 is now recognized in JNOS with my patch. I have
as of this writing submitted it to Maiko for considerations, I don't know
if he's going to use it or not. If you do want to patch your JNOS 2.0K
copy it into your jnos source directory and run: patch -p1 -i jnos20k.diff
and you should see about a half dozen files updated. If Maiko doesn't wish
to include this and you want me to keep up to date with it, let me know.

With the recent CVE study on Winlink2000 and plain text passwords exposed, I
went through URONode to insure it wasn't posessing the same issue. By
default URONode doesn't ask for ANY passwords however it's highly suggested
that the sysop require passwords on any internet or amprnet interface. Before
yes, a sysop could require a password on an ax25/NetRom/Rose interface which
would be exposed. Now, if a sysop mistakenly tries to force a password
on RF, it will be ignored by the node so it's not exposed.

25/05/2017 - v2.7

Added an "A"nnouncements command. Sysops can use this to give users a chance
to read any announcements you and/or your club may have. I figured that I 
would segment this from the "I"nformation command since a lot of guys tend
to post their system specs in the uronode.info file. If a user is seeking any
news or announcements they won't have to sort through the other information
contained within the system.info file and vice versa. A new file called
uronode.announce now needs to be with your other uronode.* files.

Added a trying state display for telnet where before there was none. Actually
there was a whole bunch of info but I had it commented out. This I did after
a recent user poll was in support of such and other "trying" state messages.
Such messages are still filtered for netrom connects.

Removed uronode.service file from the systemd group. Only uronode.socket and
uronode@service needs to be placed and engaged. This was discovered by SP2L 
on his systems and I verified this on my Fedora test system (which is systemd).
Thanks to Tomasz for finding this and pointing it out to me. Without the
uronode@.service file, the uronode.socket file won't properly engage upon
a connection request via IP. Without uronode@.service your systemd will
report an error in loading the uronode.socket file:
root@vbfc25:~# systemctl status uronode.socket
● uronode.socket - URONode Server Activation Socket
   Loaded: loaded (/usr/lib/systemd/system/uronode.socket; enabled; vendor preset:
   Active: failed (Result: resources) since Sat 2016-12-31 11:30:54 CET; 45s ago
   Listen: 0.0.0.0:3694 (Stream)
   Accepted: 4; Connected: 0

   Dec 31 12:18:11 vbfc25 systemd[1]: Listening on URONode Server Activation Socket.
   Dec 31 11:30:54 vbfc25 systemd[1]: uronode.socket: Failed to queue service startup
   Dec 31 11:30:54 vbfc25 systemd[1]: uronode.socket: Unit entered failed state.
   lines 1-9/9 (END)

Fixed a bug in JHeard and JLong in regards to flagging an interface that
has existed I'll guess since the beginning of time. This bug was found and
reported to me by Han PE1FAM. I was considering removing this feature
however I can understand it's usage in the way Han is using it. In the way
I have it now, the "Hidden" interface now will lock an end user from trying
to attempt connects out an interface a sysop doesn't want users connecting
out from such as an APRS interface. The interface in an "int' will not be
displayed as to be a subtle message that the interface is not usable, however
it will be displayed in a NetRom "Routes" list and in J/JL request. 
If an attempt to connect out a "hidden port" is made the user is shown an error:
n1uro-15@n1uro.ampr.org:/uronode$ c ax1 foo
Not a user interface.
The reason I did this was so that you may see propagation in a heard list
in the event of ducting for some VHF/UHF "dx"ing so to speak.
**Note: do NOT flag a L4 protocol interface such as a NetRom interface
as a locked interface or the node will not deliberately load.
Thanks to Han for reporting this.

While working on new node W1WCG, I noticed some code clean up in node.c
There's still a lot more to do especially with ANSI.

15/06/2017 - v2.8

In gateway.c I cleaned up the do_ping routing slightly. I was going to add
a default timer but instead decided to let the user hit enter for their own
"timer" of sorts. Users are also now instructed on the node to hit enter
in order to abort a ping.

Cleaned up do_nodes so now if there's a slime trail node, rather than prefix
it with a colon ":", now it will display ##TEMP: instead. This was sorta
bugging me on just how to handle these. While I was at it, I made a 
modification to gateway.c so if a user tried to "C ##TEMP" it instructs the
end user to use the callsign-ssid. I can't think of any other node that does
this.

Thanks to Dave Hibbard (at Debian) for pointing out a dropped "t" in the word
"software" in flexd.c when the -v switch is used.

Cleaned up some prompt routines including the ipv4/ipv6 login sequences.
Before (especially with ipv6) if a callsign had no permissions to login via
the internet they were never informed how to gain access - they were simply
denied. I found this to somewhat make the node a bit unfriendly. Fixed.

With all the chatter on the 44-net list about IPv6, I've decided to get my
block active for further testing. In doing so, I noticed that if a user
telnetted in via IPv6 and made a NetRom connect out, the node failed to
inform them that they were connected... fixed.

As of this writing there's no outboud telnet or dns functions for IPv6
but that's not to say it's not in the works. Personally, I don't see a
true need for IPv6 outbound for amateur radio as the amprnet is going
quite strong however that's not to say things may not change either. If
anything, IPv6 through an HE.net tunnel works as slick as the amprnet
does with the exception of how it handles dynamic clients. Other than 
that, it does appear to tunnel through your ISP filters as amprnet
does which is a plus.

12/07/2017 v2.8.1
Spotted and fixed an issue in the D command within router.c that I somehow
introduced in regards to columns not equalling a full 4x4. Locally it didn't
show but remotely it did. When one ran a D command and there were less than
4 columns a carriage return/new line was not sent making the user's screen
look "stuck" when in fact it was not. Fixed!.. before bugs were reported :)
Note: this *only* affected an incoming NetRom connection.

Changed this file and node.h to reflect 2.8.1.

----------- Note on SystemD --------
In uronode.socket, you'll notice the line:
ListenStream=0.0.0.0:3694
This tells SystemD to listen on TCP socket 3694 for any IPv4 ONLY incoming
connection. If you wish to filter JUST your amprnet and IPv4 localhost
IPs make a line for each changing 0.0.0.0 to 127.0.0.1 and another for
your amprnet IP. This will by default filter any commercial IP requests
to URONode. If you want SystemD to try IPv6 *first*, don't enter in any
IP schemas and just list the port number. SystemD by default appears to
use IPv6 prior to IPv4.

You can verify the above by running systemctl status uronode.socket:
ystemctl status uronode.socket
● uronode.socket - URONode Server Activation Socket
   Loaded: loaded (/usr/lib/systemd/system/uronode.socket; enabled)
   Active: active (listening) since Mon 2016-03-07 15:30:39 EST; 6min ago
   Listen: 0.0.0.0:3694 (Stream)
 Accepted: 3; Connected: 1

----------- Wish-list: -----------
----------------------------------
Original Development Information (aka Disclaimer): URONode was developed 
on an IBM eSeries 330 eServer with dual 1.2GHz CPUs The OS is Debian 
Linux 4 using kernel 2.4.27, libax25 v0.0.11, ax25-tools v0.0.8 and 
ax25-apps v0.0.6. This software comes with absolutely NO guarantees so 
crash n burn at your own risk. We all may be surprised and find out that 
it actually DOES something useful! URONode may not run 100% depending on 
environmental conditions specific to your system.

URONode is GLPv2 code, and tested by it's main author on the following 
platforms: Raspberry Pi ver. B, Debian 7.7 on a Core-i3, Ubuntu 
12.0.4LTS on a Core-i3, Fedora ver. 21

------------

Comments/suggestions? email: n1uro@n1uro.ampr.org Gripes??? cat gripes > 
/dev/null :D just kidding!

This version will get you going for now. I'll post any changes to: 
ftp://ftp.n1uro.net/packet and https://uronode.sourceforge.net. You may 
also find URONode in your distro's repositories. <dnf/yum or apt-cache> 
search uronode

Join our support mail list graciously donated by TAPR! 
http://www.tapr.org/mailman/listinfo/uronode

73 de Brian N1URO
