[comp.dcom.lans] TCP/IP _over_ TLI????

rwhite@nusdhub.UUCP (Robert C. White Jr.) (07/16/88)

in article <666@cbnews.ATT.COM>, mark@cbnews.ATT.COM (Mark Horton) says:
> Xref: nusdhub comp.dcom.lans:345 comp.protocols.tcp-ip:1043 comp.protocols.iso:42
> 
> I've used TLI too.  What are you describing above?

I begin to think That I don't know enough about TCP/IP to fully understand
what you are exactly trying to accomplish, or its spesific problems/
detils; but here goes...

TLI is (as I deal with it any way) a basic way of providing description
and contlrol of (aledgedly) any transport media.  It's purpose is to
make a through-the-media pipeline through which data may be passed
with total reliability (Session/Virtual circut) or of providing a
method of asserting data on a media with the implicit intent that the
device on the other end is listening for such data, and applications
will handle the details from there.

TCP/IP is a media protocol which involves addressing and connection
metenence.  It is inteneded that other protocols would be implemented
_above_ some or all of TCP/IP.

If my perceptions are correct then trying to write a TCP/IP driver
over a "TLI device" is a non-sequetor.  The order, top to bottom,
of the stream should be: TLI over TCP/IP over STREAMS Device; such
that you have a STREAMS conformant TCP/IP driver for your ethernet
board, and then you push a custom made TLI-to-TCP/IP STREAMS module
on the stream before you hand the connection to a TLI conformant
application.

For instance, with STARLAN on a 3B2 there is the program "pumped"
onto the board, two kernel drivers (NAU and SRM) the 'adm' program
which assembles the STREAM durring startup, hands a hook to the
'listener' and then goes deamon.

Were you to put TCP/IP _above_ the TLI you would already have been
issued the sub device numbers, and already possess the connection
(in remote startup) or be insulated form same (originating a call)

The WHOLE POINT of the TLI is to remove the details of the connection
from the application.  A TLI conformant program only needs know
two or three things; 1) an address in "plain english" (c.f.
something that a user could be prompted for at the keyboard);
2) A service code (If and only if the address can provide more than
one service); and 3) the file-system name of a provider.
The TLI device is "opened" (cloned as necessary); the plain english
address is passented to the driver for translation; the driver
translates this to an address which will be useful to the rest
of the process (whatever that might be!) and returns a pointer
to same if necessary; the user submits a "bind" request by passing
the dirver the above address and the service code (and optional
init data if necessary) and is returned "success" or "failure"
code dependant on wethaer the conection went through (etc.).
After successful compleetion of the connect, the user only
has to provide whatever data, it thinks it wants the other end
to receive, to the TLI and it is received as is at the other end.
Optionally, after successful bind, the user program may
i_push some modules on the stack before useint the connection.

To implement rlogin under TLI you would simply do the following:
write rlog-serve shuch that:
	Accepts first unit as "name"
	uses read()/write() to prompt/deal with password verification.
	{ read() from TLI and write() to shell standin &&
	  read() from standin and write() to TLI}
	close local files
	exit.
write rlogin such that:
	It takes destination machine name as option.
	knows the service code for rlog-serve
	opens provider
	passes TLI the address in a bind request
	on success i_push(es) the read()/write() interface on the
		STREAM (I forget the name, but you get it free)
	{ read() form stdin and write() to TLI  &&
	  read() from TLI and write() to standout}
	close all files when done
	exit.
Add rlog-serve to the listener database on every machine which
will accept rlogin requests (you need to know the serviec code
to do this.) while you are doing this you record in the database
that the listener should i_push the read()/write() module on
the stream before starting rlog-serve.

If you do the three steps above you have rlogin.  The remote shell
stuff works exactly the same way.  What more do you need?


If you want TCP/IP and TLI stuff on the same media, you would make
a TCP/IP STREAMS deiver for the media.  The program which oversees
the TCP/IP workings establishes a TCP/IP address for the TLI
functions (much like 'adm' on the STARLAN network.) and routes
the TLI functions up through a multiplexing STREAMS driver to
where the TLI stuff can get it's hands on it.  To whit:

Listener	Cloneable Module Hooks
|		|  |  |  |  |  |  |  |  |  |
-+------------------------------------------
 |
TLI to TCP/IP request format translator. {Multiplexing Kernel Module}
	|
	|	TCP/IP Overseer {Deamon} (establishes all this on startup)
	|	Other TCP/IP Entry Pionts
	|	| | | | | | | | | | | | | |
	-+---------------------------------
	 |
	TCP/IP Driver  {Multiplexing Kernel Module}
	Media Driver {Kernel Module}
	Interface {Hardware}

To do it the other way would be a total mess.  It is _expressly_
stated that TLI is a uniform service which 'insulates' the
application form the _media dependant_ details of establishing
and maintaining a connection.  I would assume that there
must therefore be a media dependant protocol on the other
(deeper) end of the module.  It would also seem that this
'other' protocol could be anything! (X.25; TCP/IP; STARLAN;
whatever).

(Or maby not, considering I don't really know the innards
of TCP/IP.  It may also end up that TCP is on the same
level as TLI and that IP may be below both of them equally.
Or TCP and TLI may be available over any media and things
like TCP/STARLAN and TLI/IP may be possible?????????????
I can't really know until I find out more about TCP/IP;
but This is my understanding of all the elements involved.)

Rob.

dougm@ico.ISC.COM (Doug McCallum) (07/17/88)

In article <1104@nusdhub.UUCP> rwhite@nusdhub.UUCP (Robert C. White Jr.) writes:
>in article <666@cbnews.ATT.COM>, mark@cbnews.ATT.COM (Mark Horton) says:
>> Xref: nusdhub comp.dcom.lans:345 comp.protocols.tcp-ip:1043 comp.protocols.iso:42
>> 
>> I've used TLI too.  What are you describing above?
>
>I begin to think That I don't know enough about TCP/IP to fully understand
>what you are exactly trying to accomplish, or its spesific problems/
>detils; but here goes...

You have a few things slightly confused.  I'll try to explain where in the
text.

>TLI is (as I deal with it any way) a basic way of providing description
>and contlrol of (aledgedly) any transport media.  It's purpose is to
...
>device on the other end is listening for such data, and applications
>will handle the details from there.

