differences between NOW and 2.0i - January 30, 2012 * for RSYNC users only ---------------------------------------------------------------------------- 1) Sometimes JNOS is run in an xterm window, instead of on a linux console. If the xterm window is resized, a 'NOS PANIC: Lost keyboard' error will result in JNOS, and it will kill itself in the process. I have created a fix which *seems* to handle the situation in a much better manner now. Instead of terminating, JNOS will keep running and simply adjust to the new number of columns and rows. The event is now logged to the JNOS log, not to the screen as before. Please report any issues - thank you. 2) It was reported that history recall using the UP and DOWN arrow keys was not working. In fact, it does work, but is dependant on the value of the TERM environment variable. It works perfectly fine if 'TERM=linux', but for cases where 'TERM=xterm', JNOS does not have the code to be able to handle the 3 byte key sequence sent to it by the linux kernel. I have added a mapping function to handle this, so you should now be able to use the UP and DOWN arrow keys for history recall, for JNOS running in an xterm or other terminal type using the ANSI escape sequences. *** December 17, 2011 *** 1) Better support for PTY98 (/dev/ptmx, /dev/pts/N) pseudo devices. Bob (VE3TOK) asked for this a long time ago, so I figured I better get it implemented. Note : Technically one can use the new jnos 'attach baycom' and go direct to a kernel KISS type interface, meaning you don't need to run an intermediary program (kissattach or net2kiss) anymore. Try it, let me know how it works. COMPILE : Make sure '#define JNOSPTY98' exists in your config.h file. The best way for me to show how this feature works is by example. One way of getting JNOS to use a linux AX25 device is through the 'kissattach' program, but get the one from F6BVP (it has a mod that actually outputs the name of the slave device after you run the program). The stock ax25 utilities will not tell you that (you have to look for a new /dev/pts/N to appear then). kissattach /dev/ptmx radio > /jnos/spool/ptmx_radio.cfg The issue here is you don't know what slave device you will get, it could change each time you run kissattach, there may be no consistent device name for you to depend on when running 'attach asy' in the JNOS autoexec.nos. Now in JNOS (autoexec.nos), suppose we have this entry below : attach asy ptmx_radio - ax25 ax0 4096 256 9600 I have added a feature where if the 3rd argument starts with 'ptmx_', then JNOS will look for a corresponding *.cfg file, and extract the slave device name from it, and then attach using that instead of the original argument. 2) New SMTP gateway options, the old way just didn't work for alot of people, it would first try to deliver direct to a host, then to MX if enabled, and finally to an smtp gateway (as a last resort) if you have one configured. COMPILE : Make sure '#define SGW_EXCEPTIONS' exists in your config.h file. Two (2) new subcommands have been added to the smtp gateway syntax : smtp ga mode [original|force|first|last] smtp ga exception add ip mask smtp ga exception delete ip mask smtp ga exception (to list) The original way to define the gateway has not changed : smtp ga [A.B.C.D | none] If mode is not configured, then JNOS will function the old way. The 'force' mode sends ALL smtp requests direct to the gateway, nothing is sent direct to a host, and no MX records are tried. The 'first' mode does the same, but allows for exceptions, of which are configured using the 'smtp ga exception' subcommand. Exceptions basically follow the old way, BUT the gateway will not be attempted as a last resort if all else fails. Why have a 'force' ? Perhaps you are running 'first' with a list of exceptions, and for some reason you need to force all traffic to a gateway without having to reconfigure everything. The 'last' option does not do anything, and 'original' simply switches back to old way - I doubt anyone will use those two. Example (this is what I am currently running on my system) : smtp ga A.B.C.D smtp t4 60 # 1 minute timeout smtp ga mode first # send everything to gateway except 44 stations, they go direct smtp ga exception add 44.0.0.0 0xff000000 # other exceptions (examples) - you can have as many as you want smtp ga exception add E.F.G.0 0xffffff00 smtp ga exception add X.Y.Z.Z 0xffffffff Alot of this functionality actually comes from the 'SMTP Deny Relay Exceptions' code (SDRE), which I wrote some time ago. I was able to use the same code for this enhancement (with some restructing). *** October 2, 2011 *** 1) I am once again working on the INP support, which I last worked on quite a few years ago (as far back as 2005). I've been asked to make it work again, so it's back on the plate - a READ ONLY version of INP is now available. Please refer to the following NEW document which details the work so far : http://www.langelaar.net/projects/jnos2/documents/inp2011.txt 2) Fixed up SNMP, there were no incoming counts for the axip/axudp interfaces, and JNOS now tracks counts for the netrom interface. Even though all of the changes were quite trivial, I spent two days on it - the new INP code seems to have pushed the network() daemon stack size to the limit - even 1 or 2 lines of new SNMP code was enough to push JNOS into a stack overflow. For example, if netrom debug was on, any incoming RIF frames would crash JNOS when it tried to write to the logfile. I have bumped up the stack size of the network() daemon to 4096 if INP2011 is defined - problem solved ! *** April 28th and before *** 2) Looks like I forgot to put in the rewrite code for B2F forwarding, noticed that bulletins were not going to the proper areas. Thanks to Gustavo (I0OJJ) for running forwarding tests with my system, and noticing this problem. As well, corrected a 'problem' where the 'From: ' header in messages coming in from a forward session had too much information (suffix of origbbs). I did this to be consistent with regular BF forwarding (FA proposal) format. We will have to see if anyone complains about this one. 3) Started work on a new SNMP server for JNOS in mid December, the idea being that I want to use MRTG graphs to directly monitor my JNOS interfaces, and see what kind of traffic I am getting. By the start of February, I finally got something that works very much to my expectations. Check the practical user guide for full details. Warning - you MUST do a MASS compile, since the 'iface' structure has been altered from previous versions - I have added additional member variables, and the code will change over the next while as I secure and fine tune it. 4) It would appear that B2F forwarding between two JNOS 2.0i systems was not working - messages were always rejected. This is fixed, the FA proposal hack usually seen in the log is now gone, and the FC proposal is properly dealt with now. It's pretty cool to watch two JNOS systems B2F forwarding. 5) If your JNOS is B2F enabled, any forwarding partners connecting to you and showing a SID of B1F are now immediately disconnected to prevent possible damage to user mailbox files and keep JNOS 2.0i stable. There is an issue with how JNOS treats B1F (it doesn't), but this issue is only relevant if you are running B2F (mbox fbb 3). The JNOS log will tell you how to get around the problem for now - ie, the 'mbox nob2f ' solution. 6) I have added a new 'nos_log_peerless()' function, so I can log to the JNOS log for UDP servers like the new snmpd.c just added. I never really liked the fact that the regular log always displayed a '-', when I wanted to see an instead. The regular log uses 'j2getpeername()' to get that information, but it fails for sockets using SOCK_DGRAM mode. Also, if the regular log is passed -1 for socket, there's no point going through the entire user socket list when we know it won't be found - wastes cpu/time. 7) Fixed up the domain name resolving code for axudp and axip interfaces that have a domain name configured for their remote host. Up till now, if JNOS was not able to resolve the domain name of the remote host at the time of the attach, the interface would not get created. No more - the interface will now be created, even if the remote host ip address can not be found, the idea being that eventually it will get resolved - in the meantime, the interface will just get ignored till it becomes active. This new method gives a consistent order to the JNOS interfaces, something which the recent SNMPD + MRTG work relies quite heavily on. Lastly, there's no more need to use the 'at' command to attach the 'dyndns' type interfaces a few minutes after JNOS has finished loading the autoexec.nos file. Just attach them like you would any other interface in your autoexec.nos file. 8) JNOS will now properly link if you '#undef WINMOR', previously the make process would continue to look for winmor function references, and fail. differences between JNOS 2.0i and 2.0h - November 23, 2010 ---------------------------------------------------------- 1) Some people like to customize their 'config.h' file. There have been some cases where people updated their source (mostly via the rsync server), only to have their customized 'config.h' file wiped out. For that reason alone, from this point on, JNOS 2.0 source will no longer ship with a 'config.h', instead it will contain a file called 'config.h.default'. The makefile checks for 'config.h'. If it does not exist (as is the case of a fresh install), it will first copy 'config.h.default' to 'config.h', then do the compile. If you want to customize 'config.h' before you do a compile on a fresh install, run the command 'make defconfig' first, which creates the 'config.h', then customize (edit) it, then run 'make' after that, to do the actual compile. Also note, 'hardware.h' is no more - it's gone ! If you choose to use a config.h from a previous JNOS compile, you may want to run a diff between it and config.h.default to see if you are missing out on any new features. Technically speaking, you should be able to use the original JNOS (linux) 1.11f config.h file, but I have not tried that. Added a few fixes and mods from K6FSH, check 'readme.k6fsh' for details. I have put his original patch file and docs in a 'k6fsh' subdirectory. 2) If you have the Intel Compiler (icc) Version 11.0, it will compile JNOS too, all you need to do is change the following in the makefile : change 'CC = gcc' to 'CC = icc' comment out 'DEBUG = -g3 The '-g3' option can cause an unresolved reference at link time. This is a known problem due to a bug in the kernel headers, not the compiler. I did this on a Scientific Linux 5.4 system (x86_64) - it runs fine, tun works, you will probably see a fair amount of compiler warnings - no worries. 3) Fixed the famous '25 day negative timer' issue. Around the 24 to 25 day mark, timers would suddenly stop working, showing negative values, etc. Thanks go out to Jack (AA6HF) for pushing me on this and for testing. 4) New feature, added syncing (flushing) of trace log files. This is a feature which should have been added a long time ago. The problem with tracing to a file has always been that the operating system only flushes to disk every so often (which makes sense of course), but if one wants to depend on the file for realtime monitoring, it's not practical. By syncing the log file every few seconds or milliseconds (user selectable), it now becomes practical. The 'trace' command now features an extra parameter (in milliseconds), for example, to trace port ax0 to file, and flush it to disk every 1/2 second : trace ax0 0x211 ax0.log 500 A big thanks to Michael (N6MEF) for pushing me on this, and for testing. Warning - you MUST do a MASS compile, since the 'iface' structure has been altered from previous versions - I have added additional member variables. 5) Interface names (not descriptions) can now be any length. One could always create interfaces with long names, but they would not work (port could not be found, or error 22, etc). This required redefinition of the sockaddr_ax structure - look for '#ifdef JNOS20_SOCKADDR_AX' in the code if curious. 6) Added callsign validation for the web (browser) based user mailbox. I forgot to add it, and was seeing garbage logins from time to time. Now only *valid* callsigns will be accepted when users try to login via the browser. Session control code has also been substantially improved. In the original version, simple internet probes or DOS attacks quickly max'd out available sessions. New command : hvs 7) JNOS is able to B2F forward with an RMS Packet Node. I'm quite happy with how well it is working, so much that I now do hourly connects to a nearby RMS Packet Node to check for any mail destined to VE4KLM from Winlink, or if I have messages destined to preconfigured users on the Winlink system. 8) Experimental interface to another PC running WINMOR Sound Card Modem. Spent a few months on this starting in April 2010. During the course of this work, some major refinements were made to the B2F code. My remote test system was another PC running both RMS Express + WINMOR Sound Card Modem. JNOS talked to it via audio cables, speakers, and microphone - simulated RF channel :) New commands : hfdd ip [ip address of tnc]* RMS Express is now able to connect to JNOS and pick up messages, as well as send us messages (with attachments) during the same forwarding session. This should still be considered experimental - alot more testing, particularly exception testing, still needs to be done. The WINMOR 'define' is now in 'config.h.default', used to be in 'makefile'. 9) More refinements to the B2F and general FBB forwarding code. Uncompressed and Compressed size values in outgoing FC proposals are no longer faked out, and a proper checksum is now appended to any outgoing F> messages. The fake values and missing checksum would result in RMS Express crashing each time. Here's another good one - code I wrote in 2005 to disable FBBCMP after an hfdd_connect() actually contributed to a whole slew of problems with the B2F forwarding code. I have since removed the code, solving several key issues. It would appear that JNOS - even before version 1.11f - has been replying to an incoming FQ with it's own outgoing FQ. I don't believe that is correct, so I have removed that function. Not sure if it will fix anything or not. I would guess having the additional FQ could disrupt a forwarding session in certain cases, but that I don't know at this time. 10) JNOS can now use RIP broadcasts from the AMPRnet gateways system, instead of the 'encap.txt' file, to update the ip routing table. The RIP stuff has been available since early 2010. It's an alternative, not a replacement. New commands : ip upstairs [multicast ip address] 11) A BBS user can now connect to a remote station without having their SSID inverted. Instead of CONNECT, they can use the new CONNISC command. Same syntax as the CONNECT command. I did it mostly to ensure the Winlink RMS Packet node uses the *proper* callsign when logging into Winlink to check for the BBS users messages - CALL and CALL-15 are two different users ! New command : connisc 12) More cleanup of main log file, more 64 bit compatibility changes (nothing too serious, just want to make sure stuff is done right), and fix compiler warnings on various platforms (not just slackware or redhat derivatives). 13) The 'available memory' and 'core memory left' information has been removed from all the various stats displays, mostly for technical reasons. Available memory logged when JNOS first starts up is far from accurate anyways, and I have never found this information to be terribly useful on linux versions. Note : This *might* affect scripts you have that depend on stats info. 14) JNOS can now run as a daemon (no keyboard, no (n)curses, no console), all you need to do is '#define HEADLESS' near the top of your config.h file, and do a 'make clean', then 'make'. I should provide a separate makefile for this that has NO references to the CURSES stuff - will do so later. 15) The INFO command was never really updated to reflect all the stuff I've added over the years since the JNOS 2.0 project started. I'll try and do better in keeping the 'version.c' file uptodate. This is ongoing ... 16) Got rid of the '-more-' prompt when a mailbox user logs in through their web browser and tries to list or read long messages. There is no point in having a prompt with a browser interface. It is a big pain in the neck. Thank you to Gustavo (I0OJJ) for his perseverance on this issue. 17) Fixed a problem reported by Robert (KD1ZD) where JNOS would crash when trying to get the mailbox name (mbx_getname). The code was not checking to make sure a connection actually existed before moving on. The code will now log a message 'connection never completed' if this happens. differences between JNOS 2.0h and 2.0g - December 6, 2009 --------------------------------------------------------- 1) Time to turn the latest beta into an official version - JNOS 2.0h The uptime on my 32 bit test system (pentium 100, x86, Slackware (9.1), uses a baycom board for RF port) has exceeded 31 days, and is very stable, lots of forwarding and smtp going on to test it. I'm very comfortable with it. The uptime on my 64 bit test system (optiplex 330, x86_64, Arch (aug/2009), uses a kiss enabled PacComm TINY-2 MK-2 for RF port) has exceeded 18 days, and also seems quite stable, with lots of forwarding and smtp going on. 2) This release is supposed to be 64 bit compatible. In other words, it does not care if the linux box you are using is x86 or x86_64 architecture. It does not care if you use Slackware 9.1, Arch 2009, or Fedora Core 11. 3) WARNING - IF you are migrating a JNOS installation from a 32 bit system. In other words, if you are copying /jnos from your 32 bit environment to run it in your new 64 bit environment, you MUST reindex your mail/spool files !!! One way to do this is to run jnos with the -i option. You only have to do it once. This is very important to do. The *.IND files are binary files, and are platform dependent, so your 32 bit index files will *seem* corrupt and do all sorts of strange things, possibly hanging and/or crashing JNOS in the process. I had hoped to make the index files platform independent, but that will have to wait for a subsequent release. So for now, please REINDEX your files !!! 4) Big new feature, web (browser) based user mailbox. Users can now use their favorite web browser to access the JNOS 2.0 BBS. It has the exact same look and feel of a telnet or ax25 connect, but you use your web browser intead. 5) Otherwise, no new features have been added. Some entries in the JNOS log have been cleaned up a bit, for instance the dyndns processing for axudp and axip interfaces has been minimalized to just a one line entry. 6) NOTE - JNOS 2.0h compiles fine with the *shipped* 'config.h' file ... IF you decide to edit config.h to suit your own needs, you *might* get compile errors. I can not possibily test all the different combinations of options in config.h, so there is always the chance that you may run into problems. IF so, please contact me - maiko@pcs.mb.ca - to fix it. differences between JNOS 2.0g and 2.0f - May 26, 2009 ----------------------------------------------------- 1) Time to put out another official release, it's been well over a year since the last one. I really need (want) to get 64 bit compatibility completed. Having an official release (instead of ongoing betas) will make it easier for me to do the work and manage the changes. In other words - JNOS 2.0 is still not 64 bit compatible ! I have compiled and run JNOS 2.0 on a Dell Optiplex 745 (x86_64) machine running Scientific Linux 5.3, but things do not behave properly, and it looks like the compile is now a 64 bit thing. Earlier versions of Scientific Linux did not give me these problem. If you run into the same problem that I did, you can try to add the '-m32' option to the gcc command, which forces applications to compile in 32 bit mode. You will need to install gcc-multilib, or the equivalent for your O/S, but be warned. In the case of Scientific Linux 5.3, installing 32 bit support for gcc, glibc, etc is very difficult - a pain, and possibly impossible! 2) Support for the B2F forwarding protocol, including attachments. Important - B2F support is #undef'd in the config.h file distributed with this release, since most JNOS systems will never interact with Airmail or Winlink, and using B2F between 2 jnos systems likely is of no benefit. 3) A B2F exclusion list for stations that can't handle B2F forwarding. 4) Support for 'Y','N', and 'L' codes in responses to FBB proposals, since previously JNOS only supported the original set of '+', '-', and '='. 5) Properly handle telnet (internet access) connections from Airmail clients. 6) Created an exception (SDRE) list for 'SMTP DENY RELAY' - very useful ! Added a new 'NoRelay' string for when JNOS sends a 'DENY RELAY' response, which replaces the use of the 'Unknown' string used prior to this, giving a more accurate indication of the situation, instead of confusing users. 7) Included mods by N8CML (Ronald Schubot) - added new routines to properly remove dynamic gateway entries, something I failed to address when I had originally wrote the RTDYNGWROUTE code. 8) Direct BAYCOM driver (linux only) - NET2KISS and PSEUDO-TTY are no longer needed for JNOS to talk to a Baycom Board - we now go direct to kernel ! The baycom support is #undef'd in the config.h file distributed with this release, since it requires the presence of kernel headers and source, as well as baycom kernel module support. I developed this on a Slackware 9.1 system, which came with all of that - it runs very nicely on my system. 9) MultiPsk support - JNOS can now connect to MultiPsk (tcp/ip server), and use MultiPsk as a digital modem - at this time, for packet (AX25) only. 10) New Hostmode (PACTOR) driver for the PK-232MBX (pakratt 232) AEA modem, including broadcast of FEC (cq cq cq de call call call) text. 11) Two critical fixes to the HFDD code, something that has plagued me ever since I started the HFDD type of interface. This is VERY significant ! a) If you attach any HFDD type interface to JNOS (even if you don't use it - just attaching it), chances are smtp would crash each time it was required. In later betas, the crash would be replaced with a warning to the log, and your smtp queue would simply grow, nothing would ever get delivered, until you restarted JNOS without the HFDD interface. Any code that attaches ANY interface, must use 'setencap()' so that the tcp parameters are properly initialized. Failure to do so causes a crash in the tcpuser.c module. b) Figured out why HF sessions with Airmail on ANY type of HF modem would disconnect a bit too early after forwarding was done, causing Airmail to chirp away for minutes, tying up the frequency. This is a HUGE fix, the final 'FQ' from JNOS now gets sent to Airmail, and it now sees a proper FBB disconnect request, and shuts down PACTOR properly ! 12) Some new designs in the HFDD code for more reliable data exchange with the HF modems. Some of it is just being used with the new PK232 hostmode driver, looks promising - will eventually make it to the other HF modems. 13) NOSaprs is now version 2.0g - fixed a bug where compressed data was not being properly validated and therefore getting trashed. NOSaprs can now gate OBJECTS to rf - new 'obj2fr' callsign list added. Finally, now using 'callcheck()' instead of 'setcall()' to better determine whether an APRS recipient is an actual HAM callsign, or just another bulletin. 14) New Mailbox (MBX) logging - better consistency logging MBOX activities. 15) Notification (user customizable shell scripts) for when users connect or disconnect from the BBS, or for when users connect, message, or disconnect from the conference (CONV) bridge. Play a wave file on an event, or send email on an event, or both - or whatever one program into a script file. 16) Ditched the use of the GLIBC tmpnam() function - I'm tired of the link warning saying it is a dangerous function - too much structural change required to convert to mstemp(). I have created my own version based on the GLIBC one, but stripped down, and without the warning messages. 17) The 'update Domain.txt' logging is now 'switched off' by default :) 18) The psignal(), getdate(), gettime() functions have been prefaced with 'j2' prefix - done to avoid conflicts with any O/S calls having the same name. No more of these #define j_psignal or j_getdate, or #undef getdate, etc. 19) Compiler warnings have all been fixed (on my development systems), so this release should now compile with little to no warnings anymore. 20) Removed old and unused code from various source files. 21) Reinstated the original 'checkstack' code, use -DCHKSTK in makefile ! 22) Cleaned up the 'config.h' file - created 2 distinct sections - one for features specific to JNOS 2.0, the other for features from JNOS 1.11f. differences between JNOS 2.0f and 2.0f [Beta] - December 21, 2007 ----------------------------------------------------------------- 1) Time to freeze things into an official version. I have not done alot of development lately anyways, and if I am to ever update the original jnos 1.11f documentation to where we are now, I need a frozen version. 2) Added callsign validation for BBS login. I have to thank Barry (K2MF) for the validation code. There is a new '#define MBX_CALLCHECK' in the config.h file - enabled by default. Now only *valid* callsigns will be accepted when you try to login to a JNOS server via telnet. 3) The way the email address is being formatted in the aprsmail () function has been changed. Apparently it is NOT legal to use the ( and ) characters in the local part of the email address. Thanks to Janusz for finding this. 4) I have fixed another HFDD bug, where incoming HF connects were not seeing a mailbox prompt in some cases. I have also shortened the text of the HFDD beacon - the "INTERNET GATEWAY" portion has been removed. 5) Bumped up the version of NOSaprs to match this latest version of JNOS :-) differences between JNOS 2.0f [Beta] and 2.0e - Tuesday, June 12, 2007 ---------------------------------------------------------------------- 1) The JNOS (linux version) kernel has been revamped ! There was little choice - JNOS 2.0e would not compile on Fedora Core 6, or Ubuntu, or any of the more recent linux distributions, unless you applied a patch that I came out with last year. The good thing about this is that it will still work on older distributions, like my Slackware 9.1 system. The developers of the GLIBC have *fixed* things so that one can no longer use the jmpbuf calls (setjmp/longjmp) as they have been traditionaly used by the JNOS kernel. The reasoning was that these calls should never have been allowed in the first place type of thing, etc, etc. As a result, I have revamped the JNOS kernel to instead use the ucontext calls (makecontext, swapcontext, setcontext, getcontext). Actually, this was very easy to do, since the original JNOS 1.11f had most of the code in place already - a prior developer was experimenting with Sun O/S. 2) Fixed a bug in the forwarding code - a typing mistake I made when I put in the 'telpac' option for JNOS 2.0e - FBB compressed forwarding was disabled for ANY and ALL forwards to other remote systems asking for it. There was a patch for it, but the patch never made it onto my website for some reason. 3) The 'ax25 status', 'ax25 kick', and 'ax25 reset' commands have been enhanced so that you can now pass the remote call instead of having to type in the &AXB (that 8 digit hex number). This is a feature I have long wanted to add. I always hated having to look up the &AXB, then mess it up (or somehow forget it) while entering it seconds later. 4) More improvements to the HFDD (HF Digital Device) code, including a new feature where the drivers will automatically detect whether a KAM or PTC is in host mode or not. If not, JNOS will try to put them into host mode, using a user configurable init file (new feature) for each HF modem. The code structure of both the KAM and PTC drivers were recently revamped. The only major thing left to do is revamp the DXP38 driver. I have not had alot of time to finish it - I felt it a priority to get a new release out first (that being JNOS 2.0f), due to the kernel issue, and it has been a while since a new version was releasted to the public. If a BBS user or SYSOP enters the 'mbox' command, it used to be that it was not very clear if an HFDD session was active or not. In most cases, all you would see was a bunch of gibberish where the HFDD session was supposed to be. I have fixed this, so that any active sessions show up as 'Pactor'. Keyboard mode (ie, the ability for a BBS user or SYSOP to connect to a remote station via a HFDD port, then *chat*) has been removed for now. It never worked very well, and there were USER issues that came up which I had a hard time figuring out a solution for. Perhaps down the road ... HFDD devices are strictly for forwarding with a remote BBS now, or accepting calls FROM a remote station. NEW and up-to-date documentation for this latest HFDD implementation. As usual, work on the HFDD code is always ongoing, and experimental. From this point on, you won't hear much more about the HFDD development, as I am sure most of you are tired of hearing about it. That's all I had been doing off and on during the middle of the year, and frankly, there is not much left to do on it - It seems I am my only customer anyways. differences between JNOS 2.0e and 2.0d1 - Tuesday, April 18, 2006 ----------------------------------------------------------------- 1) The NRR (netrom route record) code has been separated from the INP3 code, and is now independent of the INP3 functionality. To include NRR support in JNOS 2.0e, use '#define NRR' in the config.h file before compiling. Here's an example of the NRR command at the BBS (mailbox) prompt : Area: ve4klm (#1) > nrr wa7v-2 *** route: VE4KLM-1 K7EK-8 WA7V-2* K7EK-8 VE4KLM-1 > 2) Added PARAM_PACTOR to device parameters. The command : param dxp38 17 1 can now be issued as follows (if the sysop does not like using a number) : param dxp38 Pactor 1 3) Finally - a true HFDD device (actually just a plain serial device). Up until now, the DXP, SCS, and KAM modems had to be attached as an AX25 device, even though they were not using the AX25 protocol. To keep the communications to the modems from getting messed up, the sysop was required to disable the AX25 and MBOX beacons - a kludge of sorts. This change should stabilize the HFDD serial interface quite a bit. Previous to JNOS 2.0e, a typical autoexec.nos entry for a DXP38 would be : attach asy ttyS1 - ax25 dxp38 4096 256 9600 ifconfig dxp38 description "Pactor 1 - 10.129.1 or 7077.1 LSB" param dxp38 Pactor 1 ax25 bcport dxp38 off mbox mport dxp38 off With JNOS 2.0e, the following is now the proper way to do it : attach asy ttyS1 - hfdd dxp38 4096 256 9600 ifconfig dxp38 description "Pactor 1 - 10.129.1 or 7077.1 LSB" param dxp38 Pactor 1 4) NOSaprs is now at version 2.0b, the biggest change is that I have rewritten the APRS digi code to reflect the latest new-N paradigm, and callsign substitution for WIDE1-1 and RELAY. Janusz (SP1LOP) from Poland has confirmed that the code is working as it should. Further more, experimental SSn-N code exists, and is currently specific to Germany and Poland. Again, Janusz has confirmed this code is working as it should. One can change this to suit their own regions by modifying the 'aprsdigi.c' module. I will make this configurable (autoexec.nos) in some future release. Rewrote some of the code that does the NOSaprs 14501 webpage. One should note that the generated URL string is slightly different in this new version. For example the word, 'interface' is now 'ifc'. Bumped up the maximum stack size for APRS Server to be safe. 5) Removed timeout code that waits for an HFDD connection to get established. The code was never written very well, and generated some very undesireable effects if it kicked in at the wrong time. When reading the forward.bbs file to establish a connect, the HFDD code was improperly dealing with an EOL (end of line) read from the forward.bbs file. This was causing truncation of the remote callsign being used in the HFDD connect command. This is now fixed. 6) JNOS 2.0e can now do basic TELPAC forwarding with WL2K systems. A new option called 'telpac' has been added to the 'forward.bbs' file - ie: --------------- k4cjx tcp telpac @ @ @ +Callsign : @ ..VE4KLM +Password : @ . k4cjx --------------- 7) Added CL_HFDD to interface types, so that I can clearly identify HFDD interfaces. The HFDD interfaces will no longer show up as AX25 ports when a BBS user issues the PORTS command, but instead will be listed in their own category, for example : Area: ve4klm (#1) > Available AX.25 Ports: wsc : internet link - VE4WSC 430 : 1200 Baud - 145.01 Mhz Available HFDD Ports: dxp38 : Pactor 1 - 10.135.5 or 7077.1 LSB Remember - HFDD ports are hostmode TNC ports, nothing to do with AX25. 8) Solved a problem that has plagued JNOS (Linux) for a long time - user logs onto the BBS, then enters the NODES command at the mailbox prompt, only to see JNOS crash and restart. It seems the qsort() call is very stack intensive, and can easily push the maximum stack size when the NETROM Node table gets a bit too big. It turns out that the Linux qsort() is a recursive function, using ALOT of stack if it needs to. I did some searching and found an ANSI-C version of qsort that is easy on the stack, and NON-RECURSIVE. I literally pasted the code into a new JNOS function which I call j2qsort(), which JNOS now uses in place of the Linux qsort(). Since I have done this, JNOS has yet to crash on me, whether I enter the NODES command at the BBS prompt, or NETROM ROUTES or NETROM ROUTE INFO at the F10 (console) screen. I can easily list 600+ node entries now. 9) The beginning of some big changes ... Most (if not all) NOS variants (and JNOS is no exception) use function calls that have the same name as their UNIX counterparts - 'bind', 'recvfrom', and 'socket' are just a few examples, as is the NCURSES 'tputs' function. To avoid clashes with the system calls, NOS variants have traditionally used entries like the following to get around these : #define connect j_connect #define recvfrom j_recvfrom #define tputs j_tputs These are typically found in header files like socket.h and global.h. Starting with JNOS 2.0e, I am removing the above method. Instead, I will actually be renaming the JNOS functions to be clearly distinguishable from their UNIX (or WINDOWS) counterparts. For example, the tputs() function in JNOS would be renamed to j2tputs, and the '#define tputs j_tputs' removed. Why ? I want the flexibility to call UNIX socket functions for example, and not worry about conflicts with the JNOS ones. I may try to port JNOS to Windows at some point, and there again I may want to directly access the winsock libraries. I'm thinking the more self contained JNOS appears, the easier these tasks will be for me down the road (I think so anyways). I don't want people to get alarmed by all these changes. They're harmless, and if anything, will contribute to a more stable JNOS 2.0 down the road. 10) Rewrote the locking code that I originally did for Netrom tables, then added scalability for other tables like tcb, timers, usocks. After some long term observation though, it has occurred to me that locks are for the most part, not a big concern, since the type of task scheduling used by NOS is such that operations on tables can only happen from one particular process at a time anyways. BUT, I'm sure there are cases that *might* require locks (when and if I ever find them), so the code stays ... differences between JNOS 2.0d1 and 2.0d --------------------------------------- * Mostly bug fixes and diagnostics, no command or syntax changes. 1) Fixed a situation where anyone who ran an APRS enabled JNOS binary, but didn't have APRS configured, would see JNOS crash on each incoming APRS frame. 2) Bumped up the NOSaprs version to 2.0a, in preparation for providing once again, the NOSaprs update kit for JNOS 1.11f and TNOS users. 3) Fixed a situation where compressed data formats for the !, =, /, and @ DTI values were not being recognized and passed by the validation routine. 4) If we get a directed APRS query that we don't support, we now send a message back to the user saying so. Previously, we did nothing. 5) Fixed a situation where if 'aprs contact' was not defined in autoexec.nos, and a 14501 page was requested, then JNOS would crash each time. 6) INP3 - more work done, spent alot of time reviewing the code against the linux version of INP3 by PE1RXQ. This code is not complete yet and should not be used at this time. I regret having made such a big thing out of it in the last release. Do NOT compile it into your binary (in other words, make sure you '#undef INP3' in your config.h before you mass compile). I'm not sure where the INP3 stuff will go at this stage. I simply have not had the time to work on it lately. It's on the shelf for now ! 7) Some code cleanup here and there, the major one being replacement of all malloc() calls in JNOS with mallocw() instead. Did some cutting down of duplicate code in the kernel subroutines. Fixed a few bugs. 8) Fixed the pactor connect code for the SCS PTC units to use just a plain old 'C callsign'. There should be no port specifier. Previously I had used the syntax 'C 1:callsign' instead, which is simply wrong for the HF mode. 9) Added some experimental locking of the netrom route tables, plus a netrom 'lock conflicts' counter in the netrom status command. This was put in more for me to investigate why the Nodes command crashes JNOS from time to time. differences between JNOS 2.0d and JNOS 2.0c5a --------------------------------------------- 1) The DOS release is once again at the same level as the Linux release, and the makefile for the DOS release has been revamped (simplified). The Linux release will now compile properly up to GCC versions 3.4.3 and 4.0.1. 2) New subcommands added to the JNOS 'netrom' command : netrom debug [on|off] netrom nrr [callsign of a remote netrom node] netrom l3rtt [callsign of neighbour] [interface] 3) New command added to JNOS : start inp3 4) New command added to BBS user prompt : nrr [callsign of a remote netrom node] For example, here is a NRR request to on6dp from my system the other day : Area: ve4klm (#1) > nrr on6dp Area: ve4klm (#1) > *** route: VE4KLM VE4WSC WA7V-2 ON6DP* WA7V-2 VE4WSC VE4KLM > 5) New type of callsign list for APRS callsign filtering : aprs calls micetorf [list of calls or patterns] 6) Added a new directory for the APRS position database (a new project) : ${JNOSROOTDIR}/aprs/db/positions 7) Kantronics KAM Series Host Mode Driver (not completed yet) A crude prototype Host Mode driver for Kantronics KAM modems now exists, and a couple of milestones were set. I spent alot of time on this early in the summer, however it's not ready for general use at this time. a) working single channel KAM hostmode implementation for JNOS 2.0, for the packet (non-HF) mode. I had it working on an old KPC-2, as well as on a version 5.0 KAM that I borrowed from a friend. b) got it working with the AMTOR mode, using two backtoback KAM modems talking to each other (one JNOS, the other Mailbox mode). I was able to do some live testing as well, but nothing more has happened since. Testing has been limited to AMTOR, because that is all I can do at this time with the older KAM modems that I have here. Due to me having poor equipment, lack of live testers on RF, and lack of time in general, the KAM Host Mode driver is on the shelf for now. Adding the GTOR and PACTOR modes to it will be a piece of cake, but until I get my hands on a KAM XL or similar, this part of the project is on hold till further notice. c) Special thanks to Mitch Hill - K1FH - AFA1HN, for helping out, and for being a mentor of sorts with respect to AMTOR and QRG terminology :-) 8) INP3 Support (alot has been done, but not completed yet) JNOS 2.0d has partial support for INP3 stuff. Ideas and code fragments have been borrowed from the INP3 Kernel Patches by PE1RXQ, and work is ongoing. If you want INP3 support, then #define INP3 in config.h, then recompile the source. This is VERY experimental, and not complete yet. JNOS will recognize incoming RIF (Route Information Frames) from INP3 netrom neighbours, and update quality/return time values in the nodes table (more needs to be done there). JNOS will respond to an L3RTT if a INP3 netrom neighbour sends it one. If you want JNOS to regularily send out it's own RIF and L3RTT to its neighbours, then you can run the INP3 scheduler using 'start inp3'. Again, this is experimental and incomplete, but I felt that I really needed to get another JNOS update out to the masses. To see the INP3 stuff in action, turn on 'netrom debug' - see section 2) above. The debugging goes to the master logfile at ${JNOSROOT}/log/DDMMMYY. * It is possible that the INP3 code may add some stability to JNOS configurations that have links to INP3 netrom neighbours. Then again, it might just be my imagination, your results may vary, let me know. 9) NRR (Netrom Route Record) Even though NRR packets (Netrom Route Record) are not really part of the INP3 stuff, it is currently available only if you '#define INP3' in the config.h source file. I'll move it out at a later release. Sysop and BBS user can now ask for a NRR to a remote node - see section number 4) above. Also, if JNOS receives a NRR request from a neighbour, it will now format the proper reply so that the remote user sees a path. A) Started work on a positional database, new module 'aprsposdb.c', and a new directory under the APRS root directory, ie (/jnos/aprs/db/positions). Any positions coming in from RF are to be added to the database. The idea is to have NOSaprs read the database at any time, and generate a graphical map of a region, with positions of stations overlayed on the map. Compiling this feature depends on the #define/#undef APRS_POSIT_DB option in config.h. It is currently undefined, the code sitting there for future development. B) Enabled monitor mode for the DXP38 when running in P-Mode (Pactor), so I can observe more details (and Pactor traffic) when running HFDD server mode on my DXP38 (ie, 'hfdd server dxp38 start'). C) Added a feature (#define DEFAULT_SIGNATURE in config.h) that will add a system signature to ALL outgoing mail from JNOS. If defined, JNOS will add the contents of the '/jnos/spool/signatur/default.sig' file to the end of all outgoing messages composed by any BBS user. In hindsight, I really have to wonder why I bothered with this - perhaps to put disclaimer of sorts on outgoing messages, to protect the sysop from users bending the rules ? D) Added a feature (#define MAIL_TRACE_USER_PORT in config.h) that will add something like the following to all outgoing mail from JNOS : X-JNOS-User_Port: allowing the recipient of a messages to see what 'signed in' user sent it, and on what JNOS port that user was connected, when message was composed. E) Problem in the REMOTE client command, it was crashing alot, the 'udpadd' subcommand was not working properly. It turns out that I was not setting the key information correctly for 'udpadd'. Problem should be fixed now. F) The APRS code is now able to gate MIC-E frames from the APRS IS (internet system) to RF. A new callsign list was added, to control what stations are allowed to have their MIC-E information sent out RF. See section 5) above, note compiling this feature depends on the #define/#undef GATE_MICE_RF directive in the config.h source file. G) Fixed some minor bugs, fixed a whole bunch of missing initializers, and renamed the 'log' function to 'nos_log', to avoid conflicts with built-in system libraries. This had to be done, partly because the more recent GCC compilers were complaining about it. The 'log2' function was also dealt with for similar reasons. Cleaned up some old code here and there. H) If you are using a JNOS binary that has NETROM compiled into it, and you fail to 'attach netrom' (in other words, you're not interested in running the netrom stuff), BUT you happen to have netrom neighbours that broadcast nodes and stuff to you, very likely your JNOS will crash each time a nodes broadcast comes in. The solution was either '#undef NETROM' in config.h, or run the 'attach netrom' command in your autoexec.nos config file. This is now fixed ! It was actually an existing problem before JNOS 1.11f differences between JNOS 2.0c5a and JNOS 2.0c5 ---------------------------------------------- 1) Syntax change for 'ax25 xdigi' - added optional callsign substitution ax25 xdigi [source port] [dest port] [digi call] [substitute call] The 'subsitute call' is optional. 2) Proper changeover code for the SCS PTC modems added, so technically the forwards to any WL2K system should now work just as good as the Halcomm DXP modems. 3) The 14501 page has evolved to include conventional packet stations heard, current and past users connected or logged in. The layout has also changed a little bit. This is an ongoing project ... This requires a new 'jheard.o' in the makefile - see 'makefile.aprs', distributed in this update. 4) Added a new '#undef WELCOMEUSERS' for 'config.h', to cut down on the stuff displayed to users that have just logged in or connected to the system - see the file, 'config.h.dist', distributed in this update. 5) Put the '#define APRS_DIGI' back into the 'aprs.h' header file, as it was accidently undefined when I created the last official version. 6) Removed some excessive entries from the JNOS log files, the new ax25 custom cross port digipeat rules had a bit too much logging enabled. differences between JNOS 2.0c5 and 2.0c4 ---------------------------------------- 1) New command (see documents for details) ax25 xdigi [source port] [dest port] [digi call] 2) Changes in the directory and file structure for the NOSaprs component there is a new root directory for the NOSaprs, meaning you will have to create a new directory, move some files, and delete the old. Here's what you need to do (below). For illustration purposes I use '/jnos' as the JNOS root directory (which is what most people use anyways). a) create a new directory, '/jnos/aprs' b) move the directory '/jnos/msgdb' to '/jnos/aprs/msgdb' c) move the file '/jnos/spool/aprs/aprs.txt' to '/jnos/aprs/aprs.txt' d) delete the directory '/jnos/Spool/aprs' e) feel free to put the NOSaprs log file under the new root directory, so for example in your autoexec.nos configuration file : aprs log /jnos/spool/log/aprs.log could be changed to : aprs log /jnos/aprs/master.log ----- Copyright (C) 2004-2011 by Maiko Langelaar / VE4KLM