[comp.mail.uucp] What should a new UUCP protocol do?

johnan@ism.isc.com (John Antypas) (11/07/90)

Interactive Systems is now the fortunate owner of many different modems.
Some are Telebits, some are V.32, some are 2400 baud no-namers, etc.
Unfortunately, we do UUCP with all of them.  We've been looking at the
transfer stats and have noticed the different flavors of modems each
treat UUCP a bit different.

We are looking into placing a new protocol into UUCP which copes with
the higher-speed modems, but doesn't require protocol spoofing, nor
does it assume your running X.25 (no f protocol).  What characteristics
should we shoot for when dealing with what we call, the new low-end
high speed modem.

This "modem" appears to have the followig basics:

NOT V.32, V.42/42.bis, PEP!  Totally unique protocols
Can do 9600 baud without compression, but with compression can do 38.4K
Either does not have a back channel, or must "turn the channel around" and 
   can take a second or so to do it.

I've been looking at a modified 'g' protocol using 2K blocks window size 7.
Am I completely off track?  Obviously, this works best with ASCII files
in bulk like Batch SMTP.

Tell us what you want, maybe we can put it in.

John Antypas / Interactive Systems Corp.
uucp: ...!uunet!ism!johnan    Internet: johnan@ism.isc.com
All statements above responsability of the author.

cec@cup.portal.com (Cerafin E Castillo) (11/08/90)

Make sure that it is compatible with ALL existing UUCP 'g' protocol
implementations.

Don't rely on compression.  V.32bis is a 14.4 kbps protocol now
being used.  You should be able to do at least 14.4 kbps.  Serial
interface should be 38.4 kbps capable.

A low ACK/NACK with large packet capability would be great (i.e.
Z-modem), with the role reversals and statistics.

It would also be great to be able to use uucp interactively, in
the way of a Kermit server...

BETTER ERROR MESSAGES!!!!  Please tell the user what really went
wrong.  No more NFW errors!

A better UUX command.

Built-in Pathalias or mail path resolution.

Start with the basics interface, as well as the protocol.  Efficiency
and user friendliness would help just as much as speed.

Good Luck!

===============================================================================
Cerafin E. Castillo                       ||      //\\  ||\\  ||
Network Consultant                        ||     //__\\ || \\ ||  Los Altos
Los Altos Networks                        ||    // ---\\||  \\||  Networks
340 Second St. #6                         ||___//      \||   \\|
Los Altos, CA  94022
(415) 941-8031      UUCP:     {apple,sun,uunet}!portal!cup.portal.com!cec
                 NTERNET:     cec@cup.portal.com

                      "...No hay mal que por bien no venga..."
===============================================================================

johna@grumpy.boston.ma.us (John Adams) (11/08/90)

In article <1990Nov07.155516.17815@ism.isc.com> johnan@ism.isc.com (John Antypas) writes:
>Interactive Systems is now the fortunate owner of many different modems.
>We are looking into placing a new protocol into UUCP which copes with
>the higher-speed modems,
>Tell us what you want, maybe we can put it in.

We want a protocol which is supported by all callable uucp sites.
Do you intend to distribute patches for all existing UUCP binaries?
A new protocol may have merit but only if it's widely distributed.

-- 
John Adams	johna@grumpy.boston.ma.us	(617) 646-6491

grr@cbmvax.commodore.com (George Robbins) (11/08/90)

In article <1990Nov07.155516.17815@ism.isc.com> johnan@ism.isc.com (John Antypas) writes:
> Interactive Systems is now the fortunate owner of many different modems...
> 
> We are looking into placing a new protocol into UUCP which copes with
> the higher-speed modems, but doesn't require protocol spoofing, nor
> does it assume your running X.25 (no f protocol).  What characteristics
> should we shoot for when dealing with what we call, the new low-end
> high speed modem.

Please review carefully all existing BSD and AT&T protocols and see which
are salvagable.  The silly little "g" protocol should give good results if
you fix the buffer allocation stuff so you can actually negotiate packet
sizes.  It's easy...  **BUT** you also need to make sure the tty drivers will
support large "raw" queues - 255 characters isn't enough, and watch out
for other raw mode silliness.  It may all be fixed with streams???

I'd also suggest you get in touch with rick@uunet or csg@pyramid - these
and others have invested serious time into uucp problems and foibles..

-- 
George Robbins - now working for,     uucp:   {uunet|pyramid|rutgers}!cbmvax!grr
but no way officially representing:   domain: grr@cbmvax.commodore.com
Commodore, Engineering Department     phone:  215-431-9349 (only by moonlite)

king@motcid.UUCP (Steven King) (11/08/90)

In article <1990Nov8.033541.1039@grumpy.boston.ma.us> johna@grumpy.boston.ma.us (John Adams) writes:
>We want a protocol which is supported by all callable uucp sites.
>Do you intend to distribute patches for all existing UUCP binaries?
>A new protocol may have merit but only if it's widely distributed.

And not to forget non-Unix machines.  There are a fair number of sites
based on other platforms that are using UUCP clones to handle transfers.
Any new protocol will have to be backward compatible with the older one.

-- 
---------------------------------------------------+---------------------------
The trouble with living in sin is the shortage     | Steven King  708-540-6771
of closet space.                                   |     Motorola Cellular
                                    (Missy Dizick) |   ...uunet!motcid!king

friedl@mtndew.Tustin.CA.US (Stephen Friedl) (11/08/90)

John Antypas from Interactive askes what we are looking for in a
new+better UUCP protocol, then John Adams responds:
> 
> We want a protocol which is supported by all callable uucp sites.
> Do you intend to distribute patches for all existing UUCP binaries?
> A new protocol may have merit but only if it's widely distributed.

