I have finally had a chance to think through the network
console concept and I come up with a few thoughts.

First when you start talking to a network the problem
is different enough that a replacing everything by one protocol
is silly.

There are two major uses of a console.
- Status reporting (primarily for bootup)
- Control by a trusted operator.

Status reporting is the easier problem and all LinuxBIOS uses
so far, so I won't even touch control.

Further the status reporting information is designed for human
consumption, and not for automatic consumption.  So a free form
string is all we need.  And the content will never be standardized.
Basically you should transmit everything just you would transmit over
serial console, with the possible except of pacet transmission
information... 

For status reporting you want it to work in the most minimal
enviroment possible that can transmit a network packet.  Further
as a network console protocol should be useful on headless machines
it is reliable enough if a valid packet gets out the network
interface and a cross over cable can be connected on another machine to
get the information.  Reliability in any other situation is not useful.

Specifics:

1) Network Address
   There is very little standardization right now, there may never
   be so an implementation should be able to select a mac address,
   and a ip address at compile time.

   I would suggest a multicast ip and the corresponding multicast
   mac address be used.  As it allows any client on your local network
   to receive the packet.  This is flexibility with the switch doing
   the work instead of the client.

2) Packet encapsulation
   Everything beyond raw string data is simply a convinience to make
   the data easier for an client to pick up.  So ip and udp headers
   look like a good choice.  Very simple and small to add.  But make
   it possible to pick up the packet easily.  And are the natural
   canidates so multiple implementations will work together by
   accident.

3) Security
   Adding encryption to the data during boot time adds no value as the
   data is predictable.  And knowing the timing and the size of the
   packet is enough to know what it says.

   Not allowing a control channel adds minimum risk, and adds a lot
   of convinience.

4) Control.
   Using existing network control mechanisms telnet, ssh, etc.  Look
   like the right solution in 99% of the cases.  For the case of the
   fully trusted network (A cross over cable) I suggest simply
   listening for udp datagrams to any ip, but directly aimed at your
   mac address.  

   This may be a problem with out of order packets but otherwise it
   is good.  And I doubt out of order packets are a realistic
   scenario.

   Since packets may be easily faked any kind of filtering is useless.
   This includes filtering on mac, ip, or signature.  If someone
   cannot generate a valid control packet on the fly it is easy enough
   to log one and replay it at unfortunate times.

5) Non Ethernet Connections.
   Virtually every interconnect has an IP mapping so mapping so it
   should be a simple matter of matter of mapping ethernet concepts to
   their equivilants.  And following the ip mapping should help.

This is all compatible with Ingo's suggested kernel interface, and can
easily implemented elsewhere.

So thinking this through I'm on board with the concept, and even
willing to put some small amount of work into implementing it.

Suggest? Comments?  

I'd like to debug the concept before we go to far.

Eric

Reply via email to