I can agree with this.  TLI provides a set of basic functions for establishing
and maintaining "transport" connections.

>
>TCP/IP is a media protocol which involves addressing and connection
>metenence.  It is inteneded that other protocols would be implemented
>_above_ some or all of TCP/IP.

This is where you are wrong.  Although the mapping of TCP/IP to the
ISO Reference Model isn't perfect, TCP is basically a transport protocol.
It is not a media protocol by any means.  It provides all the reliability
you assume the transport TLI wants will provide.

>
>If my perceptions are correct then trying to write a TCP/IP driver
>over a "TLI device" is a non-sequetor.  The order, top to bottom,
>of the stream should be: TLI over TCP/IP over STREAMS Device; such
>that you have a STREAMS conformant TCP/IP driver for your ethernet
>board, and then you push a custom made TLI-to-TCP/IP STREAMS module
>on the stream before you hand the connection to a TLI conformant
>application.

You wouldn't normally write a TCP/IP driver over a TLI device (but
I can see a case where you might).  All the previous discussion seemed
to be saying that a TCP/IP device would support TLI directly.  That is,
it conforms to the AT&T "Transport Provider Interface" specification which
the TLI library and modules expect.  Since TCP can be implemented to the 
TPI specification, no special conversion module is required.
>
>Were you to put TCP/IP _above_ the TLI you would already have been
>issued the sub device numbers, and already possess the connection
>(in remote startup) or be insulated form same (originating a call)

Huh?  I missed something.  When did TCP get moved above TLI.
The discussion started out about addressing being a problem with TLI
since it doesn't specify any particular format or even set down guidelines.
In all of this, TCP was below TLI and TLI was being discussed as the
way to write applications that would run over TCP/IP.

>
>The WHOLE POINT of the TLI is to remove the details of the connection
>from the application.  A TLI conformant program only needs know
>two or three things; 1) an address in "plain english" (c.f.
>something that a user could be prompted for at the keyboard);

Nowhere in the TLI specification or documentation does it state
this.  In fact, in the "Network Programmer's Guide", the example
given uses an "integer" and not something a user would normally
want to enter in at a keyboard.

I think you've missed the point of TLI or been biased by the one
transport layer implementation you seem to have used.  TLI provides a
way for an application to establish transport layer connections.
Addressing is specific to the transport protocol being used.

>2) A service code (If and only if the address can provide more than
>one service); and 3) the file-system name of a provider.

In the sense you are referring to them (RFS and the listener service)
service codes are specific to an "application" and not a transport.
The application is the listener service.  Other applications will
work differently.

>The TLI device is "opened" (cloned as necessary); the plain english
>address is passented to the driver for translation; the driver

This is not normally the case.  Look at some of the other transport
providers that AT&T uses.  They don't all work this way.  In any case,
hostname to internal address translation wouldn't be done in the
transport protocol and asking a user to enter a 12-digit hex number or
a 32-digit hex number isn't what I would call plain english.

>translates this to an address which will be useful to the rest
...
>To implement rlogin under TLI you would simply do the following:
>write rlog-serve shuch that:
...
>write rlogin such that:
...
>Add rlog-serve to the listener database on every machine which
>will accept rlogin requests (you need to know the serviec code
>to do this.) while you are doing this you record in the database
>that the listener should i_push the read()/write() module on
>the stream before starting rlog-serve.

And it wouldn't work with systems that weren't based on TLI.  Other
systems won't implement the listener service.  The listener service is
a session layer specific to some of AT&T's applications.  The rest of
the world doesn't work that way and the rest of the world's
applications outnumber the few AT&T applications.

>If you want TCP/IP and TLI stuff on the same media, you would make
>a TCP/IP STREAMS deiver for the media.  The program which oversees

Now you are confusing TLI with the transport itself.  Using TLI
as a program interface should not and must not get in the way of
using the transport protocol.  Once you get on the media, TLI is
totally irrelevant.  If it isn't, someone did something wrong.

>the TCP/IP workings establishes a TCP/IP address for the TLI
...
>(deeper) end of the module.  It would also seem that this
>'other' protocol could be anything! (X.25; TCP/IP; STARLAN;
>whatever).
>
>(Or maby not, considering I don't really know the innards
>of TCP/IP.  It may also end up that TCP is on the same
>level as TLI and that IP may be below both of them equally.
>Or TCP and TLI may be available over any media and things
>like TCP/STARLAN and TLI/IP may be possible?????????????

TCP is basically a transport.  IP is basically a network layer.
TLI is neither - it is a program interface for a tranport layer.
The issue that you missed is that TLI doesn't specify how addresses
for a specific transport should look.  Actually, TLI shouldn't
do this, there should be an address format registry that says
how to format addresses for a specific transport.

You should also be aware that Starlan is the media in you examples.
There is a transport protocol called URP sitting above the media
dependent part.  

Sorry to be so verbose, but the article prompted a comment since
it was so confused.

rwhite@nusdhub.UUCP (Robert C. White Jr.) (07/19/88)

in article <7324@ico.ISC.COM>, dougm@ico.ISC.COM (Doug McCallum) says:
> Xref: nusdhub comp.dcom.lans:352 comp.protocols.tcp-ip:1080 comp.protocols.iso:44
> 
> In article <1104@nusdhub.UUCP> rwhite@nusdhub.UUCP (Robert C. White Jr.) writes:
>>in article <666@cbnews.ATT.COM>, mark@cbnews.ATT.COM (Mark Horton) says:
>>> Xref: nusdhub comp.dcom.lans:345 comp.protocols.tcp-ip:1043 comp.protocols.iso:42
>>If my perceptions are correct then trying to write a TCP/IP driver
>>over a "TLI device" is a non-sequetor.  The order, top to bottom,
>>of the stream should be: TLI over TCP/IP over STREAMS Device; such
>>that you have a STREAMS conformant TCP/IP driver for your ethernet
>>board, and then you push a custom made TLI-to-TCP/IP STREAMS module
>>on the stream before you hand the connection to a TLI conformant
>>application.
> 
> You wouldn't normally write a TCP/IP driver over a TLI device (but
> I can see a case where you might).  All the previous discussion seemed
> to be saying that a TCP/IP device would support TLI directly.  That is,
> it conforms to the AT&T "Transport Provider Interface" specification which
> the TLI library and modules expect.  Since TCP can be implemented to the 
> TPI specification, no special conversion module is required.