Get uunet to run it and it will become popular Real Fast.

     Stephen

-- 
Stephen J. Friedl, KA8CMY / I speak for me only / Tustin, CA / 3B2-kind-of-guy
+1 714 544 6561  / friedl@mtndew.Tustin.CA.US  / {uunet,attmail}!mtndew!friedl

Only 6% of North Carolina blacks didn't vote racist

guy@auspex.auspex.com (Guy Harris) (11/09/90)

 >It would also be great to be able to use uucp interactively, in
 >the way of a Kermit server...
 >
 >BETTER ERROR MESSAGES!!!!  Please tell the user what really went
 >wrong.  No more NFW errors!
 >
 >A better UUX command.
 >
 >Built-in Pathalias or mail path resolution.
 >
 >Start with the basics interface, as well as the protocol.  Efficiency
 >and user friendliness would help just as much as speed.

All the above are nice, *but* far beyond the scope of what I infer ISC
is thinking of doing - I think they're just looking at doing a new
low-level protocol, at the same level as the "g", "e", "t", "f", etc.
protocols.  You're asking for a new UUCP, not a new UUCP protocol; I
don't have any problem with that, just bear in mind that it sounds like
it's outside the cope of what ISC wants to do....

jdeitch@jadpc.cts.com (Jim Deitch) (11/09/90)

In article <1990Nov07.155516.17815@ism.isc.com> johnan@ism.isc.com (John Antypas) writes:
>Interactive Systems is now the fortunate owner of many different modems.
>Some are Telebits, some are V.32, some are 2400 baud no-namers, etc.
>Unfortunately, we do UUCP with all of them.  We've been looking at the
>transfer stats and have noticed the different flavors of modems each
>treat UUCP a bit different.
>
>We are looking into placing a new protocol into UUCP which copes with
>the higher-speed modems, but doesn't require protocol spoofing, nor
>does it assume your running X.25 (no f protocol).  What characteristics
>should we shoot for when dealing with what we call, the new low-end
>high speed modem.
>
>This "modem" appears to have the followig basics:
>
>NOT V.32, V.42/42.bis, PEP!  Totally unique protocols
>Can do 9600 baud without compression, but with compression can do 38.4K
>Either does not have a back channel, or must "turn the channel around" and 
>   can take a second or so to do it.
>
>I've been looking at a modified 'g' protocol using 2K blocks window size 7.
>Am I completely off track?  Obviously, this works best with ASCII files
>in bulk like Batch SMTP.
>
>Tell us what you want, maybe we can put it in.
>
>John Antypas / Interactive Systems Corp.
>uucp: ...!uunet!ism!johnan    Internet: johnan@ism.isc.com
>All statements above responsability of the author.

How about something that has been in use on the FIDO net system for
quite some time.

When you use the frontend, Binkleyterm, one of the transfer protocols
is called Zed Zap.  What happens is this:  If the connection is 9600
or greater the block size is put at 8k and they use a zmodem type of
streaming protocol.  If the speed is 2400 baud but less than 9600 baud
the block size is 2k and the streaming protocol is used.  If the modem
speed is less than 2400 baud then they use a block size of 1k and the
streaming protocol is used.  This results in the best of both worlds,
high block rates with no reverse channel unless there is a problem.
It also causes an expect error message that is realitivley the same
time wise regardles of the speed of the connection.

You asked and I answered.

Jim

-- 

UUCP: nosc!jadpc!jdeitch
ARPA: jadpc!jdeitch@nosc.mil
INET: jdeitch@jadpc.cts.com

larry@syscon.UUCP (Larry Snyder) (11/10/90)

cec@cup.portal.com (Cerafin E Castillo) writes:

>Make sure that it is compatible with ALL existing UUCP 'g' protocol
>implementations.

>Don't rely on compression.  V.32bis is a 14.4 kbps protocol now
>being used.  You should be able to do at least 14.4 kbps.  Serial
>interface should be 38.4 kbps capable.

will these new modems with v.32bis be backwards compatible with
v.32 with v.42bis?

-- 
       Larry Snyder, Northern Star Communications, Notre Dame, IN USA 
 {larry@nstar, uunet!sco!romed!nstar!larry, larry%nstar@iuvax.cs.indiana.edu}
                     backbone usenet newsfeeds available
         Public Access Unix Site (219) 289-0282 (5 high speed lines)

urlichs@smurf.sub.org (Matthias Urlichs) (11/10/90)

In comp.dcom.modems, article <1889.2739aa0d@dcs.simpact.com>,
  jeh@dcs.simpact.com writes:
< In article <1990Nov07.155516.17815@ism.isc.com>, johnan@ism.isc.com 
< (John Antypas) writes:
< > [...]
< > I've been looking at a modified 'g' protocol using 2K blocks window size 7.
< > Am I completely off track?  
< 
< This is a fine idea, but it isn't really a modified 'g' at all.  'g' supports
< up to 4K packets and a transmit window size of 7.  Some *implementations* are
< restricted to 64 byte packets and a tx window of 3, but there is provision in
< the startup sequence for learning what the other end wants and restricting 
< yourself to that.  So a 'g' that handles 4Kx7 can still talk to one that 
< only does 64x3.  
< 
Sorry, but no.

Lots of g's _think_ they can do 4K packets, but internally they use some
stupid small buffers anyway because the support for big blocks hasn't been
tested in the last ten years or so.
You'll also run into trouble if you try to talk to a Telebit with UUCP
spoofing enabled, and want to use bigger blocks.

< If the modems do NOT give you a reliable data link, you are back to acking
< each packet.

Actually, it might be sufficient to NAK packets if there's an error but to
keep quiet otherwise. Using UUCP, this is OK because you're transmitting a
file and the sender can always back up as far as the receiver wants it to.

