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. 27/05/2018 v2.9 Changed the abort message from "Connection Aborted" to just "Aborted". The madness in the logic is that FBB and other PBBS scripts may only read "Connect" and send their next command in their sequence and thus causing a bit of a loop. Changed version number in node.h Changed this file. I noticed that an IPv6 connection did NOT offer EXit as a command. Fixed. I also noticed that for an IPv6 connection, when running an external command it did not inform the user that they were being returned to the node which may hint that the plug-in is not returning to the node properly, or is exiting/forking prior to it's close. This is now fixed. Mainly for sysop debugging purposes but also for end users, when executing a plugin such as NS or tracer, it'll still open with "Executing command" but now it will return back to the node prompt with "Command ended.". This lets both the sysop and end user know the command exited properly, like with a "return 0" I decided that just having IPv6 as a trailer for IPv6 connects at the prompt to be a bit vague in display so to keep it a bit more consistant with IPv4 it now will show ...:/uronode6 instead. Fixed the "Sockets:" line in the Status command display. The word "Sessions" was off by one space throwing all the following column headers off by 1 space. 17/10/2018 v2.10 Edited node.h to reflect this version. Edited CHANGES.3 to include new changes to the node. Thanks to Marius YO2LOJ for a patch in do_ports within command.c where there is a possibility that the interface count may return NULL and the function will generate an exception in libc for the routine causing the node to segment fault out and disconnect the user from the node. Good to see Marius digging into the code again. While at it Marius also discovered the possibility of the interface showing as "null" in the do_sessions routine, possibly due to some changes in libax25 perhaps? Under some conditions ax25_config_get_name(dev) could return a null pointer - Marius YO2LOJ Changed a call that was in axdigi.c which had a lib call hardcoded and could break compiles under different archs. Patch supplied by Helmut Grohne, thanks to KI6ZHD for relaying the mail that included the patch. 03/03/2020 v2.11 Changed node.h to reflect current version. Note: The system has been behaving as best as it can be expected considering it's a front-end to the linux protocol stacks. As long as there can be an ax# or sp# interface, it can attach to it and work the protocol(s) the user wishes to use. There's still the 2-line patch that the kernel maintainers need to add to ax25.ko so that netrom will continue to properly function however that's not the issue of URONode, it's the kernel ax25 module. Made a couple of changes in gateway.c where the color schema wasn't properly resetting the netrom prompt only in regards to aborting ping or a connect request. This is now fixed. Made changes in system.c where it wasn't displaying the user being on IPv6 properly. While at it, I changed how it handles the user when they're on IPv4 in the lastlog and loggedin databases. Changed user.c to reflect incoming session is via IPv6 which also fixes the output of nodeusers so that instead of displaying ??????? it now shows that Telnet6 is being used as the incoming protocol. This one was really getting under my skin. Now I can rest in peace (as per QST 2/2020 haha!) 28/03/2020 v2.12 Edited node.h to reflect new version. ADDED documentation! I wrote docs in both .txt and .doc format. Choose your poison hihi! Unless you're a new sysop, I'm sure these are a waste of time for you to read. Modified the do_sessions command so that a plain S now shows SEssions and ST is the minimum required now for do_status. This also cleans up the commandset so it's more alphabetical. I also modified do_status so that it now may require an argument to show the full screen worth of system status otherwise by default it will only show very basic stats of version/date/hostname/uptime and now requires "ST" to be called. Calling "ST L" will show the long (original) status screens. I did this after noticing some other node softwares go to the extreme in showing stats that most end users would never understand nor even care about. This also saves a lot of bandwidth! 17/01/2020 v2.13 Changed the external command text to inform the end user that the escape sequence (CTRL-T typically) is disabled while an external command is run. I've been wanting to do this for a while to preserve integrity for the user. This required an edit in cmdparse.c Edited node.h to reflect this version. Cleaned up the status command. Prior *any* single character would print the long status report. Now either "l" OR "L" will be accepted. If another character is pressed an error will display: n1uro-15@n1uro.ampr.org:/uronode6: st s Usage: status l OR status L ** IMPORTANT ** -= IF YOU DO NOT READ THIS YOU WILL APPEAR BROKEN =- To be more compliant with downstreams I moved the files in /var/ax25/ to now be looked for in /var/lib/ax25 which appears to be the new file system ruleset by the linux gods. I did NOT make this up. I would *strongly* urge you to copy over your current /var/ax25/node/* files after running "make upgrade" unless you wish to start with a fresh system of sorts. Your config files in etc/ax25 won't be moved or touched and the man pages will remain where they are. Your help files, perhaps your ROSE directory (if you use rose.hlp like I do), and user logs will be reset. Users will be all considered new again so to prevent this from occurring I would move those files over. 73 - Enjoy. 24/6/2021 2.14 Fixed a display issue when connecting via flex/ax.25 in regard to the desti table where an additional line feed was presented upon the last row being a full 4-wide. This was done in router.c I went through multiple files that were giving compile warnings and fixed all the warnings I saw. Hopefully URONode compiles without any warnings whatsoever. If you do send me your log. Note: Linux is on kernel 5.x now and since kernel 4.2, the ax.25 stack module in the kernel has had a minor issue of NOT closing an ax.25 socket when used with NetRom as a virtual circuit. This prohibits other NetRom sockets from being created/established. This is an awful long time to allow such a bug to linger. Until this bug is fixed (to which I have nothing to do with) there's not much more I can do with the node. Some guys are more than able to do their own kernel compiles, others are not however I seem to get the blame of faulty software when this is far from the truth. Until this bug is resolved and fixed, the project is on an indefinite pause. 22/10/2021 2.15 K3CHB found when running "make" that it was erroring on util.c due to dupe calls. Removing those calls fixes this bug and allows URONode to compile now without error on newer GCC systems. Older ones were a lot more tollerant to bugs like this. ----------- 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. search uronode Join our support mail list: https://uronode.n1uro.com/list/ 73 de Brian N1URO