In my recolection, the originator of this thread said that he was
"trying to write a TCP/IP <something> which would run over TLI,"
and was having a bitch of a time because "There was no preset way
of handling addresses" in TLI.

As far as an address being something that a user can be "prompted
for"  any user who wants to talk to machine 'X' had better know
the "address" of machine X, or some alias which will relate.
If the user has to type "AA093749823FEBCC836628973DA31.22" or
"Go\nFind\nThe\nMachine\nThat\nHas\nService\nX" to
get there, they can type this at their console, they can not,
however, type in the spesification of a 45 byte structure and
media spesific addressing scheme... As far as passing this
"legible" address to the TLI provider, this is _exactly_ what
takes place; If the dirver has to translate this to get the
afor mentioned structure, fill a 50 byte real number, or go out
and get name service, that is what it does, no questions asked.
Hence teh value of the aledged uniformity.

The idea is (according to the manuals) to have a layer which
accepts a single string/sequential structure from above
and does to it what is necessary to the media/protocol below.
Either the TLI layer is made sufficiently intellegent to take
the input as a string, or the whole point of a uniform
interface goes right out the window.

To whit: (from definition of M_PROTO message T_INFO_ACK of the
	TLI internals definition from the "porting rules" doccument)

ADDR_size	(a return value of) -2 spesifies that the transport
		provider  does not provide  user access to transport
		spesific addresses.

T_ERROR_ACK  Return coed TBADADDR:
	Indicates that _protocol_ address was in incorrect format
	or the address contained incorrect illegal information...

These two imply (wrongly?) that the TLI is for insulation from the
uglies, instead of the "this is just another library" outlook.


> Sorry to be so verbose, but the article prompted a comment since
> it was so confused.

The article _was_ confused because so was I.  If the TLI is the
difinition of an "OSI Transport Layer" then the presence of TCP/IP
as the layer below this makes sense, in the sense that TLI
is capable of being implemented _over_ TCP/IP.  The original
statement of the original poster that he wanted to place TCP/IP
_over_ TLI made no sense to me... further, there would also be
no point in writing said "application" if what he actually needs
is TCP/IP information.

Trying to put TCP/IP into TLI (a real squeze, and since TLI is
supposed to be an _optional_ way of hiding the mess anyway...)
I did not see what the problem was beyond bad choice of environment
on the programmers part.

The whole thread of putting something very TCP/IP into TLI and then
bitching about the loss of direct address fiddling seems riduclous.
Hence my quest for understanding.

Rob.

guy@gorodish.Sun.COM (Guy Harris) (07/21/88)

> As far as an address being something that a user can be "prompted
> for"  any user who wants to talk to machine 'X' had better know
> the "address" of machine X, or some alias which will relate.
> If the user has to type "AA093749823FEBCC836628973DA31.22" or
> "Go\nFind\nThe\nMachine\nThat\nHas\nService\nX" to
> get there, they can type this at their console, they can not,
> however, type in the spesification of a 45 byte structure and
> media spesific addressing scheme... As far as passing this
> "legible"

The "legible" deserves to be in quotes here; no way is something such as
"AA093749823FEBCC836628973DA31.22" usable.  Sorry, if *I* want to send mail, I
send it to "jblow@blow.com", not "jblow@AA093749823FEBCC836628973DA31.22".

As for "media-specific addressing schemes", I assume that by "media" you mean
"transport protocols" as opposed to "physical networks"; typically, the
network-layer protocol will isolate you from having to deal with link-layer
addressing.  My machine's Internet address is "192.9.90.60" (a 4-byte string,
with the four numbers there being the values of the four bytes), regardless of
whether you're talking to it over a local Ethernet, a Sun Internetwork Router
connection, a SLIP connection, or two tin cans and a string.

> address to the TLI provider, this is _exactly_ what
> takes place; If the dirver has to translate this to get the
> afor mentioned structure, fill a 50 byte real number, or go out
> and get name service, that is what it does, no questions asked.

Wrong.  The TCP and IP drivers in the STREAMS/TLI TCP/IP implementations I know
of do *NOT* "goes out and get (the) name service", nor do they "translate" an
ASCII string into a byte string.  The code that *calls* TLI has to convert that
hexadecimal monstrosity to a string of bytes, with the first byte having e.g.
the hex value 0xAA, and stuff that down into the transport layer.

> Hence teh value of the aledged uniformity.

"Alleged" is the correct word here.  There's no uniform way of doing this
ASCII string to address translation in S5R3 as it is distributed.  In fact, I
don't think there's any way to do that translation in S5R3 as it's distributed,
period.

> The idea is (according to the manuals) to have a layer which
> accepts a single string/sequential structure from above
> and does to it what is necessary to the media/protocol below.
> Either the TLI layer is made sufficiently intellegent to take
> the input as a string, or the whole point of a uniform
> interface goes right out the window.

OK, then, the whole point of a uniform interface just went out the window.  TLI
does not take the input as a string in the TCP/IP implementations I know of.
What it takes is a *byte* string, containing the address in what is likely to
be a *binary* form (I had the impression that Datakit took human-readable
strings; could this be the source of some of the confusion?).

> To whit: (from definition of M_PROTO message T_INFO_ACK of the
> 	TLI internals definition from the "porting rules" doccument)
> 
> ADDR_size	(a return value of) -2 spesifies that the transport
> 		provider  does not provide  user access to transport
> 		spesific addresses.
> 
> T_ERROR_ACK  Return coed TBADADDR:
> 	Indicates that _protocol_ address was in incorrect format
> 	or the address contained incorrect illegal information...
> 
> These two imply (wrongly?) that the TLI is for insulation from the
> uglies, instead of the "this is just another library" outlook.

No, you are *inferring* wrongly that the TLI insulates you from the uglies.  An
address can be in "incorrect format" without that "format" having to be some
human-readable format.  The address is in the form of a count and a byte
string, with the count specifying how many bytes are in the string.  If you
pass a 1-byte address to TCP or UDP, it should reject it as being in an
incorrect format because TCP and UDP addresses are 6 bytes long (4 bytes of IP
address, 2 bytes of port number).

rwhite@nusdhub.UUCP (Robert C. White Jr.) (07/22/88)