< [...]  Also note that, for a
< scheme where packets are numbered modulo 'n', the maximum transmit window
< size for a retransmit-entire-window protocol like 'g' is n-1, but for a 
< selective reject protocol it is (n/2)-1.  
< 
It might be a better idea to just use the offset into the file you're
transmitting. That way you wouldn't need to worry about windowing and the
machines involved could agree on these things on a dynamic basis.
(On the other hand, you'd also need a start character, and some size
 information, and a CRC checksum, and that might incur too much overhead. :-( )

One problem that you're not going to cure with this is that if you have a
full duplex  link, about  half the bandwidth is wasted. Fixing this would
probably require major mods to the uucico's involved.

Hmmmm ... Thinking some about this ... you could possibly fake it by talking
to  a sending and a receiving uucico across two pty ports, and multiplexing
the resulting full duplex data stream yourself. Hmmm --- that way you
wouldn't even have to modify your uucico. If I had enough time I would do
this -- the idea certainly looks like it would work.

-- 
Matthias Urlichs -- urlichs@smurf.sub.org -- urlichs@smurf.ira.uka.de     /(o\
Humboldtstrasse 7 - 7500 Karlsruhe 1 - FRG -- +49+721+621127(0700-2330)   \o)/

atman@ecst.csuchico.edu (Homeless hacker) (11/10/90)

In article <5134@orchid3.UUCP> king@motcid.UUCP (Steven King) writes:
>And not to forget non-Unix machines.  There are a fair number of sites
>based on other platforms that are using UUCP clones to handle transfers.
>Any new protocol will have to be backward compatible with the older one.

No no no, just release portable source.  Make sure all your variable
names are 8 characters or less!  :-)

les@chinet.chi.il.us (Leslie Mikesell) (11/10/90)

In article <1990Nov07.155516.17815@ism.isc.com> johnan@ism.isc.com (John Antypas) writes:

>I've been looking at a modified 'g' protocol using 2K blocks window size 7.
>Am I completely off track?  Obviously, this works best with ASCII files
>in bulk like Batch SMTP.

How much work do you want to do?  I'd start by making the packet and
window sizes negotiable, as well as the frequency of ACKs desired
(it's not really necessary to ACK every packet, but it may be desirable
to use small packets so you can request a resend of a small piece when
necessary).  Then I would allow a configuration file setting for the
initial values and minimum and maximum limits for each of these variables
for each entry in Systems, Devices, and Dialers (actually the equivalents
as per Sysfiles), plus an entry for inbound devices.  When this new protocol
is agreed upon, each machine would take the smallest of the values from the
relevant entries and pass to the other machine, and the smaller of
the two values for each variable would be used for the session.  This
would allow the best values for the most limiting factor, whether it is
the destination machine (Systems), the modem setup (Dialers), or the
communications link - modem/PAD/satellite (Devices).  The session would
start out with the pre-set initial values and increase the values to the
maximums after a few error-free packets - any errors would drop the values
to the mimimum and several error-free packets would be required before
working upwards again.  A log of the errors would make it possible to
optimize for any type of link.

Compression would be another possibility at this level but it should also
be controlled by the config files so it could be disabled where something
in the link compresses for you or one of the machines doesn't want the
CPU overhead.  It should also be done on a per-packet basis (though not
necessarily alligned with the communications protocol packets) so that
already-compressed data will never expand by more than the packet headers.

The next thing to tackle would be windowing the per-file ACKs.  That is,
do not wait for permission to start sending a file on start-up (but let
the receiver discard and cancel) and do not wait for the final ACK after
each file before sending the next.  Doing this correctly will require some
state information to be saved between sessions to detect cases where
a file is transferred correctly but the ACK does not get back to the
sender (this happens now, but with a maximum of one file per session and
uux jobs typically take at least two files for the receiver to be able
to execute anything). This part is likely to be the hardest to work
into the existing scheme, but it is the most significant if you transfer
a lot of small mail messages and don't want to impose the arbitrary
delays to apply some other form of batching.

The one other thing that might be considered is a way to escape certain
control characters within the protocol.  I'm thinking specifically of
links that need (or work best with) xon/xoff flow control and/or have
a data-link escape character that normally doesn't pass through, but
it would be nice to generalize this into something that could be specified
in the config files.

Les Mikesell
  les@chinet.chi.il.us

jeh@dcs.simpact.com (11/10/90)

In article <1990Nov8.033541.1039@grumpy.boston.ma.us>,
 johna@grumpy.boston.ma.us (John Adams) writes:
>>Tell us what you want, maybe we can put it in.
> 
> We want a protocol which is supported by all callable uucp sites.
> Do you intend to distribute patches for all existing UUCP binaries?
> A new protocol may have merit but only if it's widely distributed.

Please note that all uucps are supposed to negotiate the protocol to be used.
The answerer sends a list of the protocols supported, and the caller sends 
back the selection.  Thus Interactive is free to define a new protocol as 
long as they (a) get the protocol negotiation right, (b) pick a single-letter
protocol identifier that isn't already in use, and (c) continue to support 
'g 'protocol.  

	--- Jamie Hanrahan, Simpact Associates, San Diego CA
Chair, VMSnet [DECUS uucp] and Internals Working Groups, DECUS VAX Systems SIG 
Internet:  jeh@dcs.simpact.com, or if that fails, jeh@crash.cts.com
Uucp:  ...{crash,scubed,decwrl}!simpact!jeh

grr@cbmvax.commodore.com (George Robbins) (11/10/90)

