JNOS 2.0f COMMANDS MANUAL

Document ID: JN-CMD2.0f (rev 1.0 - first draft)

JNOS release 2.0f

by Maiko Langelaar / VE4KLM

based on the JNOS release 1.11 COMMANDS MANUAL by

Robert Fahnestock / WH6IO and James P. Dugal / N5KNX

A derivative of the JNOS Commands Manual

by Johan K. Reinalda and Douglas E. Thompson

based in part on the NOS Reference Manual by

Phil Karn / KA9Q and Gerard van der Grinten / PA0GRI

                               DISCLAIMER

              The authors make no guarantees, explicit or implied,
           about the functionality or any other aspect of this product.

               Refer to the manuals provided by the manufacturer
                of your equipment for installation procedures.

                            Table of Contents

Table of Contents
Introduction
Terminology
Starting JNOS
Status Display
System Commands
<Enter> or <CR>
!
#
?
abort [<session #>]
arp <subcommands>
aprs
aprsc
asystat
asyconfig
at
attach
attended [off | on]
axui <iface> [<unpronto call>][digipeater string]]
ax25 <subcommands>
bbs
bulletin <subcommands>
callserver [<hostname> <port>]
cd
close
cls
comm <asy_iface> <"text-string">
connect <iface> <destination> [<digi1,digi2...digin>]
convers <subcommands>
copy
disconnect
dir
delete <filename>
detach
dialer <subcommand>
domain <subcommand>
dump <hexaddress | .> [range]
echo [accept|refuse]
edit [<filename>]
eol {standard | null]
escape
errors [ON | off]
etelnet <host> [<port_number>] loginid password
ettylink
exit [<return_code>]
expire <subcommand>
finger <username [@host] > [<username [@host]>...]
fkey
ftp <hostname> [<scriptfile>]
ftype
ftpclzw
ftpslzw
ftpmaxservers
ftptdisc

                            Table of Contents (continued)

gate <subcommands>
help
hfdd
history [<N>]
hop <subcommands>
hostname [<name>]
http <subcommand>
icmp <subcommands>
ifconfig [<subcommand>]
index [<areaname>]
info
ip <subcommand>
kick
lock [password "<password_string">]
log [on|off]
look [user | socket#] (/<cmd>) (
lzw
lzwlink
mailmsg <to_addr> ["<subject"] <msg | /path>
mbox [<subcommands>]
memory <subcommands>
mkdir <directory>
mode <iface> [vc | datagram]
more <filename> [<text>...]
motd ["message"]
netrom <subcommands>
nntp
nrstat
oldbid <interval>
param <iface> [<param>]
pause <seconds>
ping <host> [<length>] [<repeat_ms> [incflag>]]]
popmail <subcommand>
prompt [on|OFF]
ps
pwd <directory>
rarp
rdate <subcommand>
record  [off | <filename>]
remark
remote
rename <old filename> <new filename>
repeat [milliseconds]  command
reset
rewrite <address>
rip <subcommand>
rlogin <host>
rmdir <directory>
route [<subcommand>]
rspf <subcommand>
session [<session#>]
sessmgr
shell [cmd [args]]
skick <socket#>

                            Table of Contents (continued)

smtp <subcommand>
socket [<socket#>]
source <script_filename>
split <iface><call>
start <servers...>
status [on | off]
stop <server...>
tail <filename>
taillog
tcp <subcommand>
telnet <host>
term
trace [<iface> [off | <btio>]
ttylink <host> [<port_number>]126
third-party
tip
strace
udp status
upload
write <username|sock#> <message>
writeall <message>
?

Bibliography

APPENDIX A    JNOS MAILBOX USER COMMANDS
APPENDIX B    FTPUSERS PERMISSIONS
APPENDIX C    FORWARD.BBS
APPENDIX D    OF PACLEN, MSS, MTU and more
APPENDIX E    DOS Environmental Variables
APPENDIX F    SAMPLE REWRITE FILE

Introduction

This document addresses the JNOS command set. This manual is current as of the version indicated on the title page. Prior versions of commands or commands which have been deleted are not included. Also, this document addresses only the commands that are available in the VE4KLM distribution of JNOS 2.0.

The official website for JNOS 2.0 is as follows :

    http://www.langelaar.net/projects/jnos2

The user interface for JNOS is very similar to most of the well-known BBS programs. This is to provide an easy transition for users. The user interface in the JNOS program is commonly called the 'mailbox' or bbs. These terms will be used interchangeably throughout this document when describing commands.

This Commands Manual contains the commands and their descriptions for using and operating a JNOS tcp/ip and ax.25 packet switch, BBS, and network node. Also contained in this manual is information about the FORWARD.BBS, REWRITE, ALIAS, and USERS files used in a JNOS installation.

Questions, remarks and suggestions about JNOS and/or it's documentation are welcome and should be sent to :

Maiko Langelaar, VE4KLM
268 Doran Bay,
Winnipeg, MB
Canada, R2Y 1H5

Email : maiko@pcs.mb.ca

Corrections (and comments) to the documentation must include the following :

     1) Document ID – See the title page of your COMMANDS MANUAL

     2) Page Number

     3) Text as it exists

This does not have to be the complete text. But it must be enough to ensure unambiguous identification of the area under discussion.

     4) Text as it is proposed to be OR an explanation of the problem which I
        will then convert into the appropriate text.

DO NOT send a copy of the whole document with revisions scattered throughout.  

Please send any corrections to VE4KLM by email or the above address.

This particular document was created using Microsoft Word XP (2002).

Terminology

This section probably needs a bit of an overhaul, since the original documents were written back in the 1980’s. Here are some of the abbreviations and terminology used throughout this manual. You might find some of these humorous.

HOSTNAME is the tcp/ip name of a computer or packet system.

INTERNET is a worldwide high speed computer network. It has thousands of computers at schools, companies, and amateur packet radio systems connected to it.

MTU is short for Maximum Transmission Unit, is the maximum data size in one packet. Most often the data referred to by MTU is the transported data, i.e. data frame in a network connection.  With tcp/ip, the size of the tcp/ip frame inside the ax.25 packet is the MTU; with net/rom, the size of the data inside the netrom packet is the MTU.

NRS is short for Net/Rom Serial protocol, is what TNCs with Net/Rom or TheNet eproms talk on the serial port.

NODE and MAILBOX are terms used interchangeably for the user interface when connected to the system.

PACLEN, or packet length, is most often used to refer to data size in a link packet.  The data in an ax.25 packet can be up to paclen bytes.

PORT or INTERFACE means the physical connection to a radio or other system (i.e., radio port or serial interface).  These two terms are used interchangeably.

RFCs, or Requests For Comment, are standard papers used on Internet to discuss and propose new networking protocols and other related topics.

RSPF,  or Radio Shortest Path First, is a tcp/ip routing protocol especially targeted at radio environments.

RTT, or Round Trip Time, indicates the time needed for data to be sent and acknowledged.

SLIP, or Serial Line IP, is a way to send IP frames over a serial port without using ax.25 or ethernet to carry the data.  You can use SLIP to connect to PCs or Unix systems also running SLIP, and interchange tcp/ip data.

PPP, or point-to-point protocol, is an alternative to SLIP, that has the advantage of automatically configuring IP addresses, compression, and MTU.

Starting JNOS

There are several command line options available when starting JNOS. These commands are used to set environment variables, select configuration and autoexec files, and other functions. Options should be separated by tabs or spaces. If there is an option argument, there should NOT be any whitespace between the option and the argument. The only option not preceded by '-' is the alternate startup file.

    -a         Maximum number of AXIP + AXUDP interfaces. This option is
               available in JNOS 2.0 only, not previous versions.

    -b         Use direct video for the screen output.

    -c#        Set the number of COLUMNS on the screen to #.

    -drootdir  Set the root directory for the configuration file path. This is
               overwritten by the file specified in the -f option config file.

    -e         Pause after each error line in autoexec.nos

    -fnos.cfg  Set JNOS config file and path names as indicated in the 'nos.cfg'
               file. This overrides the -d option.

    -gn        Set trace colors, when tracing to console (ANSI.SYS needed):

                   n=0 => none (default)
                   n=1 => tailor to gray-scale monitor
                   n=2 => tailor to color monitor

     -i        always re-index mail files at startup

     -I      never re-index mail files at startup (instead, test at 1st access)

     -l        Do NOT delete .lck files in the mail and news subdirectories

     -mn       Set the default screen swap mode.

                   n = 0 Use EMS (If compiled and available.) The default
                         is that EMS is available

                   n = 2 Use memory. Default if NO EMS available.

                   n = 3 Use a temporary disk file

     -n         No trace session

     -r#        Set the number of ROWS on the screen to #

     -R         Maximum number of IP routes that can have dynamic gateways. This
                option is available in JNOS 2.0 only, not previous versions.

     -t         trace ‘autoexec.nos’ file. You will be asked before each if you
                want to execute it - 'y' accepts, anything else skips the line.

     -u#        Set the number of status lines, valid values are 0 to 3.

     -v         Verbose. Print each line from autoexec.nos before parsing.                                                                                                                               

     -wf+b      Set foreground/background colors for system status
                default: white on magenta

     -xf+b      Set foreground/background colors for session status
                default: white on blue

     -yf+b      Set foreground/background colors for 'main' window. default: the
                system colors when JNOS starts (most often lightgray on black)

     -zf+b      Set foreground/background colors for 'split' window
                default: white on green

                  0=black
                  1=blue
                  2=green
                  3=cyan
                  4=red
                  5=magenta
                  6=brown
                  7=white/gray

 autoexec.new   Name of the startup file. Default is 'autoexec.nos' or as
                set with the ‘-fnos.cfg’ option.

UNIX additions to the command-line arguments :

     -C          allow core files to be created following certain errors

     -D          disallow the interval timer...testing vestige from 1.09 JNOS

     -Smgr:o     Set default session manager to <mgr>, with options <o>

     -Tmgr:o     Set default trace session manager to <mgr>, with options <o>

Status Display

JNOS has a (up to) 3-line status display which shows:

first line

The time, heap and core free memory, number of connections to the different servers, then a list of active sessions, where sessions with data waiting are blinking.

second line

The users connected to the bbs, each having a status symbol in front, meaning :

 none - user is idle
    * - user is a bbs
    @ - user is in sysop mode
    ! - user has gatewayed out
    # - user is reading or sending mail
    = - user is transferring data (up/download)
    ^ - user is in convers or sysop-chat mode
    ? - use is in none of the above, but not idle...

For example:

    BBS: *w0rli johan #ka7ehk !n7ifj

The first two lines are known as the ‘system’ window.

third line

The 3rd line shows data depending on the current session.

Always displayed are the current session number and type.

If the sessions are network connections, displayed are remote connection name, tx-queue (bytes for tcp, packets for ax.25), and state of the connection. It then shows the retry timer, with current time left, and initial value.
 
In 'repeat', 'more' or 'look' sessions, the 3rd line show the command, filename or user/socket for the session.

The number of status lines displayed can be set with the '-uX' commands line option. '-u0' turns it off. Default is '-u3'

Note - if tracing is enabled, this will 'bleed' through the status window. This is NOT a bug, but is inherent to the way tracing works in JNOS. (It would take a major rewrite to fix.) The status window will be rebuilt about twice a second to overcome this.

System Commands

This section describes the commands recognized. Syntax is :

    command
    command literal_parameter
    command subcommand <parameter>
    command [<optional_parameter>]
    command a | b

Many commands take subcommands, parameters, or both, which may in turn be optional or required. In general, if a required subcommand or parameter is omitted, an error message will summarize the available subcommands or required parameters. (Giving a '?' in place of the subcommand will also generate the message. This method is useful when the command word alone is a valid command.) If a command takes an optional value parameter, issuing the command without the parameter generally displays the current value of the variable. (Exceptions to
this rule are noted in the individual command descriptions.)

Two or more parameters separated by vertical bar(s) '|' denote a choice between the specified values.  When one of the choices is default, that choice will be in UPPERCASE.  Optional parameters are shown enclosed in [brackets].  Parameters enclosed in <angle brackets> should be replaced with actual values or strings. The generic notation for number values is <nnnn>, and for string values, it is <string_id>. For example, the notation <hostname> means the actual host or gateway callsign or id.  Numerical defaults are explicitly stated as such, e.g., "Default = 7."

All commands and many subcommands may be abbreviated.  You only need type enough of a command's name to distinguish it from others that begin with the same series of letters.  Parameters, however, must be typed in full.

All commands are printed in bold (if you have the version of this document that supports fancy formatting), and most commands have an example following the textual description of the commands.

Here now follows a comprehensive set of commands for JNOS.

<CR> or <Enter>

The ENTER key (or carriage return) on an empty line - while in command mode puts you in converse mode with the current session. If there is no current session, JNOS remains in command mode and reissues the 'jnos>' prompt.

! is an alias for the shell command.

#