in article <60781@sun.uucp>, guy@gorodish.Sun.COM (Guy Harris) says:
> Xref: nusdhub comp.dcom.lans:361 comp.protocols.tcp-ip:1113 comp.protocols.iso:47
> 
> "Alleged" is the correct word here.  There's no uniform way of doing this
> ASCII string to address translation in S5R3 as it is distributed.  In fact, I
> don't think there's any way to do that translation in S5R3 as it's distributed,
> period.

Here is a "for instance" where you are wrong.

ALL starlan addressing uses the 802.3 six-byte couplet for addressing
purposes.  Further RFS gets "name service" for all the available
resources, but not the machine names.  When any TLI conformant
application requests, including RFS, want to make a connection
they pass a "name"  e.g. "nusdhub.serve" to the TLI interface.
somewhare below this, the TLI and or STARLAN driver groups fardle
around and recover the machine address (802.3) and then establishes
the connection.

Even though the (admittedly three layers) receives the "name string"
the addressing used after the address determination phase is the
byte string.  At no point does the "uucp" "cu" or RFS task enquire
about the six byte string.

The fact that all you have ever seen of TCP/IP drivers written as
TLI conformant functions pass the four byte addresses as actual
bytes instead of a string like "109.90.42.6" is simply sad.  In
essence this breaks the aledged uniformity.  To implement the
TCP/IP and TLI over the same media, the primitive kernel driver
should be TCP/IP, and then a streams module which can convert
TLI requests into TCP/IP should be written.  TCP/IP _is more_
complex, and therefore, to implement both TLI should be an
optional addition onto the TCP/IP.  Then you place 109.90.42.6
in your Systems file;  you spesify the TLI<->TCP/IP converter
module as the first-push-in-the-list;  and you spesify the cloning
module for TCP/IP as the device.  Bam, you are TLI conformant.
The simple task of converting the string to the 4-byte couplet
is not beyond the scope of a STREAMS module, and you have full
function from bot modules.

Similarly, you might write the drivers as two seperate tasks, and
assemble a multiplexing stream on media initalization where both
drivers drive the down-stream media as necessary, but respond
to TLI or TCP/IP as necessary when working upstream.  This _is_
what streams modules are for you know.

To do TCP/IP _over_ TLI is simply stupid.

>> The idea is (according to the manuals) to have a layer which
>> accepts a single string/sequential structure from above
>> and does to it what is necessary to the media/protocol below.
>> Either the TLI layer is made sufficiently intellegent to take
>> the input as a string, or the whole point of a uniform
>> interface goes right out the window.
> 
> OK, then, the whole point of a uniform interface just went out the window.  TLI
> does not take the input as a string in the TCP/IP implementations I know of.
> What it takes is a *byte* string, containing the address in what is likely to
> be a *binary* form (I had the impression that Datakit took human-readable
> strings; could this be the source of some of the confusion?).

As I said, doing TCP/IP _over_ TLI is stupid.  They are *comprable*
in form and purpose, and TLI _is_ designed to be more "elementary"
than TCP/IP.  Trying to squese TCP/IP through TLI is like hooking
100amp wire to a 15amp breaker;  It is _NOT_ the way these things
are supposed to be done.

>> To whit: (from definition of M_PROTO message T_INFO_ACK of the
>> 	TLI internals definition from the "porting rules" doccument)
>> 
>> ADDR_size	(a return value of) -2 spesifies that the transport
>> 		provider  does not provide  user access to transport
>> 		spesific addresses.
>> 
>> T_ERROR_ACK  Return coed TBADADDR:
>> 	Indicates that _protocol_ address was in incorrect format
>> 	or the address contained incorrect illegal information...
>> 
>> These two imply (wrongly?) that the TLI is for insulation from the
>> uglies, instead of the "this is just another library" outlook.
> 
> No, you are *inferring* wrongly that the TLI insulates you from the uglies.  An
> address can be in "incorrect format" without that "format" having to be some
> human-readable format.  The address is in the form of a count and a byte
> string, with the count specifying how many bytes are in the string.  If you
> pass a 1-byte address to TCP or UDP, it should reject it as being in an
> incorrect format because TCP and UDP addresses are 6 bytes long (4 bytes of IP
> address, 2 bytes of port number).