In article <1889.2739aa0d@dcs.simpact.com> jeh@dcs.simpact.com writes:
> In article <1990Nov07.155516.17815@ism.isc.com>, johnan@ism.isc.com 
> (John Antypas) writes:
> > [...]
> > [...]
> > I've been looking at a modified 'g' protocol using 2K blocks window size 7.
> > Am I completely off track?  
> 
> This is a fine idea, but it isn't really a modified 'g' at all.  'g' supports
> up to 4K packets and a transmit window size of 7.  Some *implementations* are
> restricted to 64 byte packets and a tx window of 3, but there is provision in
> the startup sequence for learning what the other end wants and restricting 
> yourself to that.  So a 'g' that handles 4Kx7 can still talk to one that 
> only does 64x3.  

Note that this isn't precisely true.  Due to an incomplete implemenation of
the negotiation/startup code, most versions of uucp will "negotiate" the
larger packet sizes, but blow off when they scribble past the end of the "big"
buffers.

This requires that either the user be able to specify window/packet sizes
(not a bad idea) or the use of a new protocol designator to indicate a working
"g" protocol.  I believe "G" has been suggested.
 
The problem exists in the versions of uucp that serve as the  base for the
pre-HDB AT&T uucp and the 4.2/3 BSD uucp.  This represents a very large
percentage of the traditional uucp installed base.  I don't recall right off
if HDB does it right, if so then a growing segment of the uucp base could play.

-- 
George Robbins - now working for,     uucp:   {uunet|pyramid|rutgers}!cbmvax!grr
but no way officially representing:   domain: grr@cbmvax.commodore.com
Commodore, Engineering Department     phone:  215-431-9349 (only by moonlite)

jeh@dcs.simpact.com (11/11/90)

In article <+2m8g2.lb1@smurf.sub.org>, urlichs@smurf.sub.org 
(Matthias Urlichs) writes:
> In comp.dcom.modems, article <1889.2739aa0d@dcs.simpact.com>,
>   jeh@dcs.simpact.com writes:
> < [uucp g negotiates packet and window size]
> < yourself to that.  So a 'g' that handles 4Kx7 can still talk to one that 
> < only does 64x3.  
>
> Sorry, but no.
> 
> Lots of g's _think_ they can do 4K packets, but internally they use some
> stupid small buffers anyway because the support for big blocks hasn't been
> tested in the last ten years or so.

Hmmmmm.  Well, if one still wanted to stay with "g", this would be fixable with
an option in the systems file entry(ies) for those hosts.  "When talking to
this host, restrict packet size to n, and window size to m."  

> You'll also run into trouble if you try to talk to a Telebit with UUCP
> spoofing enabled, and want to use bigger blocks.

THis I have not seen -- I have tested a 7x4k g through a TB+ and it works fine,
though it only runs 3x64.  Ad I don't know why there should be trouble.  The 
packet and window size negotiation is not really "negotiation", it is each
receiver telling the sender "this is the biggest number I can handle", and
the sender is expected to comply.  If the telebit tells me that it won't take
more than 3x64, that's all I'll send.  And if I tell the telebit that I can take
7x4K, but it only chooses to send me 3x64, that works fine too.  And that is 
exactly what happened in my tests, confirmed both by debug output and by line
analyzer.  

> Actually, it might be sufficient to NAK packets if there's an error but to
> keep quiet otherwise. Using UUCP, this is OK because you're transmitting a
> file and the sender can always back up as far as the receiver wants it to.

Sounds like zmodem.  Which is not intended as a pejorative statement -- just an
observation.  

> One problem that you're not going to cure with this is that if you have a
> full duplex  link, about  half the bandwidth is wasted. Fixing this would
> probably require major mods to the uucico's involved.
> 
> Hmmmm ... Thinking some about this ... you could possibly fake it by ...

Someone actually hacked this together a year or so ago.  As I recall he never
did get it working perfectly but I am sure this was just an implementation bug
and not a real flaw in the design; the design looked fine. 

	--- Jamie Hanrahan, Simpact Associates, San Diego CA
Chair, VMSnet [DECUS uucp] and Internals Working Groups, DECUS VAX Systems SIG 
Internet:  jeh@dcs.simpact.com, or if that fails, jeh@crash.cts.com
Uucp:  ...{crash,scubed,decwrl}!simpact!jeh

tron1@tronsbox.xei.com (HIM) (11/11/90)

Actually .. if you are looking for a way to make a protocol that would make
lots of folks happy try this :
  

  IF you are going to define a NEW protocol (as opposed to tweeking one
     that exists ... look into one of the two way protocol's.

  Sure , this is a more extensive change but it is a provent technology.
     While machine A is sending with a "Zmodem" type in one direction, 
     machine B can ALSO be sending a "Zmodem" type in the other direction.

  Granted , some things must be done in case of error's that will stumble 
     the protocol for a packet or two every now and then , but with 
     high speed ECC modems like the telebits you still get an overall
     win on throughput.

  With some > 9600 baud modems the connection is not 9600 bi-directional
     but a 9600/2400 combination the flip flops, but you could detect
     that and switch to an older method or take the 2400 link anyway.



  I am using Diga! (an Amiga terminal program) as a mental starting base 
     here (and some experiments Ive done with folks here playing with
     this type of thing for a custom BBS ).

     They have a 2 way file transfer option that overlays a CHAT channel on
     top of THAT and the efficiency is almost a 160% speed savings.

     (A one way ZMODEM is faster for one file, but the two way tome is faster
      than two zmodems) 

  Look into it.

========[ Xanadu Enterprises Inc. Amiga & Unix Software Development]=======
=Also the mantra and spells, the obeah and the wanga; the work of the wand=
=and the work of the sword: these shall he learn and teach.               =
=       He must teach; but he may make severe the ordeals.                =
=========== Ken Jamieson: uunet!tronsbox.xei.com!tron1  ===================
=    NONE of the opinions represented here are endorsed by either         =
=    Xanadu Enterpises or its clients, AT&T Bell Labs or others.          =
=== The Romantic Encounters BBS 201-759-8450(PEP) / 201-759-8568(2400) ==== 

urlichs@smurf.sub.org (Matthias Urlichs) (11/11/90)

In comp.dcom.modems, article <1898.273bd977@dcs.simpact.com>,
  jeh@dcs.simpact.com writes:
< In article <+2m8g2.lb1@smurf.sub.org>, urlichs@smurf.sub.org 
< (Matthias Urlichs) writes:
< > 
< > Lots of g's _think_ they can do 4K packets, but internally they use some
< > stupid small buffers anyway because the support for big blocks hasn't been
< > tested in the last ten years or so.
< 
<Hmmmmm.  Well, if one still wanted to stay with "g", this would be fixable with
<an option in the systems file entry(ies) for those hosts.  "When talking to
<this host, restrict packet size to n, and window size to m."  
< 
OK, but that implies that the protocol can get at the systems file entry,
which requires modification of your UUCP beyond linking in another protocol
and augmenting the protocol table. It might be better to create a new
protocol for working big-packet g protocol implementations. Call it "G". ;-)

