Date: Mon,  8 Mar 93 04:30:11 PST
From: Advanced Amateur Radio Networking Group <tcp-group@ucsd.edu>
Errors-To: TCP-Group-Errors@UCSD.Edu
Reply-To: TCP-Group@UCSD.Edu
Precedence: Bulk
Subject: TCP-Group Digest V93 #64
To: tcp-group-digest


TCP-Group Digest            Mon,  8 Mar 93       Volume 93 : Issue   64

Today's Topics:
                   HELP: NOS/JNOS Shared Interrups.
                     Help with USCC Baycom Card.
                      hidden transmitter routing
                           PM NOS Question
                   TIPMAIL Problem and ASY buffers

Send Replies or notes for publication to: <TCP-Group@UCSD.Edu>.
Subscription requests to <TCP-Group-REQUEST@UCSD.Edu>.
Problems you can't solve otherwise to brian@ucsd.edu.

Archives of past issues of the TCP-Group Digest are available
(by FTP only) from UCSD.Edu in directory "mailarchives".

We trust that readers are intelligent enough to realize that all text
herein consists of personal comments and does not represent the official
policies or positions of any party.  Your mileage may vary.  So there.
----------------------------------------------------------------------

Date: Mon, 8 Mar 93 02:50:06 PST
From: algedi!aa6ed (aa6ed)
Subject: HELP: NOS/JNOS Shared Interrups.
To: tcp-group@ucsd.edu

I understand that there is an implementation that allows NOS/JNOS to utilize
shared interrupts.  According to my search of JNOS 1.07, there doesn't seem
to be that capability.  What am I missing?  Does KA9Q offer this feature?


-------------------------------------------------------------
I8250.C
-------------------------------------------------------------