The *purpose* of TLI _is_ to insulate you form the uglies;  That is
why things like uucp and cu have been re-written to be TLI conformant;
so simple ASCII strings may be spesified in the ASCII files (Systems,
Dialers, Dialcodes, Devices... remember them?) and allow these versions
of uucp and cu to be used with any media (please no more corrections on
my use of 'media,' this is the broad and general usage menaing 'whatever-
is-necessary-below-this-point')  Depending on what is required, you might
need to set an address like "109.94.60.2:rlogin" to properly implement
TLI through TCP/IP, or perhaps place something similar in the Dialers
spec, but I don't really know because I have not expended any energy on
the topic outside this conversation.

All of this is much the purpose of the "adm" program which assembles
the STREAMS modules which eventually make /dev/starlan operate
the STARLAN product.  I would assume the correct "adm" program
for an ethernet and/or internet support would activate two STREAMS
multiplexers like /dev/ether.tcp and /dev/ether.tli or some such.

Rob.

guy@gorodish.Sun.COM (Guy Harris) (07/23/88)

> The fact that all you have ever seen of TCP/IP drivers written as
> TLI conformant functions pass the four byte addresses as actual
> bytes instead of a string like "109.90.42.6" is simply sad.

Excuse me, but this is nonsense; the difference between "actual bytes" and
"109.90.42.6" is trivial relative to the difference between "sun.com" and
"10.7.0.2".  If TLI forced me to pass a string like "109.90.42.6" to it, that
would be every bit as sad as if it forced me to pass that address down in
binary form.

> In essence this breaks the aledged uniformity.  To implement the
> TCP/IP and TLI over the same media,

You don't "implement TLI over a medium".  TLI/TPI is, in effect, an *interface*
that "transport providers" implement.  You implement a "TLI/TPI-conformant TCP"
or a "TLI/TPI-conformant UDP" or a "TLI/TPI-conformant ISO TP4" or a "TLI-TPI
conformant XNS SPP" or....

> the primitive kernel driver should be TCP/IP, and then a streams module
> which can convert TLI requests into TCP/IP should be written.

No, you implement a driver that provides the TCP or UDP protocol and that
conforms to the requirements of TPI and TLI.  That driver is what "converts
TPI/TLI requests into TCP".

> TCP/IP _is more_ complex, and therefore, to implement both TLI should be an
> optional addition onto the TCP/IP.

TCP and TLI are completely different types of things, so it's hard to say one
is "more complex" than the other, except to say "TLI supports functions TCP
doesn't provide" (which is true) or "TCP provides functions TLI doesn't
support" (which is also true).

> Then you place 109.90.42.6 in your Systems file;

I refuse to put something as gross as "109.90.42.6" into any configuration file
for a network utility; if I can't put the *name* of the machine there, that's
unacceptable.  There are, I believe, many *thousands* of hosts on the DARPA
Internet; I know there are thousands of hosts on Sun's network.  Sometimes
hosts may change their addresses but not their names.  Administering a network
of that size by using addresses rather than names would simply be impractical.

> The simple task of converting the string to the 4-byte couplet
> is not beyond the scope of a STREAMS module,

No, but it's not very useful, either.  What you *really* want is a mechanism
that can convert what you might call a "service specification" (i.e., "UUCP on
host 'sun.com' over TCP") into an address in whatever form the protocol
requires.  UUCP (which, I infer from your mention of a "Systems" file, is the
service to which you're referring here) would then ask for that service, and
hand *that* to TLI.


> All of this is much the purpose of the "adm" program which assembles
> the STREAMS modules which eventually make /dev/starlan operate
> the STARLAN product.  I would assume the correct "adm" program
> for an ethernet and/or internet support would activate two STREAMS
> multiplexers like /dev/ether.tcp and /dev/ether.tli or some such.

Are you actually familiar with TCP or IP, or is your only TLI/TPI experience
with, e.g., STARLAN?  If you haven't worked with TCP, you should probably study
up on it first, and preferably on TLI-conformant TCP implementations, so you
can discuss implementations of things other than STARLAN meaningfully, and
support for multiple protocols in general, meaningfully.  If all you know is
STARLAN, you're unlikely to know what's involved in protocol independence....

mre@beatnix.UUCP (Mike Eisler) (07/26/88)

In article <1110@nusdhub.UUCP> rwhite@nusdhub.UUCP (Robert C. White Jr.) writes:
>The fact that all you have ever seen of TCP/IP drivers written as
>TLI conformant functions pass the four byte addresses as actual
>bytes instead of a string like "109.90.42.6" is simply sad.  In

First of all, it is NOT adequate to pass 4 bytes. You need the Internet
address plus the 2 bytes of port number that TCP service is listening.
I'll agree that 109.90.42.6 is a commonly used, standard, clean way to
pass an address to a driver.  But I know of no commonly used form
concatenates port numbers and "dot" addresses.

>essence this breaks the aledged uniformity.  To implement the

What unformity? Where is there a standard written for specifying addresses
to TCP/IP TLI conformant streams drivers? 

>TCP/IP and TLI over the same media, the primitive kernel driver
>should be TCP/IP, and then a streams module which can convert
>TLI requests into TCP/IP should be written.  TCP/IP _is more_
>complex, and therefore, to implement both TLI should be an
>optional addition onto the TCP/IP.  Then you place 109.90.42.6

What does complexity of TCP/IP have to do with whether TLI should be an
option. What's complex, the protocol implementation, or the interface?
If starlan and TCP/IP can both use the same interface, TLI, then they
their interfaces are equally complex, and so by your logic all TLI
compliant protocols should be implemented as two halves, your symbolic
"uniforum half" and the half that everybody currently implements. Bye, bye
performance.

>As I said, doing TCP/IP _over_ TLI is stupid.  They are *comprable*

By this statement, I think you mean that to implement a TCP/IP
protocol in user-land on top of some TLI compliant media driver (eg.
X.25, ethernet, etc.) is stupid. I'm not so sure I agree. Somebody
may want to proto-type a TCP/IP implementation first on a particular
computer, before investing in the increased costs of kernel
development and debugging, especially on a 3b2. :-)

>in form and purpose, and TLI _is_ designed to be more "elementary"
>than TCP/IP.  Trying to squese TCP/IP through TLI is like hooking

Hey what exactly are you talking about anyway? TLI is comparable to TCP/IP?
TLI is an interface. TCP/IP is a protocol. TCP/IP under TLI
is an implementation.

>The *purpose* of TLI _is_ to insulate you form the uglies ...

>... Depending on what is required, you might
>need to set an address like "109.94.60.2:rlogin" to properly implement

You are assuming that this is the standard address representation for
the login service residing on 109.94.60.2. I've never seen this format
before. Vendors could implement infinite, incompatible variations of
this ascii string format, eg: rlogin:109.94.60.2, 513.109.94.60.2,
2.1.109.94.60.1, 109.95.60.1:2.1, etc.

>TLI through TCP/IP, or perhaps place something similar in the Dialers
>spec, but I don't really know because I have not expended any energy on
>the topic outside this conversation.
>
>All of this is much the purpose of the "adm" program which assembles
>the STREAMS modules which eventually make /dev/starlan operate
>the STARLAN product.  I would assume the correct "adm" program
>for an ethernet and/or internet support would activate two STREAMS
>multiplexers like /dev/ether.tcp and /dev/ether.tli or some such.

First you said that the *purpose* of TLI is to insulate you from
"uglies" than you say that it is the purpose of the of "adm" program.
Which is it?  The "adm" program isn't on my copy of 5.3 source, so I
assume it is something specific to starlan that assembles streams
drivers and modules, and/or does name resolution. The various STREAMS
TCP packages have similar tools and services to do the same, but
difference is that Starlan has virtually one manufacturer and is
proprietary to AT&T.  AT&T can therefore enforce a standard address
encoding that will be recognizable to all applications that use it on
all machines that use those applications, eg. RFS. And I guess it is
the "adm" program that embodies this enforcement.

TCP has perhaps a half dozen or so suppliers of STREAMS
implementations, each with their own "adm" thing and address encoding
formats. The point is that without a well-defined, agreed upon
standard, regardless of whether the encoding uses nice ASCII strings,
or binary strings, each implementer is going to use his own encoding
mechanism, resulting in incomptabilities.

Telling me that TLI has solved this problem for me, because it solves
it for the protocol you use (starlan), doesn't cut it. I'm using an
open protocol that others are free to implement.  If AT&T wants TLI to
be the standard, then they should enhance it to define specifics for
commonly used protocols (TCP, ISO/OSI/ X.25, SNA, DECNET). AT&T did
this for starlan, why can't they do it for TLI?

Sockets, for all the trashing people have done on them, do define and
enforce address encodings for at least two protocols (XNS, TCP). Hence,
everybody can rlogin, telnet, rcp, ftp, smtp, NFS, RPC, etc. to each
other, as long as these things are built on sockets. That's not the
case for RFS built on TLI over TCP.

	-Mike Eisler

rwhite@nusdhub.UUCP (Robert C. White Jr.) (07/28/88)

I am begining to suspect that I am exchanging POV with more than one
other individual.

For clarity, the thread to date is based on one posters lament about how
dificult it was (for him) to write a TCP/IP interface which runs under
TLI.  Please re-read this sentince about a millino times--or at least until
it soaks in throughly--before proceeding.

Either that, or the postings are not being read, they are being "sampled."

Similarly, you should at _least_ include the *entire* sentince on which
you comment.  Other wise all you are doing is foistering you on distortions
of meaning on the readers.  A prepositional phrase, or dependant clause
all by itself does not an idea express...


in article <61066@sun.uucp>, guy@gorodish.Sun.COM (Guy Harris) says:
> Xref: nusdhub comp.dcom.lans:370 comp.protocols.tcp-ip:1132 comp.protocols.iso:52
> 
>> The fact that all you have ever seen of TCP/IP drivers written as
>> TLI conformant functions pass the four byte addresses as actual
>> bytes instead of a string like "109.90.42.6" is simply sad.
> Excuse me, but this is nonsense; the difference between "actual bytes" and
> "109.90.42.6" is trivial relative to the difference between "sun.com" and
> "10.7.0.2".  If TLI forced me to pass a string like "109.90.42.6" to it, that
> would be every bit as sad as if it forced me to pass that address down in
> binary form.

True; I do understand that.  This relates bact, however, to the "lament"
that TLI (e.g. AT&T) did not spesify a "universal structure"  (read to mean
memory structure as in C or assem) which would interface to *every* kind
of underlying protocol. (and went on to name: X.25, SNA, URP, TCP/IP [sic]
and a couple of ones I didn't know)  Put simply, such a structure would
be preposterous and unworkable, therefore the "structure" stteled on was
the "string."  (e.g. a netbuf structure filled with an "arbitrary" string
of characters meaningful to the application and the TLI driver.)

To this end, what I wrote was *exactly* as menaingful as I intended.
We have laready been through the:  "But my address is 198.3.54.6 and
not nusdhub.serve, so whay should I pass the latter" argument.  I
therefore, used the "addressing scheme" of choice (to my audience).

>> In essence this breaks the aledged uniformity.  To implement the
>> TCP/IP and TLI over the same media,
> You don't "implement TLI over a medium".  TLI/TPI is, in effect, an *interface*
> that "transport providers" implement.  You implement a "TLI/TPI-conformant TCP"
> or a "TLI/TPI-conformant UDP" or a "TLI/TPI-conformant ISO TP4" or a "TLI-TPI
> conformant XNS SPP" or....

To this I must simply reply: "READ THE SPECS!"

TLI may be implemented OVER *ANYTHING*;  I even went so far as to explain
that I was using the -loose- *ENGLISH* version of the word 'MEDIA.'  To
whit you may (were you to desire to) implement the following:  TLI _over_
verification suit _over_ X.25 _over_ normal tty driver _over_ physical
port _contected to_ a modem _connected to_ Tymenet.  You may also make
A TLI module which you may push above a TCP/IP endpoint to make the
afore-mentioned TCP/IP driver-tree a "TLI CONFORMANT 'PROVIDER'": which
is ALL the specs require of you.

>> the primitive kernel driver should be TCP/IP, and then a streams module
>> which can convert TLI requests into TCP/IP should be written.
> No, you implement a driver that provides the TCP or UDP protocol and that
> conforms to the requirements of TPI and TLI.  That driver is what "converts
> TPI/TLI requests into TCP".

I KNOW the way is should be done when you have no other constraints.
What I described conforms to the constraints provided.  READ THE THREAD.

Several articles back I went over (with pictures) TCP/IP- and TLI-cloning
drivers over an overseer over a "media"; TLI-cloning driver over TCP/IP
driver over "media"; et al ad nausium...  Check your archive.

>> TCP/IP _is more_ complex, and therefore, to implement both TLI should be an
>> optional addition onto the TCP/IP.
> TCP and TLI are completely different types of things, so it's hard to say one
> is "more complex" than the other, except to say "TLI supports functions TCP
> doesn't provide" (which is true) or "TCP provides functions TLI doesn't
> support" (which is also true).

No kidding???!!!???  Of course they are, but the basis of all this was
someone who wanted to implement TCP/IP *over* TLI (patently dumb)
and the waters you just re-muddied were almost clear.

>> Then you place 109.90.42.6 in your Systems file;
> 
> I refuse to put something as gross as "109.90.42.6" into any configuration file
> for a network utility; if I can't put the *name* of the machine there, that's
> unacceptable.  There are, I believe, many *thousands* of hosts on the DARPA
> Internet; I know there are thousands of hosts on Sun's network.  Sometimes
> hosts may change their addresses but not their names.  Administering a network
> of that size by using addresses rather than names would simply be impractical.

Yes, I know about address names, verses real addresses.  I am trying to
keep the examples simple and well defined.

Once again, If you simply say:  "But I'll just throw away my spesifications
and the desire of my employer and do it this way" all sorts of things become
a lot easier.  Similarly, if you just say:  "This example is to basic, it
allows someone form another environment to _understand_ so I better
re-muck it up"  you can justify all sorts of "better" things to say.

The spesific issue *WAS* using the four byte address (c.f. to string
or to structure) and my use of uucp as an example was to keep things
both (1) on track to my audience, and (2) simple and aimed at my audience.

>> The simple task of converting the string to the 4-byte couplet
>> is not beyond the scope of a STREAMS module,
> No, but it's not very useful, either.  What you *really* want is a mechanism
> that can convert what you might call a "service specification" (i.e., "UUCP on
> host 'sun.com' over TCP") into an address in whatever form the protocol
> requires.  UUCP (which, I infer from your mention of a "Systems" file, is the
> service to which you're referring here) would then ask for that service, and
> hand *that* to TLI.

I don't know weather you have read the specs for UUCP as relates to
a TLI conformant provider.

>> All of this is much the purpose of the "adm" program which assembles
>> the STREAMS modules which eventually make /dev/starlan operate
>> the STARLAN product.  I would assume the correct "adm" program
>> for an ethernet and/or internet support would activate two STREAMS
>> multiplexers like /dev/ether.tcp and /dev/ether.tli or some such.
> Are you actually familiar with TCP or IP, or is your only TLI/TPI experience
> with, e.g., STARLAN?  If you haven't worked with TCP, you should probably study
> up on it first, and preferably on TLI-conformant TCP implementations, so you
> can discuss implementations of things other than STARLAN meaningfully, and
> support for multiple protocols in general, meaningfully.  If all you know is
> STARLAN, you're unlikely to know what's involved in protocol independence....

No, I am not farmilliar with the internal details of TCP/IP;  my question
about TCP/IP is mostly how this thread got started.  As far as TLI is
concerned, I have been through the "porting rules" doccument--which
contains a description of *all* of the STREAMS requirements and
functional spesifications necessary to make any STREAM represent a
'TLI conformant provider'  (this includes state and precidence tables)--
and know exactly what is and is not required of a system for it to be
TLI conformant.

The essence of the discusion is:

(1) Q: What structure should be passed to TLI?  A: A "human readable"
	string.

(2) Q: How can I [sic] implement a TCP/IP interface over a TLI network?
	A:  You can't; you don't want to; the whole point of TLI is
		to allow/create a "simple and uniform" interface
		which will work with any provider.

(3) Q: How am I supposed to do address translation under TLI?
	A:  You don't; the driver writer has built the soft-to-
		hard address translation into the driver (if it
		is in fact conformant).


Rob.

sas@pyrps5 (Scott Schoenthal) (07/28/88)

[ I have removed comp.protocols.iso from the Newsgroup distribution -- sas ]

In article <1116@nusdhub.UUCP> rwhite@nusdhub.UUCP (Robert C. White Jr.) writes:
>The essence of the discusion is:
>
>(1) Q: What structure should be passed to TLI?  A: A "human readable"
>	string.

I have tried to follow your "thread" and I must take exception to this
statement.  The point (as I see it) of the addressing discussion is that
the structure of the address (in ISO jingo, the TSAP) that is passed
to TLI is opaque.  It is up to the implementation of the TLI-conformant
transport provider as to how this is interpreted.  Mike Eisler raised the
point that different transport provider implementations that support
the same protocol (he used TCP/IP addressing as an example) could interpret
the address in different, arbitrary manners.

What is lacking is the definition of an addressing structure (be it
packed BCD, hexadecimal arrays, or ASCII strings) to be used for different
communication protocol families (e.g., OSI, XNS, TCP/IP, etc) within the TLI
framework.

That, sir, is the point.

>(3) Q: How am I supposed to do address translation under TLI?
>	A:  You don't; the driver writer has built the soft-to-
>		hard address translation into the driver (if it
>		is in fact conformant).

The question itself is a non sequitur.  A more reasonable way of stating what
I think you mean is:

	"How does an application programmer form address structures
	to pass to a TLI conformant provider while using the TLI
	user-library functions?"

And the answer is (once again) that the format of the structure depends on the
implementation of the provider.  The provider renders the
address structure passed to it (which is defined as part of the implementation
of the provider) into whatever internal formats or uses it requires.

Rob,  I suggest that, if possible, you should somehow get access to System V
source code.  I think that the points made by Guy, Mike, and others will
become more obvious.  It is unfortunate that the publically available
documentation does not make these issues more clear.

sas
----
Scott Schoenthal   			sas@pyrps5.pyramid.com
Pyramid Technology Corp.		{sun,hplabs,decwrl}!pyramid!sas

dougm@ico.ISC.COM (Doug McCallum) (07/29/88)

In article <1116@nusdhub.UUCP> rwhite@nusdhub.UUCP (Robert C. White Jr.) writes:
>I am begining to suspect that I am exchanging POV with more than one
>other individual.

You are.  There are 3-4 of us.

>For clarity, the thread to date is based on one posters lament about how
>dificult it was (for him) to write a TCP/IP interface which runs under
>TLI.  Please re-read this sentince about a millino times--or at least until
>it soaks in throughly--before proceeding.

Ok, in your sentence, the operative word is "under".  That is, TCP/IP
interface is "under" the TLI.  That's pretty clear.

>Either that, or the postings are not being read, they are being "sampled."

You might follow your own advice.

...
>True; I do understand that.  This relates bact, however, to the "lament"
>that TLI (e.g. AT&T) did not spesify a "universal structure"  (read to mean
>memory structure as in C or assem) which would interface to *every* kind
>of underlying protocol. (and went on to name: X.25, SNA, URP, TCP/IP [sic]
>and a couple of ones I didn't know)  Put simply, such a structure would
>be preposterous and unworkable, therefore the "structure" stteled on was
>the "string."  (e.g. a netbuf structure filled with an "arbitrary" string
>of characters meaningful to the application and the TLI driver.)

No one suggested a "universal structure".  What is needed and was
suggested was  a structure for each address family.  It wasn't worded
exactly that way, but that is what was said.  Who settled on the
"string" as the official form of address?  You may have.  The Starlan
software may have, butI have not found it anywhere in the
documentation.  Please cite volume, chapter and verse so I can be
enlightened.

>To this end, what I wrote was *exactly* as menaingful as I intended.
>We have laready been through the:  "But my address is 198.3.54.6 and
>not nusdhub.serve, so whay should I pass the latter" argument.  I
>therefore, used the "addressing scheme" of choice (to my audience).

Actually, your audience seems to be disagreeing with you.

...
>I KNOW the way is should be done when you have no other constraints.
>What I described conforms to the constraints provided.  READ THE THREAD.

But the constraints are yours and not TLI or AT&T's.  Could you point
me at something that documents how things are supposed to be done?

...
>> is "more complex" than the other, except to say "TLI supports functions TCP
>> doesn't provide" (which is true) or "TCP provides functions TLI doesn't
>> support" (which is also true).
>
>No kidding???!!!???  Of course they are, but the basis of all this was
>someone who wanted to implement TCP/IP *over* TLI (patently dumb)
>and the waters you just re-muddied were almost clear.

Now, if your earlier sentence (included here for context)
    >For clarity, the thread to date is based on one posters lament about how
    >dificult it was (for him) to write a TCP/IP interface which runs under
    >TLI.  Please re-read this sentince about a millino times--or at least until
    >it soaks in throughly--before proceeding.

states what started this, then how do you get TCP/IP being implemented
over TLI from TCP/IP "under" TLI?  Before telling others to "read",
you should do the same.

...
>Yes, I know about address names, verses real addresses.  I am trying to
>keep the examples simple and well defined.

But your examples only work in the simple and well defined universe.
They don't work in the real universe the rest of us have to deal with.

>Once again, If you simply say:  "But I'll just throw away my spesifications
>and the desire of my employer and do it this way" all sorts of things become
>a lot easier.  Similarly, if you just say:  "This example is to basic, it
>allows someone form another environment to _understand_ so I better
>re-muck it up"  you can justify all sorts of "better" things to say.

Are you speaking as the authoritative voice of what AT&T wants people
to do with TLI addressing?  Again I ask, point me at any published
specification that states that "strings" are what is specified.  If
you look on page 3-7 of the "AT&T UNIX(tm) System V Network
Programmer's Guide", you will find a documented counter-example to
your claim of strings being the specified address format.  If you are
interpreting the fact that the netbuf structure defines the "buf"
field to be type "char *", well, "char *" is frequently used as a
pointer to anything.

I should also mention that when I worked on TCP support during the 386
V.3 port, we had to change the address convention used to conform to
what AT&T required.  That address format was a specific format for the
struct sockaddr_in structure, it was not an ASCII string.  Come to
think of it, the "official" port supported ISO protocols with a very
"binary" representation.  This is documented in the "AT&T UNIX System
V/386 System Administrator's Reference Manual"  section tp4(7).

...
>I don't know weather you have read the specs for UUCP as relates to
>a TLI conformant provider.

I have, what is it supposed to tell me that contradicts what the
author said?  You can either put in a phone number (in ASCII) or use
\nnn notation to put in what you need.  In other wrds, where RFS
(which uses a different host file altogether) allows \xABCD, UUCP
would require specifying in octal with the \nnn notation.

...
>No, I am not farmilliar with the internal details of TCP/IP;  my question
>about TCP/IP is mostly how this thread got started.  As far as TLI is
>concerned, I have been through the "porting rules" doccument--which
>contains a description of *all* of the STREAMS requirements and
>functional spesifications necessary to make any STREAM represent a
>'TLI conformant provider'  (this includes state and precidence tables)--
>and know exactly what is and is not required of a system for it to be
>TLI conformant.

I've been through the porting rules as well.  Not everyone ahs access
to them.  It is not supposed to be necessary to have the porting rules
to do a Streams driver which is TLI conformant although it certainly
helps.  Where does it mention how an address is supposed to look?  It
doesn't mention it anywhere where I could find it.

>The essence of the discusion is:

I assume that the A: are your interpretations and may not necessarily
be correct?

>(1) Q: What structure should be passed to TLI?  A: A "human readable"
>	string.

Prove it.  Give document, chapter, page and line.

>(2) Q: How can I [sic] implement a TCP/IP interface over a TLI network?
>	A:  You can't; you don't want to; the whole point of TLI is
>		to allow/create a "simple and uniform" interface
>		which will work with any provider.

This isn't the issue so don't confuse things any further.

>(3) Q: How am I supposed to do address translation under TLI?
>	A:  You don't; the driver writer has built the soft-to-
>		hard address translation into the driver (if it
>		is in fact conformant).

The real answer is that you can't with TLI at all.  You need software
that is not provided with V.3.

Since your the one so insistant on being correct and having
documentation to prove it, please do so.  My documentation does not
seem to have it.  Give published dates also.  Perhaps what an outsider
can get is not the same as an insider.

		Doug McCallum
		Interactive Systems Corp.
		dougm@ico.isc.com

dougm@ico.ISC.COM (Doug McCallum) (07/29/88)

In an earlier article I mentioned that there should be a name server
to do the conversion.  I didn't intend to imply a single name server
to handle "all" address formats or that only a single format should be
allowed, rather, I feel that a name server functional interface should
be specified.  Each protocol implementation would then provide an
appropriate name server that the standard interface could access.
Each application woudl be implemented using the standard interface.

Finding which name server isn't difficult since you have to specify
the protocol via the first parameter to "t_open" anyway.  That would
be enough information to provide a standard way of finding and
accessing a specific name server.  It would also be possible to query
each resident name server and see if it could resolve the address or
not.

When a name is resolved, the resolver function would return a possible
list of opaque addresses.  It would also have to return the size of
the address to provide a way to determine end of an address and a
count of how many addresses were returned.  Some protocols might not
support or need multiple addresses while something like TCP/IP does.

A universal functional interface need not return a single fixed size
standard format object.  The application does not need to know how to
parse the address.  Some applications might, but then they would not
be particularly portable in any event.  Most applications would just
hand the address to t_connect and wait for a connect or fail.  This
would not be that hard to specify or even very difficult to implement.

You would have thought that AT&T would have understood the need of
name servers and related tools that become an absolute necessity with
large networks.

      			Doug McCallum
			Interactive Systems Corp.
			dougm@ico.isc.com

rwhite@nusdhub.UUCP (Robert C. White Jr.) (07/30/88)

More or less at this point I think I am going to do the following:

	1) Admit that the evidence indicates I am wrong.
	2) Apologize for the tone of my previous posting.
	3) Go for a long weekend away from my job and computer
		on the grounds that my attitude indicates excessive stress.
	4) Re-assert my sense of falibility.
	5) Set tuesday asside for an epic re-reading of the material.
	and
	6) Resign myself for feeling stupid for a while.

Rob.

Disclaimer:  Sometimes it is tough to admit that you are *not*
	the all seeing, all knowing, master of time, space, and
	demension. ;-)