< > You'll also run into trouble if you try to talk to a Telebit with UUCP
< > spoofing enabled, and want to use bigger blocks.
< 
<This I have not seen -- I have tested a 7x4k g through a TB+ and it works fine,
<though it only runs 3x64. [...]

Hmmm ... I'll have to look into this some more, then...

< > One problem that you're not going to cure with this is that if you have a
< > full duplex  link, about  half the bandwidth is wasted.
< > Hmmmm ... Thinking some about this ... you could possibly fake it by ...
< > [ multiplexing two uucico conversations onto one line ]
< 
<Someone actually hacked this together a year or so ago.  As I recall he never
<did get it working perfectly but I am sure this was just an implementation bug
<and not a real flaw in the design; the design looked fine. 
< 
Are the sources for this available anywhere?

-- 
Matthias Urlichs -- urlichs@smurf.sub.org -- urlichs@smurf.ira.uka.de     /(o\
Humboldtstrasse 7 - 7500 Karlsruhe 1 - FRG -- +49+721+621127(0700-2330)   \o)/

curt@cynic.wimsey.bc.ca (Curt Sampson) (11/11/90)

urlichs@smurf.sub.org (Matthias Urlichs) writes:

> Actually, it might be sufficient to NAK packets if there's an error but to
> keep quiet otherwise. Using UUCP, this is OK because you're transmitting a
> file and the sender can always back up as far as the receiver wants it to.
> [...]
> < scheme where packets are numbered modulo 'n', the maximum transmit window
> < size for a retransmit-entire-window protocol like 'g' is n-1, but for a 
> < selective reject protocol it is (n/2)-1.  
> < 
> It might be a better idea to just use the offset into the file you're
> transmitting. That way you wouldn't need to worry about windowing and the
> machines involved could agree on these things on a dynamic basis.

This is starting to look more and more like zmodem by the minute.
Zmodem protocol returns NAKs only.  One of the advantages of this
scheme is that if you're using a half duplex link there will be no
turnarounds until you actually have an error.

Zmodem does use blocks of course, because you have to block it to be
able to calculate the checksum and the like.  It uses adaptive block
sizing, though.  The better implementations start with 256 byte
blocks.  They will move down as far as 32 byte blocks (on a very noisy
line) or up as far as 8K blocks at 9600 or higher BPS.  It can also
send a short block of any length to finish off the file.

Zmodem also has provisions for a restart on an interupted transfer
(i.e., when you hang up or get hung up upon for whatever reason and
then call back).  It's just like a NAK in the transfer, actually.  You
just hand it a byte offset into the file and tell it to go.

> One problem that you're not going to cure with this is that if you have a
> full duplex  link, about  half the bandwidth is wasted. Fixing this would
> probably require major mods to the uucico's involved.

My copy of the uucp protocol description seemed to imply rather
strongly that it would be possible to have a uucp session going in
each direction.  Obviously, the ones currently in use don't do this.
It would be very nice to have, though.

There is a protocol out there call Janus, I believe, that supports
this.

cjs

curt@cynic.UUCP                  | "The unconscious self is the real genius.
curt@cynic.wimsey.bc.ca          |  Your breathing goes wrong the minute your
{uunet|ubc-cs}!van-bc!cynic!curt |  conscious self meddles with it."  --GBS

urlichs@smurf.sub.org (Matthias Urlichs) (11/12/90)

In comp.mail.uucp, article <wsXgs2w163w@cynic.wimsey.bc.ca>,
  curt@cynic.wimsey.bc.ca (Curt Sampson) writes:
< 
< Zmodem also has provisions for a restart on an interupted transfer
< (i.e., when you hang up or get hung up upon for whatever reason and
< then call back).  It's just like a NAK in the transfer, actually.  You
< just hand it a byte offset into the file and tell it to go.
< 
< > One problem that you're not going to cure with this is that if you have a
< > full duplex  link, about  half the bandwidth is wasted. Fixing this would
< > probably require major mods to the uucico's involved.
< 
< My copy of the uucp protocol description seemed to imply rather
< strongly that it would be possible to have a uucp session going in
< each direction.  Obviously, the ones currently in use don't do this.
< It would be very nice to have, though.
< 
The g protocol's packet handler (for those with source code: pk[01].c) would
support bidirectional traffic.
However, neither uucico itself nor the uucico-to-protocol driver interface
(cntrl.c, [fget]io.c) allow this. Implementing bidirectional transfer seems
to imply either a major rewrite, major hacks inside the protocol driver,
implementing a bidirectional data stream (actually two, since uucico wants
"high-level" acknowledgements) for the uucico to talk to, or collecting the
UUCP job files and blasting them across the line with something totally
different.

