ip man page on Inferno

Man page or keyword search:  
man Server   579 pages
apropos Keyword Search (all sections)
Output format
Inferno logo
[printable version]

IP(3)									 IP(3)

NAME
       ip - network protocols over IP

SYNOPSIS
       bind -a #I[ifn] /net

       /net/arp
       /net/bootp
       /net/iproute
       /net/ipselftab
       /net/iprouter
       /net/log

       /net/ipifc/clone
       /net/ipifc/stats
       /net/ipifc/n
       /net/ipifc/n/data
       /net/ipifc/n/ctl
       /net/ipifc/n/local
       /net/ipifc/n/status

       /net/proto/clone
       /net/proto/stats
       /net/proto/n
       /net/proto/n/ctl
       /net/proto/n/data
       /net/proto/n/err
       /net/proto/n/local
       /net/proto/n/remote
       /net/proto/n/status
       /net/proto/n/listen
       ...

DESCRIPTION
       The  IP device serves a directory representing a self-contained collec‐
       tion of IP interfaces.  There may be several instances,	identified  by
       the  decimal interface number ifn, that follows the #I device name; #I0
       is assumed by default.  Each instance has a disjoint collection	of  IP
       interfaces,  routes and address resolution maps.	 A physical or virtual
       device, or medium, that produces IP packets is associated with a	 logi‐
       cal  IP network using the mechanisms described under Physical and logi‐
       cal interfaces below.  Commonly all IP media on a host are assigned  to
       a  single  instance  of	#I, which is conventionally bound to /net, but
       other configurations are possible: interfaces might be assigned to dif‐
       ferent  device instances forming separate logical IP networks to parti‐
       tion networks in firewall or gateway applications.

       Hosted Inferno provides a subset of the interface described  here  that
       gives  to  the TCP/IP and UDP/IP of the host system's own IP subsystem.
       See Hosted interfaces below for a summary of the differences.

   Protocols
       Within each instance, the IP device provides an interface  to  each  IP
       protocol configured into the system, such as TCP/IP or UDP/IP.

       Each  of	 the  protocols is served by the IP device, which represents a
       connection by a set of device files.  The top level directory, proto in
       the  SYNOPSIS  above,  is named after a protocol (eg, tcp, il, udp) and
       contains a clone file, a stats file, and subdirectories	numbered  from
       zero to the number of connections configured for this protocol.

       The  read-only  stats file contains protocol-specific statistics as one
       or more lines of text.  There is no particular format, but  the	values
       are often a superset of those required by the SNMP MIB.

       Opening the clone file reserves a connection, represented by one of the
       numbered subdirectories.	 The resulting file descriptor will be open on
       the  control file, ctl, of the newly allocated connection.  Reading the
       ctl file returns a text string representing the number of  the  connec‐
       tion.   Connections  may be used either to listen for incoming calls or
       to initiate calls to other machines.

       A connection is controlled by writing text strings  to  the  associated
       ctl  file.   After  a  connection has been established data may be read
       from and written to the data file.

       Before sending data, remote and local addresses must  be	 set  for  the
       connection.  For outgoing calls the local port number will be allocated
       randomly if none is set.	 Addresses are set by writing control messages
       to  the	ctl file of the connection.  The connection is not established
       until the data file is opened.  There are two models depending  on  the
       nature of the protocol.	For connection-oriented protocols, the process
       will block on open until the remote host has acknowledged  the  connec‐
       tion,  either  accepting	 it, causing a successful return from open, or
       rejecting it, causing open to return an appropriate error.  For connec‐
       tionless	 protocols,  the  open	always succeeds; the `connect' request
       sets local parameters for the source and destination fields for use  by
       subsequent read and write requests.

       The  following  control	messages are provided by this interface to all
       protocols.  A particular protocol can provide additional	 commands,  or
       change  the  interpretation or even syntax of those below, as described
       in the manual page for that protocol.  The description below shows  the
       standard commands with the default argument syntax and interpretation:

       connect ipaddress!port[!r] [lport]
	      Set  the	remote	IP address and port number for the connection.
	      If the r flag is supplied and the optional local port lport  has
	      not  been	 specified  the system will allocate a restricted port
	      number (between 600 and 1024) for the connection to allow commu‐
	      nication with Unix machines' login and exec services.

       announce [ipaddress!]port
	      Set the local port number to port and accept calls to that port.
	      Port is a decimal port number or If port is zero, assign a  port
	      number  (the  one	 assigned  can	be read from the local address
	      file).  If port is accept calls for any port that no process has
	      explicitly  announced.   If the optional ipaddress is given, set
	      the local IP address for the connection  to  that	 address,  and
	      accept  only  those incoming calls to port that are addressed to
	      ipaddress.   Announce  fails  if	the  connection	  is   already
	      announced or connected.

       bind port
	      Port  is	a  decimal port number or Set the local port number to
	      port.  This request exists to support emulation of of BSD	 sock‐
	      ets and is otherwise neither needed nor used in Inferno.

       tos [ n ]
	      Set   the	 type-of-service  value	 in  outgooing	packets	 to  n
	      (default: 0).

       ttl [ n ]
	      Set the time-to-live (TTL) value in packets transmitted on  this
	      conversation to n (default: 255).

       Port numbers must be in the range 1 to 32767.

       Several	read-only files report the status of a connection.  The remote
       and local files contain the IP address and port number for  the	remote
       and  local  side of the connection.  The status file contains protocol-
       dependent information to help debug  network  connections.   The	 first
       word on the first line gives the status of the connection.

       Having  announced, a process may accept incoming connections by calling
       open on the listen file.	 The open will block until  a  new  connection
       request	arrives;  it  will  then  return  an open file descriptor that
       points to the control file of the newly accepted connection.  Repeating
       this procedure will accept all calls for the given protocol.

       In  general it should not be necessary to use the file system interface
       to the networks.	 The dial, announce, and listen functions described in
       dial(2)	perform	 the necessary I/O to establish and manipulate network
       connections.

   TCP protocol
       The TCP protocol is the standard Internet protocol for reliable	stream
       communication; it does not preserve read/write boundaries.

       A  connection  is  controlled by writing text strings to the associated
       ctl file.  After a connection has been established  data	 may  be  read
       from  and written to the data file.  The TCP protocol provides a stream
       connection that does not preserve read/write boundaries.

       For outgoing calls the local port number will be allocated randomly  if
       none  is set.  Addresses are set by writing control messages to the ctl
       file of the connection.	The connection is not  established  until  the
       data  file  is opened.  For TCP the process will block until the remote
       host has acknowledged the connection.

       As well as the standard control messages above, TCP accepts the follow‐
       ing:

       hangup Send  a TCP reset (RST) to the remote side and end the conversa‐
	      tion, without waiting for untransmitted data to be acknowledged,
	      unlike a normal close of the device.

       keepalive [n]
	      Enable  `keep alive' mode: if no traffic crosses the link within
	      a given period, send a packet to check that the remote party  is
	      still  there,  and  remind it that the local connection is still
	      live.  The optional value n gives the keep-alive	time  in  mil‐
	      liseconds (default: 120000).

       The status file has many lines, each containing a labelled number, giv‐
       ing the values of parameters and statistics such	 as:  maximum  allowed
       connections,  outgoing  calls,  incoming	 calls,	 established but later
       reset, active calls, input  segments,  output  segments,	 retransmitted
       segments, retransmitted timeouts, input errors, transmitted reset.

   UDP protocol
       UDP  provides  the  standard  Internet protocol for unreliable datagram
       communication.

       UDP opens always	 succeed.   Before  sending  data,  remote  and	 local
       addresses must be set for the connection.  Alternatively, the following
       special control requests can be used:

       headers
	      Set the connection to use an address header with IPv6 addressing
	      on  reads and writes of the data file, allowing a single connec‐
	      tion to send datagrams to converse with many different  destina‐
	      tion  addresses  and  ports.   The 52 byte binary header appears
	      before the  data	read  or  written.   It	 contains:  remote  IP
	      address,	local  IP  address, interface IP address, remote port,
	      and local port.  The IP addresses are 16 bytes each in IPv6 for‐
	      mat,  and	 the  port  addresses are 2 bytes each, all written in
	      network (big-endian) order.  On reads, the header gives the val‐
	      ues from the incoming datagram, except that if the remote used a
	      multicast destination address, the IP address of	the  receiving
	      interface	 is  substituted.   On writes, the header provides the
	      destination for the resulting datagram,  and  if	the  local  IP
	      address  corresponds  to	a  valid local unicast interface, that
	      address is used, otherwise the IP address	 of  the  transmitting
	      interface is substituted.

       headers4
	      Set  the connection to use an address header with IPv4 addresses
	      on reads and writes of the data file, allowing a single  connec‐
	      tion  to send datagrams to converse with many different destina‐
	      tion addresses and ports.	 The 12	 byte  binary  header  appears
	      before  the  data	 read  or  written.   It  contains:  remote IP
	      address, local IP address, remote port, and local port.  The  IP
	      addresses are 4 bytes each, the port addresses are 2 bytes each,
	      all written in network (big-endian) order.  On reads, the header
	      gives  the  values  from	the incoming datagram.	On writes, the
	      header provides the  destination	for  the  resulting  datagram.
	      This mode is obsolete and destined for oblivion.

       A  read	of  less  than	the size of the datagram will cause the entire
       datagram to be consumed.	 Each write to the data file will send a  sin‐
       gle datagram on the network.

       In  replies, in connection-oriented mode, if the remote address has not
       been set, the first arriving packet sets the  following	based  on  the
       source  of  the	incoming datagram: the remote address and port for the
       conversation, and the local address is set to the  destination  address
       in  the	datagram  unless  that	is  a  multicast address, and then the
       address of the receiving interface is used.

       If a conversation is in headers mode, only the local port is relevant.

       Connection-oriented UDP is hungup if an ICMP error (eg,	host  or  port
       unreachable, or time exceeded) arrives with matching port.

       The  udp	 status	 file  contains four lines, each containing a labelled
       number counting an event: input	datagrams,  datagrams  on  unannounced
       ports, datagrams with wrong checksum, and output datagrams.

   IL Protocol
       IL  provides  a reliable point-to-point datagram service for communica‐
       tion between Plan 9 and native Inferno machines.	 Each read  and	 write
       transfers  a  single datagram, as for UDP.  The datagrams are delivered
       reliably and in order.  Conversations are addressed and established  as
       for TCP.

   Routing
       The  iproute  file  can be read and written.  When read, it returns the
       contents of the IP routing tables, one line per entry, with six	fields
       giving  the  destination host or network address, address mask, gateway
       address, route type, tag (see below),  and  the	number	of  the	 ipifc
       interface  owning  the route (or `-' if none).  The route type is up to
       four characters: 4 or 6 (IPv4 or IPv6 route); i (route  is  interface);
       one  of	u  (unicast), b (broadcast), or m (multicast); and lastly p if
       the route is point-to-point.

       Commands can also be written to control the routing:

       add ip mask gw [ tag ]
	      Add a route via the gateway identified by IP address gw  to  the
	      address specified by ip and subnet mask mask.  Tag the resulting
	      table entry with the tag provided, or the current tag  (see  tag
	      below), or the tag none.

       flush [ tag ]
	      Remove all routes with the given tag that do not correspond to a
	      local interface.	If tag is not given, flush all routes.

       remove ip mask
	      Remove routes to the given address.

       tag tag
	      Tag the routes generated by writes on the current file  descrip‐
	      tor  with	 the  given tag of up to 4 characters.	The default is
	      none, set when iproute is opened.

       The ipselftab file summarises the addresses and routes  that  refer  to
       the local host.	It gives an address, the number of logical interfaces,
       and the interface type in the same form as the route type of iproute.

       The iprouter file is provided for use by a user-level application  act‐
       ing as an IP gateway.  It is effective only when the kernel-level gate‐
       way is not enabled (see the iprouting interface control request below).
       Once  opened,  packets that are not addressed to a local address can be
       read from this device.  The packet contents are preceded by a  16  byte
       binary  header  that gives the IPv6 address of the local interface that
       received the packet.

   Bootstrap
       The read-only bootp file contains the results of the last BOOTP request
       transmitted  on	any  interface	(see  Physical	and logical interfaces
       below) as several lines of text, with two fields each.  The first field
       names  an  entity  and the second field gives its value in IPv4 address
       format.	The current entities are:

	      auip   Authentication server address

	      fsip   File server address

	      gwip   Address of an IP gateway out of this (sub)net.

	      ipaddr Local IP address

	      ipmask Subnet mask for the local IP address

       If any value is unknown (no reply to BOOTP, or value unspecified),  the
       value will be zero, represented as 0.0.0.0.

   Address resolution
       The  arp	 file can be read and written.	When read, it returns the con‐
       tents of the current ARP cache as a sequence  of	 lines,	 one  per  map
       entry,  giving  type,  state, IP address and corresponding MAC address.
       Several textual commands can be written to it:

       add [ medium ] ip mac
	      Add a mapping from IP address ip to the  given  mac  address  (a
	      sequence	of bytes in hexadecimal) on the given medium.  It must
	      support address resolution (eg, Ethernet).  If the medium is not
	      specified,  find	the  one  associated with a route to ip (which
	      must be IPv4).

       flush  Clear the cache.

   Logging
       The log file provides protocol tracing and debugging data.   While  the
       file  is held open, the system saves, in a small circular buffer, error
       messages logged by selected protocols.  When read, it returns data  not
       previously  read,  blocking until there is data to read.	 The following
       commands can be written to determine what is logged:

       set proto ...
	      Enable logging of messages from each source proto, one  or  more
	      of:  ppp,	 ip,  fs,  tcp,	 il,  icmp, udp, compress, ilmsg, gre,
	      tcpmsg, udpmsg, ipmsg and esp.

       clear proto ...
	      Disable logging of messages from the given sources.

   Physical and logical interfaces
       The configuration of the physical and logical IP interfaces in a	 given
       instance of #I uses a virtual protocol ipifc within that instance, that
       adds, controls and removes IP interfaces.  It  is  represented  by  the
       protocol	 directory ipifc.  Each connection corresponds to an interface
       to a physical or virtual medium on which IP packets  can	 be  sent  and
       received.   It  has  a  set  of	associated values: minimum and maximum
       transfer unit, MAC address, and a set of logical IP  interfaces.	  Each
       logical	IP  interface  has  local  and remote addresses and an address
       mask.

       Opening the clone file returns a file descriptor open on the  ctl  file
       for  a new connection.  A medium is then attached using a bind request;
       logical interfaces are associated by connect or add; they  are  removed
       by  remove; and finally unbind detaches the medium from the connection.
       For certain types of media, the unbind is automatic when the connection
       itself  is closed.  With most media, including Ethernet, the ipifc con‐
       nection files can be closed after configuration, and later reopened  if
       need be to add or remove logical interfaces, or set other parameters.

       The  ctl file responds to the following text commands, including inter‐
       face-specific variants of standard IP device requests:

       bind medium [ name [ arg ... ]
	      Attach device medium to the interface, which must not already be
	      bound to a device.  The name and subsequent arguments are inter‐
	      preted by the driver for the medium.  The device name associated
	      with the interface is name, if given, or a generated name other‐
	      wise.

       connect ip [mask [remote [mtu ]]]
	      Remove all existing logical interfaces and create a new  one  as
	      if  by  add  (see	 below).   The	connection  must be bound to a
	      medium.

       add ip [ mask [ remote [ mtu ] ] ]
	      Add a logical interface with local IP address ip.	  The  default
	      for  mask	 is  the  mask	for ip's address class; for the remote
	      address, ip's network; and for mtu, the largest MTU  allowed  by
	      the  medium.   The new interface is registered in the IP routing
	      tables.

       bootp  Broadcast a BOOTP packet (using udp).  If a  valid  response  is
	      received,	 set  the  interface's IP address and mask, and the IP
	      stack's default gateway to the results obtained from BOOTP.  The
	      results  are also available to applications by reading the bootp
	      file above.  Note that  this  mechanism  is  now	deprecated  in
	      favour of dhcpclient(2).

       remove ip mask
	      Remove the logical interface determined by ip and mask.

       iprouting [n]
	      Control  the  use of IP routing on this ip(3) instance.  If n is
	      missing or non-zero, allow use as a gateway, rerouting  via  one
	      interface	 packets  received on another.	By default, or if n is
	      zero, use as a gateway is not allowed: if a packet  received  is
	      not  addressed to any local interface, either pass it to a gate‐
	      way application if active (see iprouter in ip(3)), and otherwise
	      drop the packet.

       mtu n
	      Set  the	maximum	 transmit  unit	 (MTU)	on this interface to n
	      bytes, which must be valid for the medium.

       addmulti multi
	      Add the multicast address multi to the interface.

       remmulti multi
	      Remove the multicast address multi from the interface.

       unbind Remove any association between the current medium	 (device)  and
	      the  connection:	remove all routes using this interface, detach
	      the device, stop packet transport, and remove all logical inter‐
	      faces.  The connection is ready for re-use.

       The  local  file	 contains  one line for each logical interface, of the
       form:

	      local->self...

       where local is the local address associated with the interface and each
       self  is	 a broadcast or multicast address that can address that inter‐
       face, including subnet addresses, if any.

       The status file contains many fields: the first	two  give  the	device
       name  and  the  value of the current MTU, followed by 7 fields per line
       for  each  logical  interface:  local  address,	address	 mask,	remote
       address, packets in, packets out, input errors, and output errors.

       The  following  sections describe the media drivers available.  Each is
       separately configurable into a kernel.

   Ethernet medium
       Ethernet devices as described in ether(3) can be bound to an IP	inter‐
       face.  The bind request has the form:

	      bind ether device

       The interface opens two conversations on the given Ethernet device, for
       instance ether0, using an internal version of dial, with the  addresses
       device!0x800 (IPv4) and device!0x806 (ARP).  See dial(2) for the inter‐
       pretation of such addresses.  The interface runs until a	 process  does
       an explicit unbind.  Multicast settings made on the interface are prop‐
       agated to the device.

   Point-to-point medium
       An asynchronous serial device as described in eia(3) can be bound to an
       interface  as a Point-to-Point protocol (PPP) device.  The bind request
       has the form:

	      bind ppp serial ip remote mtu framing username secret

       All parameters except serial  are  optional.   The  character  `-'  can
       appear  as  a placeholder for any parameter.  Except for authentication
       data, an attempt is made to negotiate suitable values for  any  missing
       parameter  values,  including  network  addresses.   The parameters are
       interpreted as follows:

	      serial Name of the device that will run PPP.

	      ip     Local IP address for the interface.

	      remote IP address of the other end of the link.

	      mtu    Initial MTU value for negotiation (default: 1450)

	      framing
		     If framing is zero, do not provide asynch. framing (on by
		     default).	Unimplemented.

	      username
		     Identification string used in PAP or CHAP authentication.

	      secret Secret used in authentication; with CHAP it never crosses
		     the link.

       If the name serial contains `!'	a connection will be opened using dial
       (see  dial(2)).	Otherwise the name will be opened as-is; usually it is
       the name of a serial device (eg, #t/eia0).  In the latter case, a  com‐
       panion  ctl file will also be opened if possible, to set serial charac‐
       teristics for  PPP  (flow  control,  64kbyte  queue  size,  nonblocking
       writes).	  An  attempt  is made to start the PPP link immediately.  The
       write of the bind control message returns with an  error	 if  the  link
       cannot  be started, or if negotiation fails.  The PPP link is automati‐
       cally unbound if the line hangs up (eg, modem  drops  carrier),	or  an
       unrecoverable error occurs when reading or writing the connection.

       The  PPP	 implementation can use either PAP and CHAP authentication, as
       negotiated, provided an appropriate username and secret is given in the
       bind  request.	It  does  not yet support the Microsoft authentication
       scheme.

   Packet medium
       The packet medium allows an application to be source and	 sink  for  IP
       packets.	 It is bound to an interface by the simple request:

	      bind pkt

       All  other  interface parameters including its IP address are set using
       the standard ipifc requests described above.  Once that has been	 done,
       the application reads the data file of the interface to receive packets
       addressed to the interface, and it writes to the file to inject packets
       into  the  IP network.  The interface is automatically unbound when all
       interface files are closed.

   Hosted interfaces
       Native Inferno and Plan 9 have related IP implementations.  Plan 9  emu
       therefore  simply imports Plan 9's /net, and in the absence of version-
       specific differences, what is described above still applies.

       On all other hosted platforms, the IP device gives applications	within
       emu(1)  a  portable  interface to TCP/IP and UDP/IP, even through it is
       ultimately using the host system's own TCP/IP  and  UDP/IP  implementa‐
       tions (usually but not always socket based).  The interface remains the
       same: for instance by /net/tcp and /net/udp, but is currently more lim‐
       ited  in	 the set of services and control requests.  Both IPv4 and IPv6
       address syntax may be used, but the IPv6 form must  still  map  to  the
       IPv4  address  space  if	 the  IPv6 support is not configured into emu.
       Only TCP and UDP are generally available, and a	limited	 interface  to
       ARP on some platforms (see below).  The set of TCP/UDP control requests
       is limited to: connect, announce, bind, ttl, tos,  ignoreadvice,	 head‐
       ers4, oldheaders, headers, hangup and keepalive.

       The  write-only	arp file is implemented only on some Unix systems, and
       is intended to allow the implementation of  the	BOOTP  protocol	 using
       Inferno,	 on  hosted  systems.	It  accepts  a	single textual control
       request:

       add ip ether
	      Add a new ARP map entry, or replace  an  existing	 one,  for  IP
	      address  ip,  associating	 it  with the given ether MAC address.
	      The ip address is expressed in the usual	dotted	address	 nota‐
	      tion; ether is a 12 digit hexadecimal number.

       An  error  results  if the host system does not allow the ARP map to be
       set, or the current user lacks the privileges to set it.

SOURCE
       /emu/port/devip.c
       /os/ip/devip.c
       /os/ip/proto.c
       /os/ip/ipifc.c
       /os/ip/*medium.c

SEE ALSO
       dial(2)

									 IP(3)
[top]

List of man pages available for Inferno

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net