Commands starting with the hash mark (#) are ignored. The hash mark is mainly useful for comments in the autoexec.nos.

? is the same as the 'help' command.

abort [<session #>]

Abort a FTP get, put or dir operation in progress. If issued without an argument, the current session is aborted. This command works only on FTP sessions. When receiving a file, abort simply resets the data  connection; the next incoming data packet will generate a TCP RST (reset) response to clear the remote server.  When sending a file, abort sends a premature end-of-file.

Note that in both cases abort will leave a partial copy of the file on the destination machine, which must be removed manually if it is unwanted.

arp

Display the Address Resolution Protocol table that maps IP addresses to their subnet (link) addresses on subnetworks capable of broadcasting.  For each IP address entry the subnet type (e.g., AX.25), subnet address and time to expiration is shown. If the link address is currently unknown, the number of IP datagrams awaiting resolution is also shown.

arp add <hostid> ether | ax25 | netrom |arcnet | mac <hardware addr> <iface>

Used to add a permanent entry to the ARP table. It will not time out as will an automatically created entry, but must be removed with the 'arp drop' command.                                                                                                                                    

For example :

    arp add 44.135.124.19 ax25 ve4wws-9 vhf

arp drop <hostid> ether | ax25 | netrom |arcnet | mac <iface>

Used to delete a permanent entry from the arp table.

For example :

    arp delete 44.135.124.19 ax25 vhf

arp eaves [<iface>] [on | off]

Display or set the 'arp eavesdrop' function per interface. If set, all arp replies overheard on the interface will be logged in the arp table. This speeds up arp discovery, but might build a huge arp table taking up lots of memory. The default for each interface is off.                                                                               

For example :

    arp eaves vhf on

arp flush

Drop all automatically-created entries in the ARP table - permanent entries are not affected.

arp maxq [n]

Display or set the maximum number of packets to be buffered waiting for an arp resolution to finish.  Default = 5.                                                                                            

For example :

    arp maxq 5

arp poll [<iface>] [on | off]

Display or set the 'arp keepalive polling' per interface.  If set, when an arp entry expires, a query will be sent for the address. This keeps the arp table fresh, but possibly retains many unneeded entries.                                                                                                                                          

For example :

    arp poll port1 on

arp publish <hostid> ax25 | netrom <callsign> <iface>

This command is similar to the 'arp add' command, but the system will also respond to any ARP request it sees on the network that seeks the specified address. Use this feature with great care !

For example :

    arp publish 44.26.1.19 ax25 wg7j-2 port1

arp sort [on | off]

Sorts the arp display.

aprs (only in JNOS 2.0 and patched 1.11f systems)

The ‘aprs’ command is used to configure and manage NOSaprs.

NOSaprs is an APRS server / internet gateway integrated into JNOS itself. Those that are already running JNOS internet gateways can easily start to support their local APRS community by simply adding another radio port for 144.390 if they want and getting a JNOS binary that has the NOSaprs module compiled into it.

NOSaprs has it's very own (detailed) user manual.

aprsc (only in JNOS 2.0 and patched 1.11f systems)

Starts up a basic APRS messaging client, allowing the sysop or any logged in mailbox user to exchange APRS messages with other APRS stations, either locally on an RF port, or via the APRS Internet System.

Refer to the NOSaprs user manual for complete details.

asystat (DOS version)

Display statistics on attached asynchronous communications interfaces (8250 or 16550A), if any.  For example:

tnc: [NS16550A] [trigger 0xc0] [rlsd line control] 19200 bps [@ 3f8,4]
 RX: 929462 int, 3683653 chr, 0 hw over, 6 hw hi, 17210 fifo TO,
 0 sw over, 126 sw hi
 TX: 946381 int, 7400204 chr, 0 q, 79401 MS int, 40 THRE TO
tnc2: [NS16550A] [trigger 0xc0] 9600 bps [@ 2f8,3]
 RX: 722895 int, 2865467 chr, 0 hw over, 8 hw hi, 13075 fifo TO,
 0 sw over, 248 sw hi
 TX: 246420 int, 1889156 chr, 0 q, 1 MS int, 16 THRE TO

The display for each port consists of three lines.

The first line gives the port label and the configuration flags; these indicate whether the port is a 16550A chip, the trigger character if any, whether CTS flow control is enabled, whether RLSD (carrier detect) line control is enabled, the speed in bits per second, and the port address and IRQ number in hexadecimal. (Receiving the trigger character causes the driver to signal upper layer software that data is ready; it is automatically set to the appropriate frame end character for SLIP, PPP and NRS lines.)

The second line of the status display shows receiver (RX) event counts:  the total number of receive interrupts, received characters, receiver overruns (lost characters) and the receiver high water mark.  The high water mark is the maximum number of characters ever read from the device during a single interrupt.  This is useful for monitoring system  interrupt  latency margins as it shows how close the port hardware has come to overflowing due to the inability of the CPU to respond to a receiver interrupt in time. 8250 chips have no FIFO, so the high water mark  cannot  go higher  than  2  before overruns occur.  The 16550A chip, however, has a 16-byte receive FIFO which the software programs to interrupt  the CPU when the FIFO is one-quarter full.  The high water mark should typically be 4 or 5 when a 16550A is used; higher values indicate that the CPU has at least once been slow to respond to a receiver interrupt.

When the 16550A is used, a count of FIFO timeouts is also displayed  on the RX status line.  These are generated automatically by the 16550A when three character intervals go by with more than  0 but  less than 4 characters in the FIFO.  Since the characters that make up a SLIP or NRS frame are normally sent at full line speed, this count will usually be a lower bound on the number of frames received on the port, as only the last  fragment of a frame generally results in a timeout (and then only when the frame is not a multiple of 4
bytes long.)

Finally, the software fifo overruns and high water mark  are displayed.  These indicate whether the <bufsize> parameter on the attach command needs to be  adjusted  (see  the  Attach  Commands chapter).

The third line shows transmit (TX) statistics, including a  total count of transmit interrupts, transmitted characters, the length of the transmit queue in bytes, the number of status  interrupts, and the number of THRE timeouts. The status interrupt count will be zero unless CTS flow control or RLSD  line  control  has  been enabled.
The  THRE  timeout  is  a stopgap measure to catch lost transmit interrupts, which seem to happen when there is a lot  of activity (ideally, this will be zero).

asystat (linux version)

The asystat command for the linux version of JNOS is somewhat different from the DOS version. For example:

144.99: cua0, 9600 bps, packet size 255, RTS/CTS disabled, carrier disabled
  RX: ints 2 chars 73 puts 2 rxqueue 5 qlen 0 ovq 0 block 0 buf 1024
  TX: ints 1 chars 57 gets 0 txqueue 2 qlen 0 ovq 0 block 0
linux: ttype, 38400 bps, non-blocking, RTS/CTS disabled, carrier disabled
  RX: ints 0 chars 0 puts 0 rxqueue 2 qlen 0 ovq 0 block 0 buf 1024
  TX: ints 0 chars 0 gets 0 txqueue 2 qlen 0 ovq 0 block 0

ints    is the number of times pwait() returned control to the rx or tx task,
        indicating that select() detected pending data on input or a packet
        became available for output.

chars   is the number of characters read/written.
puts    number of times received data was placed in the packet Hopper.
gets    number of times data was taken out of the send queue and written to
        the device.

rxqueue is described in the asyconfig command helpfile.
txqueue is described in the asyconfig command helpfile.
qlen    is the instantaneous queue size (number of packets).

ovq     is the number of times queue flow control (described in asyconfig)
        was triggered.

block   is the number of times read/write tried to block (in the case of
        reads, the number of times it tried to block after data was claimed
        to be available).

buf     is the current receive buffer size, as specified in the attach
        statement or the "asyconfig" command.

asyconfig

The 'asyconfig' command allows the sysop to configure the size of the receive and transmit queues for a particular async interface, as well as the size of the input I/O buffer for an async interface.

        asyconfig <iface> rxqueue [# of messages]
        asyconfig <iface> txqueue [# of messages]
        asyconfig <iface> bufsize [# of bytes]

If you do not specify the 4th parameter, then JNOS will simply display the value currently in affect. By default, the max number of messages on a queue is 1, and the maximum buffer size for an async interface will be the 'bufsize' argument specified in the original attach command.

You can also display statistics for a particular async interface.

    asyconfig <iface> status

The format of the output display is identical to the 'asystat' command.

at

The 'at' command is used to provide automatic starting of other JNOS commands at predetermined times. Think of it as the NOS version of the unix/linux crontab.

Without any arguments, ‘at’ displays each scheduled ‘at’ command and its id number, so that 'at kill n' can be used (see further below).

at <time> <cmd>

where <time> takes the form   yymmddhhmm       (specific date/time)
                              hhmm             (next occurrence of this time)
                              whhmm            (next occurrence of this time on
                                                specified weekday. 0=Sun,1=Mon,
                                                ..., 6=Sat)
                              mm               (mm mins after next hour)
                              now+hhmm         (offset from present time)

and <cmd> is any legal JNOS command.

Multiple word commands must be enclosed in double quotes (" "). Commands which invoke the DOS shell must include '!' or shell as the first word in order for JNOS to recognize that an external command is to be invoked. If the external command requires the command processor (ie, DOS version of JNOS), then "/c" may be given as the second word. For example : "! /c x.bat>> e:foo".

To automatically reissue the at command when the timer matures, append a "+" character to the <cmd> string. Several examples follow below :

    at 0130 "! cleanup+"

    at now+0100 "ax25 flush+"

    at 0600 "writeall \"Il est 6h00 GMT\"+"

at k <id_num> [<id_num>...]

This form of the 'at' command kills (i.e., deletes) jobs <id_num>...

attach

Configure and attach a hardware interface to the system. Detailed instructions for each driver are given in the next few pages. An easy way to obtain a summary of the parameters required for a given device is to issue a partial attach command (e.g., attach asy). This produces a message giving the complete command format for that particular device or hardware.

attach <hw_type> <io_addr> <vector> <mode> <label> <bufsize> <mtu> [<speed>]

    <hw_type> is the kind of I/O device being attached to the system. Choices
              include asy, kiss, packet, netrom, axudp, axip, tun, and others.

    <io_addr> is the base address of the control registers for the device.

    <vector> is the interrupt vector number. Both the address and the vector
             must be in hexadecimal. You may prefix the numbers with "0x", but
             they will be interpreted in hexadecimal even without the prefix.

    <mode> controls how IP datagrams are to be encapsulated in the device's link
           level protocol. Choices include ax25, slip, pkiss, nrs, ppp...

       slip - encapsulates IP datagrams directly in SLIP frames without a link
              header. This is for operating point-to-point lines.

       ax25 - similar to slip, except that an AX.25 header and a KISS TNC ctrl
              header are added to the front of the datagram before SLIP
              encoding. Either UI (connectionless) or I (connection-oriented)
              AX.25 frames can be used.

       pkiss - similar to ax25, except that packets are checksummed and the
               interfaced devices are queried (polled) regularly for data.

               * Used by G8BPQ polled-kiss software.

       nrs - similar to ax25, except that packets are transmitted only when
             permitted by flow-control signals. Typical of Netrom node stacks
             using Netrom serial protocol.

       ppp - similar to slip, except the protocol is different and typically
             is capable of compression.

    <label> defines the name by which the interface will be known to various
            commands, such as "connect", "route",  "trace", etc.

    <bufsize> for ASYNCHRONOUS PORTS, specifies the size of the ring buffer (in
              bytes) to be statically allocated to the receiver, incoming bursts
              larger than <bufsize> may cause data to be lost.

       * For ETHERNET, specifies how many PACKETS may be queued in the receive
         queue at one time. Excess packets are discarded as they are received.
         This is useful to prevent the system from running out of memory should
         another node suddenly develop a case of diarrhea.

    <mtu> is the Maximum Transmission Unit size in bytes.

       * See the section ‘of PACLEN, MTU, MSS, and More' in Appendix D for
         a discussion of the effect of MTU on system performance.

attach asy <io_addr> <vector> <mode> <label> <bufsize> <mtu> [<speed>] [<flags>]

Configure and attach a standard PC asynchronous I/O (serial) port using the National 8250, 16450, or 16550(A) chip or equivalent to the system, where:

DOS version

<io_addr> is the comm port address; e.g., com1 = 0x3f8

<vector>  is the comm port IRQ value.  If it is suffixed by "_C" then the
          interrupt service routine for this port is chained to the server
          list for this IRQ.

<mode>    one of: hfdd, slip, ax25, ppp, pkiss, nrs

<flags>   string of characters, specifying options:

    c - do BPQ checksumming of ax.25 kiss packets
    v - do Van Jacobson TCP header compression on slip intfc
    f - force use of 16550a uart features (eg UM16C550 chip)
   fN - set 16550a trigger level to N (1,4,8, or 14. Default=4)
    n - use NRS-CTS protocol on nrs interface

    Flag  for_mode   #define_needed_in_config.h
     c     ax25         AX25 and POLLEDKISS
     v     slip         SLIP and VJCOMPRESS
     n     nrs          NRS
     f    (any)         ASY

Linux version

<io_addr> is the Unix device name, e.g., cua0 or ttyS2.

<vector>  is ignored presently.

<flags>   include c,v,f, and n. The fifo trigger level flag, "fN", is
          reinterpreted as providing a packet size.  The value can range from
          0 to 255;  if it is 0, the original input mechanism is used, otherwise
          blocking reads are used with termios VMIN set to the specified value.
          At the moment there is no error checking; if you set the buffer size
          smaller than VMIN you could lose incoming data. Under some unix
          versions, setting it to anything other than a multiple of VMIN could
          cause problems.  The tradeoff here is that when the VMIN mechanism is
          used, input could be delayed by up to 1/5 second on a mostly quiet
          channel, but on an active channel JNOS will use *much* less CPU time
          and generally will be much more efficient.

attach axip <iface> <mtu> <ipaddress> [<callsign>]

Create a RFC1226 compatible AX.25 frame encapsulator for transmission of AX.25 frames over IP. This command establishes a point-to-point AX.25 tunnel between two systems.

    <iface> - name of the new interface

    <mtu> - maximum transmission unit for the interface

    <ipaddress> - ip address of remote system (other side of the tunnel)

        * JNOS 2.0 allows the use of a domain name instead of an ip address
          for remote systems using DYNDNS type hostnames. This feature is
          described after the AXUDP section.

    <callsign>  - an optional AX.25 callsign this station is listening on for
                  frames to digipeat. Note that if you want the cross-tunnel
                  digipeating to work, each attached axip interface should be
                  listening for a different callsign. These should also be
                  different from other callsigns used on this station.
For example :

    attach axip ax0 256 44.135.112.19 VE4KLM-7

attach axudp <iface> <mtu> <ipaddress> [callsign] [UDP src] [UDP dst]

New to JNOS 2.0, this is essentially identical to AXIP, but the AX.25 frames are transported over UDP rather then over IP. This was done to give people more flexibility in a world where stuff like AXIP is now possibly blocked, firewalled, or not even allowed through some routers or ISPs for that matter.

    <iface> - name of the new interface

    <mtu> - maximum transmission unit for the interface

    <ipaddress> - ip address of remote system (other side of the tunnel)

        * JNOS 2.0 allows the use of a domain name instead of an ip address
          for remote systems using DYNDNS hostnames. This feature is described
          a bit further below.

    [callsign]  - an optional AX.25 callsign this station is listening on for
                  frames to digipeat. Note that if you want the cross-tunnel
                  digipeating to work, each attached axip interface should
                  listen to a different callsign. These should also be different
                  from other callsigns used on this station.

    [UDP src] - an optional UDP source port, overrides default.

    [UDP dst] - an optional UDP destination port, overrides default.

The default UDP port for axudp is port 93 for both the source and the destination ports. IF you want to pass optional UDP ports, but do not want to use the optional AX.25 callsign, then just specify a '-' for the callsign.

For example :

    attach axudp ax1 256 44.26.1.19 – 1234 4321

AXUDP / AXIP - Dynamic (DYNDNS) remote systems

In JNOS version 2.0, you can now specify a domain name instead of the ip address of the remote system. What this does is cause JNOS 2.0 to periodically resolve the hostname to make sure that the ip address of the remote host is up to date. This allows you to setup AX25 tunnels to other systems that do not have a static commercial ip address, and are not interested in using the 44 encapsulation as a 'static' ip address. Of course, you can expect some *dead* time on your tunnel when the ip address of the remote host changes, but it's better than nothing.

For example :

         attach axip ax0 256 example.dyndns.org

         attach axudp ax1 256 example2.dyndns.org - 1234 5678

Important :

You need to know that DNS resolution is not available while JNOS is loading commands from the autoexec.nos file ! Only after the entire autoexec.nos file has been loaded and JNOS has entered it’s main command loop, then DNS queries will work. So how do we deal with dyndns type entries like for axudp or axip ?

The only solution at this time is to use the ‘at’ command to schedule the attach a bit later on. Ideally it would be nice to do it 10 seconds after JNOS has started, but that option is not yet available in the ‘at’ command. The best we can do is one minute later.

SO, if you want to use dyndns type attaches you will need to use something like the following in your autoexec.nos, or else the interface will not attach, due to the DNS query failing. Not the ifconfig is schedule 1 minute after that.

  #
  # 03Feb2008 - DNS is not available until after AUTOEXEC.NOS is read
  # in and the main JNOS command loop has been entered, so any commands
  # that require the use of hostnames have to be DELAYED - use 'at' !
  #
  at now+0001 "attach axudp werner 256 ve4wws.dyndns.org"
  at now+0002 "ifconfig werner desc \"wormhole to ve4wws\""
  #

attach kiss <asy_iface_label> <port> <label> [mtu]

Attach a second kiss interface on the serial port. This command allows the use of multiport TNCs. The first port should be attached by a prior "attach asy" command with <mode> set to ax25 or pkiss. Use pkiss if G8BPQ polled kiss mode is desired. It is up to the tnc's firmware to select which port is at what baud.

For example, the KPC9612 uses the MYDROP command for this purpose.

    <asy_iface_label> is the name of the serial port interface.

    <port> is the port number (1-15) to use, and probably should be 1. The
           original asy port is automatically port 0 !

    <label> is the name for this second kiss port.

    <mtu> is an optional mtu, if different from the mtu on the first kiss port.

For example :

    # Attach a dualport tnc in kiss mode.
    # Ports are labelled 'port1' and 'port2'

    # Attach a PC asynch port (com1 in this example)
    attach asy 03f8 4 ax25 port1 512 256 9600

    # Attach the second port on the multiport tnc
    attach kiss port1 1 port2

attach netrom

This makes available a pseudo interface to enable NET/ROM operations. This command is automatically executed when the netrom server is started with the 'start netrom' command.

Important :

The original JNOS 1.11f had a problem where if you had NETROM compiled in, and you did not ‘attach netrom’ (in other words, you were not interested in running any 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 (even if you did not want to participate in netrom traffic). This was fixed in JNOS version 2.0d.

attach packet <softintr#> <iface_label> <maxqueue> <mtu> [ipaddress]

Driver for use with separate software "packet drivers" which conform to the FTP Software, Inc., Software Packet Driver specification. See the Crynwr (TM) packet driver collection at ftp.crynwr.com, if your hardware (e.g. ethernet card) came without a packet driver.

    [ipaddress]  is an optional ip address for the interface. If not set, the
                 system 'ip address' will be used.

Note that the packet driver is often loaded as a TSR in config.sys or autoexec.bat.  It is the driver that must be supplied with information such as hardware IRQ, i/o address, and software IRQ.  JNOS only needs to know the software IRQ value to interact with this driver. You must pick a software IRQ that is otherwise unused.  Values between 0x78 and 0x7f are often suitable, as well 0x60 seems to be a common one.

For example :

     attach packet 0x60 eth0 5 1500

attach scc or attach escc

G8FSL/PE1CHL driver for generic Z8530 cards, including DRSI cards. Use escc if the Z85230 chip is installed, otherwise use scc.  Specify only one 'easy' or one 'init' command, and as many 'mode' commands as required.

    attach scc <board label> baycom|drsi|opto <base address> <interrupt number>
         [t<timing channel>]

    attach scc <board label> <#chips> init <base address> <spacing between SCC
         chip base addresses> <offset to channel A control register> <offset to
         channel B control register> <offset from each channels control
         register to data register> <address of INTACK/Read Vector port.
         (0 to read from RR3A/RR2B)> <CPU interrupt vector number> <clock
         frequency (PCLK/RTxC) prefix with "p" for PCLK> <optional hardware
         type> <optional parameter for special hardware> <optional t<tick chan>
         specification to use a channel to improve timing>

    attach scc <board label> <SCC channel # to attach, 0/1 for first chip A/B>
         <mode, can be "slip", "kiss", "ax25" or "nrs"> <interface label>
         <maximum transmission unit, bytes> <interface speed, e.g, "1200".
         prefix with "d" when an external divider is available to
         generate the TX clock.> <buffer size> <optional callsign used on radio
         channel> <optional s flag to specify software-derived DCD detection>

Example: (see sccg8fsl.txt and scc.c, in JNOS src zipfile, for more info)

     attach scc scc0 drsi 300 7     (easy form of init command which follows)
     attach scc scc0 1 init 300 16 2 0 1 0 7 p4915200 8
     attach scc scc0 0 ax25 vhfa 235 d1200 512 k5arh-3 s
     attach scc scc0 1 ax25 vhfb 235 d1200 512 k5arh-2 s

attach tun <iface> <mtu> <id>

This sets up a point-to-point network link between JNOS and it's host operating system on which it runs. This is available in JNOS 2.0 only, and only if the host operating system is running linux or MAC OS X. This interface allows JNOS to network with the rest of the world, and is an alternative to the older 'attach slip' method of doing the same thing.

    <iface> - name of the new interface

    <mtu> - maximum transmission unit for the interface

    <id> - the number in the OS tun device - 0 for tun0, 1 for tun1, etc

Important :

It is very important to note that a tun interface only exists while the application program (in this case JNOS) is running. It is created by JNOS when you do the attach, and disappears when JNOS is terminated. That means you will have to shell out to the host operating system AFTER you attach the tun interface, so that the operating system side of the network link is properly configured with ip address, netmask, mtu, etc.

Here is a basic example (autoexec.nos) linking JNOS to it's host OS :

    attach tun tun0 1500 0

    pause 1

    ifconfig tun0 ipaddress 192.168.1.201
    ifconfig tun0 netmask 255.255.255.0
    ifconfig tun0 mtu 1500

    pause 1

    shell ifconfig tun0 192.168.1.200 pointopoint 192.168.1.201 mtu 1500 up

    route addprivate default tun0

For the MAC OS X implementation, use the following shell entry instead :

    shell ifconfig tun0 192.168.1.200 192.168.1.201 mtu 1500 up

    * the MAC OS X version does not use the 'pointopoint' parameter.

You should now be able to telnet to JNOS from linux, for example :

       telnet 192.168.1.201

attach bpq init <vec> <stream>

attach bpq <port> <label> [<mtu> [<callsign>]]

The JNOS BPQ driver allows JNOS to attach interfaces directly to bpqcode without having to use the packet driver interface and the nodedrv4.com TSR. JNOS will talk to bpqcode using the bpq_host interrupt code in version 4.00 and up of bpqcode. This eliminates the extra memory and processing time used by nodedrv4.com to send packets between JNOS and bpqcode.

The "attach bpq init" sub-command attaches the bpq_host TSR driver, which is accessed via software interrupt <vec> (in hex) for BPQ stream <stream> (in decimal).  "attach bpq init" may only be called once.

The second form of the "attach bpq" sub-command is called once per <port>. It associates a BPQ <port> number with an interface name <label>. <mtu> may not exceed 256, and defaults to the ax.25 paclen value. <callsign> defaults to the ax25 mycall value, and establishes the callsign used by this BPQ port.

attended [off | on]

Displays or sets the global "I am present" flag in JNOS. This flag is used in the welcome header for incoming ttylink connections.

axui <iface> [<unproto_call> [digipeater_string]]

The axui command allows the console user to create a session that sends UI (unproto) packets to <unproto_call> via interface <iface>, from lines entered at the keyboard, and displays received UI packets.  A split-screen session is created where possible.  The default <unproto_call> is "ID".  At most one axui session is permitted. AXUISESSION must be #define'd in config.h to enable this command.

An axui session also allows a few commands, which begin with '/' in column 1:

    /c newcall    change the unproto call to <newcall>
    /i iface      change to interface <iface>
    /? or /h      display a help message
    /t            toggle display of the time a packet was received
    /q, /b, /e    close the axui session

For example, to use digipeater n5knx-5 for a local ARES unproto net, enter :

   axui ax0 ares n5knx-5

ax25 <subcommands>

All AX.25 parameters are configurable per interface. Commands of the form 'ax25 <command>' set the default or global values. Use the 'ifconfig <iface> ax25 <command>' form to set or show the interface-specific values.

To set the system default ax.25 parameters, you must do so BEFORE attaching interfaces. After attachment, you must use the 'ifconfig <iface> ax25' command form to show or change values for that interface. THIS IS A CHANGE FROM THE BEHAVIOR EXHIBITED PRIOR TO JNOS VERSION 1.10X16, RELEASED 08FEB94.

ax25 alias <aliascall>

The alias command shows or sets the system's alias call. If netrom is enabled, this modifies the same call as the 'netrom alias' command.  The 'ax25 alias' command is NOT needed in that case! If netrom is not used, this command allows an alias name to be set such that users can connect to it.  The alias is typically a short string and should not be a valid callsign, since any SSID is ignored when matching against <aliascall>.

For example :

     ax25 alias knx

ax25 bbscall [<bbs_call>]

The bbscall subcommand sets or shows the current bbs callsign. Connects to this callsign, when set properly, will "jump-start" the mailbox.  That is, after the connect no additional packet need be sent to obtain the mailbox greeting.  This subcommand will automatically set the bbscall for all currently-attached AX.25 class interfaces with no bbscall set.

Important :

The ‘bbscall’ must differ from the system alias, netrom alias, and ‘mycall’. If people are connecting to your BBS and they find they have to hit enter to get the mailbox prompt, then likely your ‘bbscall’ and ‘mycall’ have been set to the same value, or you forgot to set one of them. Again, for the ‘bbscall’ to function properly, it must differ from the aliases, as well as the link address of the interface - usually set by 'ax25 mycall' – see further below.

Keeping the above in mind, here is an example (use the order listed) :

  ax25 mycall VE4KLM-1
  ax25 alias KLM
  ax25 bbscall VE4KLM

  attach <(all interfaces)>

See also 'ifconfig <iface> bbscall <bbs_call>'.  Note that the bbscall value is also used for the source address of ax.25 connections initiated from the console, provided that the ax25 ttycall is not set, or that JNOS was *not* compiled with TTYCALL_CONNECT #define'd.

  ifconfig <name> bbscall <bbscall>   sets only iface <name>

ax25 bc <iface>

The bc command  forces an immediate broadcast on the given interface.  The particular interface or port must have been enabled with the ax25 bcport command first. If this is so, the ID will be broadcast as set with the ax25 bctext commands. For example :

    ax25 bc vhf

ax25 bcinterval [<seconds>]

The bcinterval displays or sets the time in seconds between broadcasts. On display, both interval and countdown values are shown. Default=600 (10 minutes).

ax25 bcport [<iface> [on | off]]

Display or set the active interfaces for ax.25 broadcasting (i.e. beacons). If no interface is given, all interfaces with ax.25 beaconing enabled will be listed.  If interface is given, the status of beaconing for that interface is shown, or set according to the following on or off option.  Initial state is off. For example :

    ax25 bcport port1 on

ax25 bctext ["broadcast text"]

Display or set the default text to be sent for broadcast messages sent out every ax25 bcinterval seconds. To compose a multi-line message, use \r between the text of each line, ie, "line1\rline2". See also 'ifconfig <iface> bctext ["bctext"]. For example :

    ax25 bctext "This is the beacon text!"

ax25 blimit [<value>]

Display or set the default AX25 retransmission backoff limit. Default=30. Normally each successive AX25 retransmission is delayed by twice the value of the previous interval; this is called binary exponential backoff. When the 2^ (retrycount) reaches or exceeds the blimit <value>, the retry interval is no longer increased.

To prevent the possibility of "congestive collapse" on a loaded channel, blimit should be set at least as high as the number of stations sharing the channel.  Note that this is applicable only on actual AX25 connections; UI frames will never be retransmitted by the AX25 layer.  See also ax25 maxwait, and ax25 timertype. For example :

    #
    # Set ax25 blimit to 15
    #
    ax25 blimit 15

ax25 dest [<iface>]

Display the destinations saved in the heard list, for all interfaces with heard list maintenance enabled, or for the just the specified interface.  See also "ax25 heard" and "ax25 filter N".

ax25 digipeat [<iface> [on | off]]

Display or set digipeating per interface.   If no interface is given, all interfaces with digipeating enabled will be listed. If interface is given, the status of digipeating for that interface is shown, or set according to the following on or off option.  If cross-band or AXIP or AXUDP digipeating is to be allowed, digipeating must be enabled on both interfaces involved. Default=on.

For Example :

    #
    # Display digipeat status of port1
    #
    ax25 digipeat port1

ax25 filter N

Sets the ax.25 heard list filtering value. This is a global value that affects all ports with heard list maintenance set to ON. Default value is 0.

    0  =>  log both source and destination callsigns
    1  =>  do not log source callsign
    2  =>  do not log destination callsign
    3  =>  do not log any callsign, i.e., disable all heard list updates

ax25 flush

Clears the AX.25 "heard" list (see ax25 heard and ax25 hport)

ax25 heard [<iface>]

Display the AX.25 "heard" list. For each interface that is configured to use AX.25 heard listing (see 'ax25 hport'), a list of all ax25_source addresses heard on that interface is shown, along with a count of the number of packets heard from each  station and the time since each station was last heard. The maximum length of the heard table can be set with the 'ax25 hsize' command. If interface is given, only the heard list for that interface is displayed.

ax25 hearddest [<iface>]

This command is the same as "ax25 dest [<iface>]"

ax25 hport [<iface> [on | off]]

Display or set the status of the ax.25 heard feature.  If nointerface is given, all interfaces with ax.25 heard enabled will be listed.  If interface is given, the status of ax.25 heard for that interface is shown, or set according to the following on or off option.  Default is on.
ax25 hsize [<size>]

Set or display the size of the heard list table. Default is 0 (no limit).

ax25 irtt [<milliseconds>]

Display or set the initial value of smoothed round trip time to be used when a new AX25 connection is created.  The actual round trip time will be learned by measurement once the connection has been established. Default=5000, example :

ax25 kick < axcb | remote callsign >

Force a retransmission on the specified AX.25 control block. The control block address can be found with the ‘ax25 status’ command. This is useful to reactivate connections that have long time-out values.

The use of a remote callsign is only available in JNOS 2.0. Here you can specify a remote callsign INSTEAD of the axcb control block, which I think is a quicker way to kick a session, rather than first using ‘ax25 status’ to get the 8 digit hexadecimal identifier, then trying to remember it, and typing it in.

ax25 maxframe [<count>]

Establish the maximum number of frames that will be allowed to remain unacknowledged at one time on new AX.25 connections. This number cannot be greater than 7. Without <count> it will display the current setting. Note that the maximum outstanding frame count only works with virtual connections. UI frames are not affected. Also note that for optimal performance, a value of 1 should be used.  Default is 1 frame.

ax25 maxwait [<msec>]

Sets a limit (in msec) to the retry timeout values.  Default=30000 (30 secs).

A value of 0 disables maxwait.

ax25 mycall [<ax25call>]

Display or set the default local AX.25 address. The standard format is used, for example : VE4KLM or WG7J or KA7EHK-5. This command must be given before any attach commands using AX.25 mode are given.

ax25 paclen [<size>]

This sets the default paclen used when attaching interfaces that will carry AX.25 connections. See also 'ifconfig <iface> ax25 paclen'. Default is 256 bytes. This parameter limits the size of I-fields on new AX.25 connections.  If IP datagrams or fragments of datagrams larger than paclen are transmitted, they will be transparently fragmented at the AX.25 level, sent as a series of I frames, and reassembled back into a complete IP datagram or fragment at the other end of the link.  IP datagrams will not be affected if this parameter is greater than or equal to the MTU of the associated interface. If NET/ROM communication is configured, the NetRom MTU value should be Paclen - 20. !!!  

The Net/Rom header takes 20 bytes, and is part of the AX25 data.  Default netrom mtu is 236.  Note1: the AX.25 Level 2 Version 2 definition specifies a maximum paclen of 256 bytes. Some systems are not equipped to handle larger packets, for instance G8BPQ based systems - so be careful when using this parameter.

ax25 pthresh [<size>]

Display or set the poll threshold to be used for new AX.25 Version 2 connections.  The poll threshold controls retransmission behavior as follows. If the oldest unacknowledged I-frame size is less than the poll threshold, it will be sent with the poll (P) bit set if a time-out occurs. If the oldest unacked I-frame size is equal to or greater than the threshold, then a RR or RNR frame, as appropriate, with the poll bit set will be sent if a time-out occurs.

The idea behind the poll threshold is that the extra time needed to send a "small" I-frame instead of a supervisory frame when polling after a time-out is small, and since there's a good chance the I-frame will have to be sent anyway (i.e., if it were lost previously) then you might as well send it as the poll.  But if the I-frame is large, send a supervisory (RR/RNR) poll instead to determine first if retransmitting the oldest unacknowledged I-frame is necessary; the time-out might have been caused by a lost acknowledgment. This is obviously a tradeoff, so experiment with the poll threshold setting. The default is 128 bytes, one half the default value of <paclen>

ax25 reset < axcb | remote callsign >

Delete the AX.25 connection control block at the specified address. This deletes a connection and everything associated with it. The control block address can be found with the 'ax25 status' command.

The use of a remote callsign is only available in JNOS 2.0. Here you can specify a remote callsign INSTEAD of the axcb control block, which I think is a quicker way to kick a session, rather than first using ‘ax25 status’ to get the 8 digit hexadecimal identifier, then trying to remember it, and typing it in.

ax25 retries [<count>]

Limit the number of successive unsuccessful retransmission attempts on new AX.25 connections.  If this limit is exceeded, link re-establishment is attempted.  If the link can't be re-established in <count> times, then the connection is abandoned and all queued data is deleted.  Default is 5.

ax25 route [<subcommand>]

Without optional subcommands, display the AX.25 routing table that specifies the digipeaters to be used in reaching a given station.

ax25 route add <target> <iface> [[via] digis ...]

ax25 route perm <target> <iface> [[via] digis ...]

Add an entry to the AX.25 routing table.  The route added may be replaced automatically by a new one, unless "perm" is used instead of "add".  Replacement may occur when digipeaters are specified in an AX25 link from the node or a connection is received from a remote station via digipeaters.  Such automatic replacement is usually desirable; use "route add perm ..." to prevent this where necessary.

    <target> is the destination call to reach via digipeaters.

    <iface> is the interface to use for this route, i.e. JNOS allows
            different digi routes for different interfaces.

    [digis...] is a list of one or more digipeaters, separated by spaces and/or
               commas. The keyword "via" is optional.

For example :

    ax25 route add k7uyx-1 port1 wg7j wa7tas n7dva

    ax25 route perm k7uyx-1 port1 wg7j wa7tas n7dva

ax25 route drop <target> <iface>

Drop an entry for <target> from the AX.25 routing table. For example :

    ax25 route drop k7uyx-1 port1

ax25 route mode <target> <iface> [vc|dg|interface]

Sets the interface ip mode to one of vc or datagram or interface for target.

This indicates how ip links to the destination call <target> should be established.  If nothing is given for a certain destination or target, the interface default mode is used, which defaults to datagram.  (See also 'mode' command).
     
        vc  is a virtual circuit (ax25 connected mode, meaning that ip frames
            are sent using ax.25 connections)

  datagram  is unconnected mode, (AX25 UI frames).

  interface is the default interface mode, as set with the 'mode' command.

For example :

    ax25 route mode k7uyx-1 port1 vc

ax25 status [< axcb | remote callsign >]

Without an argument, display a one-line summary of each AX.25 control block.  If the address of a particular control block is specified, the contents of that control block is shown in more detail. Note that the send queue units are frames, while the receive queue units are bytes.

The use of a remote callsign is only available in JNOS 2.0. Here you can specify a remote callsign INSTEAD of the axcb control block, which I think is a quicker way to kick a session, rather than first using ‘ax25 status’ to get the 8 digit hexadecimal identifier, then trying to remember it, and typing it in.

ax25 t2 [<milliseconds>]                           Default: 1000

Display or set the AX.25 "resptime" timer. Value is in milliseconds. Default is 1000ms, and minimum is 0ms.  This timer lets JNOS eliminate some redundant transmissions and optimize what it sends by possibly adding ACKs to I-frames, by delaying the transmission of packets.  A value of zero disables the use of the t2 timer, as does the use of datagram mode (UI) [see mode command].

ax25 t3 [<milliseconds>]                           Default: 0

Display or set the AX.25 idle "keep alive" timer. Value is in milliseconds. Default is 0, i.e. no 'keep-alive' polling.

ax25 t4 [<seconds>]                                Default: 300

Display or set the AX.25 Link "redundancy" timer. Value is in seconds. When no exchange has been had during this time the link is reset and closed. Default = 300 seconds (5 minutes).

ax25 timertype [LINEAR|exponential|original]

Sets or displays the type of timer used for retransmission and recovery.  Linear means that each retry will use a time-out that is RTT greater then the previous time-out. I.e. 4 sec, 8 sec, 12 sec, 16 seconds etc.  Exponential means that each retry will use a time-out that is twice as large as the previous timeout. I.e. 4 seconds, 8 seconds, 16 seconds, 32 seconds etc. Original means that each retry will use a time out that is twice the RTT, i.e. 4 seconds, 8 seconds, 8 seconds, 8 seconds, etc. Default is linear.

ax25 timertype exponential

ax25 ttycall [ttycall]

Set or display the tty-link callsign for direct keyboard access. Remember to have both 'attended on' and 'mbox attend on' to be able to use this function.  The ttycall value is also used for the source address of ax.25 connections initiated from the console, provided that JNOS was compiled with TTYCALL_CONNECT #defined in the config.h header file.

ax25 version [n]

Display or set the version of the AX.25 protocol to attempt to use on new connections.  Version 1 is the version that does not use the poll/final bits.  Default is version 2.

ax25 window [<size>]                             Default: 512 bytes

Set the number of bytes that can be pending on an AX.25 receive queue  beyond which  I  frames will be answered with RNR(Receiver Not Ready) responses. This presently applies only to suspended interactive  AX.25  sessions,  since incoming  I-frames containing  network (IP, NET/ROM) packets are always processed immediately and are not placed on the receive queue.  However, when an AX.25 connection carries both interactive and network packet traffic, an RNR generated because of backlogged interactive traffic will also stop network packet traffic from being sent.

ax25 xdigi

An experimental feature only available in JNOS 2.0, not sure if you will find it useful or not, but the code will stay in place. To be honest with you, I am not sure what I was thinking when I did this, originally it was put in by request for some APRS users. To use this feature, '#define AX25_XDIGI' in config.h.

This feature lets JNOS take packets received on one interface and digipeat them to another interface IF the packet contains a specific digi call. The source, destination, and digi calls to trigger on are all customizeable. You can configure as many cross digi rules as you wish. This was originally thought of specific to APRS since a couple of people had asked for it, but then I thought - wait this is generic and can be used for all of the AX25 based stuff.

ax25 xdigi <src iface> <dst iface> <digicall> [subcall]

The subcall is optional. IF you specify it, then JNOS 2.0 will actually replace the digicall with the subcall when digipeating the packet out the destination interface. 

This section is not complete - more information required.

bbs

The 'bbs' command connects you to your own mailbox system. It is a shortcut to typing the command ‘telnet localhost’.

If JNOS was compiled with both MD5AUTHENTICATE and EXPEDITE_BBS_CMD #define’d, then it is possible to get logged into the mailbox automatically. You must add an entry to "net.rc" with the systems hostname, the desired userid, and the corresponding password. For example :

    n5knx.ampr.org n5knx passemoi

bulletin <subcommand>

The 'bulletin' command establishes how JNOS treats incoming bulletins based on their R: line headers.  These commands are available when JNOS was compiled with RLINE #define'd, and are highly recommended for BBS operations.  While many defaults are OFF for historical reasons, I think most BBS operators will want to turn these features ON!

bulletin check [on | OFF]

Displays or sets a flag indicating bulletin forwarding is to be optimized. If <ON>, an incoming bulletin's R: lines are scanned for BBSes to which we forward.  If any are found, the bulletin is marked as having already been forwarded to that BBS.  When invoked with no options, the list of BBSes to which we forward is also displayed. Note: only the first NUMFWDBBS (currently 8) BBSes in forward.bbs are checked in the R: lines, hence the most active BBSes should occur first in forward.bbs.

bulletin date [on | OFF]

Displays or sets whether the date associated with a message is the originate date (if ON), or the date received (if OFF).  The originate date is obtained from the last R: line, and should yield better operation of the bulletin expire mechanism.  See also 'bulletin holdold'.

bulletin holdold [#days]

Displays or sets the number of days since message origination, above which an incoming bulletin is placed into a hold state. A held bulletin is visible only to the sysop, and has a "X-BBS-Hold: Age" header added. This feature only works when 'bulletin date ON' is in effect.

bulletin loophold [<count>]                              Default: 2

Displays or sets a counter which, if exceeded by the number of times our call appears in a message's R: line headers, causes the message to be Held to avoid a message-forwarding loop.  A held message is visible only to the sysop, and has a "X-BBS-Hold: Loop" header added.

bulletin return [on | OFF]

Displays or sets how a message's return address is obtained. If ON, the return address is obtained from the last R: header line when available. If OFF, sender%forwarding.bbs@mycall is used. Note that for the mailbox SR (send-reply) command to work, the system's rewrite file must be capable of handling the '%' symbol. A recommended rewrite rule is: *%*@YOURCALL* $1@$2 r

callserver hostname [hostname>]

Sets the host address of the system to be querried by the "callbook" or mailbox "Q" command.  The specified server system responds at tcp port 1235.  <hostname> may be that of the local system if a server has been started with the "start" command.  See the  "readme.now" file for further information that pertains to QRZ, SAM, and Buckmaster cdrom databases.

cd [path]

Change the sysop's current working directory. If you do not specify the ‘path’ parameter, JNOS will simply display the current working directory, or Local Directory as it likes to call it.

close [session #]

Close a session (one of the 'F1 to F8' console screens). The session # can be from 1 to 8, and corresponds to sessions active in any of the 'F1 to F8' console screens. If you do not specify a session #, then JNOS will attempt to close the last session you were operating.

cls

Single command, no parameters. All it does is clear the console screen.

comm <asy_iface> <"text_string">

Sends "text_string", followed by a CR character, to the specified asynch interface.  Normally, this command is used to place a TNC into KISS mode when JNOS is started, but it may also be useful to send AT commands to attached phone modems.

Example 1:  Ensure kiss mode is on

     comm tnc "kiss on"
     comm tnc "restart"
     pause 4
     param tnc txdelay 10

Example 2:  have telephone modem answer on first ring

     param dialup up
     comm dialup "atz e0 s0=1"
     pause 2
     start tip dialup modem 360

connect <iface> <destination> [<digi1,digi2...digi3>];

Initiate an ax25 connection at interface <iface> to <destination>. Use the "ports" command when in the mailbox to discover the proper id of <iface>. <destination> may be either callsign-ssid or an alias. Note that there is only a 'space' between <destination> and the optional <digi list>. For example :

  c ax0 n5knx-2   -> connect to n5knx-2 on port ax0

convers <subcommands>

These commands configure the network conference server. 

convers channel [<default_chan_number>]           Default: 0

Displays or sets the default channel number, that is, the initial channel to which new users are assigned.

convers drop [<addr>]

Drop the remote convers link to <addr>.  See also 'convers link'. If <addr> is not given, all links are dropped.

convers filter                                    Default: refuse (nobody)

Set how the convers node will respond to connect requests.

convers filter mode [accept | refuse]

Sets or displays the filter mode.  'filter mode accept' allows links from only the hosts in the filter list.  'filter mode refuse' allows links from all hosts except those in the list.

convers filter [ipaddress | hostname]

Builds the filter list used in conjunction with the 'convers filter mode' command.

convers host <name>

Displays or set the convers hostname as will be used when announcing the system to conference users or remote links. Maximum length is 10 chars, but if you want to stay compatible with JNOS.EXE based convers servers use a maximum of 8 character for the convers host name (unless the system runs JNOS-v1.04 or later).

If the 'hostname' gets set and the 'convers host' isn't set yet, it will be set to the first 10 chars of the 'hostname'. After this, if any sub domains (i.e. periods) exist in the hostname, the convers hostname will be terminated at the right-most period.

For example, if 'converse host' is not set, and 'hostname jnos.wg7j.ampr.org' is given, then after this the converse hostname will be 'jnos.wg7j'.

convers interface [<iface>] [on|OFF]

Displays or sets the active convers interfaces. This command needs to be given for each interface that which will allow connections to the conference call (see 'convers mycall'); e.g., this command can be used to allow conference call access only on the user ports but not on the backbone/linking ports.  This can also be useful to avoid confusion when different nodes have the same conference call. (Locally, we use the call 'QSO' for the conference server for different nodes, and ran into problems when a user tried to connect to it from a backbone node. All of a sudden two nodes were answering the connect !)  Default is off.

convers link [<addr> [port] [name]]

convers xlink [<addr> [port] [name]]

If no <addr> is given, display the list of linked nodes with link status and statistics indicated.  If <addr> is given, add a convers link to another (remote) conference server.  The link is LZW-compressed if xlink, instead of link, is specified (and XCONVERS was #define'd in config.h at compile-time).

    <addr> is the ip address or hostname of the remote server to which to link.

    [port] is the tcp port number to use for the server connection, and defaults
           to 3600 if the ‘link’ command is used, and 3601 if ‘xlink’ is used.

    [name] is the optional name that will show up in the links listing shown
           with the '/links' command if the link has not been established yet,
           and can be a maximum of 10 characters – the first character must
           be a non-integer.

After the link has been established, the name will be set to the name with which the remote system introduced itself.

convers [u|h]maxq [<bytes>]

Display or set the upper limit for the number of bytes that can be queued up waiting for transmission on a connection to another server.  If there is more data than this limit, the connection to the other server will be closed.

You are able to set individual limits for users and hosts with 'convers hmaxq' and 'convers umaxq'.  If set to 0, there is no limit, otherwise connections will be reset if there is more than the []maxq value data outstanding on the connection.  The connections will be RESET instead of gracefully closed.

Default values are umaxq of 1024 and hmaxq of 5120.  Note that any changes will only affect new connections, not existing connections.

convers maxwait [<seconds>]                        Default: 10800

Display or set the upper limit for the time the system will wait to reestablish a disconnected convers link that originated at this system. Time is given in seconds.

convers motd ["<yourmessage>"]

Set or show the message of the day for the convers server.  This message is displayed when users connect to the server. NOTE: this option is obsolete in recent convers implementations. Instead, the contents of the file /spool/convmotd.txt are displayed. This filename can be changed by setting the ConvMotd string in nos.cfg.

convers mycall <mycall>

Display or set the 'conference call'.  <mycall> is a separate ax.25 callsign. If set, users can connect to it to get immediately connected to the conference bridge. However, each port or interface that this call should be allowed on should be enabled with the 'convers interface' command.  Conference call connections bypass the regular node interface.  This is independent from the settings of 'mbox convers' or whether the network conference server has been started. See also 'convers t4'.

convers mycall QSO

convers online [long | call | @host]

Display a list of convers users known to the convers server.  This is the same report as a /who listing made from within the convers facility.  The default report is a "quick" format listing of the connected users.  The "long" option specified a long-format report, which can be restricted to a particular "call" or "host". For example :

    conv on @luzana   -or-   conv on wu3v   -or-   conv on

convers setinfo [yes | no]

Display or the set the ability of conference users to change their personal info as stored in /finger/dbase.dat. This sub-command is only available when CNV_CHG_PERSONAL was #define'd when JNOS was compiled.

convers t4 [<seconds>]                             Default: 7200

Display or set the conference call connection T4 timer - t4 is the 'redundancy timer' for ax.25 connections to the conference server. This allows you to set a different inactivity time-out for ax25 node and conference connections. Default is 7200, i.e. 2 hours.

convers tdisc [<seconds>]                           Default: 0

Display or the set the conference call general redundancy timer that applies to all connections to the conference server. Connections which are idle longer than <seconds> will be disconnected.  Default is 0, i.e. disable idle timeouts.

converse - Files used by the convers facility

     Keyword          Default value                Usage
    ConvMotd      /spool/convmotd.txt       Connect greeting.
    Cinfo         /finger/dbase.dat         Convers user personal info
    Cinfobak      /finger/dbase.bak         Previous Cinfo file (after update)
    Channelfile   /spool/channel.dat        Channel number to name mapping
       --         /spool/help/convers.hlp   Help file (/help command)

    Cinfo line format:  <name|call> <personal data, i.e., QTH, etc.>

    Channelfile line format: <channel_number> <channel_name>

Converse users often wonder why the /help report is not complete. This is because the default compilation options for convers.c include "noblocking".  This results in JNOS dropping data destined for any output queue that exceeds certain length limits, and thus ensures that JNOS will not run low on buffer space due to the inability of a slow RF link to process the output queue fast enough.  The limits at which lossage occurs depends on how a user connects to JNOS: telnet users are limited by the tcp window size, ax.25 users are limited by the JNOS 'ax25 window' setting, and the local console is limited by the LOCSFLOW constant (2048).  The convers.c source could be edited to #undef noblocking, and recompiled in an attempt to rectify this limitation, but (worse?) instability might result!

copy

Copy a file under the current working directory to another file under the same current working directory. The syntax is straight forward.

    copy [from file] [to file]
  
You can also specify directory paths to the files, for example :

    copy [notes/example.txt] [help.txt]
    
which will copy the file '${CWD}/notes/example.txt' to '${CWD}/help.txt'.
 
disconnect

dir [path]

Display contents of a directory under the current working directory. If you do not specify the optional ‘path‘ parameter, then JNOS will simply display the contents of the current working directory.

delete <filename>

Deletes the specified file.  <filename> may include a complete path. Functions the same as the DOS Delete command.

detach <iface>

Detach a hardware interface from the system.

Warning :

I have seen this command crash JNOS on several occasions. I'm not sure if it's because the code for the particular interface has not been written properly or if it's a general problem with the interface management code itself. I can not see this command being used alot anyways.

dialer <interface> [<dialer_file> [<seconds> [<pings> [<hostid>]]]]

Set up an autodialer session for the interface.  Whenever the interface is idle for the interval in <seconds>, the autodialer will ping the <hostid> if specified, or send a link-layer echo request if possible and no ping target was given.  If there is no incoming data after <pings> attempts, the autodialer will execute the special commands contained in the <dialer_file>.

If no <dialer_file> is specified, a previous dialer command process will be removed.  If the number of <pings> is omitted, the <dialer_file> will be executed without first pinging the <host>.

The <dialer_file> may have any valid name, and is located in the JNOS root directory unless a full pathname is provided.  The dialer commands in the file are described below.

For example :

    dialer sl0 ns9tel.dia 30 10 ns9tel

<dialer file> commands

control down | up

Control the 'asy' interface.  The 'down' option drops DTR  (and RTS except in the Unix version).  The 'up' option asserts DTR (and RTS except in the Unix version). For example :

    control down

Actually, other options beside down and up are allowed, provided they are supported by the param command for the dialer's interface. For example :

    control dtr 1

send "<string>" [<milliseconds>]

This dialer command will write the specified string to the interface. The string quote marks are required, and the string may not contain embedded control characters.  However, the standard C string escape sequences are recognized (but \0 should not be used).  If <milliseconds> is specified, the <string> characters are sent with a <milliseconds> inter-character delay, useful for ancient Micom switches! For example :

    send "atdt555-1212"

speed [ 115200|57600|38400|19200|9600|4800|2400|1200|300 ]

This command sets the speed of the interface to one of the available speeds. If the speed argument is missing, the speed will be displayed in the dialer session window. For example :

    speed 1200

wait <milliseconds> [ "test_string"  [speed|ipaddress]]

If only the time is specified, the dialer pauses for the desired number of milliseconds.  Otherwise, the dialer reads until the <test_string> is detected on the interface.

If the string is not detected within the desired time, the autodialer will reset.  The string quote marks are required, and the string may not contain embedded control characters. However, the standard C string escape sequences are recognized (but \0 may not be used).

If the "speed" keyword is specified, the dialer will continue to read characters until a non-digit is detected.  The string read is converted to an integer, and used to set the interface speed.  If the trailing non-digit is not detected within the desired time, or the integer value is not a valid speed, the autodialer will reset.

If the "ipaddress" keyword is specified, the dialer will continue to read characters until a dotted-quad IP address is detected. The numeric address is used to set the interface IP address. If a trailing non-digit is not detected within the specified time, or the address is invalid, the autodialer will reset.  This option is only available when SLIP was #define'd at compile time, since PPP
protocol supports address negotiation. Examples follow below :

    wait 45000 "CONNECT " speed

    wait 5000 "Assigned IP address is" ipaddress

<dialer file> extended commands

failmode [ on | OFF ]

This command establishes whether the dialer should continue after a failed dialer command.  <off> implies abort the dialing script, while <on> means continue the script, which in effect enables the 'ifok' and 'iffail' commands.

begin

Starts a block of commands, and is typically used after an 'ifok' or 'iffail' command.

end

Terminates a block of commands, which extends to the previous unpaired 'begin'.

exit [<return_code>]

This command ends the dialer script, with the result code set to that of the previous dialer command unless <return_code> is specified.

status  [ up | down ]

This command is similar to the 'control' command, except that the iostatus() routine is notified.

ifok <cmd>

This command invokes the dialer command <cmd> if the previous command was successful.

iffail <cmd>

This command invokes the dialer command <cmd> if the previous command was not successful.

verbose [ ON | off ]

Set the verbosity level of the dialer, that is, whether the dialer echoes the script commands as they are read and displays output received during the wait command.  The "off" setting is recommended for those well-debugged scripts used with the ping/redial option.  The verbose setting is retained across dialer invocations.

<dialer file> example file

The following dialer script will perform these steps :

. drop DTR & RTS to force a hangup
. wait 2 seconds and then raise DTR & CTS
. set the port speed to 9600 baud and initialize the modem
. dial a number
. turn on continue-after-error mode
. wait for the modem to return a CONNECT message
. abort if a BUSY was received instead of CONNECT, or dial-out failed
. try three times to send a CR and obtain a Login: prompt
. send my login name, password, wait 5 seconds and then exit

#verbose off     [enable when well-debugged, to eliminate most output]
control down
wait 2000
control up
speed 9600
send "atz\ratm0l0e0\r"
wait 1000
send "atdt555-1212\r"
# Let's assume a BUSY will always be detected within 10s, and a connect
#ALWAYS  takes longer.  Also, if we invoked dialer with the ping options,
#this gives us an eventual busy redial.  -- n5knx
failmode on
wait 10000 "BUSY"
ifok exit 1
wait 60000 "CONNECT"
iffail exit
wait 2000
send "\r"
wait 5000 "ogin"
iffail begin
 send "\r"
 wait 5000 "ogin"
 iffail begin
  send "\r"
  wait 5000 "ogin"
  iffail begin
   control down
   exit 1
  end
 end
end
wait 1000
send "myname\r"
wait 5000 "assword"
  iffail begin
   control down
   exit 1
  end
wait 1000
send "mypassword\r"
wait 5000
exit

domain <subcommand>

The domain commands control and show the working of the name to Internet address mapping software (referred to as DNS: Domain Name Service). JNOS has both a DNS client and a server.  The server will answer queries from data in the domain cache, and from information stored in the DOMAIN.TXT file. The DNS server is only available when DOMAINSERVER is #define'd in config.h, but the DNS client
is always available.  

domain addserver <hostid> [<timeout>]

Add a domain name server to the list of name servers.

<timeout> is optional (in seconds) for the particular server. If <timeout> is not included in the command, the value defaults to 3 * (tcp_irtt). Servers are queried in the opposite order in which they were added. Some examples below :
 
    domain addserver wg7j.ece.orst.edu 30
    domain addserver 128.193.48.1
    domain addserver ucsd.edu

domain cache <subcommand>

Following commands work on the domain cache. These are resource records held in memory. (described in RFC1033/1034)

domain cache clean [<yes | NO>]

Displays or sets the discard of expired resource records. Expired records have their time-out value decremented to zero. Normally resource records get a default time-out value of 1800 seconds. After this time they are considered "old" and if referenced again the domain name resolver should be inquired again.

When clean is off (the default), expired records will be retained; if no replacement can be obtained from another domain name server, these records will continue to be used. When clean is on, expired records will be removed from the file whenever  any new record is added to the file.

domain cache dump

Immediately clears the domain cache.  This amounts to being a "flush".

domain cache list

This command shows the current content of the in-memory cache of resource records.

domain cache size [<size>]

Display or set the maximum size of the in-memory domain cache. Default is 5.

domain cache wait [<secs>]                        Default: 300

Display or set the number of seconds which must elapse before the domain.txt file is updated from the resource records stored in the domain cache. Updating is controlled by the 'domain update' command (see also).

domain dns [on|off]

Display or  toggle the state of the Domain Name Server. If on, the system is active as a Domain Name Server. The system will then answer queries from other tcp/ip hosts regarding hostname to ip-address, and ip-address to hostname translations. The dns subcommand is only available when DOMAINSERVER is #define'd when JNOS was compiled.

domain dropserver <hostid>

Remove a domain name server from the list of name servers. You are warned when you delete the last name server.

domain listservers

List the currently configured domain name servers, along with statistics  on how many  queries  and  replies  have been exchanged with each one, response times, etc.

domain look <search_text>

This command searches domain.txt and displays records matching <search_text>. The supposed <search_text> must match exactly, i.e., case is significant. This subcommand is available only if MORESESSION was #define'd when JNOS is compiled.

domain maxclients [<# of clients>]	Default is 6 clients

Command to limit loading while acting as a Domain Name Server.

domain maxwait [<time-out>]			Default is 60 seconds

This sets a time-out value (1 to 255 seconds) to a query or domain name server. This is not set for an already defined server but will be used for a newly defined name server.  Also the value is used for domain name lookups (E.g. when a user does a telnet to a host with the mailbox'T host' command).  Note that (PC based) name servers can have trouble finding records in a large database.

domain query [<hostid>]

Displays the results of a DNS query for <hostid>.   

domain retries [<retries>]			Default is 2

The retry value (number) limits the number of queries sent out to remote domain name resolvers before giving up and telling you that host xyzzy.ampr.org does not exist.  The total time lost with a query is (retries * time-out * number of domain servers defined); i.e., the delay between requesting a hostname to ip address translation and getting the answer can become very long if you use many servers, and set the time-outs / retries high !

domain subnet [ON | off]

This command works in conjunction with 'domain translate' to allow or disallow translation of any address ending in 0 or 255. On systems which have a lot of subnets, turning off subnet translation can result in a considerable speedup when displaying routes with 'domain translate on'.

domain suffix [<domain suffix> | none]	  Default is "ampr.org." WRONG !!!

Display or specify the default domain name suffix to be appended to a host name when it contains no periods.  For example, if the suffix is set to "ampr.org." and the user enters 'telnet ka9q', the domain resolver will attempt to find 'ka9q.ampr.org.' If the host name being sought contains one or more periods, however, the default suffix is NOT applied if the last part of the name is less than 5 characters and contains only letters; e.g., 'telnet foo.bar' would NOT be turned into 'foo.bar.ampr.org.', ‘telnet foo.ka9q' will be turned into 'foo.ka9q.ampr.org.' Note that a trailing dot (.) is required for the suffix.  If the suffix is the string 'none' (without trailing period), the current suffix
is cleared and forgotten.

For example :

    domain suffix ampr.org.

domain trace [on| OFF]

Display or set the flag controlling the tracing of domain server requests and responses.  This only works when console is enabled.  Default is off.

domain translate [on | OFF]

Display or set the flag that controls the translation of ip addresses in dot notation into symbolic names. The translation process makes heavy use of reverse domain name lookups. Do not set this flag unless you have a good and fast connection to a domain name server.

domain ttl [ttl]

Select default 'ttl' value to be applied to server responses than contain none.

domain update [on | off]

Controls whether or not domain.txt file is updated with server responses.

domain verbose [on | off]

Display or set the flag controlling the return of a full name (on) or only the first name (dot delimiter) (off).  This is for IP address to name translation only.  If off, home.wg7j.ampr.org. will show as 'home.wg7j', whereas if on it will show as 'home.wg7j.ampr.org'

dump <hexaddress | .> [range]

The dump command shows memory in hex and ascii. Hex-address is a 32-bit value split into page address and page offset. A splitting colon is not used nor accepted.  If decimal-range is not given , 128 bytes  are  displayed.  'dump .' displays memory starting at the end of a previous dump command.  This command is primarily useful for debugging.

For example :

  dump 12fe0008

echo [accept|refuse]		Default: accept

Display or set the flag controlling client Telnet's response to a remote WILL ECHO offer.

The Telnet presentation protocol specifies that in the absence of a negotiated agreement to the contrary, neither end echoes data received from the other.  In this mode, a Telnet client session echoes keyboard input locally and nothing is actually sent until a CR is typed.

Local line editing is also performed: backspace deletes the last character typed, while control-U deletes the entire line.

When communicating from keyboard to keyboard the standard local echo mode is used, so the setting of this parameter has no effect.  However, many timesharing systems (e.g. UNIX) prefer to do their own echoing of typed input. (This makes screen editors work right, among other things). Such systems send a Telnet WILL ECHO offer immediately upon receiving an incoming Telnet connection request.

If 'echo accept' is in effect, a client Telnet session will automatically return a DO ECHO response.  In this mode, local echoing and editing is turned off and each key stroke is sent immediately (subject to the Nagle tinygram algorithm in TCP).

While this mode is just fine across an Ethernet, it is clearly inefficient and painful across slow paths like packet radio channels.  Specifying 'echo refuse' causes an incoming WILL ECHO offer to be answered with a DONT ECHO; the client Telnet session remains in the local echo mode.  Sessions already in the remote echo mode are unaffected. (Note: Berkeley Unix has a bug in that it will still echo input even after the client has refused the WILL ECHO offer.  To get around this problem, enter the 'stty - echo' command to the shell once you have logged in).

edit [<filename>]

An ascii text editor is included the JNOS distribution. A clone of the UNIX "ed" editor, is invoked from the console with the path to the file to be edited.

For example :

    edit  c:/ftpusers

This option is enabled by compiling with EDITOR and ED #define'd.  

A full-screen console-only editor is available if JNOS is compiled with both EDITOR and TED #define'd.

eol [standard | null]			Default: standard

Display or set Telnet's end-of-line behavior when in remote echo mode.  In 'standard' mode, each key is sent as is.  In 'null' mode, a NUL character is sent immediately after sending a CR.

This command is not necessary with all UNIX systems; use it only when you find that a particular system requires two CRs to end a line.  In any case, the eol setting is only pertinent when in remote-echo mode, since otherwise a CR is translated to LF by JNOS' tty driver.

escape

See the ESCAPE command, found under the 'JNOS MAILBOX USER COMMANDS' section in Appendix A, towards the end of this manual.

errors [ON | off]

Set whether the system will send messages about system errors and permission infringements to user 'sysop'.  Default is on.

etelnet <host> [<port_number>] loginid password

The 'etelnet' command is similar to the telnet command (which see), but it accepts the login id and password to be provided to the <host> system. The etelnet command is available when JNOS was compiled with MD5AUTHENTICATE #define'd.  Etelnet will encrypt the password if the <host> system supports MD5 authentication (as indicated by a [hex_number] challenge value in its password prompt). If no such challenge is provided, the password is sent "in the clear".

If you are telnetting to a port/service that does not provide a password prompt, then 'telnet' should be used instead of 'etelnet'.

ettylink <host> [<port_number>] loginid password

The 'ettylink' command is similar to the ttylink command, but it accepts the login id and password to be provided to the <host> system should it request a login id and password.  The default port, 87, on a JNOS system does NOT request these, so using ettylink to this port/application is not recommended. The ettylink command is available when JNOS was compiled with MD5AUTHENTICATE #define'd. Ettylink will encrypt the password if the <host> system supports MD5 authentication (as indicated by a [hex_number] challenge value in its password prompt).  If no such challenge is provided, the password issent "in the clear".

exit [return_code]		Default: 0

Causes the JNOS program to terminate when at the JNOS> prompt. When shelled to DOS, causes a return to the JNOS> prompt. When terminating the program, an "Are you sure?" query is given. Enter "y(es) <cr>" to end the program.  Any other response returns to JNOS.

If a <return_code> numeric value is provided, this value is returned to the caller of JNOS.  This is typically a batch file, which may then take action depending on this code. For example:

    :rerun
    jnos110i  -u1 -g2
    if errorlevel 100       goto remote_exit
    if errorlevel 99        reboot
    if errorlevel 1         goto rerun
    goto exit
    :remote_exit
    :exit

In this example, issuing "exit 99" would run the reboot command, "exit 1" would restart JNOS, and "exit" or "exit 0" would exit the batch file that invoked JNOS.  The remote command (c.v.) when given the exit parameter, will use a return code of 100.

expire <subcommand>

The 'expire' command is used to invoke the process which deletes old BBS messages. The mailboxes or newsgroups to be expired, and the age (in days) after which a message may be deleted, are specified in the Expirefile (default is the /spool/expire.dat file).

expire [now | interval]

Begin the expire process immediately, if <now> is specified, or every <interval> hours in the future (but no immediate expire is done). If no arguments are provided, the current expire interval is displayed. For example, to run expire at 04:30 each morning, place these commands into your autoexec.nos file :

    at 0430 "expire 24"
    at 0431 "expire now"

Format of Expirefile

    #comment line
    mbox_name  number_of_days_to_retain_messages
    mbox_path  number_of_days_to_retain_messages
    !news.group.name  number_of_days_to_retain_articles

If the number of days is omitted, 21 is used. Also, if newsgroups are specified, the associated History file is expired as well, but the number of days used is the maximum of all the days provided for newsgroups in the Expirefile.

For example :

    allusa 7
    amsat 10
    !swap 10
    !rec.radio 7

See also the ‘oldbid’ command.

finger <username[@host]> [<username[@host]> ...]

Issue a network 'finger' request for <username> at <host>. Finger is typically used to find out specific information about users on local or remote hosts. By fingering a user, you can find out such information as a user's name, his mailing address, telephone number, QSL information, and other useful facts. This information is kept in a separate text file for each user.

As our network expands, this application will help hams find out information about each other quickly and efficiently.

The finger command under NOS can be issued in any of the following three ways:

       finger <username>           >> Examples: finger n8fow
       finger <username>@<host>                 finger n8fow@n8fow
       finger @<host>                           finger @n8fow

The first form of the command is used to find out information about a user at the local host, namely your own system.  It is useful for testing 'finger' on a system that you know is running.

The second form of the command is used to find out information about a user at a remote host.

If you don't know the name of a particular user at a remote host, you can use the third form of the command.  This command returns a list of all 'finger' files on the remote system.

To enable the finger server so that others may query the users on your system, you must give the 'start finger' command.  The finger files that provide information on a <username> are located by default in \finger (see Fdir and Fdbase in nos.cfg), and are ordinary ASCII files created by the sysop.  Also, if the SAM or QRZ callbook server is configured, <username> is looked up in the callbook and displayed if the search is successful.

Certain <username> strings are taken to mean that a JNOS function should be invoked to display system information, depending on what configuration options were used to build the server JNOS:

     <username>    config_opt      output_same_as

     conf         CONVERS          conference bridge /WHO
     links        CONVERS          conference bridge /LINKS
     mbxinfo      MAILBOX          'I cmd in mailbox'
     mhold        HOLD_LOCAL_MSGS  'mbox holdlocal'
     mstat        MAILBOX          'mbox mailstat'
     mpast        MAILBOX          'mbox past'
     users        MAILBOX          'mbox status'
     usersdat     USERLOG          'finger x' forall users in users.dat
     mailfor      MAILFOR          'mbox mailfor'
     info         ALLCMD           'info'
     ax25         AX25             'ax25 stat'
     aheard       AX25             'ax25 heard'
     netrom       NETROM           'netrom stat'
     iheard       all              'ip heard'
     memstat      all              'mem stat'
     socket       all              'socket'
     tcpview      all              'tcp view bytes'
     asystat      ASY              'asystat'
     pkstat       PACKET           'pkstat'
     rip          RIP              'rip stat'

fkey <key_number> [<value> | "<string>" ]

The 'fkey' command allows you to program the function keys and several other cursor control keys. Without any arguments, this command produces a listing of the currently defined function keys.

Control characters can be included in the string by prefixing with the ^ character (SHIFT 6 on most keyboards); e.g. <Enter> is entered as ^M. To insert a ^ in the string, enter ^^.

Note: If the first character of a function key definition is '~' then JNOS switches to the Command session and processes the rest of the definition (if any).

Examples:  fkey 87 "trace tnc0 211^M"  (SHIFT-F4 turns trace on)
           fkey 72 ""                  (disable up arrow)
           fkey 113 "~"                (Alt-F10 switches to Command session)

ftp <hostname> [<scriptfile>]

The ftp command is used to make a TCP connection with <hostname>, and then use File Transfer Protocol to exchange data between the systems. Once the connection is established, a small set of commands is used to manage the file exchange. A command is executed locally if it is a local client command.  Otherwise, the command is sent to <hostname> for execution.  If <scriptfile> is provided, all commands are obtained from the indicated file; otherwise, they are read from the console. The following are commands supported by JNOS clients and servers:

     ?          Display all available command names.

    ascii       Treat the data to be transferred as ASCII text, so that
                line endings are used suitable to the receiving system.

    batch [y|n] Query the state of the command batching flag, or set it
                if <y|n> is given.  Batching involves sending as many
                commands as possible before waiting for responses from
                <hostname>.

    binary      Treat the data to be transferred as binary data, that is,
                verbatim data not to be changed while storing on the
                receiving system.

    cd path     Change to directory <path> on system <hostname>.

    cdup        Change to immediately-superior directory on system <hostname>.

    dele file   Delete <file> on the remote system.

    dir spec    List the contents of the current directory on the remote
                system, in a verbose manner. If <spec> is given, the subset
                that matches this file specification is listed.

                     Example:  dir *.exe

    get file    Transfer <file> from remote system TO the local system.

    hash [y|n]  Query the state of the hashmark flag, or set it if <y|n>
                is given.  Hashmarks are written to the screen for each
                1000 bytes written to the local file system.

    help        Same as ?

    lcd path    Change to directory <path> on the local system.

    ldir spec   Same as the dir command, but applied to the local system.

    listSame    as dir command.

    lmkdir dir  Create directory <dir> on the local system. 

    ls spec     List just the names in the current directory on the remote
                system.  If <spec> is given, the subset that matches this
                file specification is listed. For example: ls *.exe

    mdtm file   Display the modified-time in GMT for <file> as yyyymmddhhmmss.

    mget spec   Transfer all files matching <spec> from the remote system TO
                the local system.

    mkdir dir   Create directory <dir> on the remote system.

    mput spec   Transfer all files matching <spec> to the remote system FROM
                the local system.

    nlst        Same as ls command.

    put file    Transfer <file> to the remote system FROM the local system.

    quit        Close the TCP connection to <hostname> and exit the ftp cmd.
                See also the JNOS "abort" command.

 reclzw [y|n]   Query the state of the ftp client LZW-supported flag, or set
                it if <y|n> is supplied.  LZW compression is only supported
                for ASCII-type transfers.

rename from to  Rename the file named <from> to the name <to> on the
                remote system.

    reget file  The RFC959-endorsed way to restart an interrupted get.
                No check is made to assure the file is consistent between
                systems; the size of the local <file> is provided to the remote
                system and a get is issued relative to this point.

  restart pos   The RFC959-endorsed way to restart a transfer is to first
                establish a starting offset position and then issue a transfer
                command to resume at that position.  The dir command would be
                useful to obtain the offset to specify in the restart command,
                and then a put <file> would cause <file> to be sent starting
                from the given position.

  resume file   Restart an interrupted transfer of <file> from the remote
                system to the local system.  Checks are made to assure the
                file is consistent between systems.  This is a JNOS extension
                to the FTP standard.  Other non-compatible equivalents exist
                in other implementations (c.f. wu-ftpd).

    rmdir dir   Delete (remove) directory <dir> on the remote system.

    rput file   Resume an interrupted transfer of <file> to the remote system
                FROM the local system.  Checks are made to assure the
                file is consistent between systems.  This is a JNOS extension
                to the FTP standard.  Other non-compatible equivalents exist
                in other implementations (c.f. wu-ftpd).

 sendlzw [y|n]  Query the state of the ftp server LZW-supported flag,
                or set it if <y|n> is supplied.  LZW compression is only
                supported for ASCII-type transfers.

  type [a|b|l]  Query the current transfer type value, or set it if <a|b|l>
                is given.  Use <ascii>, <binary> (or <image>). <logical 8>
                is also supported.

     view file  Transfer <file> from the remote system TO the local system's
                console screen.  The file is assumed to be an ASCII file!

   verbose [n]  Query verbosity of error handler, or set it if integer <n>
                is given.  0 => error msgs only, 1 => final msg only,
                2 => control msgs too, 3 => control msgs + hash marks,
                4 => control msgs + byte counts.

Since unrecognized commands are sent to the remote ftp server for evaluation, additional commands may be available, depending upon the ftp server implementation.  For example, the WU-FTPD may accept site-written extensions, and thus allow:  site exec <extended_cmd> <cmd_args>.

The remote ftp server will require a login name and password.  These values may be provided by a file called "net.rc" by default (see Hostfile in nos.cfg). The file has entries in this format:

        remote_hostname   login_name   password

but password may be omitted to instead have the client ftp prompt for it.

Many systems, including JNOS, will reduce the amount of extraneous messages sent, if the password is prepended with a '-'.  However, JNOS does not support this when an anonymous login occurs via an MD5 authentication exchange.

ftype

Set or display initial file transfer mode for JNOS ftp client sessions.

        ftype [mode]

If you do not specify the 2nd parameter, JNOS will simply display the current file transfer mode in affect for any JNOS ftp client sessions. The mode parameter can be any of the following values :

        Image (binary) files -> mode = i, I, b, or B
        Text (ascii) files -> mode = a or A
        Logical files -> mode = l or L

ftpclzw [on | off]

Set or display LZW compression enabled for JNOS ftp client sessions.

If you do not specify the 2nd parameter, JNOS displays current setting.

ftpslzw [on | off]

Set or display LZW compression enabled for JNOS ftp server.

If you do not specify the 2nd parameter, JNOS displays current setting.

ftpmaxservers [# of connections]

Set or display the maximum number of concurrent connections allowed to the JNOS ftp server.

If you do not specify a 2nd parameter, JNOS will simply display the current setting. Note - a value of 0 means there is NO LIMIT to the number of concurrent connections allowed to the JNOS ftp server ! The default value is actually 0, so watch out for this one.

ftptdisc [# of seconds]

Set or display the FTP redundancy timer value. If we have an incoming ftp session, and we do not receive any commands or data from it in a certain amount of time, JNOS will treat the session as inactive, and close it promptly.

If you do not specify a 2nd parameter, JNOS will simply display the current value (in seconds). The default value is actually 0, so watch out for this one.

gate <subcommand>

The gate command, available when JNOS is compiled with TCPGATE define'd, manages the tcpgate server, which accepts connects to certain tcp ports, and logically redirects them to another host and/or tcp port. Thus it is only one half of a proxy server!

When invoked without arguments, gate displays the current state of any active connections through the tcpgate code.  On the left is the originating address and port, on the right is the destination address and port, as determined by the 'start gate...' command, and in the center is the port that was used by tcpgate to trap the connection.

gate status

Displays the manner in which incoming connections are mapped to what outgoing ones.  It also displays the number of client connections allowed and the inactivity timeout.

gate maxcli

Determines how many clients may connect through the tcpgate at any one time.

gate tdisc <seconds>

Determines the inactivity timeout (in seconds) as measured by data SENT to the client.  A value of zero disables this feature.

start gate port hostname [port]

This is used to start up the tcpgate server on a particular port.  The server listens for connection on that port and accepts them.  It then makes a connection to the nominated hostname (with optionally a new port number - otherwise the same port number as is listened for is used).  The 'gate status' command may be used to determine what ports have already been configured.  This command generates a failure if that port number is already in use. 

help

The JNOS '?' command provides a list of all the top-level JNOS commands.

To obtain more help on a particular command, type 'help' and the command name, or type the command name followed by a question mark. For example :

    help mbox     displays the help file for the mbox command

    mbox ?        displays the subcommands for the mbox command

hfdd

The term 'hfdd' is an acronym for HF Digital Device. It's just a term that I came up with when I first started playing with pactor modems in the JNOS environment. An 'hfdd' interface is just an async interface for any hostmode pactor modem that I wrote (or tried to write) code for. The HFDD code is only available in JNOS 2.0, not in earlier versions of JNOS.

The hfdd command is used to control various aspects of the HFDD stuff.

hfdd server <iface> start

Start pactor service on the specified interface <iface>.

hfdd server <iface> kick

This command kicks (restarts) the service on the specified interface <iface>. If the particular pactor modem seems hung or the server is not talking to it, you can *try* to kick it using this command. Results will vary.

hfdd server <iface> unproto 

Send an FEC (unproto) broadcast out the specified interface <iface>.

For example, this will send out something like 'de ve4klm ve4klm ve4klm'.

hfdd server <iface> exit

Sometimes the server may get into situations where the TNC is in host mode, but it does not seem to be responding. This command is used to force the modem out of hostmode - rather, let JNOS know the TNC needs reinitialization.

hfdd debug

This command toggles the HFDD debugging code. Note, there is no 'on' or 'off' parameter to pass to the command. Each time you enter the command, it simply toggles the debug flag. If hfdd debugging is enabled, you will see alot more stuff sent to the /jnos/logs/ddmmmyyy file during hfdd activity. This was used more for development purposes, but it can come in handy at times, and it also shows that stuff is happening, whenever there is pactor operations or activities occuring.

history [<N>]				Default: 10

The history command displays the number and contents of previous commands retained in a circular list, or sets the depth <N> of the history list. These commands can be recalled by the UP-arrow and DOWN-arrow keys.  Press return to execute a recalled command, or backspace to erase from the right side. No further editing is currently supported. Setting the list size to 0 (zero) disables this feature.

hop <subcommand>

The 'hop' commands are used to test the connectivity of the network.

hop check [-n] <host>

Initiate a hop check session to the specified host.  This uses a series of UDP "probe" packets with increasing IP time-to-live (TTL) fields to determine the sequence of gateways in the path to the specified destination.  This function is patterned after the UNIX 'traceroute' facility.  If the -n option is used, no DNS lookups are done, so no names are listed for each hop. Note, ICMP message tracing should be turned off before this command is executed (see the 'icmp trace' command).

hop maxttl [<hops>]			Default: 30

Display or set the maximum TTL value to be used in hop check sessions.  This effectively bounds the radius of the search.

hop maxwait [<seconds>]		Default: 5

Display or set the maximum interval that a hop check session will wait for responses at each stage of the trace.

hop queries [<count>]			Default: 3

Display or set the number of UDP probes that will be sent at each stage of the trace.

hop trace [on | OFF]			Default: off

Display or set the flag that controls the display of additional information during a hop check session.

hostname [<name>]

Display or set the local host's name. By convention this should be the same as the host's primary domain name. This string is used only in the greeting messages of the various network servers; note that it does NOT set the system's IP address. For example:

    hostname ve4klm.ampr.org

If <hostname> is the same as an <interface> defined in an 'attach' command, this command will search for a CNAME domain resource record which corresponds to the IP address of the <interface>. This is commonly used for to set your hostname to
that of a dynamically assigned IP address dial-in line.

http <subcommand>

This command controls the operation of the JNOS HTTP (web) server.

http absinclude [on | OFF]

Set or show the value of the flag that determines if the html specification include file="path" is acceptable. If absinclude is off, the include command results in an error reported to the client. If on, the file at "path" is inserted into the html document being prepared for transmittal to the client.

http always [ON | off]

This displays or sets the always-send flag. If on, html files will always be sent regardless of their modification time. If you use SSIs in your html files, then the file modification time of the html file is not indicative of the content change, and setting always to ON may prove useful.

http dontlog [str1|str2|...|strn]

This displays or sets a list of strings which, if contained in a URL, will prevent detailed logging of that access.  This command is available when HTTP_EXTLOG was #define'd when JNOS was compiled. For example :

    http dontlog junkdir/|.gif|.jpg

http maxcli [<number>]				Default: 10

Display or set the maximum number of http client connections allowed. When this limit is reached, or if available memory drops below 'mem threshold', new connections are immediately refused. See also "http simult".

http multihomed [on | OFF]

Display or set the flag which allows the http server to report the name associated with the interface used to access it.  If off, the system hostname is used.

http simult [<number>]				Default: 5

Display or set the number of simultaneous active http client connections allowed.  When this limit is reached, new connections will immediately block until an older client connection terminates.  See also "http maxcli".

http status

Display information about the http server(s).

http tdisc [<#secs>]				Default: 180

Display or set the number of seconds of idle time allowed a client before it is disconnected for inactivity.

http – Notes

starting an http server

To start an http server:

    start http [port#] [drive] [rootdir]

The default http server port is 80, the default disk drive is C, and the default rootdir is /wwwroot.  This root directory MUST contain a file called "root.htm". If a client specifies an explicit path to a directory below this root, a reference to "welcome.htm" in that directory is assumed.  If welcome.htm does not exist, a directory listing is prepared and sent.  "welcome.nhd" can be used instead of "welcome.htm", to cause the file contents to be sent without headers.

This feature can be utilized to do unusual things like automatic redirection (probably not necessary anymore with today's intelligent browsers).  The JNOS default http root dir can be changed by defining a new value for HttpDir in nos.cfg (and starting JNOS with -f nos.cfg).

Linux note - the drive letter is required, but ignored ! Also, the correct filename ending is ".html", not ".htm".

         Client URL                     JNOS file fetched

    http://your.system.name/            <rootdir>/root.htm

    http://your.system.name/dir        <rootdir>/dir/welcome.htm (if exists)
                                       otherwise, listing of <rootdir>/dir
                                                contents

    http://your.system.name/X/file       <rootdir>/X/file

multiple http servers

Multiple http servers, each on a different port, may be started, up to a limit of 5 (established at compile time by MAXPORTS). The stardard port is 80, but a non-standard one can be given in a URL, such as "http://n3yco.ampr.org:99/".

http access rights

The JNOS /spool directory must contain a file called "access.www" which controls HTTP access rights.  Lines either specify a directory path at and below which access is denied, or specify a {path, realm, encoded_user:passwd} sequence to which access is permitted only if the encoding matches that provided by the client.

Important : This file MUST exist, even if empty, to allow any http accesses.

Note that access.www limits what can be specified on your system by a URL from an http client.  It does NOT limit access to included files specified in local html files (but see 'http absinclude'). Some examples below :

    #type1: path-relative-to-wwwroot   realm   encoded-"user:password"
    /pub/jnos/www/unzipped/secret SecretPlace Z3Vlc3Q6aGVsbG8=
    #type2: directory at or below which access is denied:
    /pub/jnos/private

To produce an encoding of a "userid:password" combination to be used in access.www, use the base64.exe utility (produced by 'make base64' in the JNOS source directory). For example :

    base64 userid:password > encoded.txt

Then edit the resulting file to yield a line for insertion into access.www.

http logging

If JNOS http was compiled with HTTP_EXTLOG #define'd, then by default the directory /wwwlogs will contain a record of accesses.  This file, created daily, will grow VERY large if your server is very busy! See http://mvmpc9.ciw.uni-karlsruhe.de for information on Karl-Heinz Weiss' cleanlog utility. The log directory can be changed by defining a new value for HLogsDir in nos.cfg (and starting JNOS with -f nos.cfg).

http counters

Counters are maintained in /wwwstats, but this directory can be changed by defining a new value for HttpStatsDir in nos.cfg (and yes, starting JNOS with -f nos.cfg).

Server Side Includes (SSI)

Server Side Include (SSI) support is patterned after those in the NCSA httpd.

An SSI has the form: <!--# cmdname tag="value" -->

       echo var="s"  displays the value associated with variable <s>:

                 DATE_LOCAL   - Current localtime
                 DATE_GMT     - Current time in GMT
                 HOSTNAME     - Server's hostname
                 DOCUMENT_URI - Resource Identifier of the current doc.
                 DOCUMENT_NAME- File name of the current doc.
                 LAST_MODIFIED- Modified date/time of the current doc.
                 TOTAL_HITS   - Total hits on this server.
                 REQ_FROM     - From: header of requestor (if available)
                 REQ_REFERER  - Referring URL (if given by browser)
                 REQ_AGENT    - Client browser's name (if given)

       echo dcount="filename"  displays the named counter.
       echo icount="filename"  increment and displays the named counter.
       echo scount="filename"  increment the named counter.

       include file="/absolute/path"  inserts the referenced file or dir,
                                      provided "http absinclude" is set on.

       include virtual="path"   inserts the referenced file or dir, where
                                "path" is relative to the http root dir.
                                "path" must end in '/' to be interpreted as
                                a directory.

       exec cgi="name?arglist"  executes the cgi "name" which must be compiled
                                into JNOS. Two CGIs are presently available:

                   counter.xbm (if CGI_XBM_COUNTER was #define'd) and
                   postlog (if CGI_POSTLOG was #define'd).

               counter.xbm produces an X-bitmap display of the counter name
               provided as the argument.  The counter is maintained in
               /wwwstats.  Additional arguments are "inv" for inverting the
               display colors, and "noinc" to not increment the counter before
               it is displayed.  Because this counter is returned as a bitmap
               it should be referenced as an image so a browser will handle it
               correctly:  <IMG src="/counter.xbm?tcount.dat+noinc">

               postlog demos the POST html command; see http.c for details.

               Note that a URL may specify a CGI as if it were a filename
               under the root directory. For example :

                       http://localhost/counter.xbm?cntrname.ext
icmp <subcommands>

These commands are used for the Internet Control Message Protocol service.

icmp echo [ON | off]

Display or set the flag controlling the asynchronous display of ICMP Echo Reply packets.  This flag must be on for pings to work. Default is on.

icmp quench [ON | off]

With 'icmp quench off', when a packet is received and memory available < threshold, the packet will be dropped (i.e., no quench or anything.)  The higher protocol layers will keep track of re-transmitting the dropped packets.

With 'icmp quench on', when packets are received and the high water mark for dynamically allocatable storage has been exceeded, JNOS submits an ICMP Source Quench to the originator.  Usually, before the originator will have reacted to the source quench, JNOS's dynamically allocatable storage will have been exhausted. What happens after that is uncertain, but it is assumed to be unfavorable.  Many tcp/ip implementations don't even respond to Source Quenches at all.  See also 'memory threshold command.' Default is ON.

icmp status

Display statistics  about  the  Internet  Control  Message Protocol  (ICMP), including the number of ICMP messages of each type sent or received.

icmp timeexceed [<ON | off>]

Allows 'time exceeded' message to be sent when the ttl of an ip packet to be routed becomes zero.  When turned OFF, no message is sent which allows the system to become invisible for 'traceroutes', etc.

icmp trace [ 0 |  1  |  2]

Display or set the flag controlling the display of ICMP error messages. These informational messages are generated by Internet routers in response to routing, protocol or congestion problems. This only functions when in console mode. The default is 0 (off). A trace value of 1 traces all icmp packets, while a value of 2 traces only icmp types known to JNOS.

ifconfig [<subcommands>]

If a valid subcommand is given, it will be executed (see below). When no subcommand is given, display a list of interfaces, with a short status for each. See the 'ifconfig <iface>' command for a description of the display.

ALL ax25 and MOST tcp parameters are now configurable per interface. The 'ax25 <cmd>' commands set the system default values and the 'ifconfig <iface> ax25 <command>' commands set or show the interface specific value(s). The 'tcp <cmd>' commands work in the same manner.

As a result of this change, 'ifconfig' NO LONGER takes multiple commands on one line.  'ifconfig ln0 netmask ffffff00 broadcast 255.255.255.255' is invalid. The command line must be separated into two commands as: 'ifconfig ln0 netmask ffffff00' and 'ifconfig ln0 broadcast 255.255.255.255'.

ifconfig <iface> [<subcommands>]

When only iface is given, the interface status is displayed, showing :

IP addr - the ip address assigned to this interface.

MTU - the maximum transmission unit for this interface.

Link encap - the type of link protocol to send packets with over this
             interface (AX.25, NETROM, etc).

Paclen - if the interface is an AX.25 interface, this is the packet length
         used for connections on this interface.

flags - interface flags, the sum of all the options set with the various
        commands. See below.

netmask - the ip network mask. See elsewhere for a discussion.

broadcast - the ip broadcast address on this interface. Used when doing
            arp, etc.

sent ip - the number of ip packets sent on the interface.

sent tot - the total number of packets sent (ip, ax.25, etc).

sent idle - the elapsed time this interface hasn't transmitted any data.

recv ip - the number of ip packets received on the interface.

recv tot - the total number of packets received (ip, ax.25, etc).

recv idle - the elapsed time this interface hasn't received any data.

descr - a description of the interface.

Interface flag values are the sums of the following options, and can be set or unset (i.e. toggled) with the following commands (See their individual descriptions for more)

command           value                   description of flag

mode iface        DATAGRAM_MODE    0      /* Send datagrams in raw link frames */
                  CONNECT_MODE     1      /* Send datagrams in connected mode */

netrom interface  IS_NR_IFACE      2      /* Activated for netrom use */
                  NR_VERBOSE       4      /* broadcast routes verbose */

convers interface IS_CONV_IFACE    8      /* Activated for conv call access */

ax25 bport        AX25_BEACON      16     /* Broadcast AX.25 beacons */

mbox hide         HIDE_PORT        64     /* Don't show port in mbox 'P' command */

ax25 digi         AX25_DIGI        128    /* Allow digipeating */

arp eaves         ARP_EAVESDROP    256    /* Listen to ARP replies */
arp poll          ARP_KEEPALIVE    512    /* Keep arp entries alive after time-out */

ax25 hport        LOG_AXHEARD      1024   /* Do ax.25 heard logging on this interface */

ip hport          LOG_IPHEARD      2048   /* Do IP heard logging on this interface */

mbox noax25       NO_AX25          4096   /* No ax25 mbox connections on this interface */

mbox bbsonly      BBS_ONLY         8192   /* BBSes only on this iface */
mbox usersonly    USERS_ONLY      16384   /* Users only on this iface */
mbox sysoponly    SYSOP_ONLY      32768   /* Sysops only on this iface */

ifconfig <iface> ax25 [<subcommand> [arguments]]

Sets the value for 'subcommand' per description in the ax25 commands.

Entering 'ifconfig <iface> ax25 ?' displays a list of accepted subcommands :

    bbscall  bctext  blimit  cdigi irtt

    maxframe  maxwait  paclen  pthresh

    retries  timertype  t2  t3  t4  version window

ifconfig <iface> broadcast <addr>

Set the ip broadcast address of interface <iface> to <addr>.

ifconfig <iface> ax25 cdigi <call>

Set the 'crossband digipeater only' callsign.  If this call is set, digipeating works independently from the 'ax25 digipeat' setting.  Connections cannot be made to the cdigi call. JNOS will search for another ax.25 interface with the same Cdigi call as that of the interface receiving the digipeated packet, and transmit the digipeated packet via that interface. For example:

    ifconfig 2m ax25 cdigi 2x70
    ifconfig 70cm ax25 cdigi 2x70

would allow someone to use digipeater call "2x70" to automatically transfer between the two interfaces.  Note in this example you would probably wish to use beacons to ID the interfaces periodically, since the transmissions don't contain your callsign.  This might argue for using a valid call-ssid as the cdigi value!

ifconfig <iface> description "descr"

This command sets the interface description to the string specified. If no descr is supplied (i.e. ""), the current description will be cleared.  The description is displayed with the mailboxP command (if the interface wasn't hidden from that display). It is also shown in the ifconfig command.

ifconfig <iface> encapsulation <mode>

Sets the encapsulation for interface iface to slip or ax25. This should never be needed, since it is automatically executed when interfaces are attached.

ifconfig <iface> forward <iface-2>

When a forward is defined, all output for interface <iface> is redirected to <iface-2>. To remove the forward, set <iface-2> to <iface>.

ifconfig <iface> ipaddress <addr>

Set the IP address to <addr> for this interface. Normally the ip address is assigned from the system ip address when the interface is first attached. However, it might be necessary to change it when a system acts as a ip-gateway.

ifconfig <iface> linkaddress <linkaddr>

Set the hardware dependent address for this interface.  For AX.25 this is the callsign.  If you want to allow cross band digipeating, give each port a different ax.25 call with this command.

ifconfig <iface> mtu <num>

Set the maximum transfer unit to <num> bytes.

ifconfig <iface> netmask <address>

Set the sub-net mask for this interface.  The <address> takes the form of  an IP address  with 1's in the network and subnet parts of the address, and 0's in the host part of the address. For example (for a class C network – 24 bits):

    ifconfig  ec0  netmask  0xffffff00

This is related to the 'broadcast' subcommand. See also the 'route' command.

ifconfig <iface> ax25 paclen <num>

Set the AX.25 paclen for this interface. This is useful if you want to use a value different from the default as set with the 'ax25 paclen' command; e.g., if you have a port with an HF link, you might want to set it to 128.  You can also set it to greater than 256 if you have a high speed port.  (This command only works for interfaces that can carry AX.25 connections, i.e., it is not for SLIP interfaces, etc.)

NOTE1:  The AX.25 V2 specification specifies a MAXIMUM of 256 for paclen. If you have a paclen > 256, you may run into problems when interfacing to other non-NOS systems (in particular G8BPQ based systems.)

NOTE2:  The value of paclen influences NETROM behavior if the interface is activated for netrom with the 'netrom interface' command!  If the paclen for this interface is smaller than any other (netrom active) paclen, the netrom mtu value will be set to this paclen - 20 !  This is to assure that you will not get fragmentation at the ax.25 level when trying to send large data packets over netrom connections.  AX.25 V2.1 fragmentation is presently handled only by NOS and derived code as far as is known.  Other systems, such as TheNet, BPQ, MSYS, etc., may not include proper handling of V2.1 fragmentation.

What the above means is, if you have a VHF port with paclen 256, and an Hf port with paclen 128, and BOTH are active with netrom, the netrom mtu will be 108 !

ifconfig <iface> rxecho <iface-2>

When a rxecho interface is defined, all input from interface <iface> is also copied (echoed) to <iface-2>.  To remove rxecho, set <iface-2> to "off". This feature requires that RXECHO be #define'd at compile time.

ifconfig <iface> tcp [<command>]

Sets or displays the 'tcp' command parameters for <iface>.

Entering 'ifconfig <iface> tcp ?' displays a list of accepted subcommands :

    blimit  irtt  maxwait  mss  retries

    syndata  timertype  window

OUTGOING tcp connections get the values for the interface on which the initial sync packet ('connect request') is routed out. INCOMING tcp connections get the values for the interface the initial request arrives on.

System default TCP parameters must be set PRIOR TO attaching interfaces. After attaching interfaces, use the 'ifconfig <iface> tcp' commands to set the interface.

index [<areaname>]

Causes the mailindex program to be run and re-establish the indexes for the mailbox.  'index *' indexes ALL mailbox files.

info

The 'info' command displays information about the NOS package.

ip <subcommands>

These commands are used to manipulate the Internet Protocol services.

ip access <permit|deny|delete> <proto> <sourceaddr[/bits]|all>

          <destaddr[/bits]|all> <iface>  [loport | all [hiport]]

Display or set ip access controls. The ip access command controls packet routing via the specified <iface> by determining which source ip addresses <sourceaddr> are routed to which destination ip addresses <destaddr>. If no ip access commands are issued for <iface>, the default behavior is to permit all sources to access all destinations. But once an IP access command is entered for <iface>, all routes via <iface> that are not specifically permitted by an ip access command, will be denied.

Execution of this subcommand will add or delete an access control entry in an internal table.  Incoming packets that would be routed via <iface> are compared with the table entries for <iface>, in the order that they were added, to determine if access will be granted (and routing take place).  Access will be granted only if an entry matching <destaddr> and <sourceaddr> is found with "permit" set before either a match with "deny" set is found, or the end of the table is reached.  The optional /bits suffix to the ipaddr specifies how many leading bits in the ipaddr are to be considered significant in the routing comparisons.  If not specified, 32 bits (i.e., full significance) is assumed.

All addresses can be specified by "all". Access can be made protocol dependent via the  <proto> parameter. <proto> may be 'a' for any, 't' for TCP, 'u' for UDP, 'i' for ICMP, or the IP protocol number. For UDP and TCP protocols, loport and hiport specify the port or range of TCP or UDP ports for which the access control command applies.  If none or all is specified, all ports are assumed.

Enter "ip access" to display the table of current access control entries.

Access commands should be entered from the most specific to the least specific, since the first match (permit or deny) encountered for a given interface in the internal table is definitive. For example:

    # allow a specific AMPRnet host access to the internet
    ip access permit any 44.76.1.199 all eth0
    # but deny all others except UDP (eg, DNS) access
    ip access permit udp 44/8 all eth0 all
    # permit only AMPRnet hosts access to RF port
    ip access permit any 44/8 44/8 2m

ip address [<addr>]

Display or set the default local IP  address. This command must be given before  an 'attach' command if it is to be used as the default IP address for the interface.

ip encap [4 | 94]

Display or set the packet ID code used for transmitted IP-IP encapsulated packets. As of 1 March 1995, the default pid is 4.

ip heard

Display the ip-heard list. This shows the recently heard tcp/ip systems and may be set on netrom interfaces.  This See also the 'ip hport' and 'ip flush' cmds.

ip flush

Clear the ip-heard list. See 'ip heard' and 'ip hport'.

ip hport [<iface> [ON | off]]

Display or set the ip-heard facility.  If no argument is given, show the interfaces on which ip-heard is currently active. If <iface> is given, shows the status of the ip-heard flag for the given interface. If <iface> <on|off> is given, it will set the flag on or off.   Default is on.

If this flag is on, ip heard frames will be logged in a table. This table can be shown with the 'ip heard' command or with the mailbox'IHeard' command.  Ip-heard logging on ax.25 interfaces logs all ip stations heard on the port, even if the system wasn't directly involved in the ip activity.  For non-ax.25 interfaces, only ip frames that we were actively involved in (i.e. that we routed) are logged (this difference is due to code internals).

ip hsize [n]				Default: 16

Display or  set the maximum size of  the Ip heard table. 0 means no limit.

ip rtimer [<seconds>]			Default: 30

Display or set the IP reassembly time-out.

ip status

Display Internet Protocol (IP) statistics, such as total packet counts and error counters of various types.

ip ttl [<hops>]

Display or set the default time-to-live value placed in each outgoing IP datagram.  This limits the number of switch hops the datagram will be allowed to take.  The idea is to bound the lifetime of the packet should it become caught in a routing loop. You should make the value slightly larger than the number of hops across the network you expect to transit packets.  The default is set at compilation time to 255, the official recommended value for the Internet.

kick [session #]

Kick a session (one of the 'F1 to F8' console screens).

The session # can be from 1 to 8, and corresponds to sessions active in any of the 'F1 to F8' console screens. If you do not specify a session #, then JNOS will attempt to kick the last session you were operating on.

lock [ password "<password_string"> ]

Lock the keyboard or define a password string. If 'password' is given then <password_string> is saved as the unlock string.

If no parameters are supplied, the keyboard becomes locked when a password was specified earlier. If the keyboard is locked, the password is requested. If a correct password is supplied, the keyboard becomes unlocked. The setting of the password and locking of the keyboard can only been done at the system console keyboard or in the /autoexec.nos startup file.  The password can not been displayed.

log [ON | off]

Turn on or off system logging. Log files are created daily and stored in the logs directory.

look [user | socket#] (/<cmd>)

This command allows peeking into a user session on the BBS or into any non-local socket. Entering 'look [user | socket#]' brings up a window which follows the specified user or socket. If looking in on a bbs user, you can initiate a ‘chat’ session with that user as well. There are a few commands available :

    /? or /h - will show a sort help line.

    /m <msg> - send a message to user (only if ‘looking’ at user).

               The user will see '<sysop>: message text'

          /c - initiate a ‘chat’ with user. The bbs will suspend while
               you talk with the user.

    /q or /b - if in ‘chat’ mode, this command finishes it and returns
               the user to the bbs. If in ‘look’ mode, this command will
               finish looking at the user/socket.

Note: if not in 'chat' mode, all non-command strings will be ignored. Looking at non-bbs sockets might be helpful debugging things or seeing what an ftp user or a smtp user is doing. Also note that often you won't see what you expect: e.g., ftp user sockets don't show the data transferred including directory listings because data transfer occurs on a separate socket (not seeing it is NOT a bug).

lzw

Lzw (Lempel-Ziv-Welch) is the data compression capability for some ASCII-mode sockets.  At present, LZW compression is supported by JNOS SMTP, FTP, NNTP and POP3.

lzw mode [ fast | compact]		Default: compact

Display or set the compression method used in data compression for specific sockets.

lzw bits [<number>]			Default: 9

Display or set the number of bits used for the compression size. The more bits defined the larger the table space needed.  Range is 9 to 16.

lzw trace [ on | off ]			Default: off

Display or set the lzw trace flag.  If set on, compression statistics will be displayed on the console when a compressed socket is closed.

lzwlink

Initiate an LZW compressed telnet session. Apparently it operates in split- screen mode by default, and was intended to access any convers server that supported LZW compressed tcp connections. To turn off split-screen mode, use 'session N split off' command.

mailmsg  <to_addr> ["<subject>"] "msg"

Mail a message to <to_addr> from <msguser>@<Hostname>. <msguser> can be set in the DOS environment (Set MSGUSER=<any_user_name>), and defaults to "sysop" if not set in the environment.  <subject> is optional, and must be quoted if it contains whitespace characters.  <msg> is either a string to be placed in the body of the message (quoted if it contains white-space characters) or the path to a file to be placed in the message body. A path must begin with forward or backward slashes, or a drive specification, otherwise it is taken to be a <msg> string.  This command is available if JNOS is compiled with MAILMSG #define'd.

Couple of examples :

     mailmsg n5knx "don't forget!"  "replenish the Cardhu"

     at 0400 "mailmsg jpd@usl.edu /stats.out+"

Note: the bm.exe program is often used to originate smtp messages in an automatic fashion, but requires that JNOS be shelled-out to run, and it is possible that memory may be insufficient to do this.  An alternative might be to use the mailbox "send" command, perhaps in conjunction with the upload command (to send a file), but this can't be easily automated. Hence the introduction of the mailmsg command.

mbox [<subcommands>]

Without a subcommand, display the current users of the mailbox. With a valid subcommand, it will execute any of several mail subcommands further below :

mbox alias [<alias>] ["cmd"]

Set or show alias commands for the mailbox.  To use an alias, the user must type the full alias which will then cause "cmd" to be executed.  If the user types 'A', a list of sysop defined aliases will be displayed.  'alias' is 6 characters maximum.  "cmd" is 64 characters maximum.  Note that "cmd" is in double quotes, and is interpreted as a mailbox command unless it begins with '@', in which case it is a console command.  Only console commands that don't spawn sessions, and that don't require special privileges, are allowed.

    'mbox alias' displays the current aliases.
    'mbox alias <alias>' displays only <alias> if it is defined.
    'mbox alias <alias> <cmd>' adds, deletes, or redefines <alias>

Some examples :

    To add a new BBS command - mbox alias bbs "c port bbscall"

    To delete an alias - mbox alias myalias ""

    To redefine an alias - mbox alias bbs "c newport newbbscall"

    To invoke the console pkstat command - mbox alias pkst "@pkstat"

See also "mbox showalias", further below.

mbox attend [ON | off]

This displays or sets the attend flag. If set, users can initiate chat with the sysop via the O)perator mailbox command. You need to have started the ttylink server for this !

mbox bbsonly [iface] [on | OFF]

Specify whether iface is only accessible to stations which have the BBS flag set.

mbox convers [ON | off]

Display or set the access to the conference bridge. The mailbox or mailbox 'CONV' command is disallowed when off. Default is ON.

mbox fbb [0 | 1 | 2]

Display or set the flag which enables FBB batched-style forwarding (1) or FBB compressed and batched forwarding (2), or standard WA7MBL-style forwarding (0). The setting is used to determine which forwarding capabilities we proposed to a another station.  The default value is determined by whether JNOS was compiled with FBBCMP and/or FBBFWD #define'd.  In any case, the forwarding method actually used is the intersection of capabilities of both stations involved in forwarding. Batched forwarding allows the forwarding direction to be reversed every 5 messages.  Compressed FBB forwarding requires a completely transparent connection and uses Lempel Ziv Huffman compression.

mbox fwdinfo [string]

Displays or sets the string that is used in the BBS R: header when forwarding mail to other BBSes.

mbox haddress [string]

Displays or sets your system's hierarchical bbs address.  As of version 1.08, you must include the bbs call with the hierarchical address. For example :

    mbox haddress wg7j.or.usa.na

mbox header [on | OFF]

Explicitly turns the R: line in the message header on or off. With mbox header off, regular users can forward from JNOS to another system designated as a full service bbs without leaving a trace to their system. This avoids having a downstream bbs improperly identify the originating station as a bbs.

The elements of the R: header are optional as of JNOS 1.07.

The line has this format (where undefined elements will be dropped) :

     R:yymmdd/hhmmz @:haddress [qth] fwdinfo #:mid $:bid Z:zip

NOTE : 'mbox header off' also turns off the mbox third-party flag.

mbox hideport [<iface>] [on | OFF]

Display or set a port that should not be displayed when the 'P' command in the mailboxis given.  Display is always available to users with sysop permissions. This command is usefor for ports that should be backbone linking only, etc. Note that currently users can still do ax.25 connections via that port, if they know the name. Default is OFF, the port is displayed.

mbox holdlocal [on | OFF]

Display or set the flag indicating if locally-originated messages, or messages arriving via an  SMTP-protocol connection are to held for sysop review before being forwarded or readable.  Only messages written to areas listed in /spool/holdlist are affected.  The sysop would typically use the LH and RH commands to review held messages and approve the removal of the hold status. 

This command is enabled only when HOLD_LOCAL_MSGS is ##define'd at compile-time.
 
If invoked to display the hold flag status, and the status is ON, then all areas listed in the Holdlist file that contain held messages, are displayed, along with the total number of held messages.

mbox ifilter [on | OFF]

Display or set the spurious I-frame filter flag, which when set will prevent unexpected I-frames sent to mycall from spawning a mailbox session.  The effect of setting this flag is to deny access to the mailbox unless our ax25 bbscall, ax25 ttycall, convers mycall, ax25 alias or netrom alias is used.  Mbox ifilter is necessary to send IP, Net/ROM, and segmentation frames over ROSE circuits.

mbox kick [<bbscall>]

This is an immediate command. It forces the system to start a new BBS forwarding cycle.  All BBSes in forward.bbs are examined unless <bbscall> is given, in which case only that entry in forward.bbs is  considered.  If <bbscall> is given in uppercase, a poll will be done; otherwise, a connect is attempted only when there is traffic to send.

Some examples :

    at 35 "mbox kick w5ddl+"          kicks just w5ddl at hh:35

    mbox kick K5ARH                   forces an immediate poll

mbox mailfor [interval]

mbox mailfor exclude [areaname areaname ...]

mbox mailfor watch [call_1 call_2 ...]

Interval is in seconds.  At the end of each interval, the system reads all non-area mailboxes and checks them for unread mail. Next, a beacon is sent on all active interfaces. (see 'mbox mport' command). The beacon is addressed to the AX.25 address 'MAIL'.  The data in this packet contains a list of the mailboxes with unread mail in the format 'Mail for: <user> ... '. Systems such as LAN-LINK can trigger mail-snatches from this beacon. If <interval> is the string "now" an immediate check is done.

Enter 'mbox mailfor' to show the status of the timer and list mailboxes with unread mail.

In certain cases you might not want a private area to show up in the mail beacon; e.g., private areas to be forwarded to another  bbs. You can exclude such areas from the beacon with the 'mbox mailfor exclude' command. For example:

    mbox mailfor exclude area1 area2 area3 ...'.

will disable these area names from the beacon.  You can give multiple exclude commands to build the list. A simple 'mbox mailfor exclude' shows the list.

Using 'mbox mailfor watch call ...' will watch for new mail arriving for the specified personal mailboxes, and add a blinking MAIL to the first status line if new mail exists.  To remove the MAIL from the status line, read the last message in the appropriate mailboxes, and force a run of the mailfor process by 'mbox mailfor now'.  The  sysop will typically want to watch his personal mailbox, and perhaps a "check" mailbox to which unusual mail is rewritten.

mbox mailstats

This command shows how many messages have been read and sent by users and how many messages have been received from and forwarded to BBSes.  Also shown is the current amount of "core" memory unused, and the number of logins, current user count, and number of different users seen since JNOS was booted.

mbox maxusers [N]				Default: 0

Display or set the number of simultaneous mailbox users permitted. A value of zero disables this feature.  A mailbox connection which would exceed the maximum permitted user count, is disconnected with the error message "Too many mailbox sessions".  Note that both incoming and outgoing connections, even forwarding sessions, are counted.

mbox mport [<iface>] [on | off]

Displays or sets the interfaces for 'MAIL' beacons.  Set this flag for each port you want the mail beacon to be sent on.

mbox newmail [ON | off]

When ON, users will be notified during login which areas have new mail since the last time that user logged out.  This function uses a time stamp on a status file for each message area.  The information shown can later be repeated with the 'AN' mailbox command.

mbox noax25 [iface] [on | OFF]

Specify whether iface is only accessible to stations connecting by other than the ax.25 protocol.  Connections to the converse call are not affected by this command.

mbox nobid [on | OFF]

Set whether to accept or refuse bulletins with NO BID. Off means refuse if there is no BID.  On means accept regardless of BID. Default is OFF (refuse)

mbox nrid [ON | off]

When set, the first time a user logs onto the system, the system will add the netrom node id in NODE:CALL format to the prompt. Users can then change it with the mailbox XN command. The system will use the new prompt format as set by the user the next time the user logs in.

mbox past [<N> | flush]

Displays the users that have logged on since the system has been running. If an integer <N> is provided, only the most-recent N users are displayed.  If "flush" is provided, the list of past users is cleared.

mbox password <newpassword>

This sets a new remote sysop password.  A remote sysop is a user whose entry in the ftpusers file has the SYSOP_CMD bit set.  When a remote sysop enters the '@' command to the JNOS mailbox, and there is a non-null mbox password established, five random numbers are displayed.  The remote sysop is expected to then transmit the letters corresponding to these numbers, taken as zero-relative positions in the password string.  Several lines of five letters can be sent, only  one of which need be correct.  The last line sent must be empty, i.e., just a CR.  If the response is correct, the remote sysop is then given the JNOS command-line prompt, and may issue most JNOS console commands. Commands which would require creation of a new session are disallowed. Use the "exit" command to exit from the JNOS command level.

mbox qth [location]

This displays or sets the location of your system, and uses it in the R: headers when doing bbs forwarding.

mbox register [ON | off]

Enable or disable user registration.  If the user gives an e-mail address during registration, messages sent will include a 'Reply-To:' header with that e-mail address.  Setting this command to OFF will prevent the 'please register' message from being sent to new users.

mbox reset [login_id_list]

Force a disconnect for the named user(s), or list the names of the users currently connected if no argument is provided.

mbox secure [on | OFF]

This displays or sets the mailbox secure flag. If set, only users coming on over netrom and ax25 connections can make gateway connects if they have the right privileges. If not set, anyone with the right privs can do a telnet connect, provided that their login name passes the valid-callsign tests within JNOS.

mbox sendquery [ON | off]

If on, users will be queried if they really want to send the message after they have typed the ^Z or /ex when sending a message. 'N' or 'n' will abort, anything else will send the message.

mbox showalias [on | OFF]

Set or display the flag which determines whether aliases (if defined) are listed in the mbox prompt.

mbox smtptoo [on | OFF]

This displays or sets the smtp header flag. If set, the system will include most smtp headers when forwarding the message via bbs forwarding. When not set, the headers will be stripped (default).

mbox status

Displays the current users of the system {NOS}.

mbox sysoponly [iface] [on | OFF]

Specify whether port is accessible only by stations with SYSOP flag set. Default is off.

mbox timer [<nnnn>]			Default = 0 (No forwarding)

Entering only the subcommand displays the forwarding setting and countdown timer value. [<nnnn>] sets the interval between forwarding attempts in seconds. When the timer matures, the forward.bbs file is scanned for entries that match the time constraints, and either have msgs to forward or have the poll flag set on their entry.  A process is started to initiate forwarding with each matching entry, all processes begin at once! Finer control of forwarding times can be obtained by keeping the timer at 0, and using the at command to issue repeated 'mbox kick' commands for the desired forwarding partners.

For example :

    at 05 "mbox kick k5arh+"

will try to forward to just k5arh at five minutes after each hour. 

mbox tdisc [<nnnn>]

This command sets the mailbox inactivity timer in seconds. If no user input has been received for nnnn seconds while connected to the mailbox, the user will be disconnected.  Default = 0 = no timeout.

mbox tmsg [<string>]

Display or set the 'telnet message'. This is the message sent to telnet connections before the login prompt is sent!

mbox trace [on | OFF]

This displays or sets the value of the trace flag. If set, the mailbox is verbose about certain aspects of the forwarding cycle.

mbox usersonly [iface] [on | OFF]

Specify whether iface is only accessible to stations which don't have the BBS flag set.

mbox zipcode [<nnnnn>]

Set or display the system's postal zipcode.  This is used in the R: line when forwarding.

memory <subcommands> (DOS only)

These commands are used for memory allocation.

memory freelist

Display the storage allocator free list. Each entry consists of a starting segment, in hex, and a size, in decimal bytes.

memory ibufsize [<size>]

Display or set the size of the buffers in the  interrupt buffer  pool. The size should  be  set to the largest type of buffer plus a header size of 8. For example: If your ax.25 is the only interface and a packet length of 512 is defined, the ibufsize  should  be 512 + 72 + 8 = 592 .  The 72 is the ax.25 header (source , destination, 8 digipeaters, 1 control byte and 1 pid byte).

Default is obtained from the value of IBUFSIZE in config.h.

memory minalloc [<bytes>]

Set the minimum number of bytes to allocate per malloc() call. Setting a small value (32 or 64) might allow the realloc scheme to work more effectively by preventing excessive memory fragmentation.  Default = 0, no minimum allocation size.

memory nibufs [<number>]

Display or set the number of interrupt buffer pool buffers. If the number of buffers is set, the statistics in the 'memory status' display are reset for number of interrupt buffer fails. The minimum available value is set to the requested  number  of  buffers.  A rule of thumb for the number of buffers is to watch  the statistics and keep a minimum of 2  free  buffers.  Increase or decrease as required. Default is 10.  See also the section on INTERFACE BUFFERS.

memory sizes

Display a histogram of storage allocator requested sizes.  Each histogram bin is a binary order of magnitude (i.e., a factor of 2).

memory status

Display a summary of storage allocator statistics.

    heap size 52560, avail 12880 (24%), morecores 150, coreleft 5872

The first line shows the total size of the internal heap, the amount of memory available on the internal heap with the percentage of the total heap size, next the number of times memory has been requested from the Operating System, and the amount of memory the OS has left over.

    allocs 16706, frees 16389 (diff 317), alloc fails 0, invalid frees 0

Next, the number of times memory has been allocated, and has been freed is shown.  The difference is the number of buffers currently allocated. Alloc fails show up when the system is running out of memory resources. Invalid frees mean that memory was overwritten, and indicates the system is about to lose sanity.

    garbage collections yellow 0, red 0

Garbage collections free memory from network control structures that could not have otherwise been freed.  Yellow garbage collections are started when the total available memory, i.e. avail+coreleft, becomes smaller then memthresh. Red garbage collections indicate that available memory got below memthresh / 2.

    interrupts-off calls to malloc 0, free 0

These should never be other then 0.  They indicate calls to the memory allocator with interrupts off.  These requests should be handled by the interrupt buffer pool.  If these values are non-zero, you most likely have a problem.

    Intqlen 9, Ibufsize 600, Iminfree 9, Ibuffail 0

This line shows the current number of interrupts buffers in the interrupts buffer pool, the size of each buffer, and the minimum number of free buffers. If this last number gets close to, or becomes zero, you should increase the buffer pool size with the 'memory nibuf' command. The statistics are reset when this command is executed.

memory threshold [<size>]

Displays or sets the memory threshold size in bytes. If free memory gets below this value, no more new connections can be started and no new connections will be accepted. In addition, incoming packets are dropped.  This is an attempt to preserve the system's sanity.

mkdir <directory>

Create a sub-directory in the current working directory.

mode <iface> [vc | datagram]

Control the default transmission mode on the specified AX.25 interface. In datagram mode, IP packets are encapsulated in AX.25 UI frames and transmitted without any other link level mechanisms, such as connections or acknowledgments.

In vc (virtual circuit) mode, IP packets are encapsulated in AX.25 I frames and are acknowledged at the link level according to the AX.25 protocol.  Link level (i.e. AX.25) connections are opened as necessary.

In both modes, ARP is used to map IP to AX.25 addresses.

Currently not implemented in JNOS - the defaults can be overridden with the type-of-service (TOS) bits in the IP header. Turning on the "reliability" bit causes I frames to be used, while turning on the "low delay" bit uses UI frames.  The effect of turning on both bits is undefined and subject to change.

In both modes, IP-level fragmentation is done if the datagram is larger than the interface MTU.  In Virtual Circuit mode, however, the resulting datagram (or fragments) is further fragmented at the AX.25 layer if it (or they) is still larger than the AX.25 <paclen> parameter.  In AX.25 fragmentation, datagrams are broken into several I frames and reassembled at the receiving end before being passed to IP.  This is preferable to IP fragmentation whenever possible because of decreased overhead (the IP header isn't repeated in each fragment) and increased robustness (a lost fragment is immediately retransmitted by the link layer).

more <filename> [<text> ...]

Display the specified file(s) a screen at a time.

To proceed to the next line, hit the CR key.

To proceed to the next screen, press the space bar. To proceed to the next console screen by first clearing the current screen, press TAB. This may be faster than the scrolling action used by the space-bar technique.

To cancel the display, hit the 'q' key.

If the text is given after the filename, each line in the file containing that text is displayed.

The 'more' command creates a session that you can suspend and resume just like any other session.

motd ["message"]

Display or set the current message of the day.  This message is shown to users logging in via telnet to port 87 (the ttylink service), or via connections to the system's ttycall alias (set by the 'ax25 ttycall' command).

netrom <subcommands>

These commands influence netrom behavior.

netrom acktime [<milliseconds>]

Displays or sets the ack delay timer, similarly to ax25 t2. Default is 8000ms (i.e. 8 seconds).

netrom alias <aliascall>

This sets the netrom alias call for this station. Other stations can connect to the ax25 callsign and to the NetRom alias (when set). The alias is broadcast with a NetRom broadcast.  If netrom is not activated, you can use the 'ax25 alias' command to set the alias callsign, such that users can still connect to the alias, even though netrom activities are not allowed.

netrom bcnodes <iface>

Initiates an immediate broadcast of nodelist on <iface>. Verbose behavior is controlled by the 'netrom interface' command.

netrom bcpoll <iface>

Initiates a poll sent to the named interface. This poll will request a netrom routes broadcast from other nodes, so that the routing table can be updated. This is automatically done any time an interface is activated (or changed) for netrom.  This should speed up route discovery at startup.

netrom call <call>

Displays or sets the call to be used by the netrom interface. Note: this is a shortcut for the 'ifconfig netrom linkaddress' command.  It defaults to the 'ax25 mycall' value.

netrom choke [<milliseconds>]

Display or set the time breaking a send choke. Choke is the term netrom  uses for flow control conditions. Default is 180000 ms (180 seconds.)

netrom connect <node>

Starts a new JNOS session and attempts to establish a netrom transport connection with <node>, which must be a known node call or alias.

netrom debug [ on | off ]

Only available in JNOS 2.0, not in earlier versions of JNOS.

This turns on or off additional debugging that I added to the netrom and experimental INP3 code.

netrom derate [ON|off]

Display or set automatic derating of netrom routes on link failure. Default on.

netrom g8bpq {on | OFF]

Display or set the G8BPQ-emulation behaviour.  If set, transport layer conreq frames carry two extra bytes to indicate round-trip time, and conack frames have one extra byte to contain TTL (hopcount).

netrom hidden [on|OFF]

Display or set the hidden node flag.  Nodes with aliases starting with the '#' character are displayed using the command 'N *'. Default is OFF.

netrom interface [<iface> <quality> [n]]

Activate <iface> as a netrom interface. <quality> can be between 1 and 255. Interfaces are activated using verbose routes  broadcasting by default, meaning that they broadcast all known routes. This can be changed by adding the optional 'n' parameter to the command. Then only the system itself will be announced in a broadcast, not the known routes.

If the paclen of the interface is smaller then the netrom mtu + 20, then the netrom mtu will be set to paclen-20 . This is to avoid fragmentation, causing incompatibilities with non-JNOS based NetRom nodes. See the 'ifconfig <iface> paclen' command for more.

If <iface> has already been activated as a netrom interface, re-issuing the command will set <quality> and [n] to the new values. 'netrom interface' will show the currently active netrom interface.

Each time an interface is activated or changed, a broadcast poll will be sent out on the interface.  This minimizes the route discovery time at startup, and will update routes when the interface quality has changed.

netrom irtt [<milliseconds>]

Display or set the initial round trip time.  Default is 45000ms (45 seconds).

netrom kick <nrcb>

Give the control block a kick to get activity going again.

netrom load

Retrieves the last set of netrom destination data saved with the 'netrom save' command.

netrom maxclients [<count>]

Displays or sets the maximum number of simultaneous outgoing netrom sessions that will be allowed.  The default is 10.  Reduce <count> if network congestion is a problem.

netrom minquality [<minqual>]

Display or set the minimum quality for recognizing a node entry. Entry's below this value are not considered valuable for usage. Default is 50. You are strongly urged to set this value much higher, so as to minimize the space needed to store the nodes list. A consequence of too many nodes listed is memory depletion, leading to lockups or reboots.

netrom neighbor

Display all known netrom neighbors.

netrom nodefilter <subcommands>

Manipulate node filtering.     

netrom nodefilter add <neighbor> <iface>

Add <neighbor> on port <iface> to the filter table. See the 'netrom nodefilter mode' command to determine the manner to handle node updates from <neighbor>.

netrom nodefilter mode [none|accept|reject]

Display or set the initial node filter scheme. 'none' accepts all netrom routes and is the default. 'accept' accepts routes only from nodes defined with the 'netrom nodefilter add' command. 'reject' does not accept routes from any nodes defined with 'netrom nodefilter add'.

netrom nodefilter drop <neighbor> <iface>

Delete the node <neighbor>  on interface <iface> from the filter table.

netrom nodetimer [<seconds>]

Display or set the interval to transmit the nodes list. If you want to use an interval other than the default, you must first attach the netrom interface with 'attach netrom' and then set the new nodetimer value. Default is 1800 seconds (half an hour).

netrom nrr <callsign of remote netrom node>

CHK - is this actually available at main console ???

This is a new command and is only available in JNOS 2.0, not earlier versions of JNOS. This can be thought of as a traceroute for netrom networks. If you want to view the round trip path to a specific node, you can use this command to display this information.

See the NRR command, found under the 'JNOS MAILBOX USER COMMANDS' section in Appendix A, towards the end of this manual.

netrom obsotimer [<seconds>]

Display or set the time a node obsolescence count gets decremented.  If you want to use other than the default, you must first attach the netrom interface with 'attach netrom' and then set the new obsotimer value.  Default is 1800 seconds.

netrom promiscuous [OFF|on]

Enables nodes with a path quality greater than defined with minquality.  If on, all nodes are received regardless of nodefilter mode.  Default is off.

netrom qlimit [<nnnn>]

Display or set the maximum queue limit for choke to occur. Similar to ax25 window.  Default is 512 bytes.

netrom reset <nrcb>

Remove the control block.  You can find the control block with the 'netrom status' or 'socket' commands.

netrom retries [<nn>]

Display or set the maximum number of retries on connect, disconnect or data.  Default is 3.

netrom route <subcommands>

NetRom routing commands. There are 3 types of routes shown in route displays :

    'P' - a permanent route set with the 'netrom route add' command.

    'B' - a route received through a nodes broadcast from a neighbor node.

    'R' - a recorded route from an incoming packet from a not previously
          known netrom node.

netrom route add <alias> <call> <iface> <quality> <neighbor>

Add a permanent netrom route. The new route is to netrom system <alias> with call <call>, and the route is on interface <iface> with quality <quality> via the neighbor <neighbor>. For example :

    netrom route add salem af7s-1 port1 178 k7uyx-1

Another example, a route to a direct neighbor looks like:

    netrom route add crv k7uyx-1 port1 192 k7uyx-1

netrom route drop <destination> <neighbor> <iface>

Delete the netrom route to callsign <destination> via the neighboring node <neighbor> on the interface <iface>.

netrom route info [<destination>]

Display the route a packet would take to get to <destination>. If <destination> is not given, information about all known netrom nodes is displayed.

Note - 'netrom route info' and 'netrom route info *' are equivalent commands.

netrom save

Saves (writes) the netrom node table to Netromfile (default is /netrom.sav) for later use by the 'netrom load' command.

netrom split <node>

Same as 'netrom connect <node>', except a split-screen is used so that keyboard input appears in its own window.

netrom status

Display all netrom connections.

netrom tdisc [secs]

Display or set the NetRom Link "redundancy" timer. Value is in seconds.  When no data exchange has happened during this time the link is reset and closed. Default is 900 seconds (15 minutes).

netrom timertype [exponential|LINEAR]

Displays or sets the type of backoff used on netrom retries. Default is linear.

netrom ttl [<hops>]

Display or set the maximum number of hops a frame might take before being discarded.  Default is 10.

netrom user <usercall>

Display or set the user call to be used by 'netrom connect'. The default call is the ax25 mycall.

netrom window [<frames>]

Display or set the size of the sliding window. This is the largest send and receive window we might negotiate.  Default is 2.

nntp – Network News Transfer Protocol

The 'nntp' commands control the operation of the Network News Transfer Protocol (NNTP).  The nntp features are defined at compile-time.  Two NNTP modules are available, "NNTP" which is an NNTP client only, that stores news in a mailbox-compatible form, and another, "NNTPS" which is both an NNTP client and server, that stores news articles in a form inaccessible to mailbox users.

We first describe the "NNTP" nntp client features :

nntp addserver <nntpserver_host> <interval> [<range>] [<groups>]

Add an NNTP news server to query every <interval> seconds for new articles in the specified <groups>, where <range> specifies the time-of-day limits when the queries will be made, in the form hh:mm-hh:mm where start time precedes end time. Multiple 'nntp addserver' commands may be used to concatenate groups - up to a maximum of 512 bytes.

    Example:  nntp add w5ddl.ampr.org 3600 18:00-06:00

nntp directory [ <News_spool_dir> [News_control_dir> ]

Display or set the spool directory for spooling news articles. Default is /spool/mail.  Optionally set a new control directory. The default control dir is /spool/news.

nntp directory old=new

Establish a newsgroup name mapping, so that a newsgroup name beginning with <old> is changed to one beginning with <new>, which may be a null string. To delete a mapping, use <old>==. The mapping scan continues until the list is exhausted, in the same order the nntp dir commands were specified.

For example :

    nntp dir  rec.radio.=
    nntp dir  amateur.=
    nntp dir  shortwave=swl
    nntp dir  equipment=eq

will map :

    rec.radio.amateur.policy to policy
    rec.radio.swap to swap
    rec.radio.shortwave to swl
    rec.radio.amateur.equipment to eq

nntp dropserver <nntpserver_host>

Drop the specified NNTP server from the list of servers to contact.

nntp firstpoll [<#days>]			Default: 5

Sets or shows the number of days of old news that is requested in the initial poll to a new server.

nntp groups <group> [<group> ...]		Default: All groups

Display or set the currently set USEnet newsgroup(s).  The group names are separated by spaces or commas.  The '*' and '!' metacharacters (meaning 'all' and 'not' respectively) are supported.

nntp kick <nntpserver_host>

Kick the local NNTP client to get in touch with the named server.

nntp listservers

List the currently defined servers.

nntp lzw <ON | off>

Turn on or off attempts to request LZW compression be used by the server when sending articles.

nntp maxcleints [<count>]

Displays or sets the maximum number of simultaneous NNTP client sessions that will be allowed. The default is 0, that is, no limit - except that imposed available memory.

nntp trace <level>			Default: 1

Sets or shows the current trace level for NNTP traffic.

    0:  No tracing.
    1:  Display serious errors only
    2:  Display serious and transient errors
    3:  Display serious and transient errors, plus session progress

    4:  Display serious and transient errors, session progress and actual
        received articles.

    5:  Display errors.

nntp quiet <yes | NO>			Default: no

Sets or shows the current arrival-notification setting for NNTP traffic. The notification will include a BEL character if "smtp quiet no" is in effect.

We now describe the "NNTPS" client/server commands. Remember that the 'start nntp' command must be used to allow the nntp server to accept connects from other nntp clients.

nntp active

Displays the active file, which shows configured newsgroups. See 'nntp create'.

nntp access [on | OFF]

Displays or sets whether access permissions are enforced. When enabled, the file /spool/news/access is scanned to determine the access permissions for a client host. Each line of this file has fields of the form ‘host:permissions:’, where

    host is explicit hostname (FQDN) or starname, eg, *.aara.org

and

    permissions are a string of chars: R => read, P => post, none=>deny access.

When access is turned on, hosts not mentioned are DENIED nntp access.

nntp add <nntpserver_host> <interval> [<range>] [<groups>]

Add an NNTP news server to query every <interval> seconds for new articles in the specified <groups>.  If no <groups> are specified, all groups found in /spool/news/active are checked. <range> specifies the time-of-day limits when the queries will be made, in the form hh:mm-hh:mm where start time precedes end time. Multiple 'nntp add' commands may be used to concatenate groups - up to a maximum of 512 bytes.

    Example:  nntp add news.usl.edu 3600 usl.test,rec.radio.swap

nntp create <news.group.name> [y|n]

Updates the /spool/news/active file, which must have an entry for each news group you wish to receive.  Choose y to permit posting to this group, or n to deny posting.  y is assumed if nothing is specified.  The /spool/news/pointer file is also updated with the path to the directory which will contain the articles. Articles will be stored as separate files, named by an integer corresponding to their arrival order.

nntp drop <nntpserver_host>

Drop the specified NNTP server from the list of servers to contact.

nntp dump <newsgroup> [<areaname>]

Dump all the news articles in <newsgroup> to the JNOS area called <areaname>. This would allow mailbox users to read news, but no provisions are made to dump just new articles.  If <areaname> is omitted, then <newsgroup> is used as the area name. Note, this command is unavailable if JNOS was compiled with NEWS_TO_MAIL #define'd (see note 4 below).

nntp firstpoll [<#days>]		Default: 5

Sets or shows the number of days of old news that is requested in the initial poll to a new server.

nntp ihave [<val>]			Default: 0

Set or display the IHAVE nntp-protocol behavior.

    0 => IHAVE disabled (default)
    1 => IHAVE reports only for newsgroups associated with serverhost
    2 => IHAVE reports for all newsgroups

The IHAVE protocol tells the server the message-ids of articles stored here, and is used to forward articles off this system.

nntp kick <nntpserver_host>

Kick the local NNTP client to get in touch with the named server.

nntp list

List the currently defined servers.

nntp lzw <ON | off>

Turn on or off attempts to request LZW compression be used by the server when sending articles.

nntp post

Posts to a local newsgroup.  A session is created, and the console user is queried for UserName (unless established by a prior 'nntp profile' command), Newsgroup, Subject, and message body.  While entering the msg, a line consisting of ".u" or ".r" will then prompt for a file name, which is inserted into the article being built. "/EX", "***END" or "." will end the article when found alone on a line.  When the message body is terminated, the prompt [Send, Abort, Exit, List] is displayed. Enter the first letter of the desired choice. Note that Exit quits the post subcommand, while Abort (or Send) allows you to post another article.

nntp profile {fullname|host|organization|reply|sig|user} string_value

Profile establishes values for the header fields of posts originating here.

Options include:

    sig  path_to_signature_file
    host FQDN    Defaults to our 'hostname'
    fullname "First Mi. Lastname"
    organ "organization name desired"
    user "user name"
    reply reply-to-address

nntp read <newsgroup> [<article_number>]

Reads the local <newsgroup>, beginning with the first unread article unless <article_number> is also provided. A session is created for displaying the articles. After each article, a prompt "Read next/previous ? (n/p/q)" allows the console user to easily progress through the articles.

nntp quiet [<val>]		Default: 0

Displays or sets the value if the quiet behavior flag. Nntp will display a message and/or beep when a new article arrives:

    0 => beep only (default)
    1 => beep and display msg
    2 => no msg or beep

Notes

1) See the 'expire' command for information on removing old articles.

2) The TO: addresses, when present, are stripped from article headers by the NNTP client.  This was done to prevent loops should the area be forwarded to another JNOS system, since the TO: address would cause the msg to be routed back to the mail-to-news daemon. If you want to forward an area, give the TO: address on the line in forward.bbs that lists the area.

For example :

    rec.radio.swl all@swl

3) The NNTPS software includes a mail-to-news feature, such that email with a To: address that begins with "!" is passed to the NNTPS module.  The remainder of the To: address is interpreted as a newsgroup name, with the name truncated at the first occurrence of one of "%@.,/", and with "!" translated to "." and "+" to ",". An alias is usually used to provide this special name. For example, to route all ALLUS bulletins to both the allus area, and the ampr.allus newsgroup, use the alias:

    allus    allus !ampr!allus

To do the above task, and also post to local.allus, use:

    allus allus !ampr!allus+local!allus

4) The NNTPS software includes a news-to-mail feature, such that news articles can be emailed to local or remote destinations after they are processed by nntp. This would allow, for example, emailing to a public area, so that BBS users too could read news articles. JNOS must be compiled with NNTPS and NEWS_TO_MAIL #define'd and a file /spool/news/gateway must exist to define the mapping from a newsgroup to an SMTP To: address. Each non-comment line in the gateway file must begin with a newsgroup name (starnames OK), followed by spaces or tabs, followed by the email To: address.

Some examples :

    # comment line
    rec.radio.swapsale
    rec.radio.shortwaveswl
    rec.radio.amateur.*  ham

nrstat

Displays the netrom serial interface statistics. This is only valid if the serial port was attached in NRS mode. See the 'attach' command for more.

oldbid

The 'oldbid' command is used to invoke the process which deletes old message id's (or bids) in the Historyfile. The default location of Historyfile is /spool/history. Do not confuse this file with the NNTP History database, stored in /spool/news/history by default !

oldbid [interval  age_in_days]

Begin the oldbid process every <interval> hours, and delete those bids which are older than <age_in_days> days. If no arguments are provided, the current oldbid interval and age are displayed. For example, to expire bids every 24 hours, that are 30 days old, use :

    oldbid 24 30

param <iface> [<param> [<value>]]

Param invokes a device-specific control routine.  A simple 'param <iface>' will give a list of available parameters and their current values, for the interface <iface>.  <param>  can be the literal name of the parameter, or it can be its numeric index (see below).  <value> is either a boolean value (such as ON or OFF) converted to 1 or 0, or an integer.

On a serial interface,  the param command sends control packets over the serial port.  For example, 'param port1 txdelay  255' will set the keyup timer (called txdelay) on the KISS TNC configured as port1 to 2.55 seconds (255 x .01 sec). In most TNC KISS implementations, a 10ms tick count is used, so that (for example) 30 means 300ms, and a limit of 255 is imposed on <value>.

The SCC driver, on the other hand, allows a limit of 65535 for <value>.

Currently supported <params> include:

Name (index)      Definition

TxDelay (1)       keyup delay before sending data
Persist (2)       the csma persistence (range 0-255) (probability of success
SlotTime (3)      the channel access slottime (how often we throw the dice)
TxTail (4)        time to keep transmitter keyed up after end of packet
FullDup (5)       simultaneous TX and RX enabled when ON
Hardware (6)
TxMute (7)
DTR (8)           Assert DTR when true, de-assert when false.
RTS (9)           Assert RTS when true, de-assert when false.
Speed (10)        async baud, etc.
EndDelay (11)
Group (12)        SCC iface group id and TX-interlock style
Idle (13)
Min (14)
MaxKey (15)       maximum time to allow transmitter to be keyed (0 - 65000)
Wait (16)

Pactor (17)       HFDD iface in pactor mode ? Only available in JNOS 2.0. This
                  flag was originally put in because the original HFDD code was
                  written to default to Clover mode, but when the PTC modems
                  started showing up, I wanted to be able to switch the HFDD
                  iface between Pactor and Clover on my Halcomm DXP38 modem.

Down (129)        De-assert RTS and DTR on serial port
Up (130)          Assert RTS and DTR on serial port
Blind (131)       Ignore CTS and DSR transitions on serial port
RcvMode (253)     set packet driver receive mode
Return2 (254)     TNC partially (!!) exits KISS mode
Return (255)      TNC exits KISS mode

Additional information for selected <params>:

The GROUP param specified an integer whose low-order 8 bits provide a transmit-group number (0 implies no group membership), and whose remaining bits provide flags describing that group's behavior:

    1 => only transmit when all receive channels in this group are clear.
    2 => don't transmit simultaneously on interfaces in this group.

pause <seconds>

Pauses for the specified number of seconds.  This command is commonly used in the autoexec.nos file when loading in large routing tables or to pause after various time critical commands.

ping <host> [<length> [<repeat_ms> [<incflag>]]]

Verify a host is alive, by sending it ICMP Echo Request packets.

    <host> is the address to ping.

    <length> is the number of bytes to use in the data portion of the packet
             being built. <length> defaults to a small value, sufficient to
             contain a timestamp to facilitate determining round-trip timing.

             Any additional data bytes will contain 0x55 characters ('U').

    <repeat_ms> specifies that instead of sending a single ping, a session
                is to be established to do repeated pings every <repeat_ms>
                MILLISECONDS. A running display of attempts, round-trip times,
                And mean deviation of round-trip times is maintained in this
                session. To terminate the session, press F10 and then use
                the reset command.

    <incflag> indicates that the host IP address is to be incremented by one
              at each ping attempt. It is intended to help search blocks of IP
              addresses for active hosts. It should be used sparingly if at all.

popmail <subcommands>

Set of commands to control how JNOS can grab mail from external POP3 servers. In other words JNOS can act as a popmail client.

popmail addserver <host> [<seconds>] [hh:mm-hh:mm] <protocol>
           <mailbox> <username> <password>

Add <host> as a pop server. When seconds is given, a timer is started to query the host with that interval for mail. If not specified no quering to the pop host will be started. You have to do that manually with a kick. When hh:mm is given then only in that exact time frame are queries to the host made (allowed). 

Protocol is either POP2 or POP3, depending on the mail service the host is providing.

A JNOS POP server host need only 'start' the pop2 or pop3 daemon, and configure the popusers file, to make his/her system accessible to pop clients.    

Note that POP2 is superseded by POP3. If MD5AUTHENTICATE is #define'd JNOS pop3 supports the apop technique, which avoids, were possible, sending a plain-text password. <mailbox> is the mailbox name on the host where mail has to be picked up, <username> and <password> are this system's validation parameters for the host. On entering this command the host name is looked up. If nonexistent, an error message is displayed.

popmail dropserver <host>

Drops host from the list of pop servers to be queried.  All references to the entry are deleted from the current system.

popmail kick <host>

Starts a pop session with host to retrieve mail.  This command is needed  when no interval is specified with the popmail addserver command.

popmail list

Lists the current popmail server table.

popmail lzw  [on|off]

Enables, disables lzw compression for popmail.

popmail quiet <yes|no>

Displays or sets the notification of new mail arriving via pop.

popmail trace <level>

Displays or sets the trace level of pop sessions. Current trace levels are:

    0 - No tracing
    1 - Serious errors reported
    2 - Transient errors reported
    3 - session progress reported

Note that tracing only goes to the log file.

popmail t4 [<#seconds>]			Default: 0

Displays or sets the pop client's idle timeout value (in seconds). Zero means no timeout, otherwise the value should be at least300 seconds.  This command is only available when POPT4 was #define'd when JNOS was compiled.

prompt [on | OFF]

The 'prompt' command sets or displays the value of the MSDOS-Style prompt switch.  If set ON, and status lines are not enabled, the current directory is printed as the first part of the console command prompt.

ps

Display process status information. The first line shows the time the system has been running, the active stack segment, the interrupt stack usage, and the JNOS psp segment. Note that the DOS JNOS code is loaded at segment address psp + 0x10. Next, ps displays all processes in the system, fields are as follows :

     PID - Process ID (the segment of the process descriptor).

     SP - The current value of this process' stack pointer.

     maxstk - The size of the stack allocated to this process.

     stksize - The apparent peak stack utilization of this process. This is done
               in a somewhat heuristic  fashion, so numbers should be treated as
               approximate. If this number is close to the maxstk figure, the
               system is likely to crash. Please notify the author if you find
               such a situation. The program should be recompiled to give the
               process a larger allocation when it is started.

     event - The event this process is waiting for, if it is not runnable. This
             is actually a pointer value.

     fl - Process status flags, there are three of them :

          I (Interrupts enabled)
          W (Waiting  for event)
          S (suspended).

The I flag is set whenever a task has executed a pwait() call (wait for event) without first disabling hardware interrupts.  Only tasks that wait for hardware interrupt events will turn off this flag; this is done to avoid critical sections and missed  interrupts. The  W flag  indicates  that  the  process is waiting for an event; the 'event' column will be non-blank. Note that although there may be several runnable processes at  any  time  (shown  in the 'ps' listing as those without the W flag and with blank event fields) only one process is actually running at any  one  instant (The  Refrigerator Light Effect  says that the 'ps' command is always the one running when this display is generated.)

pwd [<directory>]

An alias for the 'cd' command.

rarp query <interface> <ether_address|callsign> [<ether_address|callsign> ...]

The 'rarp' commands are associated with the Reverse Address Resolution Protocol (RARP). RARP is used where a station knows its own Ethernet address or callsign but does not know its own IP address. To display RARP statistics, just enter the command ‘rarp’ by itself. With paramenters, this command issues a RARP request for an IP address for <ether_address> or <callsign>, via <interface>.

rdate <subcommand>

Remote Date (rdate) is used to set the time of the local JNOS system based on the time obtained from a remote system's time server. The Unix time (port 37) protocol is used.

rdate offset [<+|-><hour_offset>]

Causes the time read from the remote system to be adjusted by adding in the indicated <hour_offset>, which may be negative. If no <hour_offset> is provided, the current offset is displayed. Note: the time server provides the time in UTC. If an environment variable, TZ, is properly maintained, then an offset of zero should suffice.  Otherwise, use the number of hours difference between local and UTC time. This offset command IS OBSOLETE and is no longer compiled into JNOS after release 1.10M.

rdate server <hostname>

Causes a connect to <hostname> TCP port 37, from which a time is obtained, adjusted by an offset if one was given, and then used to set the time on the local system.

record [off | <filename>]

Opens <filename> and appends to it all data received or sent in the current session. (This includes up/downloading to a mailbox). For example, if you are in a Telnet session and want to initiate recording, you will need to use the <F10> key to escape back to command mode to issue the 'record' command. The message "Recording into <filename>" will be displayed and another "JNOS>" prompt will be issued. Enter CR on a blank line and you will return to the Telnet session with recording activated. The command 'record off' stops recording and closes the file; this is done automatically when the associated session is closed.

remark

Writes its arguments to the current output stream. Similar to the MS-DOS 'echo' command. For example :

    remark  "do:  source \dial_usl.nos...to dial USL and start PPP."

writes the quoted string to the current output stream.

remote [-s <syskey>] [-g <gwkey>]

remote [-p <port>] [-k <key>] [-a <kickaddr>] <host> kick | exit | reset

remote [-p <port>] [-k <key>] [-r addr/#bits] <host> add | drop | udpadd;

The 'add' command is used for IPIP routes. IF you want to setup a route to use the IPUDP (K2MF) protocol instead, then use 'udpadd' instead of 'add'. The 'udpadd' is only available in JNOS 2.0, not earlier versions of JNOS.

The remote command can be invoked three ways.  First, to set a key phrase used by the remote server process to validate commands sent to it.  Second, to send a UDP packet to a specified host commanding it to exit JNOS, reset the processor, or force a retransmission on TCP connections.  Third, to send a UDP packet to a specified host commanding it to either add or drop an encapped route to a specified host or subnet via the sending system's IP address, that is, register ourselves as a gateway for a specified host or subnet for a finite period.

For the second and third forms of the remote command to be accepted, the remote system must be running the remote server. Also, the port number specified in the remote command must match the port number given when the server was started on the remote system.  Further, if the remote system established a key phrase, then that phrase must also be provided via the -k option, so the remote system can check that it matches.

If the port numbers or keywords do not match, or if the remote server is not running on the target system, the command packet is ignored.

important - even if the command is accepted there is no acknowledgement !

The 'kick' subcommand forces a retransmission timeout on all TCP connections that the remote node may have with the local node. If the '-a' option is used, connections to the specified host are kicked instead.  No key is required when using the 'kick' subcommand.

The 'exit' and 'reset' subcommands are mainly useful for restarting JNOS on a remote unattended system after the configuration file has been updated. The remote system should invoke JNOS automatically upon booting, preferably in an infinite loop.

The add or drop subcommands allow a JNOS system with a dynamically-assigned IP address, to register as a gateway with a cooperating system having a known IP address.  The duration of the route thus established is controlled by the remote system, typically 15 minutes.  Since UDP packets are not guaranteed to be delivered, it might be wise to send remote commands more frequently than the timeout. See the at command, well suited to this purpose.

remote -s [<key>]

The 'exit' and 'reset' subcommands of 'remote' require a password.  The password is set on a given system with the '-s' option, and it is specified in a command to a remote system with the '-k' option. If no password is set with the '-s' option, then the 'exit' and 'reset' subcommands are disabled.

remote -g [<gwkey>]

The 'add' and 'drop' subcommands of remote may require a password.  The password is set on a given system with the '-g' option, and it is specified in a command to a remote system with the '-k' option.

Note that 'remote' is an experimental feature in JNOS; it is not yet supported by any other non-KA9Q-derived TCP/IP implementations, although a version of the remote command for BSD Unix exists.  

rename <oldfilename> <newfilename>

Renames <oldfilename> to <newfilename>. This performs the same function as the DOS rename command.

repeat [milliseconds] command

Starts a new session screen with the output of the command updated every interval in milliseconds. If you hit F10 it ends the session. For example :

    repeat 1000 tcp status

repeats every second 'tcp status' command

reset [session #]

Reset a session (one of the 'F1 to F8' console screens).

The session # can be from 1 to 8, and corresponds to sessions active in any of the 'F1 to F8' console screens. If you do not specify a session #, then JNOS will attempt to reset the last session you were operating. This command is more or less the same as 'close', but takes the extra step of 'unwedging' sessions that are stuck on domain resolution.

rewrite <address>

Will show the result of the mail rewrite process, that is, how <address> is changed based on contents of Rewritefile (default location is /spool/rewrite).  The result of rewriting determines whether an incoming message is stored in an area (and, which area receives the message), or whether it is stored into /spool/mqueue for handling by SMTP. The rewrite command is useful for testing modifications to Rewritefile. For example :

    rewrite n8fow@n8fow.ampr.org

shows rewrite that would be done for mail addressed to n8fow@n8fow.ampr.org.

rewrite – The infamous ‘rewrite file’ itself !

The rewrite file is used to perform a one-to-one mapping between a message's destination (To:) addresses as received by JNOS, and the destination addresses as actually used by JNOS. Each record within the rewrite file comprises a single line, containing either two or three fields separated by spaces. The first field is the template field; if a destination address matches the template, it is replaced by the second field after variable substitution.  The rewrite process terminates after the first template match, with JNOS using the resultant value as the new destination address, unless there is an optional third field which contains the single letter "r".  In this case, JNOS rescans the rewrite file from the beginning, attempting to match the new destination address with one of the templates. If no template matches the destination, it is used unchanged as the result.

If the address resulting from rewrite contains an "@" it is sent via smtp. Otherwise it should be the name of an area. There is one special case: "refuse" as the destination causes the message to be rejected.

A template contains a combination of verbatim ascii text, and special characters "?*+\". To treat a special character as an ordinary character, precede it by '\'. The '?' character matches any single character, '*' matches any number of consecutive characters (including zero), and '+' matches a sequence of one or more characters. In the second field, the character "$", followed by a single digit in the range 1 to 9, represents the string that matched the respective '*' or '+' in the template. For example :

    tcpip@* tcp
    *@tcpip tcp

rewrites all addresses beginning or ending with "tcpip" to the tcp area.

The two-character sequence, $H, in the second field is replaced by the hostname of the system, as set by the hostname command.

A SAMPLE REWRITE FILE can be found in APPENDIX F at the end of this manual.

rip <subcommand>

The commands given here are used for RIP. After this list of commands is the list for RIP-2. The RIP-2 implementation includes compatibility with RIP-1. The sets of commands are separated here to improve clarity.

rip accept <gateway>

Remove the specified gateway from  the  RIP  filter  table, allowing  future broadcasts from that gateway to be accepted.

rip add <hostid> <seconds> <flags>

Add an entry to the RIP broadcast table. The IP routing table will be sent to <hostid> every interval of seconds. If <flags> is specified as 1, then "split horizon" processing will be performed for this destination. That is, any IP routing table entries pointing to the interface that will be used to send this update will be removed from the update.  If split horizon processing is not specified, then all routing table entries except those marked "private" will be sent in each update. (Private entries are never sent in RIP packets). If flags is 2, the broadcast will also advertise a route to the system itself. Flags are accumulative, i.e. a value of 3 will mean both "split horizon" and "me too". See also the 'route' command.

Triggered updates are always done.  That is, any change in the routing table that causes a previously reachable destination to become unreachable will trigger an update that advertises the destination with metric 15, defined to mean "infinity".

Note that for RIP packets to be sent properly to a broadcast address, there must exist correct IP routing and ARP table entries that will first steer the broadcast to the correct interface and then place the correct link-level broadcast address in the link-level destination field.  If a standard IP broadcast address convention is used (e.g. 44.26.0.0 or 44.26.255.255) then chances are you already have the necessary IP routing table entry - unusual subnet or cluster-addressed networks may require special attention ! However, an 'arp add' command will be required to translate this address to the appropriate link level broadcast address; For example :

    arp add 44.255.255.255 ax25 qst-0

for an AX25 packet radio channel - if there are multiple AX25 interfaces, make a unique address for each interface.

rip drop <dest>

Remove an entry from the RIP broadcast table.

rip kick

Immediate command to send a rip update.

rip merge [on|OFF]

This flag controls an experimental feature for consolidating redundant entries in the IP routing table. When rip merging is enabled, the table is scanned after processing each RIP update.An entry is considered redundant if the target(s) it covers would be routed identically by a less "specific" entry already in the table. That is, the target address(es) specified by the entry in question must also match the target addresses of the less specific entry and the two entries must have the same interface and gateway fields.

For example, if the routing table contains

Dest            Len      Interface      Gateway   Metric  P Timer  Use
44.2.3.4        32       ax0            44.96.1.2    1    0   0     0
44.2.3.0        24       ax0            44.96.1.2    1    0   0     0

then the first entry would be deleted as redundant since packets sent to 44.2.3.4 will still be routed correctly by the second entry. Note that the relative metrics of the entries are ignored.

rip refuse <gateway>

Refuse to accept RIP updates from the specified <gateway> by adding the gateway to the RIP filter table. It may be later removed with the 'rip accept' command.

rip request <gateway>

Send a RIP Request packet to the specified <gateway>, causing it to reply with a RIP Response packet containing its routing table.

rip status

Display RIP status, including a count of the number of packets sent and received, the number of requests and responses, the number of unknown RIP packet types, and the number of refused RIP updates from hosts in the filter table. A list of the addresses and intervals to which periodic RIP updates are being sent is also shown, along with the contents of the filter table.

rip trace [0|1|2]				Default is 0.

This variable controls the tracing of incoming and outgoing RIP packets. Setting it to 0 disables all RIP tracing. A value of 1 causes changes in the routing table to be displayed, while packets that cause no changes cause no output. 

Setting the variable to 2 produces maximum output, including tracing of RIP packets that cause no change in the routing table.

rip ttl <seconds>

Displays or sets the time to live timer to 'seconds'. Normal time-out value is 240 seconds. This is not the ttl in a rip broadcast (16 = infinite).  Set this timer before starting rip. Change this timer only in cooperation with your surrounding nodes. Default is 240 seconds.

* End of RIP-1 commands.

The following text is provided by N0POY who did the NOS implementation of RIP-2.

This document covers the implementation of RIP-2 (RFC 1388) in NOS. Specifically the WG7J version of NOS.  RIP-2 is an enhanced version of the RIP protocol (RFC 1058). RIP and RIP-2 are an interior gateway protocol (IGP). RIP-2 for NOS was implemented by Jeff White, N0POY. This documentation is for the beta release V0.9 of RIP-2.

RIP-2 Features

The NOS implementation implements all features of the normal RIP protocol (RFC 1058) and all features of the RIP-2 protocol (RFC 1388) except multicasting (which NOS does not currently implement) and Route Tags (NOS does not implement any EGPs). Features include:

•	Routing Domains
•	Authentication
•	Proxy routing
•	Filtering of naughty nodes
•	Optional refusal of a default route
•	Enhanced logging and tracing
•	Route subnet masks correctly maintained
•	Optional refusal to accept older RIP version broadcasts
•	Mixing of RIP-1 and RIP-2 support

NOS RIP COMMANDS

rip accept <gateway>

This command resumes the acceptance of RIP broadcasts from a specific node given in the <gateway> field. Some examples are :

    rip accept 192.55.248.1
or

    rip accept skeggi.tcman.ampr.org

rip add <dest> <interval> [<flags>] [<ripver>] [auth <password>] [rd <routing domain>]

This command adds a node to the list of stations that are to be broadcast to with the local nodes routing table.

    <dest> is the destination node, usually a broadcast address.

    <interval> is the number of seconds between broadcasts.

    <flags> are the RIP flags used (see below for the flags), it
            is a hexadecimal number.

    <ripver> is the version of the RIP broadcasts (1 or 2).

The ‘auth’ identifier precedes the authentication password to be included with the RIP broadcasts to this destination. The ‘rd’ identifier precedes the routing domain number. This number must range from 0 to 65535.

The authentication fields and routing domain fields are only valid with RIP-2 broadcasts. The password must be 16 characters or fewer. Printable ASCII characters are recommended, but not required.

The RIP <flags> are as follows :

    0x01 Do 'split horizon' processing
    0x02 Include ourselves in the routing broadcast
    0x04 Broadcast RIP packets (default type)
    0x08 Multicast RIP packets (not implemented) (RIP-2)
    0x10 Poisoned Reverse on
    0x20 Authentication data to be included in broadcast (RIP-2)

Recommend flags are Split Horizon, and Poisoned Reverse or 0x11. Authentication and routing domain data entered here only applies to outgoing RIP broadcasts. See ‘rip authadd’ and ‘rip authdrop’ for entering acceptable passwords and routing domains. Some examples :

    rip add SKEGGI.TCMAN.AMPR.ORG 30 0x31 2 auth frodo rd 2

    rip add BIGGUS.TCMAN.AMPR.ORG 300 0x11 1

rip proxy <src> <dest> <interval> [<flags>] [auth <password> [rd <routing domain>]

This command adds a node to the list of stations that are to be broadcast to with the local nodes routing table.

    <src> is the node that the broadcast will "point" to.

    <dest> is the destination node, usually a broadcast address.

    <interval> is the number of seconds between broadcasts.

    <flags> are the RIP flags used (see above for the flags), it
            is a hexadecimal number.

The ‘auth’ identifier precedes the authentication password to be included with the RIP broadcasts to this destination. The ‘rd’ identifier precedes the routing domain number. This number must range from 0 to 65535.

The authentication fields and routing domain fields are only valid with RIP-2 broadcasts. The password must be 16 characters or fewer. Printable ASCII characters are recommended, but not required.

Proxy RIP is tricky, complex and not needed for normal use.  Do NOT use proxy rip unless you understand what you are doing. Proxy RIP's primary use would be to advertise routes to another machine that is acquiring routing information via another routing protocol.  See RFC 1388 for further details.

rip drop <dest> [<domain>]

This command removes a routing broadcast entry. If a RIP-2 broadcast was entered, the correct routing domain needs to be entered, since it is possible to broadcast multiple routing domains to the same address. For example :

    rip drop SKEGGI.TCMAN.AMPR.ORG 2

rip authadd <interface> <routing domain> [<password>]

This command adds an acceptable routing domain and optionally a password to a specific interface. Some examples below :

    rip authadd ax0 2 frodo

    rip authadd en0 3

rip authdrop <interface> <routing domain>

This command removes an acceptable routing domain (and password if any) from a specific interface. For example :

    rip authdrop ax0 2

rip reject <version>

This command is used to ignore older RIP broadcasts, as they may cause undesirable routing table alterations. The version number is the version number and below that are ignored.  RIP version 0 (XNS RIP) is always ignored. The default is 0. To ignore RIP-1 broadcasts, ‘rip reject 1’ would do the job.

rip filter <on|OFF>

If enabled, this will cause advertisements to the default route (0.0.0.0) to be tossed and ignored. The default is OFF. This can serve as a LID filter. Default routes should NOT be advertised, unless there is a specific reason (i.e. this machine is a gateway to the rest of the Internet).

rip merge <on|OFF>

If enabled, this will cause overlapping routing entries to be merged into one routing entry. The default is OFF. For example N0BEL.TCMAN.AMPR.ORG is a route to 192.133.30.0/28, and 192.133.30.16/28 - with merging turned on, this would become a single entry of 192.133.30.0/27.

rip refuse <gateway>

This will reject all RIP broadcasts from the <gateway> station. The ‘rip accept’ command is the opposite. By default all stations are accepted.

rip request <gateway>

This one asks the gateway station to send a routing table now, rather than waiting for periodic updates.

rip status

This command displays various statistics for RIP-1 and RIP-2, RIP broadcasts, RIP refusals, and acceptable Interface, Domain and Password combinations. It also displays the refusing version level. The DEFAULT interface is for every interface. Thus unless removed, and RIP-2 broadcast with a domain of 0 does not require a password and will be accepted.

rip trace <level> [<file>]

This will begin tracing RIP operations. The higher the level, the more detailed the logging.  Level 9 is the useful maximum, with level 0 (the default) being no logging. If a file is specified, logging will go to that file, else logging appears on the console.

rip ttl <time-to-live>

This sets the time-to-live before RIP entries expire from the routing tables.  The default should work for almost all cases.

* End of RIP-2 Description

rlogin <host>

Sets up an 'rlogin' session via port 511 to a Unix-compatible host. Default terminal is a vt100-compatible terminal (with keyboard mappings as defined with the 'fkeys' command).

rmdir <directory>

Remove a sub-directory from the current working directory. The sub-directory must be empty before 'rmdir' can be used.

route [<subcommand>]

With no arguments, 'route' displays the IP routing table.

route add <desthostid>[/bits] | default  <iface> [<gatewayhostid> | direct] [<metric>]

* attempting tcp connections to an address without an existing route fails immediately.

This command adds an entry to the routing table. It requires at least two more arguments, the <desthostid> of the target destination and interface name <iface>
to which its packets should be sent. If the destination is not local, the gateway's hostid should also be specified. (If the interface is a point-to-point link, then <gatewayhostid> may be omitted even if the target is non-local because this field is only used to determine the gateway's link level address, if any. If the destination is directly reachable, <gatewayhostid> is also unnecessary since the destination address is used to determine the interface link address). If <rspf> is used and the system is a switch / router to multiple routes, the keyword 'direct' can be used instead of <gatewayhostid> to set the metric higher than the default of 1. This way routes advertised by other rspf stations can be cheaper and get selected. If 'direct' is given but <metric> not, an new algorithm is used to set the metric dependent on the number of subnet mask bits. The optional /bits suffix to the destination host id specifies how many leading bits in the host id are to be considered significant in the routing comparisons.  If not specified, 32 bits (i.e., full significance) is assumed. With this option, a single routing table entry may refer to many hosts all sharing a common bit string prefix in their IP addresses.

For example, ARPA Class A, B and C networks would use suffixes of /8, /16 and /24 respectively. For instance, the command :

    route add 44/8 ax0 44.64.0.2

causes any IP addresses beginning with "44" in the first 8 bits to be routed to 44.64.0.2; the remaining 24 bits are "don't-cares".

When an IP address to be routed matches more than one entry in the routing table, the entry with largest 'bits' parameter (i.e., the "best" match) is used. This allows individual hosts or blocks of hosts to be exceptions to a more general rule for a larger block of hosts.

The special destination 'default' is used to route datagrams to addresses not matched by any other entries in the routing table; it is equivalent to specifying a /bits suffix of /0 to any destination hostid. Care must be taken with 'default' entries since two nodes with default entries pointing at each other will route packets to unknown addresses back and forth in a loop until their time-to-live (TTL) fields expire. (Routing loops for specific addresses can also be created, but this is less likely to occur accidentally).

Built-in Interfaces

There are two built-in interfaces - 'loopback' and 'encap'.

Loopback is generally for internal purposes, although destinations that explicitly route via the 'loopback' interface result in the packet being dropped, i.e., loopback can be used as a bit-bucket!

Encap is used to encapsulate packets, and is used if you want to create IPIP tunnels between systems. The original flavours of JNOS supported the use of IPIP encapsulation (ip protocol # 4). In JNOS version 2.0, another protocol was added, IPUDP, an idea that Barry (K2MF) came up with. It let us setup *IPIP* tunnels between systems, but UDP was used as a transport layer instead of raw IP. This was done to give people more flexibility in a world where anything non-UDP or non-TCP is now blocked or firewalled.

For example, to route packets to a virtual (old style vpn) network that has a subnet of 44.64.0.0, and the vpn gateway is 192.4.8.112, we could use a route entry like any of the following examples :

    route add 44.64.0.0/16 encap 192.4.8.12
    route add 44.64.0.0/16 encap 192.4.8.12 i
    route add 44.64.0.0/16 encap 192.4.8.12 4

Note, ipip is assumed if you do not specify the protocol at the end.
     
If you want to use ipudp instead of ipip, then add 'u' to the end :

    route add 44.64.0.0/16 encap 192.4.8.12 u

Dynamic (DYNDNS) gateway hostids

In JNOS version 2.0, you can now specify a domain name for the gateway hostid, instead of a usual ip number. What this does is cause JNOS 2.0 to periodically resolve the hostname to see if the ip address of that host has changed. This allows you to route to other gateway systems that do not have a static ip address. For example :

    route add 44.64.0.0/16 encap example.dyndns.org

Some examples of the route add command

# Route datagrams to IP address 44.0.0.3 to SLIP line #0.
# No gateway is needed because SLIP is point-to point.

route add 44.0.0.3 sl0

# Route all default traffic to the gateway on the local Ethernet
# with IP address 44.0.0.1

route add default ec0 44.0.0.1

# The local Ethernet has an ARPA Class-C address assignment;
# route all IP addresses beginning with 192.4.8 to it

route add 192.4.8/24 ec0

# The station with IP address 44.0.0.10 is on the local AX.25 channel

route add 44.0.0.10 ax0

# An encapsulation link to 192.4.8.12 where the subnet 44.64.0.0
# is accessible. The Internet does not know where we are but we just
# use them with what they know:

route add 44.64.0.0/16 encap 192.4.8.12 4

route addprivate <dest hostid>[/bits] | default <iface> [<gateway hostid> [<metric>]]

This command is identical to 'route add' except that  it  also marks  the  new entry as private; it will never be included in outgoing RIP updates. It will also not be shown in themailbox 'IProute' command.

route drop <dest hostid>[/bits]

Delete an entry from the table.  If  a  packet  arrives  for  the deleted address and a default route is in effect, it will be used.

route flush

Delete (drop) all temporary routes, that is, routes added with an expiration timer (eg, by RIP).

route look <hostname>

Display just the routing table entry used to reach <hostname>.

route sort [off|ON]

Display or set the route display sort flag.  When set, the route command will sort its report, which tends to display similar routes together. When reset, the report is by decreasing number of significant bits used in comparing host addresses.

rspf <subcommand>

RSPF is the Radio Shortest Path First protocol. Each station listens for RRH (Router to Router Hello) messages. When such a RRH message is received, it will figure out if the link is bi-directional by pinging the  other  station. The protocol is described in the RSPF 2.1 specification.

rspf interface <interface> <quality> <horizon>

<interface> is the required interface rspf should use. <quality> is from 1 to 127, horizon is between 1 to 255. End nodes should have the quality set to 1. Immediate nodes normally set the quality to 8. The normally used value for horizon is 32.

rspf mode [vc | datagram | none]

Display the preferred mode for RSPF. Modes are vc (Virtual Circuit) and datagram. none resets the preferred mode.

rspf rrhtimer [seconds]

Display or set the rrh timer value.

rspf suspecttimer [<seconds>]

Display or set the suspect timer value.

rspf timer [<seconds>]

Display or set the update timer value.

session [<session#>] [arguments]

Without arguments, displays the list of current sessions, including session number, associated socket, the session screen-swap mode, the session type and state, the send and receive queue sizes, and the remote TCP or AX.25 address. An asterisk (*) is shown next to the current session.

Entering a session number as an argument to the session command will put you in converse mode with that session. If you have started the TTYLINK server, and have set Attended mode, an incoming telnet connect to the ttylink port will automatically create a split-screen session and switch you to that session.

session <session#> flowmode [on | off]

<flowmode> displays or enables / disables setting of --more-- handling for <session#>. This is handy for long directory listings coming from an ftp session, for example. Escaping to command mode before issuing the dir command and entering "session # flowmode on" gives a page at a time to look at.  At any time you can escape out again and switch flowmode off.  Note that a ftp session has it's own flow command now built in.  See FTP commands later in this manual.

To avoid the --more-- prompt when the output of console commands exceeds the screen length, turn flowmode off for session 0. This session number always exists, but is not shown in the session listing. Some commands, such as "more" or "dir", will ignore flowmode since they manage their own output pagination. But, these commands will accept a 'Q' to quit (abort) further output.

    Example:  session 0 flowmode off

session <session#> split [on | off]

<split> displays or enables / disables the split-window capability of session <session#>.  This is useful to separate what you enter from the keyboard (shown in a small window at the bottom of the screen) from incoming data, which is shown in a large window at the top of the screen. For example, a ttylink session is begun in split mode.

session swapmode [ems | xms | memory | file]

<swapmode> displays or defines how session screens are saved when the associated session is not current. The initial setting is determined by the -m command-line argument value and/or compilation options.

sessmgr

Session Management (Advanced). Documentation is pending at this time.

shell  [cmd [args...]]

Suspends JNOS and executes a sub-shell ("command processor" under MS-DOS). When the sub-shell exits, NOS resumes (under MS-DOS, enter the exit command).

Note: see the COMSPEC environment variable.

Background activity (FTP servers, etc.) is also suspended while the subshell executes.  Note that this will fail unless there is sufficient unused memory for the subshell and whatever command the user tries to run. When shelled out, Mailbox Operator connects and ttylink incoming connections are refused. A 'system unattended' message is sent to the "connector" of that socket.

Here are some comments particular to the MSDOS system: if no arguments are provided to the JNOS shell command, the MSDOS command processor is invoked to process commands entered from the console. Use the exit command to return to JNOS. If arguments are provided, the first one is assumed to be the program name to invoke. If the program is a batch file, you must precede it's name with /c so as to invoke the command processor explicitly to process the batch file commands, for instance :

    shell /c ibackup.bat \spool\mail \bkup

The /c prefix is also useful to allow i/o redirection to be interpreted by DOS:

    shell /c FC /A /C autoexec.bat autoexec.sav >outfile

skick <socket#>

This is a shorthand for the various 'kick' subcommands. This one searches the socket for correct type and kicks the transport layer.

smtp <subcommand>

These commands configure the Simple Message Transport Protocol (mail) service.

smtp batch [yes | no]

If set smtp will batch the commands into one frame.  When off only one command is sent and a response is waited for. Some old and flaky smtp servers cannot handle more than one command at a time. NOS can handle multiple. If you are not hindered by an old smtp server, setting batch reduces bandwidth. However, if you obtain bounced email containing:

    >>> DATA
    <<< 503 Need MAIL before RCPT

you should turn batching off !

smtp dtimeout [<hours>]				Default: 0

Displays or sets the number of hours a message will remain in the smtp mqueue before being returned to sender.  Delivery attempts are made at "smtp timer" intervals.  If <hours> is zero, the message remains in mqueue indefinitely.

smtp gateway [<hostid> | none]

Displays or sets the host to be used as a "smart" mail relay. Any mail sent to a host not in the domain.txt file or not found via a nameserver query, will instead be sent to the gateway for forwarding (if #define'd). To undefine the gateway, specify "none".

smtp hopper [ON | off]

Displays or sets the flag used to enable the "hopper" feature. This feature, available when JNOS is compiled with HOPPER #define'd, will attempt to deliver mail to a router which serves the mail's destination address. The router address is used even when an 'smtp gateway' is defined. This feature should not be enabled when X1J or other routers are used which don't accept SMTP connections. Note that if HOPPER is ##define'd, then JNOS starts with smtp hopper enabled by default. This feature is inherently "dangerous"!

smtp kick [<hostname>]

Run through the outgoing mail queue and attempt to deliver any pending mail to all systems, or just to <hostname> if specified. This command allows the user to "kick" the mail system manually. Normally, this command is periodically invoked by a timer whenever NOS is running.

smtp kill <jobid>

Kill <jobid> and delete the message.  If the job is "locked" by the smtp client process, you will be asked to confirm the removal.

smtp list

List the current jobs in the mqueue. An "L" means locked and in progress. It is wise to add in autoexec.bat a "del /spool/mqueue/*.lck" command, since JNOS will not remove any pre-existing locks (it assumes other tasks share the mqueue, and dare not remove their locks).

smtp maxclients [<count>]

Displays or sets the maximum number of simultaneous outgoing SMTP sessions that will be allowed. The default is 10. Reduce <count> if network congestion is a problem.

smtp maxservers [<count>]

Displays or sets the maximum number of simultaneous incoming SMTP sessions that will be allowed. The default is 0, i.e., no limit other than the amount of memory available.

smtp mode [queue | ROUTE]

Sets the smtp delivery mode. If 'queue', all messages are left in /spool/rqueue for external forwarding and handling. If 'route', messages are handled and, if for local, appended to a mailbox, or if remote they are forwarded. Default = 'route'

smtp quiet [YES | no]

Enables or disables the inclusion of a beep in the message that new mail arrived at this system.  See 'smtp trace' below, to enable the printing of a new-mail-arrived message.

smtp t4 [<seconds>]			Default = 0 (no disconnect timeout)

Displays or sets a t4 timer for smtp client (outgoing) sessions so that they will disconnect after a period of inactivity and prevent lockups.

smtp tdisc [<seconds>]			Default = 0 (no disconnect timeout)

Displays or sets a disconnect timer for smtp server (incoming) sessions so that they will disconnect after a period of inactivity and prevent lockups.

smtp timer [<seconds>]			Default = 0

Displays or sets the interval, between scans of the outbound mail queue. For example, smtp timer 600 will cause the system to check for outgoing mail every 10 minutes and attempt to deliver anything it finds, subject of course to the smtp maxclients limit. Setting a value of zero disables queue scanning altogether. This value is recommended for standalone IP gateways that never handle mail, since it saves wear and tear on the (floppy) disk drive.

smtp trace [<value>]

Displays or sets the trace flag in the SMTP client, allowing you to watch SMTP's conversations as it delivers mail. Zero (the default) disables tracing. A trace value of 1 just enables the "new mail for n5knx from <k5arh@w5ddl.ampr.org>". Larger values produce more voluminous trace output.

smtp usemx [yes | NO]

Displays or sets a flag enabling or disabling MX record lookups. This can be enabled if a domain server is available in the near distance (reachable). It should be disabled (default) if no domain server is in reach to  satisfy the MX  query. Note that MX record handling is limited to the five highest-preference hosts. Also, the smtp t4 timer must be set, in order to timeout on non responsive hosts.

socket [<socket#>]

Without an argument, displays all active sockets, giving  their index and type, the address of the associated protocol control block and the and owner process ID and name. If the index to an active socket is supplied, the status display for  the appropriate protocol is called.  For example, if the socket refers to a TCP connection, the display will be that given by the 'tcp status' command with the protocol  control block address.

source <script_filename>

This command runs a set of NOS commands contained in <script_filename>. This is a very convenient way of executing a series of commands without having to enter them individually at the keyboard. It is frequently used inside autoexec.nos.

split <iface> <call>

Same as the 'connect' command but uses a split screen mode. Do a 'help connect' command for more info.

start <servers ...>

Start the specified server. Do a 'start ?' for a list of available servers - this won't be displayed to remote sysops. Servers often take an argument which specifies an alternate port number from which to listen. For example :

    start callbook [port#]           Default port: 1235

Default port numbers are listed in the ‘socket.h’ source file.

Exceptions

start tip iface [modem | terminal] [timeout_secs]

This command starts a mailbox server which listens for connections on <iface>.

If <modem> is used, CD (carrier detect) must be asserted before a connection is recognized. A <timeout> value specifies how many seconds of inactivity must occur before a disconnect is initiated.

A tip about using the tip server to provide async dialup access to JNOS. The following commands demonstrate one way to set it up :

    # source this file to configure COM1 for dialup access to JNOS
    attach asy 0x3f8 4 ax25 dialup 2048 256 9600
    #
    ifconfig dialup descrip "dialup access"
    param dialup up
    # Send any desired config cmds here, eg, answer phone on 1st ring
    comm dialup "atz e0 s0=1"
    pause 2
    #start tip dialup terminal 360
    start tip dialup modem 360
    # If the modem obeys DTR (must be asserted to answer the phone)
    # the modem might be permed with S0=1, and then the answering could
    # be controlled by param dialup up, param dialup down, commands
    # possibly done daily by a repeating at command...

start http [port#] [drive] [rootdir]

starts an http server.  The default port is 80, the default disk drive is C, and the default rootdir (for html file access) is /wwwroot. See the http helpfile for more information, especially in the notes section.

status [on|off]

The 'status' command displays general system information, attended flag, and a table of open files (when possible). This is useful for monitoring file transfer activity. If STATUSWIN and STATUSWINCMD were #define'd when JNOS was compiled, the status command can take an optional argument, which determines whether the status window is turned on or off.  The status window must be enabled when JNOS is started (see the -u, -w and -x command line argument descriptions). The 'status on|off' command can then be used to disable (via "off"), or re-enable (via "on"), the status window at the top of the screen. When the status line state is changed, existing sessions will have their screen cursor repositioned.

The status window can have up to 3 lines. The first line shows the time, heap/dos available memory, number of connections to various services, and then a list of active sessions, where sessions with data waiting to be read are blinking. A blinking MAIL shows when the 'mbox mailfor watch' command detects unread email. When JNOS contains a mailbox server, the next (second) line shows the users connected to the bbs. A status symbol precedes the user's id :

 none - user is idle
    * - user is a bbs
    @ - user is in sysop mode
    ! - user has gatewayed out
    # - user is reading or sending mail
    = - user is transferring data (up/download)
    ^ - user is in convers or sysop-chat mode
    ? - use is in none of the above, but not idle...

The final line, when present, shows data depending on the current session. The current session number and type are always displayed. If the session is a network connection, the remote connection name, tx-queue (bytes for tcp, packets for ax.25), and state of the connection are displayed, followed by the retry timer, with current time left, and initial value. In repeat, more or look sessions, the third line shows the command, filename or user/socket for the session.

stop <server ...>

Stop the specified server, rejecting any further remote connect requests. Existing connections are allowed to complete normally.

tail <filename>

Display the last 20 (twenty) lines from <filename>. See also ‘taillog’ below.

taillog

Displays the last 20 (twenty) lines from the log file.

tcp <subcommand>

These commands are used for the Transmission Control Protocol service. All TCP parameters are configurable per interface. Commands of the form 'tcp <command>' set the default or global values. Use the 'ifconfig <iface> tcp <command>' form to set or show the interface-specific values.

To set the system default TCP parameters, you must do so BEFORE attaching interfaces. After attachment, you must use the 'ifconfig <iface> tcp' command form to show or change values for that interface.

Note - attempting outgoing connections to addresses without an existing route results in Error number 219.

tcp access <permit|deny|delete> <ipaddr[/bits]|all> [loport [hiport]]

Display or set tcp access controls, which determine which TCP services (ports) are accessible to which IP addresses.  If no tcp access commands are issued, the default behavior is to permit all hosts to access all ports. But once a TCP access command is entered, all other ports and addresses are denied unless specifically permitted by subsequent tcp access commands.

This subcommand adds or deletes an access control entry maintained in an internal table. Incoming tcp packets are compared with the table entries, in the order that they were added, to determine if access will be granted. Access is granted only if an entry with matching ipaddr or range, and ports, is found with "permit" set before either a match with "deny" set if found, or the end of the table is reached. The optional /bits suffix to the ipaddr specifies how many leading bits in the ipaddr are to be considered significant in the address comparisons. If not specified, 32 bits (i.e., full significance) is assumed. All addresses can be specified by "all". Loport and hiport specify the port or range of TCP ports for which the access control command applies. If "all" is given as the loport, or if no port range is specified, all ports are assumed, i.e., 1 to 65534.

Using "tcp access" will display the table of current access control entries.

Access commands should be entered from the most specific ipaddr to the least specific, since the first match (permit or deny) encountered in the internal table is definitive.

Examples

#Allow a specific AMPRnet host SMTP access
tcp access permit 44.76.1.199 25

#but deny all other services to him
tcp access deny 44.76.1.199

#Allow all other AMPRnet hosts full access to TCP services
tcp access permit 44.76.1/24 all

#Allow a specific subnet access to ports 1 through 25,
#which includes echo, discard, ftp, telnet, and smtp.
tcp access permit 23.1.46/24 1 25

#Note that all other hosts not matched above, are denied access

tcp blimit [<value>]			Default: 31

Display or set the default tcp retransmission backoff limit. Normally each successive tcp retransmission is delayed a time value that increases exponentially or linearly. The backoff limit <value> serves to set the maximum backoff delay allowed. See also tcp timertype and tcp maxwait.

tcp clean

Reset all tcp connections that are in a "FIN wait 2" state. This is useful to release memory resources held by JNOS for connections that were not properly closed.

tcp irtt [<milliseconds>]

Display or set the initial round trip time estimate, in milliseconds, to be used for new TCP connections until they can measure and adapt to the actual value. The default is 5000 milliseconds (5 seconds). Increasing irtt when operating over slow  channels will avoid the flurry of re-transmissions that would otherwise occur as the smoothed estimate settles down at the correct value.  Note that this command should be given before servers are started in order for it to have effect on incoming connections.

TCP also keeps a cache of measured round trip times and mean deviations (MDEV) for current and recent destinations. Whenever a new TCP connection is opened, the system first looks in this cache. If the destination is found, the cached IRTT and MDEV values are used. If not, the default IRTT value mentioned above is used, along with a MDEV of 0. This feature is fully automatic, and it can improve performance greatly when a series of connections are opened and closed to a given destination (e.g. a series of FTP  file transfers or directory listings).

tcp kick <tcb_addr>

If there is unacknowledged data on the send queue of the specified TCB, this command forces an immediate retransmission. <tcb addr> can be found with the 'tcp status' command.

tcp maxwait [<msec>]		Default = 0 (no maximum)

Set or show the maximum time for retry timeout in milliseconds.

tcp mss [<size>]

Display or set the TCP Maximum Segment Size in bytes that will be sent on all outgoing TCP connect request (SYN segments). This tells the remote end the size of the largest segment (packet) it may send.  Changing MSS affects only future
connections; existing connections are unaffected.

tcp reset <tcb_addr>

Deletes the TCP control block at the specified address.

tcp retries [<num>]

Display or set the number of retries before a tcp connection will be reset. Default is 10. This is useful to eliminate idle connections that have not been properly shut down. If set to zero, there is no maximum, i.e. a connection will never retry out.

tcp rtt <tcb_addr> <milliseconds>

Replaces the automatically computed round trip time in the specified TCB with the rtt in milliseconds.  This command is useful to speed up recovery from a series of lost packets since it provides a manual bypass  around the normal backoff retransmission timing mechanisms.

tcp status [<tcb_addr> | all]

Without arguments, displays several TCP-level statistics, plus a summary of all existing  TCP connections, including TCB address, send and receive queue sizes, local and remote sockets, and connection state. If <tcb addr> is  specified, a more detailed dump of the specified TCB is generated, including send and receive sequence numbers and timer information.  If "all" is given, the summary will also include TCBs in a listening state (awaiting a connection). In this case, a (S) will indicate that a server process is to be spawned when a connection occurs.

tcp syndata [yes | NO]

Display or set the tcp syn + data piggybacking flag. Some tcp systems cannot handle syn + data together.

tcp timertype [linear | exponential]

Display the current setting or set the timer type backoff algorithm. Default is linear.

tcp trace [yes | NO]

Display or set the tcp trace flag on or off.

tcp window [<size>]

Displays or sets the default receive window size in bytes to be used  by  TCP when creating new connections. Existing connections are unaffected.

telnet <host> [<port_number>]

The 'telnet' command allows you to initiate a connection using the Telnet protocol.  The end result is much the same as doing an AX.25 connect in most cases, but you'll be taking advantage of the attributes of the TCP/IP protocols.

See also the descriptions of the "echo" and "eol" commands.

term

The term command is used to configure TCP acess to local async ports. It is only available if JNOS was compiled with TERMSERVER #define'd.  Then if 'start term' is issued, connects to TCP port 5000 (default) will be asked the term password if one was defined, then asked an interface name (unless just one term interface was defined.) After these questions are answered satisfactorily, whatever is received from the tcp connection is sent to the interface, and whatever is received from the interface is sent to the tcp connection.

term iface [<iface> options...]

Displays the list of interfaces accessible via term, or establishes a term interface and its operating parameters.

term iface <iface> 7bit [OFF | on]

Displays or changes the settings of the flag which causes term to apply a mask of 0x7F to all characters read during the term session.

term iface <iface> break [<integer>]	Default is -1 (disabled)

Displays or changes the value of the character code which, when read from the tcp input stream, causes term to send a BREAK to the associated serial device. 

For example :

    term iface mdm1 break 3

will interpret ASCII ^C as a send-break character.

term iface <iface> cronly [OFF | on]

Displays or changes the setting of the flag which causes term to ignore a newline (LF) read immediately after a CR is read from the tcp input stream. Note that if the nlcr option is in effect, a CRLF sequence is translated into a CRCR sequence, since the nlcr option is applied before the cronly option.

term iface <iface> drop

Deletes the interface <iface> from the list of interfaces accessible to term.

The interface must not be in use by a term process.

term iface <iface> flushwait [<#ms>]	Default: 0

Displays or changes the number of milliseconds after which any non-newline-terminated input from the serial port, is flushed so that it becomes visible to the term user.  The default value is 0, meaning that no flushing is done. A flushwait value of 500 ms is a good value to use when it is important to see, for example, login prompts that are not followed by a CR.

term iface <iface> nlcr [OFF | on]

Displays or changes the setting of the flag which causes term to translate a newline read from the tcp input stream, into a CR to be sent to the serial interface.

term iface <iface> noecho [OFF | on]

Displays or changes the setting of the flag which causes telnet echoing to be turned off for the duration of a term session.

term iface <iface> noopt [OFF | on]

Displays or changes the setting of the flag which causes telnet option processing to be turned off for the duration of the a term session.

term password string

Sets the term facility password to the provided string.  The default is no password required.

term iface <iface> winkdtr [OFF | on]

Displays or changes the setting of the flag which causes DTR to be de-asserted for one second, at the start of a term session.

Starting terminal services

Use ‘start term [port#]’ to start the terminal server.

trace [<iface> [off | <btio> [outfile]]

Controls packet tracing by the interface drivers. Specific bits enable tracing of the various interfaces and amount of information produced.

Tracing is controlled on a per-interface basis; without arguments, 'trace' gives a list of all defined interfaces and their tracing status. Output can be limited to a single interface by specifying it, and the control flags can be changed by specifying them as well. Trace control flags may be followed by <outfile>, a path to a disk file to contain the tracing output.

The flags are given as a hexadecimal number, interpreted as follows:

b - Broadcast & RawDump selector

    1 - Broadcast filter flag. If set, only packets specifically addressed to
        this node will be traced; broadcast packets will not be displayed.

    2 - If this bit is set, a "raw" dump style is selected, for those
        interfaces which support it (e.g., ppp).

    4 - If this bit is set, include polls in the output trace of polled-kiss
        interfaces.

t - Controls type of tracing:

    0 - Protocol headers are decoded, but data is not displayed

    1 - Protocol headers are decoded, and data (but not the headers themselves)
        are displayed  as ASCII characters, 64 characters per line. Unprintable
        characters are displayed as periods.

    2 - Protocol headers are decoded, and the entire packet (headers AND data)
        is also displayed  in hexadecimal and ASCII, 16 chars per line.

    3 - A minimal display of headers and data is produced, provided that JNOS
        was compiled with MONITOR #define'd.

i - Enable tracing of input packets if 1, disable if 0

o - Enable tracing of output packets if 1, disable if 0

Some trace examples

# Trace all packets on port1 and display with headers:
trace port1 0111

# Trace all lan non-broadcast received packets to a file:
trace lan 1210 d:\lan_ipt.trc

ttylink <host> [<port_number>]	Default: 87

The 'ttylink' command starts a tcp protocol session with <host> using the split screen mode.  Also see the telnet command.

third-party [off | on]

If not set, restrict the mailbox (S)end command to deliver to local accounts only ! The default is to allow third party mail delivery.

tip <iface>

Initiate a "Dumb Terminal" session on a serial JNOS interface.

strace [off | on]

I believe this command configures whether a trace is given it's own session (the 'F9' console screen), or the trace output is simply sent to the main command 'F10' console screen.

udp status

Show the status of active udp control blocks

upload

This command should not be available at the main command console, but for some reason it is there. UPLOAD (and DOWNLOAD) are mailbox commands for transferring ASCII files back and forth over established an mailbox session. In conjunction with packet terminal software like PR4WIN and WINPACK, these commands are very handy for transferring TEXT files. See the UPLOAD and DOWNLOAD commands, found under the 'JNOS MAILBOX USER COMMANDS' section in Appendix A, towards the end of this manual.
 
write <username|sock#> <message>

Send a message to a particular user. <message> is the message, if "more then one word, put it in quotes."  <username|sock#> can be either the user name of a mailboxuser, or a valid socket number. The latter allows you to send a message to a network conference user etc. See also 'writeall'. For example :

    write wg7j "this is a test!"

will show up to that user as the following :

    <bell>*** Message from sysop : this is a test !

writeall <message>

Send a message to all mailbox and conference users.  This command is useful to warn users of an impending shutdown. It could be included in your ‘onexit.nos’ script file. This is like the unix ‘wall’ command I suppose. For example :

    writeall "N5KNX BBS shutting down...bye!"

See also ‘write’ command in previous section.

Bibliography

Like the Terminology section, this section probably needs a bit of an overhaul as well, since the original documents were written back in the 1980’s.

ARRL Computer Networking Conference Proceedings

Available from ARRL HQ, Newington CT. Send mail to info@arrl.org
for an automatic response pointing at more information about the ARRL.

Some of these papers are available online in the directory
ftp.ucsd.edu:/hamradio/packet/tcpip/docs.

This list is not exhaustive; there are many other interesting articles, but these are the ones most relevant to NOS and TCP/IP.

NOS Overviews and Documentation

     NOS Command Set Reference
     Ian Wade, G3NRW, 10th (1991)

     NOSVIEW: The On-Line Documentation Package for NOS
     Ian Wade, G3NRW, 11th (1992)

     The KA9Q Internet (TCP/IP) Package: A Progress Report
     Phil Karn, KA9Q, 6th (1987)

     Amateur TCP/IP: An Update
     Phil Karn, KA9Q, 7th (1988)

     Amateur TCP/IP in 1989
     Phil Karn, KA9Q, 8th (1989)

Services and Protocols

     The Design of a Mail System for the KA9Q Internet protocol
     Bdale Garbee, N3EUA, 6th (1987)
     Gerard van der Grinten, PA0GRI

     Finger - A User Information Lookup Service
     Michael T. Horne, KA7AXD, 7th (1988)

     Callsign Server for the KA9Q Internet Protocol Package
     Doug Thom, N6OYU, 8th (1989)
     Dewayne Hendricks, WA8DZP

     The Network News Transfer Protocol and its Use in Packet Radio
     Anders Klemets, SM0RGV, 9th (1990)

     A Routing Agent for TCP/IP: RFC 1058 Implemented for the KA9Q
     Internet Protocol Package, 7th (1988)
     Albert G. Broscius, N3FCT

     Thoughts on the Issues of Address Resolution and Routing in
     Amateur Packet Radio TCP/IP Networks
     Bdale Garbee, N3EUA, 6th (1987)

     Another Look at Authentication
     Phil Karn, KA9Q, 6th (1987)

     LZW Compression of Interactive Network Traffic
     Anders Klemets, SM0RGV, 10th (1991)

     PACSAT Protocol Suite -- An Overview
     Harold Price, NK6K, 9th (1990)
     Jeff Ward, G0/K8KA

     BULLPRO -- A Simple Bulletin Distribution Protocol
     Tom Clark, W3IWI, 9th (1990)

Macintosh

     KA9Q Internet Protocol Package on the Apple Macintosh
     Dewayne Hendricks, WA8DZP, 8th (1989)
     Doug Thom, N6OYU

     Status Report on the KA9Q Internet Protocol Package for the
     Apple Macintosh
     Dewayne Hendricks, WA8DZP, 9th (1990)
     Doug Thom, N6OYU

     Higher Speed Amateur Packet Radio using the Apple Macintosh
     Computer
     Doug Yuill, VE3OCU, 10th (1991)

Network design

     The Implications of High-Speed RF Networking
     Mike Chepponis, K3MC, 8th (1989)
     Glenn Elmore, N6GN
     Bdale Garbee, N3EUA
     Phil Karn, KA9Q
     Kevin Rowett, N6RCE

     Design of a Next-Generation Packet Network
     Bdale Garbee, N3EUA, 8th (1989)

     More and Faster Bits: A Look at Packet Radio's Future
     Bdale Garbee, N3EUA, 7th (1988)

     Physical Layer Considerations in Building a High Speed
     Amateur Radio Network
     Glenn Elmore, N6GN, 9th (1990)

     Spectral Efficiency Considerations for Packet Radio
     Phil Karn, KA9Q, 10th (1991)

This should be considered to be required reading.

     MACA - A New Channel Access Method for Packet Radio
     Phil Karn, KA9Q, 9th (1990)

     A Duplex Packet Radio Repeater Approach to Layer One Efficiency
     Robert Finch, N6CXB, 6th (1987)
     Scott Avent, N6BGW

     A Duplex Packet Radio Repeater Approach to Layer One Efficiency, Part Two
     Scott Avent, N6BGW, 7th (1988)
     Robert Finch, N6CXB

Network Implementation

     Packet Radio at 19.2 kB -- A Progress Report
     John Ackermann, AG9V, 11th (1992)

     Implementation of a 1Mbps Packet Data Link
     Glenn Elmore, N6GN, 8th (1989)
     Kevin Rowett, N6RCE

     Hubmaster: Cluster-Based Access to High-Speed Networks
     Glenn Elmore, N6GN, 9th (1990)
     Kevin Rowett, N6RCE
     Ed Satterthwaite, N6PLO

     Recent Hubmaster Networking Progress in Northern California
     Glenn Elmore, N6GN, 9th (1990)
     Kevin Rowett, N6RCE

     The 56 kb/s Modem as a Network Building Block: Some Design
     Considerations
     Barry McLarnon, VE3JF, 10th (1991)

     Digital Networking with the WA4DSY Modem - Adjacent Channel
     and Co-Channel Frequency Reuse Considerations
     Ian McEachern, VE3PFH, 10th (1991)

     A Full-Duplex 56kb/s CSMA/CD Packet Radio Repeater System
     Mike Chepponis, K3MC, 10th (1991)
     Lars Karlsson, AA6IW

     A High Performance, Collision-Free Packet Radio Network
     Phil Karn, KA9Q, 6th (1987)

     Adaptation of the KA9Q TCP/IP Package for Standalone Packet
     Switch Operation
     Bdale Garbee, N3EUA, 9th (1990)
     Don Lemley, N4PCR
     Milt Heath

Hardware

     The KISS TNC: A Simple Host-to-TNC Communications Protocol
     Mike Chepponis, K3MC, 6th (1987)
     Phil Karn, KA9Q

     The Ottawa Packet Interface (PI) A Synchronous Serial PC
     Interface for Medium Speed Packet Radio
     Dave Perry, VE3IFB, 10th (1991)

     HAPN-2: A Digital Multi-Mode Controller for the IBM PC
     John Vanden Berg, VE3DVV, 11th (1992)

     The PackeTen system - The Next Generation Packet Switch
     Don Lemley, N4PCR, 9th (1990)
     Milt Heath

APPENDIX A

JNOS MAILBOX USER COMMANDS

The following commands are available to the users connected to the mailbox.

This file is available separately as mboxcmds.txt.

AREA

The Area command lists the mail areas that contain messages you may read.

     A  gives a short listing, whereas
     AF gives a full listing with descriptions (if available)
     AN shows areas that have new mail since you last logged off.                                                                                                                                             

To read messages in one of the areas, type 'A <areaname>'.  You will then be told how many new, not previously listed messages there are in this area.

You can send mail to any of the listed areas as 'S <areaname>'

BYE

The Bye command is used to exit from the JNOS MBOX. This will close your mailbox file and remove any messages that you have deleted with the K[ill] command.

CONNECT

The Connect command has the following modes :

C[onnect] [port] [callsign] [<digipeater> . . .]

Connects to station 'callsign' on interface 'port', possibly via digipeaters 'digipeater...' (note the use of  'via' is optional!)

C[onnect] [node]

Connects over netrom to a remote node with 'node' as either node-call or node-alias

CONV [<channel>]

This (if available) puts you in converse mode.  This is a roundtable discussion feature. The 'channel' allows specifying the conference channel you wish to join. Channel default = 0.

DOWNLOAD

D[ownload] [/][<path_name>/]filename

Sends a plain ASCII text file.

DM

Download the motd (message of the day) which is otherwise unavailable once you get into the mbox.

DOWNLOAD (continued)

DU [/][<path_name>/]filename

Downloads a binary file converted to UUENCODED ASCII. 

You will need the "uudecode" utility to convert this ASCII file back to binary. Source code, in various languages, for uudecode can be downloaded from this system. Look for uudecode.bas, uudecode.pas, and uudecode.c.

The optional path_name may be included along with the filename if the desired file is not in the current directory (you can determine this using the W[hat] command). Please note that the character used to separate the path and filename is a "/" (forward slash).

ESCAPE

The escape command, when entered by itself, will display the character that is current set as the escape character, and whether escape processing is enabled. This character is what will be used if you want to exit from the current session. For instance, if you have started a "chat" session, and you don't get a response from the operator after waiting a few minutes, you can enter the escape character, followed by a <RETURN> or <ENTER>, and the session will be terminated.  You will then be returned to the MBOX prompt.

E[scape] [<char> | <integer> | off|on]

The escape character may be changed to one of your preference by entering "escape" followed by a <SPACE> and the character that will become the new escape character. This must be a single typed character (the <CTRL> key may be used in addition). Alternatively, an <integer> corresponding to the decimal code for the escape character may be specified.  Escape processing can be enabled or disabled by specifying "on" or "off" as the only argument.

examples

    escape ^Z     (the ASCII character <CTRL>Z)
    escape X      (the character "x" is the new escape)
    escape 120    (the character "x" is the new escape)
    escape off    (suspend escape character processing)
    escape on     (resume escape character processing)

FINGER

The finger command retrieves personal information about users of a system.                                                                                                                                                                                              

F[inger]

Displays a list of known users on the current system.

F[inger] [<user_name>]

Displays information about if and when the user last logged in, as well as any information which may be set in the user's finger-file.

FINGER (continued)

F[inger] [<user_name>][@<host>]

Perform the same functions detailed above on another TCP/IP host connected to the network.

To get a list of the users on a remote system, enter "finger" followed by a <SPACE> and an "@", then the host name. To get information about a remote user, insert the user name before the "@" character.

examples

    finger                   list the known users on this system
    f sysop                  list info about the local user "sysop"

    f @wg7j                  list the known users at host "wg7j"

    f johan@wg7j             display info about "johan" at host "wg7j"

    f help[@jnoshost]        shows which pseudo-user names are available for
                             obtaining JNOS system info via finger command.
HELP

Get on-line assistance for user commands

?

Displays a list of the commands that have help descriptions available :

     area       bye       connect     download  escape    finger
     help       info      jheard      kill      list      mboxuser
     nodes      nroutes   operator    ports     read      send
     telnet     upload    verbose     xpert     what      zap

Then you can use ‘H <command>’ to display help for a specific command.

For example, to display the help text for the command 'connect', use :

    h connect

IHEARD

The IHeard command shows the tcp/ip systems recently heard.

I[heard]

Show tcp/ip activity for all ports.                                                                                                                                                           

I[heard] [<port>]

Show tcp/ip activity for <port>.                                                                                                                                                      

For ax.25 interfaces (ports), show all tcp/ip activity heard, even when this system was not involved in it. For other interfaces, show those systems that we actively routed packets for (i.e. systems that talked to us.)

INFO

Sysop-supplied site information.  

IPROUTE

Shows the available TCP/IP routes the system has configured. It shows the interfaces and gateways involved in the routes, and expiration timer - if applicable. This could be a LONG list if the system has a lot of ip routes. 

Please ask the sysop for more about the information given in the display.

JHEARD

The jheard command will display a list of all the station callsigns that have been received as sending packet traffic on the channel, the time since the station was heard last, and the total number of packets received.

J[heard]

Displays the "heard" list for all interfaces.                                                                                                                                                 

J[heard] [<port>]

Displays a list of the stations heard on a particular channel.  See the Ports command for determining which channel is heard on which port.

Warning:  if this system has been on the air for very long, and the channels are very active, the "heard" list could be extremely long.

KILL

The kill command allows you to delete messages from the current mailbox (if you have been given that permission by the operator).

K[ill] <message_number_or_range> [<message_number_or_range> . . .]

At least  one message  number must be supplied. The message numbers you can select from can be displayed with the "L[ist]" command. The second parameter on each line of the list is the <message_number>, for which you can specify a range of message numbers by placing a "-" between the first and last message numbers of the range. No intervening spaces are allowed. For example, 4-7 is equivalent to 4 5 6 7.

KM will delete all messages in the area.

KU will un-kill a message that was previously marked for killing.

KA will delete all messages in the area.

The kill command allows you to delete messages from the current mailbox (if you have been given that permission by the operator). At least one message number must be supplied. The message numbers you can select from can be displayed with the ‘L[ist]’ command. The second parameter on each line of the list is the <message_number>. The kill command only applies to messages in the current mail area. The current mail area can be checked and modified with the ‘A[rea]’ command.

LIST

Prints a list of the messages from the current mailbox (or "area"). For each message, the list contains the subject header line, the time and date it was created, who it is from, how many bytes long it is, and whether or not it has been read.

L[ist] [<starting_msg_number> [<ending_msg_number>] ]

You may include an optional "starting_msg_number" from which to begin displaying the list. If you specify a starting msg number, then you may also specify an ending number as well. This will limit the display for you in case there are a large number of messages in a particular "area" mailbox.

L - by itself will display the headers for all unread messages, if any.

LA - list all messages, read or unread

LL - display the last <number> of message headers.
 
LM - is the same as 'L'

LB - list all bulletins

LS [subject]

List messages in the current 'area' where [subject] is in the subject line.

LT - list all traffic

L> xxx

List all messages that have the string 'xxx' in the To: address field including numeric strings.

L< xxx

List all messages that have the string 'xxx' in the From: address field including numeric strings.

MBOX

Display mailbox user information.

M

Display a list of all the current users, how they connected, and their current activity.

MC <path, area> (sysop)

Copies the current message to the path or area indicated. This command accepts a range of messages, e.g., mc 5-26 junk will copy messages 5 through 26 to area 'junk'.

MBOX (continued)

ML

List all past users of the system, when they were last on and how many times they've connected.  

ML n  will show the last n users of the system

ML call  will list when 'call' last logged in

MM <path, area>

(sysop) moves the current message to the path or area desired. This command accepts a range of messages, e.g., mm 5-26 junk will move messages 5 through 26 to area 'junk'.

MS

Gives some info on the number of messages handled since the system has been up, as well as free memory, and the uptime of the system.

NODES

Display information on Netrom Nodes.

N

Prints a list of NetRom nodes that are known to this system and for which the nodeids do not begin with '#'.

N *

Displays information on all known nodes including "hidden" nodes (those with IDs beginning with '#').

N <nodename>

Displays information about routes (paths) available to <nodename>.

NR[oute]

This command lists all known NetRom neighbor stations, with a listing of the path quality to them, number of destinations the neighbor knows and the obsolescence count.

A '>' in front indicates that the route has been used in the past 60 seconds.

NRR

This is a new command and is only available in JNOS 2.0, not earlier versions of JNOS. This can be thought of as a traceroute for netrom networks. If you want to view the round trip path to a specific node, you can use the NRR command to display this information. Syntax is :

        NRR <callsign of remote netrom node>

NRR (continued)

Note, you might get *empty* nodes in the displayed path, since not all systems in between may support these operations. For example :

    Area: ve4klm (#1) >
    nrr on6dp
    Area: ve4klm (#1) >
    *** route: VE4KLM VE4WSC WA7V-2 ON6DP* WA7V-2 * * VE4WSC VE4KLM
    Area: ve4klm (#1) >

OPERATOR

This command allows you to "talk" keyboard-to-keyboard with the operator of this NOS system if the system is attended.

When you wish to terminate the chat session, type the escape character on your keyboard, and then press <ENTER> or <RETURN>. The default escape character is "CTRL-X", which means to hold down the <CTRL> key and press the <X> key simultaneously. This escape character may be changed to whatever you prefer by using the "E[scape]" command.

PING <host>

Check of <host> is alive. Returns a RTT value.

PORTS

This command displays a list of AX.25 and HFDD (jnos 2.0 only) interfaces installed in this system. A description of the port is also given if one has been setup for that port. The AX.25 ports can be used to make outgoing AX.25 connections with the "C[onnect]" command.

QUERY

Q <call> [<call> . . .] If available, this queries the BuckMaster CDRom callbook server for info about the calls given.  More then one call per query is allowed.

READ

Read a message (or messages) from the current mail area.

#

R[ead] #

R[ead] <msg_number_or_range> [<msg_number-or_range> . . .]

To read a specific message, you may either type "read #" or just the number by itself. If there is a specific list of messages you are interested in (determined by the use of the L[ist] command, for instance), you can enter the list of message numbers (separated by spaces) on the "read" command-line. You can also simply advance sequentially through the messages by just pressing the <ENTER> or <CR> key.  This will display the next message in order. The "read" command displays only an abbreviated portion of the mail headers. If you want to display all the header lines, use the V[erbose] command instead.

READ (continued)

RM display without interruption all unread messages.

examples

    read 3 5       Display only messages 3 and 5
    4              Display message 4
    <Enter>        Display next message

SEND

The send command allows you to enter a message and send it to a user at either this system, or some other system on the network. The "from_addr" and "bulletin_id" fields are for special use and won't be covered here. The "S" command may also be followed by "P", "B", or any other message type you use (e.g. SP wb7xxx @ n7xxx).  The "SR" command allows you to "reply" to either the current message or the message number specified. The "ST" command allows you to send "traffic" to <user> specified. The subject will be copied and the reply will be sent to the address it was sent from. The "SF" command will forward a copy of the current message to the user specified. SC allows you to send a message to more then one user. The system will prompt with "Cc: ", which allows you to add more users to be send Carbon copies of the message. Separate users on the Cc line with commas.

S[end] <user>[ @ <host>] [< <from_addr>] [$<bulletin_id>]

SR [msg_number]

SF <user>[ @ <host>] [< <from_addr>] [$<bulletin_id>]

SC

ST

SB <user>[@<host>]

Send a bulletin. As above, but ANY <user> may read the message from the mailbox. <User> is usually a category rather than an individual stationid when sending bulletins.

SP <user>[ @ <host>]

Send a personal mail. As above, but only the addressee (<user>) may read the message from the mailbox.

SR [msg_number]

Send a "reply" to either the current message or the message number specified. The subject will be copied and the reply will be sent to the address it was sent from.

SF <user>[ @ <host>] [< <from_addr>] [$<bulletin_id>]

Forward a copy of the current message to the user specified.

SEND (continued)

SC <user>[ @ <host>] [< <from_addr>] [$<bulletin_id>]

Send a message to more than one user. The system will prompt with "Cc: ", which allows you to add more users to be sent 'carbon copies' of the message. Separate users on the Cc: line with commas.

examples

    send kf7xx            Send a message to the local user, kf7xx.

    s kf7xx @ wb7xxx      Send a message to kf7xx at the wb7xxx host.

    sr 3                  Reply to message number 3.

    sf n7aaa%n7bbb@w7ccc  Forward current msg to n7aaa at n7bbb via w7ccc.

    sc wg7j               Send with Carbon copy to others, asks for CC,
                          for example -> Cc: ka7ehk, n7dva@n7dva

TELNET

The telnet command allows you to initiate a TCP connection from the NOS mailbox out across the network to another host. This allows an AX.25 user with nothing more than a terminal and TNC to gain access to the TCP/IP network.

T[elnet] <hostname> [<port_number>]

By including the optional port_number, you can connect to any TCP server at the given host. The default is to be connected to the "telnet" server, which in the case of JNOS software, is the MBOX. To quit the session at any time, enter the escape character - <CTRL>X by default, can be changed with the E[scape] command.

UPLOAD

U[pload] [/][<path_name>/]<filename>

Transfer an ASCII file from your system onto disk at this host. You may also specify a full path_name containing a specific directory in which to deposit the new "upload". All uploads can only go into the directory that you logged into, or into another directory under the current one. The transfer proceeds line-by-line until the file is sent and you enter either a "<CTRL>Z" or "/ex" as the first item on a blank line.

examples

    upload kepler.txt

    u /public/satelite/oscar13.txt

VERBOSE

This command allows you to read a message (or messages) from the current mail area, and it includes all the header lines for display.  The R[ead] command operates the same way, but with abbreviated header lines.

V[erbose] <msg_number_or_range> [<msg_number_or_range> . . .]

View a specific message or a list of messages with all headers.

VH

'verbose held' is verbose-read-held mesages (sysop only).

VM

'verbose mine' Display, without interruption, all unread messages in the area.

WHAT

W[hat] [/][<path_name>]

Generate a sorted directory listing of the current directory or the one specified by the optional path_name. The listing includes the filename (or subdirectory name if there is a "/" appended), the file size in bytes, creation time, and date.

examples

    what         Displays a directory listing of the "current" directory.

    w /nos/pub   Display a list of files contained in the "/nos/pub" directory.

XPERT

The Xpert command toggles the prompts that the system gives.

X  - toggles the prompt between using long and short prompts.

XA - toggles the 'current area' indication on or off.

XG - effective with 1.11a, addr/#bits - establishes an encapped
     route for addr, if permitted.

XN - toggles the 'netrom id' prompt on or off

XM - shows the number of lines before -more- prompting occurs in lists

XM n - sets the number of lines ...

XP - toggles LINEMODE-style prompting for input (telnet/tip users).

XR - shows if 'Reply-to' line is added when sending mail. You need
     to have set an email address when you R(egister)ed.

The states of the above are remembered at logout and used at next login.

XPERT (continued)

The XG command, when allows by the 0x2000000 permission bit in ftpusers, lets the sender register as a gateway for the indicated host or subnet, for a period of time.  This could be used by systems connecting with a dynamic IP address, to facilitate tcp forwarding of bulletins.

ZAP

Delete a file in the current directory.

Z[ap] [/][<path_name>/]<filename>

The zap command allows you to delete a file in the current directory of one you specify with the optional path_name. Use of this command requires that permission be granted by the operator of this system.

examples

    zap myfile.txt            Deletes myfile.txt in the current directory.

    z /nos/mydir/myfile.txt   Deletes myfile.txt in /nos/mydir directory.

APPENDIX B

FTPUSERS PERMISSIONS

The following is a list of the user permission values allowed in FTPUSERS file.

  Name          value    hex value    comments

FTP_READ         1        0x1       /* Read files */
FTP_CREATE       2        0x2       /* Create new files */
FTP_WRITE        4        0x4       /* Overwrite or delete existing files */
AX25_CMD         8        0x8       /* AX.25 gateway operation allowed */
TELNET_CMD       16       0x10      /* Telnet gateway operation allowed */
NETROM_CMD       32       0x20      /* NET/ROM gateway operation allowed */
SYSOP_CMD        64       0x40      /* Remote sysop access allowed */
EXCLUDED_CMD     128      0x80      /* This user is banned from the BBS */
PPP_ACCESS_PRIV  256      0x100     /* bit for PPP connection */
PPP_PWD_LOOKUP   512      0x200     /* Priv bit for peerID/pass lookup */
NO_SENDCMD       1024     0x400     /* Disallow send command */
NO_READCMD       2048     0x800     /* Disallow read command */
NO_3PARTY        4096     0x1000    /* Disallow third-party mail */
IS_BBS           8192     0x2000    /* This user is a bbs */
IS_EXPERT        16384    0x4000    /* This user is an expert */
NO_CONVERS       32768    0x8000    /* Disallow convers command */
NO_ESCAPE        65536    0x10000   /* Default is no escape char */
NO_LISTS         131072   0x20000   /* No lists displayed from mailbox */
NO_LINKEDTO      262144   0x40000   /* Disable '*** linked to'  */
NO_LASTREAD      524288   0X80000   /* Ignore lastread in <area>.usr
                                       (shared accts)*/
NO-FBBCMP        1048576  0x100000  /* Avoid FBB compression */
XG_ALLOWED       2097152  0X200000  /* Allow XG (dynip route) cmd */

To set options, simply add values.

Format in /ftpusers file is:

    <name> <password> [<drive:></rootdir>;</root2>] <#perms>] [=]...

    <name> is the userid, normally a callsign for amateur radio use.

The <name> "univperm" should be included in the ftpusers file. It allows anyone not otherwise found in the ftpusers file to logon with "guest" status. Protocol specific permissions can be allowed by using the following names vice "univperm";

    tcpperm - telnet login to mailbox
    ax25perm - ax.25 login to mailbox
    nrperm - netrom login to mailbox
    confperm - convers signin
    pppperm - ppp's call to userlogin
    ftpperm - ftp login
    tipperm - tip login to mailbox

FTPUSERS PERMISSIONS (continued)

If <password> is set to '<string>', then <string> must be used.

If <password> is set to '*', then any entry will satisfy password.

User can be given access to several drives and directories with varying permissions.  These are all given on one line.

<drive:> is the drive letter for each drive to which the user is being given access.

</rootdir> is the highest directory in the system tree the user may access. It becomes the users root directory. Subdirectories under </rootdir> may be accessed by the user. More than one </rootdir> may be given per drive. The initial directory (that is, your starting directory after an ftp session is established) is the first directory listed, UNLESS one of the following directories is preceded by an "=" to flag it as the initial directory. Example:

    anonymous * /pub/wr_only 2  /pub/rw_del 7 =/pub 1 f:/1

<#perms> is the sum of the decimal OR hexadecimal values which defines what the user is allowed to do while logged onto the system.

You may provide access to more than one set of drives and directories with different permissions for each set. This allows a user to access a personal directory with complete read/write/delete access and a public directory with read permissions only, or any other combination you may desire.

    univperm * /public 138283  (or 0x21c2b)

gives anyone not otherwise known login permission as a guest who can read or create (upload) new files on FTP connections, access ax25 or netrom stations, but has no mbox send, read, 3rd_party, or list functions.

    wg0b doug c:/wg0b 0x407f /public;/nts ox407b

defines two different setups of permissions for three different areas.

APPENDIX C

FORWARD.BBS and Mail Forwarding

from NOS mail docs -- G4AMJ/NQ0I and SM0RGV (Rev.3)

slight mods for JNOS 1.11 by N5KNX (Rev.3a) and JNOS 2.0f by VE4KLM (Rev.3b).

1. Introduction

This section of the NOS docs deals with the intricacies of mail forwarding. You should read and understand this documentation thoroughly before attempting to forward mail through your NOS box to the AX.25 BBS world, otherwise you might grossly misconfigure your system and be the unhappy recipient of flames from BBS sysops.

This section does NOT deal with the minutiae of the mailbox and its various commands; it assumes that you understand concepts such as user areas (both public and private) and how to list and send mail. If you need help with these, please look elsewhere in the NOS docs.

Apart from the usual domain.txt and other files necessary for the functionality of NOS, three files are important in the mail forwarding process. These are :

/spool/forward.bbs, /alias and /spool/rewrite.

The contents of these will now be addressed individually.

2. /spool/forward.bbs

This file describes the actions taken by NOS in forwarding to AX.25 BBSes. The file contains a series of forwarding records, each record being separated by a line containing two or more hyphens. The template for a forwarding record is:

<BBS-callsign> <time-specs> <poll-flag>
Connection route
Connection commands                <zero or more lines>
List of areas to be forwarded      <one per line>
------------                       <end of record>

2.1. BBS callsign

This is simply the ordinary call of the remote BBS. A typical (but not random!) entry might be simply the line:

sm0rgv

The callsign may be followed, on the same line, by a comma separated list of valid intervals when forwarding is to take place. Each valid interval is a four digit number: the first two digits are the beginning hour of the valid interval, the last two digits are the final hour of the valid interval. For example, if the first line of a forwarding record looks like:

sm0rgv 0006,1414

then forwarding to sm0rgv will take place only during hours numbered 00, 01, 02, 03, 04, 05, 06 and 14. Ticks of the mbox timer outside of these times will not cause mail to be forwarded to sm0rgv. The default interval for forwarding is 0023.  If you desire to force a connect to occur, even if we have no traffic to transfer, then use the poll flag, P, in addition to any time specs.

2.2. Connection route

This is the method by which communication is to be established with the remote BBS. The first token on the line is the protocol type, or method of connection to be used. This is one of ax25, netrom or tcp. If you are running JNOS 2.0, you can add a fourth method, 'h', for hfdd connections.  Following this is whatever further information the chosen protocol or method requires to make the connection, perhaps a digipeater route, or just a callsign.

An example connection route for a simple ax25 connection on interface ax0 is:

    ax25 ax0 g3dlh

A more complex one is:

    ax25 ax0 g3dlh via k5arh uv-3 kb5ogn-1

Available only on JNOS 2.0 systems, you can initiate an HFDD connection on the interface 'kam', to the remote bbs 'wu3v', using something like :

    h kam wu3v

JNOS can forward to an export file. To specify forwarding to a file, use this syntax in the connect-line:

    file <path_to_export file>

When talking to Winlink servers (experimental still) over tcp connections, you should pass the 'telpac' option to the tcp method. The 'telpac' option is only available on JNOS 2.0 systems, an example connect method would look like this :

    tcp <ip address of winlink server> <tcp port> telpac

2.3. Connection commands

Connection commands may, optionally, follow the connection route. These take the form of a single character command followed by suitable argument strings. Supported commands are:

    .text   text (with CR suffix) is sent to remote. any search string is reset.

    !       eschew FBB compression

    +text   establish a search string.

    @NN     read a line with timeout of NN secs, and fail unless it contains
            the search text established with the + command.

    * NN    read and discard lines until a line matching desired string is
            encountered or until NN secs has elapsed.

    #comment_text		comment text is ignored

For example, suppose we wish to establish a netrom connection with sm0rgv-2, through the netrom node #sth67. Then the connection route and connection command portion of the record would look like:

netrom #sth67
 .c sm0rgv-2     [ Please note that the full stop would be placed at the
                   beginning of the line; I have placed it here indented
                   by one column simply so that gateways which handle this
                   message do not complain at having a line beginning with
                   a full stop; this convention is followed throughout this
                   documentation]

Another example, this time we use ax.25 protocol to connect to a netrom node, k7uyx-1, and then connect to another netrom node :

ax25 ax0 k7uyx-1        <- initial connection to netrom node
 .c rlimb               <- ask for a netrom connect from this node
 +Connected             <- if we don't get this, things went wrong
 @60                    <- maximum one minute wait !

If the station is reached through digipeating, then the digipeater callsigns should either be specified in the connect line (described above) or be in the ax25 route to the destination callsign. That is, if you wish to forward traffic to w0ljf, implicitly using k2na as a digipeater, then you should have the line:

ax25 route add w0ljf k2na

in your autoexec file.

2.4. List of areas to be forwarded

This is a list, one per line, of entries in the /spool/mail directory which will be forwarded to the remote BBS. An entry of the form :

callsign

will cause the file /spool/mail/callsign.txt to be scanned for unread messages. Any such messages are sent to the remote BBS and deleted from the file.

One can also forward user areas using this mechanism. To do this, simply place a line containing the name of the area in the record. So, to forward amsat bulletins to the BBS, one would have a line:

amsat

This will search the /spool/mail/amsat.txt file; any messages contained therein which have not been forwarded to the BBS in question will be forwarded. They will NOT be deleted. The determining factor as to whether or not entries are deleted is that if the filename is present in the /spool/areas file, then there is NO deletion, otherwise there is.

Important - ONLY FILES IN /spool/mail are checked. In particular, the outbound SMTP mail queue is NOT checked.

2.5. Changing the recipient address

Normally, NOS uses the information in the To: header line to determine the parameters used by the "S" command during BBS forwarding. Occasionally, one might want to change this behavior. In this case, a line of the form:

area  newaddress

in the list of areas to be forwarded will replace the originally typed destination with the string newaddress instead.

3. /alias

The alias file is used to map LOCAL names to other names, which may be either local or remote; additionally, from a single input message, the alias file permits one to produce multiple output messages. Thus, typical uses for the /alias file are: converting one local name to another, converting a local name to a remote name, and exploding a mail message so that it is passed on to several recipients.

The format of a record in the alias file is very simple:

aliasname       recipient1 recipient2 recipient3
<tab> or <SP>   recipient4 ... recipientN

There is no separation between records in the /alias file other than a newline.

The aliasname is a local username; that is, it does not contain an "@" symbol. When the alias file is processed, if the destination of the message matches precisely the aliasname, then the mail is redirected to ALL of the
aliased recipients.

Scanning of the /alias file is performed by the SMTP server. The SMTP timer (which controls the SMTP client) is kicked whenever the mailbox or SMTP server queues something for delivery by SMTP. Mail transport within a single NOS system
is performed through the SMTP client/server mechanism. The result of these facts is that as soon as a piece of mail is entered to the mailbox, the SMTP client is kicked and attempts to deliver the mail (which has already been scanned by the rewrite mechanism - see below). If the mail is local to the NOS system (i.e. no "@" sign in the address), then the /alias file will be scanned and the name mappings take place.

A few lines in the /alias file might look something like:

bdale   bdale@n3eua
local   fred@k0yum bdale@n3eua bill@ai0c.ampr.org
        n5op@n5op jim@k0jtz n0esg@n0esg
g4bki   g4bki@gb7bil.ampr.org

The system MUST know how to deliver traffic to each of the individual addresses in the style in which they are entered in the /alias file. If the system does not know how to deliver one of the new addresses, then it will send it to the SMTP gateway station defined by the 'smtp gateway' command.

Note that it is reasonable, and sometimes desirable, to have alias records of the form:

area    area dest1 dest2 ...

As the /alias file is scanned only once (see below), this does not result in an infinite recursion.

4. /spool/rewrite

The rewrite file is used to perform a one-to-one mapping between destination addresses as received by NOS and destination addresses as actually used by NOS. Each record within the rewrite file comprises a single line, containing either two or three entries separated by spaces. The first field is the template field; if a destination address matches the template, it is replaced by the second field. The third field, which is optional, is the single letter "r", which, if present, tells NOS to rescan the rewrite file, using the new destination address to attempt to match against the templates.

A template may contain asterisks. These stand for a match of any number of characters (including zero). In the second field, the character "$", followed by a single digit in the range 1 to 9, represents the string that matched the respective asterisk in the template. By way of example, suppose that there is a line in the rewrite file which looks like:

*@* $1%$2@g1emm.ampr.org

Then, any traffic reaching the system through the mailbox or the SMTP server, but which is supposed to go to a remote system, will be redirected to go through g1emm.ampr.org. Suppose that a user logs on, and sends a message to n0gbe@nq0i. Then the rewrite file attempts to match "n0gbe@nq0i" against the entry *@*. It matches, and assigns $1 the value n0gbe, and $2 the value nq0i. The mail file as written to the disk will no longer be to n0gbe@nq0i, but, rather, to n0gbe%nq0i@g1emm.ampr.org.

The nomenclature ‘station1%station2@station3’ means the final destination is ‘station1@station2’, and this traffic is to be routed through the gateway ‘station3’.

As soon as a template match is found, the conversion is performed and scanning is stopped, unless the third "r" field is present, in which case scanning restarts from the top of the file.

Note:  It is a good idea to have a line of the form:

*@*.ampr.org $1@$2.ampr.org

at the beginning of your rewrite file. This will cause all amprnet traffic to be caught early in the rewrite scan, and no further scanning (and, hence, no unexpected substitutions) will take place.

5. Scanning procedure

The two files which are used to determine the disposition of traffic are scanned under slightly different circumstances. Note that neither the /alias nor the /spool/rewrite scan makes any actual changes to the contents of the traffic. In particular, the To: field remains exactly as it was first entered into the system, with one exception: if the message is to be stored into a local area, and if the To: field ends with @our_hostname, then this suffix is removed, and any rightmost % symbol is changed to an @ symbol, to facilitate forwarding to ax.25 networks.

There are four possible entry routes for traffic into the system: SMTP, through the mailbox by a user, through the mailbox by a BBS, and via an external program (like BM) or creation of the files manually. NOS determines if a piece of traffic was entered into the system by a BBS by looking for a BBS system ID (like the "[JNOS-IHM$]" block issued by NOS) on the incoming connection prior to messages being uploaded.

5.1. Traffic received by SMTP server

1.	The rewrite file is scanned and any changes applied (unless the
   traffic was received through the local mailbox; in that case, this
   step does not occur).

    2. If the traffic appears to be local then the alias file is scanned
       and any changes or explosions applied.

    3. Any copies local to the system are delivered; copies for remote
       delivery are placed in the SMTP queue.

5.2. Traffic received by mailbox from user

    1. The rewrite file is scanned and any changes applied

    2. The traffic is passed to the SMTP client.

5.3. Traffic received by mailbox from BBS

    1. The rewrite file is scanned and any changes applied

    2. The traffic is passed to the SMTP client.

5.4. Traffic entered by external mechanism

    1. No scanning occurs

    2. The traffic is passed to the SMTP client.

6. Headers

Appropriate RFC-822 headers are added to all incoming traffic. Traffic entering through the mailbox receives a full complement of RFC-822 headers; traffic coming through the SMTP server has only a "Received:" header applied. On forwarding to a BBS, if an item of traffic contains BBS R: headers, the RFC-822 header is converted to an appropriate R: line at the time that NOS forwards the message. (This change only occurs for BBS forwarding; forwarding by SMTP
retains the RFC-822 headers.)
7. Bulletin Identifiers (BIDs)

The AX.25 BBS system has evolved a reasonably efficient way of reducing overhead when forwarding bulletins. When a bulletin is originated on a BBS, it is given a unique bulletin identifier (BID). This BID should (theoretically) travel with the bulletin, and should never be changed during the distribution of the bulletin. Each system keeps track of all received BIDs. If a forwarding station wishes to forward a bulletin to a BBS, then the receiving station checks its local list of known BIDs and informs the transmitting station if it already possesses the bulletin in question. The NOS mailbox conforms to this protocol. Received BIDs are stored in the file /spool/history, and are encoded in the Message-ID: header line of the message by NOS. Messages forwarded from areas listed in the /areas file will have their BID (re)generated from the Message-ID: line. Note that ALL messages from public areas are forwarded with a BID, whether or not the message was produced with the "SB" command. Like other BBSes, NOS will inform a transmitting station not to transmit a bulletin if it is one that NOS already has locally; likewise, it understands similar messages from other stations to which it tries to forward.

Note that the BID mechanism is not a part of the SMTP world. If you are forwarding bulletins through SMTP, there is no certain mechanism by which the receiving station can reject the attempted delivery of a bulletin, even if it already exists on the recipient system. JNOS will generate a bid that will match the bids that other JNOS systems generate from the same message, but this convention is not universally followed. (Note that another possible workaround is to deliver bulletins to TCP/IP stations using TCP instead of SMTP. Alternatively, one could use NNTP, as NNTP commands utilize the Message-ID: line, from which the BID is derived.) The BID is preserved no matter which mechanism is used to deliver the bulletin.

8. Traffic in practice

Now, the big question is, how does one set up these various files to perform intelligent manipulation of mail? A number of examples follow. Note that, often, there is more than one way to accomplish an objective. The following are merely examples (and not necessarily the most efficient method possible for any given case). The format used will be :

typed destination -> intended destination

followed by the necessary entries in the :

alias (/alias), rewrite (/spool/rewrite), forwarding (/spool/forward.bbs) files.

8.1. Using familiar names - SMTP destination

bdale -> bdale@n3eua.ampr.org

alias:
bdale   bdale@n3eua.ampr.org

rewrite:
forward:

8.2. Exploding local mail

sysops -> nq0i, n5op@n5op.ampr.org

alias:
sysops  nq0i n5op@n5op@ampr.org

rewrite:
forward:

8.3. Using familiar names - BBS forwarding

g4bki -> g4bki@gb7bil.2712.gbr.eu, to be forwarded by ai0c

alias:
rewrite:
forward:
ai0c
ax25 ax1 ai0c
g4bki g4bki@gb7bil.2712.gbr.eu
ai0c

8.4. Handling incoming bulletins by subject

tcpip@* -> nq0i, tcpip, bdale@n3eua.ampr.org, ai0c@ai0c [a BBS]

alias:
tcpip   nq0i tcpip bdale@n3eua.ampr.org ai0c

rewrite:
tcpip@* tcpip

forward:
ai0c
ax25 ax1 ai0c
ai0c

Let's walk through the above example. An incoming item comes in addressed to TCPIP@ALLUS. A scan is made through the rewrite file, and a match is found. The item is redirected to tcpip. The alias file is scanned; a total of four copies of the item exist after this, three in local areas tcpip, nq0i and ai0c, and one on the SMTP queue (for bdale@n3eua.ampr.org). When the mailbox timer next ticks, the mail in the local ai0c area will be forwarded on the ax1 interface to ai0c.

8.5. Routing based on Hierarchical addressing

Wyoming -> KE7VS (SMTP)
Nebraska -> AG0N (BBS over the NETROM, NETROM ID WNBBS)
Europe -> W0LJF (BBS over AX.25)

alias:
rewrite:
*.noam            $1.na r
*.us              $1.usa.na r
*.usa             $1.usa.na r

*.ne              $1.ne.usa.na r
*.wy              $1.wy.usa.na r

*@*.wy.usa.na     $1%$2.wy.usa.na@ke7vs

*.ne.usa.na       ag0n
*.eu              w0ljf

forward:
ag0n
netrom ax0 wnbbs
ag0n
----------
w0ljf
ax25 ax1 w0ljf
w0ljf
----------

Why is the example rewrite file apparently so complicated? This is to handle poorly constructed hierarchical addresses in a reasonable way. A full U.S. hierarchical address has the form: callsign@BBS.#localid.state.usa.na. Many states have no #localid field. In the example rewrite file above, the first three lines convert non-standard, but frequently used, U.S. designators to the more standard format. It is common for users not to use a full hierarchical address if the destination is relatively local. For example, a user might easily use only .wy instead of the full .wy.usa.na if he is geographically close to Wyoming. The second grouping of two lines handles this problem. Note the third, "r", field in all the entries so far.

The remainder of the file handles properly formatted hierarchical addresses.

8.6. General bulletin handling

The details of bulletin handling will vary somewhat from place to place, as there are several distinct styles of bulletin handling currently in use in the AX.25 BBS world. In general, it is necessary to arrange one's system so that it accepts bulletins from BBSes, forwards them to one or more stations, and also handles intelligently bulletins input by users into NOS.

Suppose that we wish to handle bulletins @JUNK. We are to deposit them locally in the junk area, and also forward to BBS g4bki. We also know that we generally receive @JUNK bulletins from g4amj, a local BBS which handles much bulletin traffic.

alias:
rewrite:
*@junk   junk

forward:
g4bki
ax25 ax1 g4bki
g4bki
junk
----------
g4amj
ax25 ax1 g4amj
g4amj
junk
----------

All incoming @JUNK traffic is written to the junk area (which should be an explicit entry in the /spool/areas file). Each tick of the mailbox timer, NOS scans the junk area for traffic not forwarded to g4bki or g4amj and attempts to deliver unforwarded bulletins. Usually, g4amj will respond with a "Have it" message and the bulletin will not be forwarded. Any bulletins @JUNK deposited locally by users will automatically be sent to both g4bki and g4amj.

9. Questions and Answers

Q. Under what circumstances does NOS request reverse forwarding from a BBS ?

NOS requests a reverse forward after completing any forwards of its own to the BBS. If no traffic was queued for a given BBS, then no connection is attempted, so no reverse forward request is issued, UNLESS the P (poll) flag is in a forward.bbs time-spec field.  Reverse forwarding can be forced by specifying the BBS callsign in upper case, i.e., mb kick N5KNX

Q. What kinds of message types does the NOS mbox support?

Basically, NOS supports all two letter commands starting with an "S". If the mailbox has not received an SID banner (the "[NOS-H$]") from a connected station, then an SF command will forward the current message to the address specified on the command line. The SR command will send a reply to the current message. One can also issue the command "SR <number>", where <number> is the number of the message to which you want to generate a reply. All other variations cause an X-BBS-Msg-Type: header to be added to the message. When a message with such a line is forwarded to a BBS, it is sent to the BBS with the appropriate message type as the second letter in the "S" command to the BBS.

If NOS has received a valid SID, then ALL S commands are handled by the X-BBS-Msg-Type: mechanism outlined above.

10. Logic map of the mailbox

===== AX.25 =========== NET/ROM ========== Ethernet ======= Loopback ===
       |                   |                  |                |
       |                   |                  |                |
+--------------+   +-------------+     +-------------+    +------------+
|              |   |             |     |             |    |            |
|   Mailbox    |   | SMTP client |     | SMTP server |    | BBS Forward|
|              |   |             |     |             |    |            |
+--------------+   +-------------+     +-------------+    +------------+
       |                   ^                  |                 ^
       |                   |                  |                 |
       v                   |                  v                 |
+--------------+  +--------------+  +---------------+    +-------------+
|              |  |              |  |               |    |             |
| Add RFC822   |  | Use MX or A  |  | Add Received  |    | Add own R:  |
| header suite |  | type records |  | line          |  +>| line        |
|              |  |              |  |               |  | |             |
+--------------+  +--------------+  +---------------+  | +-------------+
       |                  ^                  |         |        ^
       |                  |                  |         |        |
       v                  |                  v         |        |
+--------------+  +---------------+  +---------------+ | +-------------+
|              |  |               |  |               | | |             |
| Get Rewrite  |  | Use optional  |  | Apply Rewrite | | | Strip RFC822|
| file address |  | SMTP gateway  |  | file address  | | | header suite|
|              |  |               |  |               | | |             |
+--------------+  +---------------+  +---------------+ | +-------------+
        |                  ^                  |        |         ^
        |                  |                  |        |         | Yes
        v                  |                  v        |         |
+--------------+           |         +--------------+  |  +------------+
|              |   No      |         |              |  |  |            |
| Local addr?  |--------+  |         | Alias file   |  +--|Any R:lines?|
|              |        |  |         |              |   No|            |
+--------------+        |  |         +--------------+     +------------+
        |               |  |                 |                   ^
        | Yes           |  |                 |                   |
        |               |  |                 |                   |
        v               v  |                 v                   |
+--------------+    +-------------+   +------------+     +-------------+
| Apply Rewrite|    |             | No| Local      |Yes  | /spool/mail/|
| file address |--->| SMTP queue  |<--| address?   |---->| directory   |
|              |    |             |   |            |     |             |
+--------------+    +-------------+   +------------+     +-------------+

APPENDIX D

Of PACLEN, MTU, MSS, and More

Note - This appendix is taken from the JNOS40 Config Manual written by Johan Reinalda and William Thompson c. 1994.  

Setting Bufsize, Paclen, Maxframe, MTU, MSS and Window

Many NOS users are confused by these parameters and do not know how to set them properly.  This appendix will first review these parameters and then discuss how to choose values for them.  Special emphasis is given to avoiding interoperability problems that may appear when communicating with non-Nos implementations of AX.25.

1. AX25 Parameters

1.1. Paclen

Paclen limits the size of the data field in an AX.25 I-frame. This value does not include  the  AX.25  protocol header (source, destination, digipeater addresses, control and pid bytes).  The AX.25 V2 protocol specifies a maximum of 256 bytes for the paclen. Be aware that some AX.25 implementations can not handle paclen greater then this, however NOS derived systems can handle this situation. This may cause interoperability problems. Even Nos may have trouble with certain KISS TNCs because of fixed-size buffers. The original KISS TNC code for the TNC-2 by  K3MC can handle frames limited in size only by the RAM in the TNC, but some other KISS TNCs cannot. Since unconnected-mode (datagram) AX.25 uses UI frames, the paclen value has no effect in unconnected mode. IE. if you run IP in Datagram mode, you can still have an MTU > Paclen ! (As long as your receive buffers can handle the mtu size; see INTERFACE BUFFERS for more info)

In JNOS40, and JNOS v1.05 (and greater), paclen can be set on a per interface basis with the 'ifconfig <iface> paclen ###' command. Thus you can have a paclen of 256 on one interface and a smaller or larger on other interfaces. When you first attach an interface, the paclen defaults to the value of the 'ax25 paclen'
setting (this defaults to 256.)  If you want to carry netrom data over ax.25 links, the system needs to make sure the paclen is large enough to handle the netrom MTU sized data. Net/rom mtu is a maximum of 236; with a 20 byte header for the routing, this gives a data size of 256 to be send with ax.25 packets.

In most versions of NOS.EXE, you can get problems when you use netrom and set the paclen < 256. When the ax.25 layer gets to send netrom frames, it cannot handle the whole data in one packet. It will then split it up in several smaller frames, using the AX.25 Version 2.1 fragmentation scheme. However, TheNet, Net/Rom, G8BPQ, MSYS and other nodes CAN NOT handle this type of  fragmentation, resulting in impossible connections ! However, if you are running JNOS40, or JNOS v1.05 (or greater) for the PC, you need not worry about this. These 2 version of NOS have been modified to never provide more then paclen sized netrom data to the ax.25 layer ! Thus the above problem will never happen ...

1.2. Maxframe

This parameter controls the number of I-frames that may be send on an AX.25 connection before it must stop and wait for an acknowledgement. Since the AX.25/LAPB sequence number field is 3 bits wide, this number cannot be larger than 7. It can be shown that the optimal value is 1.

Since unconnected-mode (datagram) AX.25 uses UI frames that do not have sequence numbers, this parameter does not apply to unconnected mode.

2. IP and TCP Parameters

2.1. MTU

The MTU (Maximum Transmission Unit) is an interface parameter that limits the size  of  the largest IP datagram that it may handle. The MTU is the sum of the size of the data inside the IP header (TCP of UDP most likely), and the size of the IP header itself.  IP datagrams routed to an interface that are larger than its MTU are each split into two or more IP fragments.  Each fragment has its own IP header and is handled by the network as if it were a distinct IP datagram, but when it arrives at the destination it is held by the IP layer until all of the other fragments belonging to the original datagram have arrived. Then they are reassembled back into the complete, original IP datagram. The minimum acceptable interface MTU is 28 bytes: 20 bytes for the IP (fragment) header, plus 8 bytes of data.  There is no default MTU in Nos; it must  be  explicitly specified  for  each interface as part of the 'attach' command. This is not the case for the netrom interface.  Since ip data is carried inside a 'regular' netrom frame, the ip data should never be larger then the maximum data size the netrom protocol can handle.  The default mtu here is 236, which is the protocol maximum.

If you plan on running IP in Datagram mode (the default), you can have an MTU that is larger then the paclen for that interface.  However, you should still be aware of the constraints of the receiver buffer size! (See INTERFACE BUFFERS)

If you plan on using IP in Virtual Connect, or VC, mode, you should be aware of the following.  If you set the IP MTU larger then paclen for the interface, you will hand a packet to the ax.25 layer that is larger then what it can send in one packet.  Thus you will get AX.25 V2.1 fragmentation. If you are exchanging ip data with NOS based stations only, you have no problems (other then the fragmentation).

If you are interfacing with stations other then NOS bases systems, you again will have troubles, like with netrom.  They will most likely not be able to handle the packets correctly. Thus be aware that in this case you should set the mtu to equal the paclen, to avoid these problems.

2.2. MSS

MSS (Maximum Segment Size) is a TCP-level parameter that limits the amount of data that the remote  TCP will send in a single TCP packet. MSS values are exchanged in the SYN (connection request) packets that open a TCP connection. In the Nos implementation of TCP, the MSS actually used by TCP is further reduced in order to avoid fragmentation at the local IP interface.  That is, the local TCP asks IP for the MTU of the interface that will be used to reach the destination.  It then subtracts 40 from the MTU value to allow for the overhead of the TCP (20 bytes) and IP (20 bytes) headers. If the result is less than the MSS received from the remote TCP, it is used instead.

2.3. Window

This is a TCP-level parameter that controls how much data the local TCP will allow the remote TCP to send before it must stop and wait for an acknowledgment. The actual window value used by TCP when deciding how much more data to send is referred to as the effective window. This is the smaller of two values: the window advertised by the remote TCP minus the unacknowledged data in flight, and the congestion window, an automatically computed time-varying estimate of how much data the network can handle.

2.4. Discussion

2.4.1. IP Fragmentation vs. AX.25 Segmentation

IP-level fragmentation often makes it possible to interconnect two dissimilar networks, but it is best avoided whenever possible. One reason is that when a single IP fragment is lost, all  other  fragments belonging  to  the same datagram   are  effectively  also  lost  and  the  entire  datagram  must  be retransmitted by the source.  Even without  loss, fragments require the allocation of temporary buffer memory at the destination, and it is never easy to decide how long to wait for missing fragments before giving up and discarding those  that  have already arrived.  A reassembly timer controls this process.  In Nos it is  (re)initialized with the 'ip  rtimer' parameter  (default 30 seconds)  whenever  progress  is made in reassembling a datagram (i.e., a new fragment is received).  It is not necessary that all of the fragments belonging  to  a  datagram  arrive  within a single time-out interval, only that the interval between fragments be less than the time-out.

Most commercial sub networks that carry IP have MTUs of  576 or more, so interconnecting them with sub networks having smaller values can result in considerable fragmentation. For this reason, IP implementors working with links or subnets having unusually small packet size limits are encouraged to  use transparent fragmentation, that is, to devise schemes to break up large IP datagrams into a sequence of link or subnet frames that are immediately reassembled on the other end of the link or subnet into the original,  whole IP datagram without the use of IP-level fragmentation.

Such a scheme is provided in AX.25 Version 2.1. It can break a large IP or NET/ROM datagram into a series of paclen-sized AX.25 segments (not to be confused with TCP segments), one per AX.25 I-frame, for transmission.  Subsequently, it can reassemble them into a single datagram at the other end of the link before handing it up to the IP or NET/ROM module.

Unfortunately, the segmentation procedure is a new feature in AX.25 and is not yet widely implemented; in fact, Nos and derived software, is so far  the only known implementation. For regular NOS systems this can create  some interoperability  problems between Nos and non-Nos nodes. However, JNOS40 and JNOS 1.05 (or later) have provisions built in to avoid these problems. This problem is discussed further in the  section on setting the MTU.

2.4.2. Setting MTU

TCP/IP header overhead considerations similar to those of the AX.25 layer when setting paclen apply when choosing an MTU.  However, certain sub network types supported by Nos have well-established MTUs, and these should always be used unless you know what you're doing: 1500 bytes for Ethernet, and 508 bytes for ARCNET.  The MTU for PPP is automatically negotiated, and defaults to 1500. Other subnet types, including SLIP and AX.25, are not as well standardized.

SLIP has no official MTU, but the most common implementation (for BSD UNIX) uses an MTU of 1006 bytes.  Although Nos has no hard wired limit on the size of a received SLIP frame, this is not true for all other systems. Interoperability problems may therefore result if larger MTUs are used in Nos.

Choosing an MTU for an AX.25 interface is more complex. When the interface operates in datagram (UI-frame) mode, the paclen parameter does not apply. The MTU effectively becomes the paclen of the link. However, when using AX.25 CONNECTIONS to send IP packets, data will be automatically segmented into I-frames no larger than paclen bytes.  Unfortunately, as also mentioned earlier, Nos is so far the only known implementation of the new AX.25 segmentation procedure. Thus, if you are exchanging IP over connections (i.e. VC mode) with none-NOS based systems, it might be needed to avoid AX.25 segmentation. Thus you should make sure that packets larger than paclen are never handed to AX.25. In order to assure this, you should not set the MTU greater then the paclen.

On the other hand, if you do not send IP over connections, but in datagram mode, you can use a larger MTU. Here, you are limited by the receive buffer size (and the tolerance of other network users for your large packets and proportionally greater bandwidth share !).

For connections carrying IP between NOS systems (i.e. NOS-NOS VC mode), you can let AX.25 segmentation do it's thing. If you choose an MTU on the order of 1000-1500 bytes, you can largely avoid IP-level fragmentation and reduce TCP/IP-level header overhead on file transfers to a very low level. And you are still free to pick whatever paclen value is appropriate for the link.

2.4.5. Setting MSS

The setting of this TCP-level parameter is somewhat less critical than the IP and  AX.25 level parameters already discussed, mainly because it is automatically lowered according to the MTU of the local  interface when  a  connection is  created.  Although this is, strictly speaking, a protocol layering violation (TCP is not supposed to have any knowledge of the workings of lower layers) this technique does work well in practice.  However, it can be fooled; for example, if a routing change occurs after the connection has been opened  and  the new local interface has a smaller MTU than the previous one, IP fragmentation may occur in the local system.

The only drawback to setting a large MSS is that it might cause avoidable fragmentation at some other point within the network path if it includes a "bottleneck" subnet with an MTU smaller than that of the local interface. (Unfortunately, there is presently no way to know when this is the case.

There is ongoing work within the Internet Engineering Task Force on a "MTU Discovery" procedure to determine the largest datagram that may be sent over a given path without fragmentation, but it is not yet complete.) Also, since the  MSS  you specify is sent to the remote system, and not all other TCPs do the MSS-lowering procedure yet, this might cause the remote  system  to  generate IP fragments unnecessarily.

On the other hand, a too-small MSS can result in a considerable performance loss, especially when operating over fast LANs and networks that can handle larger packets. So the best value for MSS is probably 40 less than the largest MTU on your system, with the 40-byte margin allowing for the TCP and IP headers. For example, if you have a SLIP interface with a 1006 byte MTU and an Ethernet interface with a 1500 byte MTU, set MSS to 1460 bytes. This allows you to receive maximum-sized Ethernet packets, assuming the path to your system does not have any bottleneck subnets with smaller MTUs.

2.4.6. Setting Window

A sliding window protocol like TCP cannot transfer more than one window's worth of data per round trip time interval. So this TCP-level parameter controls the ability of the remote TCP to keep a long "pipe" full. That is, when operating over a path with many hops, offering a large TCP window will help keep all those hops busy when you're receiving data. On the other hand, offering too large a window can congest the network if it cannot buffer all that data. Fortunately, new algorithms for dynamic controlling the effective TCP flow control window have been developed over the past few years and are now widely deployed. Nos includes them, and you can watch them in action with the 'tcp status <tcb>' or 'socket <#>' commands. Look at the cwind (congestion window) value.

In most cases it is safe to set the TCP window to a small integer multiple of the MSS, (e.g. 4 times), or larger if necessary to fully utilize a high bandwidth*delay product path. One thing to keep in mind, however, is that advertising a certain TCP window value declares that the system has that much buffer space available for incoming data.  Nos does not actually  pre-allocate this space; it keeps it in a common pool and may well overbook" it, exploiting the fact that many TCP connections are idle for long periods and gambling that  most  applications will read incoming data from an active connection as soon as it arrives, thereby quickly freeing the buffer memory. However, it is possible to run Nos out of memory if excessive TCP window sizes are advertised and either the applications go to sleep indefinitely (e.g. suspended Telnet sessions) or a lot of out-of-sequence data arrives. It is wise to keep an eye on the amount of available memory and to decrease the TCP window size (or limit the number of simultaneous connections) if it gets too low.

Depending on the channel access method and link level protocol, the use of a window setting that exceeds the MSS may cause an increase in channel collisions. In particular, collisions between data packets and returning acknowledgments during a bulk file transfer may become common. Although this is, strictly peaking, not TCP's fault, it is possible to work around the problem at the TCP level by decreasing the window so that the protocol operates in stop-and-wait mode. This is done by making the window value equal to the MSS.

2.5. Summary

In most cases, the default values provided by JNOS40 for each of these parameters will work correctly and give reasonable performance. Only in special circumstances such as operation over a very poor link or experimentation with high speed modems should it be necessary to change them.

Interface Buffers

There are two different types of buffers associated with attaching interfaces. The first type is the ring buffer or fifo (first in, first out) that is used when attaching the serial port. It is used for receiving only. This buffer is allocated just once, and is used throughout the life of the interface. The asynchronous (or serial port) receiver interrupt code puts characters in this buffer in a circular fashion. When the end of the buffer is reached, the next character is stored at the beginning and continues through the buffer again.

The receiver process for the serial interface reads the characters from this fifo-buffer into memory buffers, or mbufs, that are used internally to handle and pass around data. Setting the size of the fifo buffer is an empirical process. A good place to start is to set it to twice the size of the packet length used over the serial port.  Once you have the interface running, you can monitor the usage of the fifo buffer with the 'asy' command.  This will show you the 'buf hi' value which is the same as 'sw hi' for PC based NOS. 'buf hi' is the highest value of the number of characters that were waiting in the fifo buffer to be read by the receiver process.  If 'buf hi' is close to the fifo buffer size, or if the 'asy' command shows buffer overflows ('buf over' for JNOS40 code), you should increase the buffer size.  If however the number is significantly smaller, you could decrease the buffer size.

The second type of interface buffer is also a receiver buffer.  However, this type of buffer is allocated, then released as needed. This buffer almost always is allocated during interrupt service routines, i.e., when the interrupts are off!  In order to keep the service routine short, the buffer is allocated from a special 'interrupt buffer queue' because a regular memory allocation would take far too long.

The two internal modem drivers use this second type of buffer. Since one interrupt buffer pool services all the drivers that need buffers during interrupt, the size and number of these buffers are quite critical to a system's 'well-being'.  A buffer acquired from the interrupt buffer pool needs to be large enough to handle the largest packet received from any of the internal modem interfaces.

A good rule to estimate the size of interrupt buffers needed, is as follows:

Set 'memory ibufsize' to the (largest + 'extra') of :

1 - the largest ax.25 paclen parameter of the internal modem interfaces, OR

2 - the largest ip mtu parameter of the internal modem interfaces.

Add to that (plus) 'extra' which accounts for the longest possible ax.25 header (source, destination, control and digipeaters). Use 80 bytes for' extra' as a general rule.

The MTU is important because on ax.25 interfaces where the MTU is larger than the paclen, there is a possibility of receiving larger ip frames when IP traffic is carried in Datagram mode.  This possibility does not exist if IP traffic is carried in Virtual Connect (VC) mode, since the data will be split in several paclen-sized ax.25 packets.  (This is AX.25 V2.1 fragmentation at work for you!)  When using VC mode you can ignore the MTU values when finding the ibuf size.

The above discussion assumes that paclen and mtu values are coordinated between all users in your area packet network. If this is not the case, someone else might send packets larger then what your system can handle. Such packets will cause receive buffer overflow and will be dumped! If you have an ax.25 interface with paclen of 256, mtu of 256, and another with paclen of 256 and mtu of 512, you should set the 'memory ibufsize' to at least 512 + 80 !  JNOS40 ibufs default to 600 bytes, and should suffice for paclen's or mtu's up to 512.  NOS.EXE has a default ibufsize of 2k (ie 2048 bytes), wich suffices for the standard Ethernet MTU of 1500 bytes. Determining the number of buffers needed is another empirical process. Start with, say, ten buffers (ie 'memory nibufs 10'). If you get a lot of  memory ibuffails in the 'mem stat' display, you should increase the number of buffers.  

NOTE: if you are not using one or more of the internal modems or any drivers that require interrupt buffers, there is no need to keep them around.  In that case, simply set 'mem nibuf 0'.

APPENDIX E

DOS Environmental Variables

JNOS uses a few environment variables, two of them are required for the proper working of JNOS at all, a few are used if you compiled in the support for callbook CD's, and others are totally optional. Recall that environment variables are established by the DOS "set" command, typically in autoexec.bat, and have the syntax:  set varname=value

Required Variables

COMSPEC

TZ

This is the TIME ZONE variable. It is used throughout the code to determine the proper time with respect to what the PC clock reports. You may wish to set your PC clock to UTC time, and then set TZ=GMT0. This is the simplest method, but it may be annoying to have to convert the time when looking at your status line, or when using other software than JNOS.  A benefit is, you do not have to change anything when daylight savings comes in effect or stops.  An alternate method requires you to set the true local time (and to modify your pc time when daylight savings becomes effective, since Borland C uses the USA rules for when daylight time starts and ends), and then set TZ following this scheme:

    TZ=aaabcddd

Where

    aaa = SOLAR time zone name, e.g.: CET
      b = '+' or '-', see the following
      c = UTC - Localtime (solar).
          * if value is negative b='-'
          * if value is positive b='+'
    ddd = Daylight savings zone name, e.g.: CDT

TMP

This is the TEMPORARY FILES directory. JNOS puts here some files it uses for various purposes (incoming mail, screen output when changing session, etc.). It is wise to set this to a directory that can be happily erased in case something goes wrong. Do not set TMP=c:\dos ! You would end up with a lot of rubbish. I personally have created a c:\temp directory and have TMP point there. It may be useful also to point TMP to a ramdrive if you have one in XMS or EMS memory, but it must be large enough to accommodate the space demands of JNOS work files. It should be at least twice as large as the biggest SMTP message you expect to receive. Also, don't forget to take into account that JNOS can be doing many tasks "simultaneously".  If you do not define TMP, JNOS will store it's work files in the root directory.

Variables required by the callbook code

QRZDRV

The QRZ callbook server needs this variable to know where the CD is.

For example: set QRZDRV=f:

QRZPATH

Also needed for the QRZ callbook server, it should point to the directory (on QRZDRV) where the callbkc.idx and callbkc.dat files are.

For example: set QRZPATH=\callbk

SAMAPI

This is required by the SAM callbook code, and specifies the decimal integer value of the samapi tsr software's multiplex id.

For example: set SAMAPI=98

Optional Variables

TERM

You can set here the TERMINAL TYPE you want to be used for the rlogin client. Also the extended telnet options (not compiled in the standard distributions) use this variable.

For example: set TERM=vt100

USER

Sets the USER NAME default to be used in rlogin and ftp client connections by overriding default value.  The Ident protocol also uses this variable to identify the console user.

For example: set USER=ik5pvx

MSGUSER

If you compiled in the mailmsg command, it will use this variable to form the From: field of the message. If undefined, it will use 'sysop'.

For example: set MSGUSER=ik5pvx

NOSSYSOP, NOSPASSWD, NOSPATH, NOSPRIVS

These are used to allow the sysop to log in case the ftpusers file gets corrupted. NOSSYSOP is the username and NOSPASSWD is the corresponding password. NOSPATH defaults to the root of the current disk and can be used to specify where NOSSYSOP can go, in the same format as used in the ftpusers file. NOSPRIVS specifies the access privileges. It can be a decimal or a hexadecimal number, again with the same meanings as in ftpusers. It defaults to 0x407f, i.e. can read, erase, use the gateways, be sysop and expert.

NOSSYSOP

Sets username.

NOSPASSWD

Sets the password

NOSPATH

Sets the path. If not set, it will be the root directory on the current drive.

NOSPRIVS

Sets the Privileges.  If not set it will be FTP_READ + FTP_CREATE + NETROM _CMD + TELNET_CMD + SYSOP_CMD + IS_EXPERT. NOSPRIVS accepts both decimal and hexidecimal if "0x" precedes the value.

APPENDIX F

SAMPLE REWRITE FILE

You need to EDIT this file to suit your call and your neighbors

#
# Sample rewrite file for K5ARH pbbs, also known as w5ddl.ampr.org
#
# Special destinations: refuse  => send NO (ax.25) or Bad host (smtp)
# (a.k.a. "areas")      nts*    => mailbox writable by all (ie: kill cmd works)
#                                  Also, ST used in forwarding.
#                       help    => never flag as already read, so L shows all
#

# take x%y@me and reprocess as x@y
*%*@w5ddl* $1@$2 r
*%*@localhost* $1@$2 r

# For dual-id'ed BBSes, treat @one as @other:
*@k5arh* $1@w5ddl r

# Next, pass real FQDN's unchanged
*@*.edu $1@$2.edu
*@*.com $1@$2.com
*@*.gov $1@$2.gov
*@*.org $1@$2.org
*@*.net $1@$2.net
*@*.mil $1@$2.mil

# Now addresses we discard with impunity (junk, useless stuff from gatewayed systems)
#eg, astro@* refuse
#eg, *@dist9 refuse
dx@ww refuse

# Handle local sysop, and sysop bulls
sysop k5arh
sysop@w5ddl* k5arh
sysop@allla allla
sysop@* sysop
*@sysop sysop

# Now pass specific bulletins on to our areas
# NOTE: It is important that the lines below are kept in that order
# (Ie TO sorting FIRST, then AT sorting !!)
# Otherwise something like 'amsat@allusa' will end up in the 'allusa' area
# instead of the 'amsat' area where I prefer it.
tcpip@* tcpip
wanted@* wanted
want@* wanted
need@* wanted
wp@* btrbbs
sale@* sale
4sale@* sale
trade@* sale
swap@* sale
dx@* dx
races@* races
fcc@* fcc
amsat@* amsat
arrl@* arrl
ares@* ares
nasa@* nasa
gulf@* gulf
keps@* keps
larc@* larc
kd5sl@* btrbbs
#
*@gulf gulf
*@nasa nasa
*@amsat amsat
*@ares* ares
*@arrl arrl
*@arl arrl
*@la allla
*@allla allla
*@allus* allus
*@allbbs* allus
*@us* allus
*@usa allus
*@franca franca
*@ww ww
laoep@* laoep
*@laoep* laoep

# LARC is local Lafayette distribution
*@larc larc
*@test test

# Anything left @w5ddl is private mail to my users
*@w5ddl* $1
w5ddl@* k5arh

# Handle local hosts I forward to
*@n5knx* n5knx
*@wu3v* wu3v

# Now BBSes we pass north/east/westward
*@wb5bke* bkebbs
*@kb5ogn* ognbbs
*@ka5nmn* ognbbs
*@k4ry* k4ry
*@ka4pkb* ka4pkb
*@w5ksi* norbbs
*@kb4gbs* norbbs
*@kk4cq* norbbs
*@n5ssy* norbbs
*@w4iax* norbbs
*@n5uxt* norbbs
*@wd5ghw* btrbbs
*@kd5sl* btrbbs
*@ae5v* aexbbs
*@ke5l* aexbbs
*@wg5w* aexbbs
*@kb5bfv* lchbbs
*@n2ktq* lchbbs
*@wb5txn* lchbbs
*@kb5tbb* cnbbbs
*@kb5vjy* aexbbs
*@wa4imz* cnbbbs
*@ka5kth* cnbbbs
*@wb5fro* cnbbbs
*@f6cnb* cnbbbs
*@w0gvt* cnbbbs
ka3zyp@* cnbbbs

# Handle frequent mistakes or special cases or some other reason I now forget:
71*@* aexbbs
kb5bfv lchbbs
kb5bfv@* lchbbs
ae5v@* aexbbs
kc5gwh@* bkebbs
kc5gwh bkebbs
n5ssy norbbs
ka5nmn@* ognbbs
ka5ydj@* norbbs
n5ssy@* norbbs
wb5vtn@* norbbs
n5eqo@* norbbs

# NTS local, in-state, outside
*@705* ntslocal
*@71* aexbbs
*@706* lchbbs
*@70* btrbbs
*@ntstx* cnbbbs
*@nts* nts

# Now state-specific forwarding (if any)
*@*.tx* cnbbbs

# Continents via HF at west f6cnb
*@*.eu cnbbbs
*@*.oc cnbbbs
*@*.noam cnbbbs
*@*.na cnbbbs
*@*.usa cnbbbs
*@*.as cnbbbs
*@*.af cnbbbs
*@*.sa cnbbbs

# Anything else means we must add more, above
*@* check

# Try to handle addressing mistakes by mbox users!
*/* check
*\* check
*&* check
*.* check