The second option (protocol driver hackery) would imply to simultaneously (a)
get data from the local uucico and store it somewhere, (b) receive data from
the remote side and store it somewhere else, (c) feed the data from (a) to
the remote side, and (d) feed the incoming data to the local uucico once (a)
is finished.  The hard part is to decide what to do about line errors (you'll
have to keep a massive amount of state) and what to do when the remote side
says that it won't accept a file whose receipt you already acknowledged to
the local uucico.

As to sending files over with a different program -- I do have "sz" and "rz"
here to do zmodem with if I have to, but they don't look like it would be
particularly easy to convince them to run bidirectionally.
Does anybody have something which can do real bidirectional stuff?

< There is a protocol out there call Janus, I believe, that supports this.
< 
Where? How? Documentation? Source code?

-- 
Matthias Urlichs -- urlichs@smurf.sub.org -- urlichs@smurf.ira.uka.de     /(o\
Humboldtstrasse 7 - 7500 Karlsruhe 1 - FRG -- +49+721+621127(0700-2330)   \o)/

curt@cynic.wimsey.bc.ca (Curt Sampson) (11/12/90)

urlichs@smurf.sub.org (Matthias Urlichs) writes:

> < There is a protocol out there call Janus, I believe, that supports this.
> < 
> Where? How? Documentation? Source code?

It is implemented in version 2.4 of BinkleyTerm, for which source is
available.  If anybody is interested in a specification document or an
acutal hunk of source, I can probably dig it up.  Email me for
details.

cjs

curt@cynic.UUCP                  | "The unconscious self is the real genius.
curt@cynic.wimsey.bc.ca          |  Your breathing goes wrong the minute your
{uunet|ubc-cs}!van-bc!cynic!curt |  conscious self meddles with it."  --GBS

mje@olsa99.UUCP (Mark J Elkins) (11/12/90)

In article <1898.273bd977@dcs.simpact.com> jeh@dcs.simpact.com writes:
>In article <+2m8g2.lb1@smurf.sub.org>, urlichs@smurf.sub.org 
>(Matthias Urlichs) writes:
>> In comp.dcom.modems, article <1889.2739aa0d@dcs.simpact.com>,
>>   jeh@dcs.simpact.com writes:
>> < [uucp g negotiates packet and window size]
>> < yourself to that.  So a 'g' that handles 4Kx7 can still talk to one that 
>> < only does 64x3.  

>THis I have not seen -- I have tested a 7x4k g through a TB+ and it works fine,
....
>exactly what happened in my tests, confirmed both by debug output and by line
>analyzer.  

Apart from using a line analyser (I assume you mean Data-Scope) (what
do you look for??), how can you tell what a particular machines
version of uucp is using??  I've been hacking some uucico source
(adding other protocols - etc) but the negotiation that 'G' does
leaves me cold - so again - how can you tell both the buffer and
window sizes?  (Where is it in the Source code [at+t V Rel 3.2])???

>> Actually, it might be sufficient to NAK packets if there's an error ...
>Sounds like zmodem.  Which is not intended as a pejorative statement -- just an
>observation.  

I had heard that Sys V Rel 4.0 was ment to use something like this -
or at least, uucp would have the ability to start up a file transfere
from were it had been cut off - just like Z-modem!

>> Hmmmm ... Thinking some about this ... you could possibly fake it by ...

>Someone actually hacked this together a year or so ago.  As I recall he never
>did get it working perfectly but I am sure this was just an implementation bug
>and not a real flaw in the design; the design looked fine. 

Given the oppertunity to add to the wish list, 

1 - Plug-in protocols  (eg   'e', 'f', 'h', 'x'....)  (so you don't need
    source code)

2 - Plug in Dialers... somewhat in the way that SCO does, ie - you could
    add 'connectors' for ethernet, built-in X25, funny modems.... etc


-- 
  .  .     ___. .__      Olivetti Systems & Networks, Unix Support - Africa
 /| /|       / /__       UUCP: {uunet,olgb1,olnl1}!olsa99!mje (Mark Elkins)
/ |/ |ARK \_/ /__ LKINS  mje@olsa99.UUCP (Postmaster) Tel: +27 11 339 9093

david@twg.com (David S. Herron) (11/16/90)

