From: SDS::"tcp-group-relay@ucsd.edu" 2-JAN-1990 09:44:34.55 To: NSSDC$SPAN::CLARK CC: Subj: NOS updates Received: from ucsd.edu by Sds.Sdsc.Edu with INTERNET ; Tue, 2 Jan 90 14:37:48 GMT Received: by ucsd.edu; id AA18639 sendmail 5.61/UCSD-2.0-sun Tue, 2 Jan 90 05:39:18 -0800 Received: from ka9q.bellcore.com by ucsd.edu; id AA18626 sendmail 5.61/UCSD-2.0-sun via SMTP Tue, 2 Jan 90 05:38:58 -0800 for /usr/lib/sendmail -odq -oi -ftcp-group-relay tcp-group-list Received: by ka9q.bellcore.com (5.60/4.7) id AA23280; Tue, 2 Jan 90 08:38:19 EST Date: Tue, 2 Jan 90 08:38:19 EST From: karn@ka9q.bellcore.com (Phil Karn) Message-Id: <9001021338.AA23280@ka9q.bellcore.com> To: tcp-group@ucsd.edu Subject: NOS updates Happy New Year everyone. My holiday was quite productive, as I've been making quite a few enhancements to NOS. An updated copy is on flash in the usual place (anonymous FTP, /pub/ka9q/src.arc and /pub/ka9q/net.exe). There's quite a bit of work in this release. Let me see if I can remember it all: 1. The major new feature is per-session screens. When you create a new session, you create a new "screen" along with it. The command interpreter also has a screen of its own. If you hit F-10 to escape back to command mode, the session screen is saved and the command screen is restored. When you later go back to your session, it will reappear exactly as it was when you hit F-10. It was necessary to add a few prompts to the session code to give you a chance to read a session screen before the session ends. One known bug. I still rely on nansi.sys (or whatever) to do the actual screen driving. Because it may have internal state I can't save and resore easily when switching screens (e.g., the current character color) you may find that the current character attributes "follow" you when you switch screens. 2. I've rewritten the asynch output subsystem in an attempt to minimize the time spent in interrupt service. There is now an asynch output task in addition to the input task that was already there, and it does some of the work that used to be done at interrupt time. My timings showed that the majority of the interrupt service time was spent servicing transmit interrupts, as much as 500 microseconds on my 25 MHz 386. The new code cuts this to about 155 microseconds max, much better but not perfect. The output driver allowed me to simplify some output code in nrs and slip. I moved the "inbuf" and "outbuf" routines that I had written in assembler for the 3c501 Ethernet controller over to pcgen.asm, and I now use outbuf for driving the 16550 transmitter fifo. It shaves about 30 microseconds off my transmit service routines. Not much, but every little bit counts. (Besides, I spent a lot of time writing those routines, and they've gone to waste ever since I gave away my 3c501s!) My 16550s don't seem to have any problem taking data at that speed from my 386, so I think there should be no problem with these routines. I also found an old item on the net from someone with considerable experience programming the PC serial ports, and he suggested that the 8259 interrupt controller be rearmed at the beginning of an interrupt service instead of at the end. Because the 8259 is edge triggered, it was apparently possible for an interrupt to be missed if a character arrives between the time the device is serviced and the 8259 is rearmed at the end of the interrupt service routine. I made this change, but it's hard to know if it makes any difference. The drivers all still work, but I'd be interested in knowing if they're any better on fast SLIP links. And last, but not least, I modified the 8250 input driver. Originally, whenever the interrupt handler received one or more characters, it issued a psignal() to wake up the slip task. To eliminate the overhead of the psignal(), which can take a hundred or so microseconds on my machine, from the interrupt service routine, I moved the psignal() call to a new function that gets called by the timer task on each clock tick. The only disadvantage of this approach is that there may be up to a 55 millisecond delay before the system realizes that a SLIP packet has arrived. 3. There's a "more" command for reading files inside NET. It understands the 'q', space and cr responses to the --More-- prompt, and they have the same meanings as in the UNIX more command. 4. The local "dir" command was reimplemented to use the "more" command just described. Basically, it creates a temp file with the directory output, invokes the "more" command on it, and then deletes it. 5. I had to reimplement the "more" feature on command output. It isn't as nice as the "more" command. You can only go to the next page; you can't abort output, but you can switch screens. (It was a real bitch getting just this much working.) 6. I redid the domain response processing code. It should now be considerably faster at processing replies that contain many extra records, especially when domain.txt is large. (The earlier code reread the entire domain.txt file for each incoming record, looking for duplicates. The new code reads the domain.txt file only once, comparing each entry to all of the incoming records.) 7. I added a few TCP SNMP variables that appeared in the new version 2 MIB. These show up as tcpInErrs and tcpOutRsts in the tcp status command. 8. The storage allocator keeps a histogram on allocation request sizes, broken down by binary powers of two. Not that interesting to casual users, but I've been considering alternative allocation algorithms, so these stats are useful to me. 9. The "rip merging" function was reimplemented. It now works properly; the old code didn't always reject redundant entries, depending on the order in which they appeared in an incoming RIP packet. 10. There is a new socket address family: AF_LOCAL. Both stream and datagram sockets are supported. These are basically local loopback sockets, useful for interprocess communication. All session console I/O is now based on them. 11. Each session and process now have standard input and output sockets. When a new process is created, it inherits its parent's I/O sockets. New sessions, however, create new I/O sockets so that they can keep their console I/O separate from the other sessions. 12. All tasks write their output using tprintf(), which automatically goes to the output socket stream. A new display task reads the output stream of the current session and displays it on the screen. Ordinary printfs are still used for trace messages, so they'll come out on whatever screen is current. I haven't decided exactly how to redo these yet. Note that when a session is put in the background, it is not actually frozen; it continues to write to its output stream until the high water mark is reached. This level is a certain number of bytes (currently 2K); this does not correspond to any number of screen lines. The good news is that big ftp sessions running in the background won't spoil your other sessions; the bad news is that if you've stacked up a bunch of FTP commands, you need to switch over to the FTP session window occasionally to keep it from stopping because of the output messages invoking flow control. 13. There's the beginnings of a stdio-like buffered I/O package on top of the socket library. It's not done yet, but what's there is enough to support the session I/O functions. 14. There was some consolidation of the session and application data structures which allowed me to simplify some client application code. 15. There's a general purpose "stopwatch" facility for timing critical sections of code (like interrupt service routines). In the code I've uploaded, timer 0 times the receiver interrupt handler, and timer 1 times the transmit interrupt handler. I'd be interested in some typical figures for various PCs. (Please let me know the CPU type and clock speed, memory wait states, and whether you're using 8250s or 16550s.) 16. There's the beginnings of an "ifconfig" command for configuring interfaces. It's not done yet, but much of it does work. When it's all done I'll remove the superfluous arguments from the various "attach" commands, but until then your existing autoexec.net files should work. Have fun! Phil From: SDS::"tcp-group-relay@ucsd.edu" 16-JAN-1990 04:08:36.39 To: NSSDC$SPAN::CLARK CC: Subj: updates Received: from ucsd.edu by Sds.Sdsc.Edu with INTERNET ; Tue, 16 Jan 90 09:06:38 GMT Received: by ucsd.edu; id AA25520 sendmail 5.61/UCSD-2.0-sun Mon, 15 Jan 90 23:08:18 -0800 Received: from ka9q.bellcore.com by ucsd.edu; id AA25501 sendmail 5.61/UCSD-2.0-sun via SMTP Mon, 15 Jan 90 23:07:56 -0800 for /usr/lib/sendmail -odq -oi -ftcp-group-relay tcp-group-list Received: by ka9q.bellcore.com (5.60/4.7) id AA11244; Tue, 16 Jan 90 02:07:10 EST Date: Tue, 16 Jan 90 02:07:10 EST From: karn@ka9q.bellcore.com (Phil Karn) Message-Id: <9001160707.AA11244@ka9q.bellcore.com> To: tcp-group@ucsd.edu Subject: updates Sorry I haven't been too communicative lately, but I've been very hard at work on NOS. I'm about to upload a new version to flash that contains the following changes: 1. Continuing domain resolver improvements. The answer to a domain query is read directly by the requesting process (telnet, etc) instead of first being written to the domain.txt file by a separate process and then read back by the requester. Should speed up things just a little more. Also fixed a nasty bug reported by Tom Clark involving CNAME records. 2. I've implemented newline mapping in the socket stream buffering code. Internally, newlines are always represented as the single character '\n', the UNIX/C convention; when they are sent on a network socket, they are translated to the appropriate sequence for the connection. The default for TCP sockets is \r\n (carriage return/line feed); for AX.25 and NET/ROM sockets it is \r (a single carriage return). The inverse mapping is also done on input. The default can be overridden or the mapping disabled entirely with the seteol() routine, and yes, I was careful not to break binary FTP. (All this is functionally similar to the way newline mapping is done by the Turbo-C standard I/O library for disk files. Sure wish I could have borrowed it for socket I/O.) This change made it possible to use a common terminal routine for all network protocols. The "telnet" (TCP), "connect" (AX.25) and "netrom connect" (NET/ROM) commands, along with their incoming "chat" counterparts, have been consolidated to use two common subroutines, thus saving a couple of kilobytes of code. (This also allows you to negotiate Telnet options over plain AX.25 and NET/ROM connections, should you ever want to do so.) This change also allowed me to simplify the FTP code, since it no longer has to do newline mapping on its own for text files. 3. The "telnet" server has been renamed "ttylink" and moved to port 87. Given item #4 below, I'm not sure there's even much point in retaining this server. 4. A new "telnet" server has been created that accesses the mailbox. You now see the same thing when you telnet to the system via TCP port 23 as when you connect using AX.25 or NET/ROM (although you don't have to enter a null line). The mailbox server code is now crying out for some additional user commands, like "telnet to an IP host", "initiate an AX.25 connection", "initiate a NET/ROM connection", etc. (I leave the implementation of these features to the reader. :-)) 5. The "mem" command has been split into several subcommands. (As with any command that has subcommands, you can find out what they are by entering a "?" as an argument to the main command, e.g., "mem ?") 6. I've made some important changes re memory allocation. There is now a parameter, mem threshold, which defaults to 8K. When free memory on the heap decreases below this amount, incoming IP datagrams trigger ICMP Source Quench messages and incoming TCP sessions are rejected with a "system overloaded, try again later" message. There are also new internal functions for requesting memory: mallocw() and callocw(). These are identical to malloc() and calloc() except that they can never return NULL; they block until memory is available. I've replaced most calls in the system with these calls, especially those which never checked for NULL returns in the first place! Allocations done at interrupt time still use the non-blocking malloc(), along with those invoked by IP and TCP reassembly (since these could potentially deadlock the system by blocking the network task). Given the scope of the changes, I'm not sure that all of my choices of mallocw() vs malloc() were appropriate; advice would be appreciated. At least the threshold mechanism should reduce the chances of memory getting in short supply in the first place. 7. I applied a number of minor de-linting changes supplied by WA3YMH. (Sorry, Louie, I suspect my other changes will probably require another round of de-linting...) 8. Oh yeah, almost forgot. The "length" argument to recv_mbuf() is gone. It was never used, and it wasn't really implemented properly anyway. Please give this one a workout and let me know how it goes. I've still got Gerard's changes to go through, so expect some more mods over the next few days. Phil From: SDS::"tcp-group-relay@ucsd.edu" 21-JAN-1990 02:01:49.81 To: NSSDC$SPAN::CLARK CC: Subj: New NOS mailbox code Received: from ucsd.edu by Sds.Sdsc.Edu with INTERNET ; Sun, 21 Jan 90 06:59:45 GMT Received: by ucsd.edu; id AA23728 sendmail 5.61/UCSD-2.0-sun Sat, 20 Jan 90 20:54:01 -0800 Received: from sics.se by ucsd.edu; id AA23721 sendmail 5.61/UCSD-2.0-sun via SMTP Sat, 20 Jan 90 20:53:47 -0800 for /usr/lib/sendmail -odq -oi -ftcp-group-relay tcp-group-list Received: from shai.sics.se by sics.se (5.61-bind 1.5+ida/SiteCap-3.0) id AA04500; Sun, 21 Jan 90 05:53:28 +0100 Received: from localhost by shai.sics.se (5.61-bind 1.4+ida/SiteCap-3.0) id AA11828; Sun, 21 Jan 90 05:53:22 +0100 Message-Id: <9001210453.AA11828@shai.sics.se> To: tcp-group@ucsd.edu Subject: New NOS mailbox code Date: Sun, 21 Jan 90 05:53:19 +0100 From: klemets@sics.se The new mailbox code for NOS is now available. The mailbox now has an AX.25, Telnet and Finger gateway and a NET/ROM emulator. It also allows you to get remote control of the NOS program to a certain extent. Standard ASCII file operations, like Download, Upload, What and Zap are supported. The mailbox allows you to send, read, list and kill messages. It is also possible to switch between different message areas, like in a conference system. The days are gone where you had to worry about how to read your mail without disrupting the network traffic, because I have ported basic parts of BM into NOS. The implementation of the gateways could be done better. I was not able to reuse the normal Telnet client and server code because it uses the session mechanism which only works locally right now. NOS allows several logical screens. Each process can have a screen of its own. But there is a presumtion that only one of these screens can be visible at the time. Introducing the concept of windows as well as screens, one could say that NOS maps all its screens into one single window. Multiple windows would make it possible for several processes to be writing to their standard output, simultaneously. NOS ought to support multiple windows, even though the concept seems to be of little use on a PC. But the need arises when you want to let a remote user have control over several sessions, or over the whole program, without it interfering with the local user. For the time being, it is only possible to have one connection through the gateway at the time. With some window support, however, the normal session control mechanisms in NOS could be used over the network. The privileged "@"-command gives you complete remote control over the NOS program. However, if you try to run a command that creates a session, the output will go to the local screen instead of to the network connection. This is not such a problem however, since many of the affected commands, like "telnet" and "connect", are now available directly from the mailbox. Every 55 ms or so, NOS flushes the data in its screen sockets. But nothing is done about the network sockets. I have noticed that this sometimes causes data that does not end with an EOL character to get stuck. It should be an easy fix to do something about this. The permission field in the ftpusers file now takes a few other values. Values 1, 2, 4 are for file access by FTP and by the mailbox. If you add 8 to the value you will have AX.25 gateway access with the G command. If 16 is added, you will have Telnet gateway access. 32 gives you access to the NET/ROM emulator. And 64 gives you the remote control privileges. So the most privileged user would get a value of 127. Since NOS does not allow you to use more than one AX.25 callsign, the AX.25 gateway does not change the callsign in any way. Instead, it sends a "*** LINKED to username" message upon connect. NET/ROM however, has a username field which is totally independent of the AX.25 callsign, so that field is changed to the username of the user. This difference is one of the reasons why I added different permission codes for AX.25 and NET/ROM. Telnet users that connect to NOS will have to login to the mailbox with a username and a password. This is not necessary for people who use the mailbox over an AX.25 or NET/ROM connection, because then their "username" is known, namely their callsign. But when somebody connects using Telnet, there is no way to find out the username without forcing a login procedure. And since the users are likely to read and write mail, it is important to have a username. There is a new file, called "areas" which lists the different message areas. The file is in plain text, but the first word on each line will be used as the name for the message area. I took some useful stuff from BM and incorporated it in the SMTP client. That gave us two new commands: "smtp list" and "smtp kill" to manage SMTP messages that have not yet been delivered. The source files that has been changed from the 900117 version of NOS are available with ftp from sics.se. The filename is: archive/packet/ka9q/nos/nosmbox.arc Finally, here are some examples: > telnet sk0we Trying 192.16.123.113 ... Connected to sun1.sk0we.ampr.org. Escape character is '^]'. KA9Q NOS (sun1.sk0we.ampr.org) login: klemets Password: [NET-$] Welcome to the sun1.sk0we.ampr.org TCP/IP Mailbox (900117x NOS) You have 3 messages - 2 new. (A)rea, (B)ye, (C)hat, (D)ownload, (E)scape, (F)inger, (G)ateway, (J)heard, (K)ill, (L)ist, (N)etrom, (R)ead, (S)end, (T)elnet, (U)pload, (W)hat, (Z)ap > l Mail area: klemets 5 messages - 2 new Y 1 klemets@sun2.sk0we.ampr.org 20 Jan 21:48 331 test 3 > N 2 klemets@sun2.sk0we.ampr.org 21 Jan 02:37 315 new software N 3 klemets@sun1.sk0we.ampr.org 21 Jan 03:48 321 test A,B,C,D,E,F,G,J,K,L,N,R,S,T,U,W,Z > j ax0: Station Time since last heard Pkts recvd SK0WE-2 0:00:05:28 5 SM0ETV-15 0:00:00:12 6 SM0IJZ 0:00:03:21 2 SK0WF-1 0:00:05:26 4 SK0WF 0:00:06:28 1 A,B,C,D,E,F,G,J,K,L,N,R,S,T,U,W,Z > a Current message area is: klemets Available areas are: klemets Your private mail area tcp-group Networking mailing list packet Yet another mailing list A,B,C,D,E,F,G,J,K,L,N,R,S,T,U,W,Z > a packet packet: 1 message. A,B,C,D,E,F,G,J,K,L,N,R,S,T,U,W,Z > l Mail area: packet 1 messages - 0 new > Y 1 klemets@sun2.sk0we.ampr.org 21 Jan 03:06 345 New software A,B,C,D,E,F,G,J,K,L,N,R,S,T,U,W,Z > g ax0 sk0wf-1 Trying SK0WF-1 on ax0... Connected. The escape character is: CTRL-A ###CONNECTED TO NODE SK0WF-1(SK0WF) CHANNEL A * SK0WF * KISTA * 25 WATT * 2 X 5/8 * ENTER COMMAND: B,C,J,N, or Help - - - A,B,C,D,E,F,G,J,K,L,N,R,S,T,U,W,Z > n Connected to TCPIP :SK0WE-2 ? TCPIP :SK0WE-2> Invalid command (CONNECT IDENT NODES USERS) i TCPIP :SK0WE-2> sun1.sk0we.ampr.org (900117x NOS) no TURKU2:OH1AU-2 MARIE2:SK5MK-2 #MSYS:SM0IJZ-7 #NYKV:SK0MK-2 MHAMN2:OH0AA-2 MANSE7:OH3TR-7 TURKU7:OH1AU-7 ETV300:SM0ETV-2 #TCPIP:SM0IJZ-2 KVARNB:SK0UX-2 #ETV70:SM0ETV-7 STH675:SK0AR-2 u AX25 mailbox: on User State Type S# klemets CMD Telnet 12 - - - A,B,C,D,E,F,G,J,K,L,N,R,S,T,U,W,Z > @ Net> ? Main commands: ! abort arp asystat ax25 attach connect close disconnect dir delete detach domain echo eol escape exit finger ftp help hostname icmp ifconfig ip kick log mbox mode more netrom nrstat param ping ps record remote rename reset rip route rspf session shell smtp socket start stop tcp telnet trace udp upload ? Net> soc S# Type PCB Owner 0 Loc St 4b69c 4b1f4 (cmdintrp) 1 Loc St 4b6ac 4b1f4 (cmdintrp) 2 TCP 72714 5e490 (Echo listener) 3 TCP 74824 5e5c4 (Discard listener) 4 TCP 748cc 5e6f8 (Telnet listener) 5 TCP 74974 4b900 (FTP listener) 6 TCP 74a1c 4ba34 (SMTP listener) 7 TCP 74ac4 4bb68 (Finger listener) 8 UDP 74b6c 4bcb0 (Remote listener) 9 AX25 I 74ba4 4be04 (AX25 listener) 10 NETROM 74c5c 4bf58 (NETROM listener) 11 UDP 726ac 74d38 (Domain) 12 TCP 4c670 4c278 (mbox) Net> From: SDS::"tcp-group-relay@ucsd.edu" 22-JAN-1990 18:26:18.52 To: NSSDC$SPAN::CLARK CC: Subj: More about the NOS BBS Received: from ucsd.edu by Sds.Sdsc.Edu with INTERNET ; Mon, 22 Jan 90 23:23:43 GMT Received: by ucsd.edu; id AA28391 sendmail 5.61/UCSD-2.0-sun Mon, 22 Jan 90 11:56:19 -0800 Received: from sics.se by ucsd.edu; id AA28327 sendmail 5.61/UCSD-2.0-sun via SMTP Mon, 22 Jan 90 11:55:32 -0800 for /usr/lib/sendmail -odq -oi -ftcp-group-relay tcp-group-list Received: from shai.sics.se by sics.se (5.61-bind 1.5+ida/SiteCap-3.0) id AA15647; Mon, 22 Jan 90 20:55:15 +0100 Received: from localhost by shai.sics.se (5.61-bind 1.4+ida/SiteCap-3.0) id AA14183; Mon, 22 Jan 90 20:55:11 +0100 Message-Id: <9001221955.AA14183@shai.sics.se> To: tcp-group@ucsd.edu Subject: More about the NOS BBS Date: Mon, 22 Jan 90 20:55:07 +0100 From: klemets@sics.se I forgot to mention a couple of details regarding how to set up "accounts" for the NOS BBS. NOS will only prompt for a password when logging in through a Telnet connection, and when using FTP, as usual. When you connect to the BBS through an AX.25 or NET/ROM connection, however, the whole login procedure is bypassed. This is a potential security problem, especially if you have several heavily privileged users. Having a password check will not help much though, since the passwords are visible on the air. A way of avoiding the security hole is to simply not give the delete file permit and the remote control permit to anybody (permission field values 4 and 64 respectively.) Or one could have a secret username, not known to anybody but trusted users. A username longer than six characters will not fit in the AX.25 or NET/ROM address field, thus forcing users use telnet where they will get the password query. When AX.25 or NET/ROM users connect to the BBS, the ftpusers file is searched for an entry matching their callsign, without any dashes, and in lower case. If not found, ftpusers is searched for the user "bbs" and "anonymous". If none of these is found either, the user is still able to use the mailbox, but with the nil privileges, i.e. no file access rights at all. The reason why there are two optional default usernames for the BBS, "bbs" and "anonymous" is to allow maximum flexibility. One may want to have different default directories for BBS users and FTP users. One reason for this might be that one wants to hide binary files from the BBS users so that they do not attempt to download a binary file, which will probably not work. The code that many of you have fetched from sics.se had some bugs in it, especially in the gateway code. Most of these have been fixed, and there is now a revised version available. It might still produce a "Freeing garbage" message, but it is not anything to worry about. If you stand waiting a few days, there are chances that a compiled version will be available from flash.bellcore.com. By the way, even though the code was conceived during less than a weekend, it is not a "quick hack". Maybe a hack in a sense, but not quick. I spent 24 consecutive hours writing most of the code. After a 32 hour wake I took a three hour nap and then spent some other 11 hours finishing the rest and tracking down bugs. I apologize to those of you whose mail I have not yet had time to answer, but I have studies to catch up with, and requests like "Please E-mail me your 700 kbyte NETNIX distribution" are usually put in the low-priority queue... Anders From: SDS::"tcp-group-relay@ucsd.edu" 23-JAN-1990 11:38:00.25 To: NSSDC$SPAN::CLARK CC: Subj: Re: Puzzled by NOSes mailboxes... Received: from ucsd.edu by Sds.Sdsc.Edu with INTERNET ; Tue, 23 Jan 90 16:05:07 GMT Received: by ucsd.edu; id AA09400 sendmail 5.61/UCSD-2.0-sun Tue, 23 Jan 90 02:54:37 -0800 Received: from sics.se by ucsd.edu; id AA09386 sendmail 5.61/UCSD-2.0-sun via SMTP Tue, 23 Jan 90 02:54:25 -0800 for /usr/lib/sendmail -odq -oi -ftcp-group-relay tcp-group-list Received: from shai.sics.se by sics.se (5.61-bind 1.5+ida/SiteCap-3.0) id AA03718; Tue, 23 Jan 90 11:54:00 +0100 Received: from localhost by shai.sics.se (5.61-bind 1.4+ida/SiteCap-3.0) id AA14874; Tue, 23 Jan 90 11:53:55 +0100 Message-Id: <9001231053.AA14874@shai.sics.se> To: mjj@stda.jhuapl.edu (Marshall Jose) Cc: tcp-group@ucsd.edu Subject: Re: Puzzled by NOSes mailboxes... In-Reply-To: Your message of Mon, 22 Jan 90 18:41:57 -0500. <9001222341.AA05458@stda.jhuapl.edu> Date: Tue, 23 Jan 90 11:53:33 +0100 From: klemets@sics.se All you need in the autoexec.net file to activate the AX.25 mailbox, is: ax25 mycall YOURCALLSIGN start ax25 mbox on The "start" statement should be put after the "ax25 mycall" statement, (at least it used to be like this, but I think Phil changed something so that even that does not mater any more). The "mbox on" can be put anywhere. Similar things apply to the NET/ROM code. You should put the "start netrom" after all the NET/ROM initialization stuff. You could check that NOS is really listening for incoming connections by issueing the commands "ax25 status" and "netrom status". They should show a control block in the "Listening" state. Anders