/* Interrupt handler for 8250 asynch chip (called from asyvec.asm) */
void
asyint(dev)
int dev;
{
        struct asy *asyp;
        unsigned base;
        char iir;

        asyp = &Asy[dev];
        base = asyp->addr;
        while(((iir = inportb(base+IIR)) & IIR_IP) == 0){
                switch(iir & IIR_ID_MASK){

***  Text Deleted:  This section receives a device number (pushed AX)
                    and calls the respective RX/TX service routine.
                    As you can see, it only seems to handle one device
                    per IRQ interrupt.

----------------------------------------------------------
ASYVEC.ASM
------------------------------------------------------------

; asy0vec - asynch channel 0 interrupt handler
        public  asy0vec
        label   asy0vec far
*** Text Deleted:  As you can see, the last part of this service
                   routine pushes the device ID into AX, and then
                   calls the function I previously identified above.

>>>>>>  mov     ax,0            ; arg for service routine
        push    ax
        call    asyint
        pop     ax
        jmp     doret

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

Am I wrong? Please help me find the proper fix.  This fix will allow
the "4-COM" board found at a local store utilize interrupt sharing, which
will benifit both AT and AX machines.  I desire to only use ONE interrupt
for NOS so that I can invest in other products requiring an interrupt.
Presently all my interrupts are used by Comm ports ( IRQ 4,3,7,
10,11,12,15).

I have a fix in mind, but want to see if the problem has already been solved.

Reference: STB Systems, INC  "4-Com Four-Port Serial Board"
           P.O. Box 850957
           Richardson, Texas 75085-0957
           Board supports 4 independently addressed Com Ports on either shared
           or independent interrupts (IRQ 2 - 15) in any combination or
           configuration. Emulates a 16550 UART in single chip, bought mine for
           less than $115.00 retail.


 73's
IMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM;
: AA6ED Amateur Radio BBS & Packet Gateway (Phone BBS + JNOS 1.07b TCP/IP) :
LMMMMMMMMMMMMMMMMMMMMMMMMMKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM9
: William [Bill] Bytheway : AX.25=aa6ed@aa6ed.wa.na.usa IP=[44.24.103.157] :
: 11108 SE 184th Place    : Digital/BBS   : (206) 271-4657 (300/1200/2400) :
: Renton, WA  98055       : UUCP/Internet : algedi!aa6ed@Data-IO.COM       :
HMMMMMMMMMMMMMMMMMMMMMMMMMJMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM<

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

Date: Sun, 7 Mar 93 21:58:02 EET
From: "Demetre Ch. Valaris - SV1UY" <dvalar@leon.nrcps.ariadne-t.gr>
Subject: Help with USCC Baycom Card.
To: nos-bbs@hydra.carleton.ca

Hello all,
 
Has anybody ever used a USCC Baycom 4 port card with NOS???
I cannot make it work. PLEASE HELP !!!!!!!! I am desperate.
 
73 Demetre SV1UY
 
E-mail dvalar@leon.nrcps.ariadne-t.gr
 

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

Date: 08 Mar 1993 12:43:48 +1000
From: CCDRW@cc.newcastle.edu.au
Subject: hidden transmitter routing
To: waltp@bingsuns.cc.binghamton.edu, tcp-group@ucsd.edu

In a message 

>From: waltp@bingsuns.cc.binghamton.edu (waltp)
>Subject: RE: hidden transmitter routing
...
>
>It may be that repeaters are the best currently known way to
>avoid the hidden transmitter problem but shouldn't we question
>the effect it would have.  It's pretty common here in semi-rural
>NY state for people to reach their local bbs by hopping
>along through one or even two other stations.  I leave my
>system running all the time primarily so a couple of people
>can go through it to do just that.  I'm happy enough to do that
>but wouldn't go to the extra expense of running a split freq repeater.
>
>CSMA is certainly problematic but it's not obvious that there
>can't be some sort of slotted protocol that would could serve.
>We do tend to have "hub" stations - bbs's, backbones nodes -
>that could provide centralized control over slots.  
>What about "lone" stations in direct contact with the hub getting
>one slot per "cycle", stations in direct contact serving 
>a two hop station getting two (or maybe 3 so that the two
>hop station could transmit to it?) ...
>
>Any scheme might get to be fairly exotic - maybe including
>periods of data exchange alternating with periods of control
>exchange - letting stations join and leave. ???
>
>It might seem to be too complex or the loss of bandwidth
>to control exchanges seem to high but 
>it could be quite efficient at low loads and at higher loads
>almost anything might be better than the
>throughput collapse we see now  - and
>it would preserve the friendly nature of packet radio.
>
>I haven't thought about this a lot yet (obviously).
>
>I've got my flack jacket on - please don't disappoint me.
>
>Walt
>

Right On!

I've been thinking this over a bit following from Warren's paper and the general
discussion (which I've been having trouble keeping up with lately, too much
WORK to do here). I like the slot idea, it's similar to Warren's Ring, but
perhaps a better name.  The other name I had for this system is a 
'wireless mux' (a play on 'wired OR' logic) but describing an analogy I find 
useful. Asynchronous Statistical Muxes have been arround for a while!

I know 'cluster controllers' would help some of our problems but we are by 
nature an ad-hoc group and have an emphasis on low cost. Central stuff has to be
funded, maintained, upgraded etc. Where a system exists now because of some
service it provides it is easier to get enhancements etc. so adding a little
work to the machine to act as default controller in a group where distributed
control is part of the protocol is easy. They will also likely be the station
with the most traffic, thus having the information avail. to make decisions
about, say, size of group, delays to use, routing etc. I'm not ruling out
existing repeaters, but suggesting they will need some processing power, rather
than just interconnected TNC's. This means BBS's, gateways etc.

As a station comes up it listens for a neighbour and identifies the curent 
number of slots, and which one the neighbour's using, Places the call (straight
after his next transmission?) him requesting a slot, and enters the group.

We may be in a few groups (say we're hidden from the 'Group controller', but
can hear stations from them), so we need to add a 'group id' and some way of
negotiating slots/ co-ordinating them between groups. Also I guess we need to
avoid some of the entry/exit overheads and maintain a slot without data for
some few cycles.

On variable power we can try for the a station in the main ring, but throttle
back till only one neighbour can hear us if thats not possible (having due
regard for error rates and forward error correction as appropriate). thus we
can use a slot used by someone else in the main group and the neighbour can get
our traffic across in their slot.

I may be loosing the plot here, this looks like a cross between,
rings/cells/muxes and guesswork! but now I started typing I wanted to get
thoughts on paper.

While I'm here I'm all for variable length fields, with perhaps a default of
say 8 chars for source/dest callsigns we implement first. With no shifting etc, 
just plain ASCII/whatever the new universal code is, we can be sure that wont be
much of a problem for 'Regulatory Authorities'.

I agree too, its probably time we put some basic definitions/guidelines/rules in
writing so we dont confuse each other with each different naming of things, so 
I'll try to do that tonight (off line! rather than thinking with my fingers).

P.S. we all seem to want to see the death of AX25, so direct the flames that
direction :-)

Dave VK2XPX, sysop VK2RAP.


Internet                             | ccdrw@cc.newcastle.edu.au
Amprnet                              | vk2xpx@vk2xpx.ampr.org
               

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

Date: Sun, 7 Mar 93 17:58:56 EST
From: Rolfe Tessem <w3vh!rolfe@uunet.UU.NET>
Subject: PM NOS Question
To: tcp-group@ucsd.edu

A number of people have asked me to help them get SLIP working on
PMNOS, and I seem to be having some difficulty :-). The use envisioned
involves dialing a PSI terminal server for Internet access; after
successfully logging on and issuing a "SLIP" command, the server hands
out a unique IP address. The user is supposed to assume this address for
the remainder of the session.

I've done this in a number of Unix SLIPs and IBM's OS/2 SLIP by:

1) issuing an ifconfig command to configure the SLIP interface to the
IP address handed out by the SLIP server. In PMNOS, I believe this
would be: ifconfig sl0 ipaddress [136.161.128.205] (for example).

2) issuing a route add default for that interface. Again, in PMNOS,
this would seem to be simply: route add default sl0.

Doing this in PMNOS (after using tip to establish the connection and
get the IP address) results in no bits hitting the modem.  The MTU is
set at 1500, which is what the terminal server wants. (I'm not sure if
VJ compression is on or off or even included in PMNOS, but it should
be off for this application -- is there a switch for this?)