In article <1990Nov09.230452.6549@chinet.chi.il.us> les@chinet.chi.il.us (Leslie Mikesell) writes:
>In article <1990Nov07.155516.17815@ism.isc.com> johnan@ism.isc.com (John Antypas) writes:
>>I've been looking at a modified 'g' protocol using 2K blocks window size 7.
>>Am I completely off track?  Obviously, this works best with ASCII files
>>in bulk like Batch SMTP.
>
>How much work do you want to do?  I'd start by making the packet and
>window sizes negotiable, as well as the frequency of ACKs desired
>(it's not really necessary to ACK every packet, but it may be desirable
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Yeeaaaahh.. that makes
me shudder.. how do you tell the difference between a lost NAK & an ACK
which you ACK'd without ACKing?  Now.. if your protocol did a "mass ACK"
by, for instance, saying "this ACK is for packets 1,3-5,7,8-12" then the
cost of ACKing is greatly reduced.  Is this what you mean?

>Compression would be another possibility at this level but it should also
>be controlled by the config files so it could be disabled where something
>in the link compresses for you or one of the machines doesn't want the
>CPU overhead.  It should also be done on a per-packet basis (though not
>necessarily alligned with the communications protocol packets) so that
>already-compressed data will never expand by more than the packet headers.

erm.. why would it be good for the communications protocol to pick out
the compression scheme?  The protocol doesn't know a bit about what
kind of data it's transmitting &so can only use some generic scheme.
Instead I feel that it'd be best for the compression to be done outside
the protocol -- like it's done now with Usenet news.  This way if the
end-{user,process} knows it's transmitting video sequences it can use
some compression well-suited for *that* while Usenet news can continue
using compress v4 ...  Note that for CPU load it (probably) doesn't
matter whether the compression is done in uucico or in a seperate program,
it's still CPU time on the local system.  Finally -- adding compression
into a protocol module will make it larger, make it take longer to write,
and longer to debug.

Note that mail isn't currently compressed.  It would be pretty simple to
write an rmail which recognized that the input was compressed, after all
that's why compress-v4 has it's own magic number, and decompress it before
doing anything else.  But I *gaurantee* that it'd be a looooong time before
that was supported very widely..


>The one other thing that might be considered is a way to escape certain
>control characters within the protocol.  I'm thinking specifically of
>links that need (or work best with) xon/xoff flow control and/or have
>a data-link escape character that normally doesn't pass through, but
>it would be nice to generalize this into something that could be specified
>in the config files.

The PhoneNet protocol (available in the MMDF sources but it's history
starts in a different place than MMDF) does exactly that.  In the config
file you give what amounts to being a 256-bit bitmap of characters that
can be sent through a particular link.  It has some way of negotiating
how the illegal characters are escape'd at the initial handshake &such.



-- 
<- David Herron, an MMDF & WIN/MHS guy, <david@twg.com>
<- Formerly: David Herron -- NonResident E-Mail Hack <david@ms.uky.edu>
<-
<- Use the force Wes!

les@chinet.chi.il.us (Leslie Mikesell) (11/16/90)

In article <8290@gollum.twg.com> david@twg.com (David S. Herron) writes:
>>(it's not really necessary to ACK every packet, but it may be desirable
>  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Yeeaaaahh.. that makes
>me shudder.. how do you tell the difference between a lost NAK & an ACK
>which you ACK'd without ACKing? 

Easy - you just send the packet number of the last received packet back
in the ACK packet.

>Now.. if your protocol did a "mass ACK"
>by, for instance, saying "this ACK is for packets 1,3-5,7,8-12" then the
>cost of ACKing is greatly reduced.  Is this what you mean?

Almost, but all you have to do is assume that any ACK ack's all previous
packets.  First, this means that lost ACK's within the transmit window
can simply be ignored, but more importantly the speed of error recovery
is tied to packet size and skipping some of the ACK's intentionally will
be more efficient where there is a high-turnaround time or packet charge
on the reverse direction without increasing the time it takes to NAK
a bad packet.  Ideally, you would ACK slightly before the transmit window
is filled (i.e. soon enough for the ACK to get back before transmision
stops), but on links that are generally error-free the transmit window
could be huge.

>
>erm.. why would it be good for the communications protocol to pick out
>the compression scheme?  The protocol doesn't know a bit about what
>kind of data it's transmitting &so can only use some generic scheme.

I meant that it should try to apply one or more generic schemes and each
packet would carry a compression-type code.  If none of the schemes work
to actually compress the data, it could be passed through uncompressed
on a packet-by-packet basis and thus never cause an expansion of more
than the type code in the packet header (unlike the normal compress
program when used in a pipe). 

>Instead I feel that it'd be best for the compression to be done outside
>the protocol -- like it's done now with Usenet news.

Do you enjoy providing the disk space for both compressed and uncompressed
copies?

>using compress v4 ...  Note that for CPU load it (probably) doesn't
>matter whether the compression is done in uucico or in a seperate program,
>it's still CPU time on the local system.  Finally -- adding compression
>into a protocol module will make it larger, make it take longer to write,
>and longer to debug.

Like the CPU time, it's all the same one way or the other.  It's going to
take the same amount of work on the compression module whether it is
linked into the communication code or not.  If it's not, it will always
require intermediate disk space to use, and will be more difficult to
arrange to happen on remote requests.  There will be situations where
the link is cheaper than the CPU at one or both ends, something in the
link already does compression, or the data is always pre-compressed, so
there is still the need to disable it, in which case the type code can
be omitted from the packet header.

>Note that mail isn't currently compressed.  It would be pretty simple to
>write an rmail which recognized that the input was compressed, after all
>that's why compress-v4 has it's own magic number, and decompress it before
>doing anything else.  But I *gaurantee* that it'd be a looooong time before
>that was supported very widely..

Do you really want to write a high-level front end for everything that
involves communications?  Do you want it to know which links need
compression and which ones don't? If you want things compressed specifically
because they are going across a slow and/or expensive link, then the
thing to do is to tie the compression specifically to the transport
across that link.  The other problem with mail is that it usually
consists of lots of little files which don't compress well unless you
batch them, and you can't batch them easily unless you impose an arbitrary
delay on delivery.  The cleanest solution is to do the compression
on the fly and allow multiple files to be outstanding in the transmit
window, even though this will introduce some new problems to deal with.

>>The one other thing that might be considered is a way to escape certain
>>control characters within the protocol.

>The PhoneNet protocol (available in the MMDF sources but it's history
>starts in a different place than MMDF) does exactly that. 

Unfortunately it would be impossible to negotiate the 2nd most likely
situation and remain compatible with existing uucico's.  This
is the case where you are connected over something that looks like an
X.25 PAD and the DLE character is used to get the PAD's attention instead
of being passed through.  Uucico uses DLE as a start-of-packet character
even during the initial negotiations before the protocol is selected.
You could, of course, give the program a different name and recognize
a new start-up mode when that name is used, but then it becomes more
difficult to install and maintain.

Les Mikesell
  les@chinet.chi.il.us

rsalz@bbn.com (Rich Salz) (11/17/90)

In <1898.273bd977@dcs.simpact.com> jeh@dcs.simpact.com writes:
>THis I have not seen -- I have tested a 7x4k g through a TB+ and it works fine,
>though it only runs 3x64.
I believe that's because peter wrote the (first version) of the TB spoofing
code.  (He's the H in HDB.)  Most other UUCP's are buggy in that they either
get the negotiation wrong, or believe and then happily overrun their fixed-
sized buffers.  Rick Adams and Carl at Pyramid worked on this stuff over
three years ago (ahh, for the days when pyramid!csg would email me the
latest Pyramid UUCP for the asking... :-)
	/r$
-- 
Please send comp.sources.unix-related mail to rsalz@uunet.uu.net.
Use a domain-based address or give alternate paths, or you may lose out.

david@actsn.fay.ar.us (David Summers) (11/18/90)

In article <p6v9g2.[q5@smurf.sub.org>, urlichs@smurf.sub.org (Matthias Urlichs) writes:
[ ... deleted ... ]
> < > One problem that you're not going to cure with this is that if you have a
> < > full duplex  link, about  half the bandwidth is wasted.
> < > Hmmmm ... Thinking some about this ... you could possibly fake it by ...
> < > [ multiplexing two uucico conversations onto one line ]
> < 
> <Someone actually hacked this together a year or so ago.  As I recall he never
> <did get it working perfectly but I am sure this was just an implementation bug
> <and not a real flaw in the design; the design looked fine. 
> < 
> Are the sources for this available anywhere?
> 
> -- 
> Matthias Urlichs -- urlichs@smurf.sub.org -- urlichs@smurf.ira.uka.de     /(o\
> Humboldtstrasse 7 - 7500 Karlsruhe 1 - FRG -- +49+721+621127(0700-2330)   \o)/

I tried playing around with multiplexing 2 uucico's last year, creating a total
of 4 processes per machine.  I tried to implement a sort of Zmodem-type
streaming protocol but had strange problems (admittedly (sp?) my first attempt
at designing my own protocol) where the receiver would lose packets and things
would never get back in sync and finally it would give up.  I finally had to
back off to having every big packet ACKed by a small packet but I was still
coming close to cutting transmission times by 2 when things were flying in
both directions.

I essentially spoofed UUCICO to think that each connection was the only one
on the channel, by using pipes.

The biggest problem I ran into was that Xenix (and maybe AT&T SysV???) can
only handle about 256 bytes at a time before it starts dropping stuff, when
there is any kind of load on the system.


I liked what I saw mentioned previously....use existing UUCICO but pipe the
input and output through pipes to another process.  For some reason I didn't
think of that (maybe because I have source?).  

Anyway, it seems to work but my error correcting protocol is somehow not working
and I ran out of time to work on it while trying to finish my undergraduate work
and beginning GRAD school.  I would like to work on it some more but haven't
found the time.

I could send the sources to anyone interested, or put it up for FTP if there
is enough interest.  Be warned that it is only the mods to the standard UUCP
and most of that is just in the protocol selection.  UUCICO is designed to
just  drop in another protocol and I took advantage of that.  I created my
own 'b' protocol to test thins out.  I also have it set up to test  out on
an error "connection" between two pipes on the same computer.  It was
interesting trying to debug 8 processes at once.......


   - David Summers
   (david@actsn.fay.ar.us)

-- 
I'm sick and tired of this machine, I wish that I could sell it.
It never does just what I want, but only what I tell it!
- David Summers (david@actsn.fay.ar.us)

rsalz@bbn.com (Rich Salz) (11/21/90)

In <1990Nov16.060148.2194@chinet.chi.il.us> les@chinet.chi.il.us (Leslie Mikesell) writes:
>Almost, but all you have to do is assume that any ACK ack's all previous
>packets. ... much discussion of ACK's and windows deleted...

If you're going to redesign TCP, make sure you read ALL about it first.
It is one of the best sliding-window protocols around, and has undergone
more design and implementation engineering than UUCP ever will.  Get the TCP-related
RFC's (and there are a bunch of them) and perhaps read Comer's internetworking
book.

Protocol design is VERY HARD.
	/r$
-- 
Please send comp.sources.unix-related mail to rsalz@uunet.uu.net.
Use a domain-based address or give alternate paths, or you may lose out.

anton@bkj386.uucp (Anton Aylward) (11/22/90)

I have often stated that the bulk of UUCP should be done with shell not with C.

Why ?


Well look at the XENIX version, the dialer is 'just a program'.
UUCICO doesn't care it is is C or a shell script.
Various modules gatehr the list of work files, check if machines are callable,
and deal with lists, which can easily be donw with the shell.

We could do the same with the protocol modules:

	gprotocol read file to stdout
	gprotocol write file read from stdin
	fprotocol .......

and make the whole thing table driven.

We would then be able to easily tune the timeout, substitute better 
send-expect handling.....

OK, it makes it easy to modify, configure, tune and extend.  
By the software metrics I have always worked to thet is a GOOD THING (tm).

So why aren't we doing this ?

/anton aylward

shwake@raysnec.UUCP (Ray Shwake) (11/23/90)

anton@bkj386.uucp (Anton Aylward) writes:

>I have often stated that the bulk of UUCP should be done with shell not with C.

	[writer's arguments for this proposition]

>So why aren't we doing this ?


	Since the original UUCP implementation *was* written using shells,
	it might be more accurate to ask "why aren't we doing this any longer?"
	The answer, of course, is that it's much less efficient, and much less
	secure, than a compiled implementation.