What am I doing wrong?

For extra credit, is there any way to semi or fully automate the
dialup process though dialer scripts? I can't seem to find any
documentation on this at all, although something seems to be in there
:-).

Thanks,

Rolfe

---
Rolfe Tessem                Lucky Duck Productions
rolfe@w3vh.UUCP             96 Morton Street, NYC, NY 10014
rolfe@ldp.com <NeXTMail OK> 212-463-0029

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

Date: Sun, 7 Mar 93 23:22:30 EST
From: crompton@NADC.NADC.NAVY.MIL (D. Crompton)
Subject: TIPMAIL Problem and ASY buffers
To: nos-bbs@hydra.carleton.CA

IMPORTANT TIPMAIL SERVERS READ!!!

Last week I sent in a fix for a memory crashing problem with tipmail 
and constant stream outputs, like reading a long message or ascii
downloading a file. I did this in a hurry and although it works I
was not happy with it since it only addressed the one problem and
was not really done in the right place. Since then I have done some
more research and come up with a better solution, but first some
background...

When data is sent OUT over a serial tipmail connect, either via a
modem or directly connected terminal it goes thru a number of layers
in NOS. Here is a quick description of those layers from a 'tprintf'
in the BBS to the serial line.

tprintf >> MBUF   >> MBUF      >> asy_send  >> enqueued >> 8250  >> serial
loop     created    received     in tipmail     ASY Q    interrupt   out
mailbox  2048 max   in tipmail                    V
75,000                                            V 
Chars.                                       and growing!

This is a rather simplified flowchart. The important things to see here
are that the MBUF created has a maximum size of 2048 set by LOCSFLOW in
usock.h. In DOES block BUT, and here is the catch, it will NEVER block 
because the bucket is being emptied as fast as it is being filled regardless
of the final serial speed!! The ASY queue grows with NO limit (shown above
with a series of V's growing down) and empties the previous MBUF queue
immediately. If the original 'tprintf' loop above is reading a message 
that is 75K long and the final serial line baudrate is 2400 Baud, nearly
the entire message will end up in an asyinc queue within seconds. In
most cases this will severely rob NOS of needed memory and it may cause
it to crash.

Think of it this way - you hang a bucket in your basement with a high
water sensor in it, but the bucket has a rather large hole in it. The
water is turned on, flowing into the bucket, but it goes out as fast
as it comes in. The basement floods and the high water cutoff never
knows it. The bucket is the first mbuf, the high water cutoff is the
mbuf's high water mark and of course the basement is the ASY queue. 
Now the basement has a sump pump but it can not keep up with the flow.
The basement gradually fills to disaster. The sump pump is the serial
output data flow.

Anyhow my answer was to create a new asy_send function called
asy_send_wait. This function waits (blocks) for the ASY queue to empty
on each enqueue. The biggest memory hit is the 2048 bytes transferred
from the MBUF to the ASY queue. I did not try it but I suspect you could
even lower the LOCSFLOW size and reduce the hit even further in really
marginal situations. The old asy_send function remains. The new
asy_send_wait function is ONLY called in tipmail.c  EVERY asy_send
in that file is changed to asy_send_wait. 

I did not change any other asy_send call in NOS to this function as
in some cases it may not be desireable to block. Other occurences
of asy_send should be looked at. Anytime you dump a large amount of
data over the serial port or if many processes are dumping to the 
serial port and that port is slow this could happen. Perhaps this
could be implemented in the asy_send routine with, instead of a total
empty wait, as I have in asy_send_wait, some higher limit. I truely
believe that some limit must be put on the ASY output queue buffer 
size in order to improve the reliability of NOS.

Here is the code added to the end of I8250.C with the protype added
to ASY.H under the i8250.c section. Also change ALL occurences of asy_send
in TIPMAIL.C to asy_send_wait.

/* Send a message on the specified serial line  
   Wait for queue to empty - for slow serial
   lines where data flow control is desired
   Eliminates large queue - I.E. memory hogging */

int
asy_send_wait(dev,bp)
int dev;
struct mbuf *bp;
{
        if(dev < 0 || dev >= ASY_MAX)
                return -1;
        enqueue(&Asy[dev].sndq,bp);
        while (len_p((struct mbuf*)&Asy[dev].sndq)){
                pwait(NULL);
        }
        return 0;
}


ANYONE using tipmail who wants a reliable system should implement
this!! Please give me your comments on it's use or input on any 
improvements. JOHAN: this should go into future code.

LATE NOTE - 

As a test I implemented the above code for ALL asy_send calls. It seems
to have little effect on a busy two asy port system. This would be
expected as the KISS baudrate of 9600 baud certainly unloads the buffer
fast enough. The asy buffer would grow though if interrupts were off for
a period or if flow control was implemented and shutdown for an extended
time. It would eliminated the eating of large chunks of memory in these
cases. It is worth a try if you are having memory problems.


Doug

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

End of TCP-Group Digest V93 #64
******************************
******************************