BBN-Vax-TCP/doc/net.5.P




NET(5)              UNIX Programmer's Manual               NET(5)



_N_A_M_E
     tcp, ip, rawnet - internet networking software

_S_Y_N_O_P_S_I_S
     _o_p_e_n ("/_d_e_v/_n_e_t/_n_e_t", _n_c_o_n);

     _s_t_r_u_c_t _c_o_n *_n_c_o_n;

     struct lhost {                  /* net library format internet address */
            unsigned char l_hoi;            /* host on imp */
            unsigned char l_net;            /* network */
            n_short l_imp;                  /* imp */
     };
                                        /* c_mode field definitions */
     struct con {                    /* user connection structure */
            unsigned char c_mode;           /* mode 0-passive 1-active (see flags) */
            unsigned char c_sbufs;          /* # send buffers to use */
            unsigned char c_rbufs;          /* # rcv buffers to use */
            unsigned char c_prec;           /* precedence */
     #define c_lo c_prec                     /* low raw link or proto # */
            unsigned char c_sec;            /* security level */
     #define c_hi c_sec                      /* hi raw link or proto # */
            unsigned char c_compt;          /* compartment */
            unsigned char c_timeo;          /* tcp open timeout */
            unsigned char c_x;              /* (unused) */
            unsigned short c_lport;         /* local port */
            unsigned short c_fport;         /* foreign port */
            struct lhost c_con;             /* foreign socket */
     };

     struct netstate {               /* network status structure */
            unsigned char n_lolink;         /* low link no. in range (IP, RAW) */
            unsigned char n_hilink;         /* high link no. in range (IP, RAW) */
            unsigned char n_snd;            /* # send bufs allocated */
            unsigned char n_rcv;            /* # receive bufs allocated */
            unsigned char n_ssize;          /* # bufs on send buffer */
            unsigned char n_rsize;          /* # bufs on receive buffer */
            unsigned char n_state;          /* state of this connection */
            unsigned char n_flags;          /* misc. flags (see below) */
            unsigned short n_lport;         /* local port */
            unsigned short n_fport;         /* foreign port */
            struct lhost n_con;             /* foreign socket */
     };

     #define CONACT  1                       /* active connection */
     #define CONTCP  2                       /* open a tcp connection */
     #define CONIP   4                       /* open a raw ip connection */
     #define CONRAW  8                       /* open a raw local net connection */
     #define CONCTL  16                      /* open a control port (no conn) */
     #define CONDEBUG 128               /* turn on debugging info */




Printed 9/1/81                                                  1






NET(5)              UNIX Programmer's Manual               NET(5)



                                        /* net ioctl definitions */
     #define NETGETS 1                       /* get status */
     #define NETSETD 2                       /* set debugging info */
     #define NETSETU 3                       /* set urgent mode */
     #define NETRSETU 4                      /* reset urgent mode */
     #define NETSETE 5                       /* set EOL mode */
     #define NETRSETE 6                      /* reset EOL mode */
     #define NETCLOSE 7                      /* initiate tcp close */
     #define NETABORT 8                      /* initiate tcp abort */
     #define NETRESET 9                      /* forced tcp connection reset */
     #define NETDEBUG 10                     /* toggle debugging flag */

     #define SIGURG 16               /* urgent signal */

     #ifndef KERNEL                           /* n_flags field definitions */

     #define UEOL    0001                    /* EOL sent */
     #define UURG    0002                    /* urgent data sent */
     #define UDEBUG  0004                    /* turn on debugging info recording */
     #define ULOCK   0010                    /* receive buffer locked */
     #define UTCP    0020                    /* this is a TCP connection */
     #define UIP     0040                    /* this is a raw IP connection */
     #define URAW    0100                    /* this is a raw 1822 connection */
     #define ULISTEN 0200                    /* awaiting a connection */
     #define UCTL    0400                    /* this is a control port only */

                                        /* n_state field definitions */
     #define UCLOSED 0000                    /* connection closed */
     #define UCLSERR 0001                    /* error -- connection closing */
     #define UABORT  0002                    /* connection aborted */
     #define UINTIMO 0004                    /* open failed -- init timeout */
     #define URXTIMO 0010                    /* retransmit too long timeout */
     #define URESET  0020                    /* connection aborted due to reset */
     #define UOPERR  0040                    /* open failed -- not enough buffers */
     #define UURGENT 0100                    /* urgent data received */
     #define UNETDWN 0200                    /* connection aborted due to net */

     #endif KERNEL

_D_E_S_C_R_I_P_T_I_O_N
     The special file /_d_e_v/_n_e_t/_n_e_t is used to access ARPANET type
     packet-switched  networks  via  the  DoD  standard host-host
     Internetworking   Protocols,   _T_C_P   (Transmission   Control
     Protocol),  and  _I_P  (Internet  Protocol).   It  also allows
     communication over the local network(s) to which the  system
     is  connected  with "raw" packets, enabling user software to
     do its own communications processing.  Access to the network
     at this level is the most direct form of use.  It is assumed
     that most users will use  higher  level  protocol  programs,
     like  _f_t_p(_1)  and _t_e_l_n_e_t(_1) to communicate over the network.
     (This  description  assumes  the  reader  is  familiar  with



Printed 9/1/81                                                  2






NET(5)              UNIX Programmer's Manual               NET(5)



     ARPANET type communications protocols.)

_E_S_T_A_B_L_I_S_H_I_N_G _C_O_N_N_E_C_T_I_O_N_S
     To establish a connection via TCP or IP, or  to  communicate
     with  raw packets, the _o_p_e_n(_2) call is given, with the usual
     mode  argument  replaced  by  a  pointer  to  a   connection
     structure,  defined  in /_u_s_r/_i_n_c_l_u_d_e/_c_o_n._h. The _c__m_o_d_e field
     of this structure  specifies  what  type  of  connection  is
     desired (TCP, IP, or RAW), and whether or not the connection
     is  to  be  active  (specifying  a  specific  foreign   host
     address), or passive (with no foreign address, implying that
     the connection will be established when any foreign  process
     tries  to  communicate  with  the  opener).  This field also
     specifies other attributes  of  raw  connections  (see,  RAW
     CONNECTIONS).

     The _c__s_b_u_f_s and _c__r_b_u_f_s fields  specify  buffer  allocations
     for   the   send   and  receive  sides  of  the  connection,
     respectively.   If  either  value  is  zero,   the   default
     allocation  will  be  used  for that direction (currently 1K
     bytes).  The user can request up to 8K bytes each  for  send
     and receive directions by varying these parameters between 1
     and 8.

     For IP and RAW connections, the _c__h_i and _c__l_o fields specify
     a range of IP protocol numbers or local net dispatch numbers
     (e.g.,  ARPANET  link  numbers)  to  watch  for  (see,   RAW
     CONNECTIONS).

     The _c__t_i_m_e_o parameter specifies a length of time in  seconds
     to  wait  for connection establishment before aborting (this
     does not apply to passive opens).  If the field is zero, the
     default of 30 seconds is used.

     The remaining fields specify local, and  foreign  ports  for
     TCP, and foreign and local host addresses in network address
     format (see _l_i_b_n_e_t(_3)). The local port may be zero, in which
     case  TCP  assigns  a  unique port number to the connection.
     The foreign port and host address may only  be  zero  for  a
     passive  open.  The local host address may be zero, in which
     case a default local address is chosen by the software.   On
     machines  with  multiple  network  interfaces  (and  network
     addresses),  this  field  may  be  used  to  specify   which
     interface/address  to  use.   It  is  an error to specify an
     unsupported local address.

_R_E_A_D_I_N_G _A_N_D _W_R_I_T_I_N_G
     If the open succeeds, a file descriptor  is  returned  which
     may  be  used  in subsequent reads and writes (see, _r_e_a_d(_2),
     _w_r_i_t_e(_2)). Reads  and  writes  work  as  usual  with  a  few
     exceptions.    A   read  may  return  with  error  condition



Printed 9/1/81                                                  3






NET(5)              UNIX Programmer's Manual               NET(5)



     ENETSTAT, which indicates that  some  exceptional  condition
     has  been  detected.  Further  status may be determined with
     _i_o_c_t_l(_2). (see, NETWORK STATUS).  If the condition  is  non-
     fatal,  the  read  may  be re-issued.  Reads may return less
     data than requested, and will block if there is no data  for
     the  user.   Writes  block  if  the  amount  of  send buffer
     resources for the connection is exceeded. Reads will  return
     zero  only  when  the foreign peer has closed the connection
     and there is no remaining data to return to the user.

     In addition to normal TCP reads and  writes,  the  user  may
     wish  to  indicate EOL and URGENT data on writes and receive
     notification of URGENT data sent by the foreign  peer.   EOL
     and  URGENT  are  enabled by issueing the NETSETE or NETSETU
     ioctl calls.  Once set, EOL is sent at the last byte of each
     subsequent  write.   Similarly, the URGENT pointer is set to
     start at the first byte of the next write, and ends with the
     first  byte sent after URGENT mode is disabled.  These modes
     are disabled by  the  NETRSETE  and  NETRSETU  ioctl  calls.
     URGENT  data  is  indicated  by signal SIGURG when the first
     byte is received.  This  signal  is  normally  ignored.   (A
     status flag is also set in the presence of urgent data.)

_C_L_O_S_I_N_G _C_O_N_N_E_C_T_I_O_N_S
     Normally, the _c_l_o_s_e(_2) call is used to close a TCP,  IP,  or
     RAW  connection.   In  each case, it indicates that the user
     will send or receive no more  data.   For  TCP  connections,
     close  initiates  the connection closing protocol, though it
     returns  immediately.    Thus,   the   internal   connection
     structures  persist  until  the  connection  has reached the
     CLOSED state.  For IP and  RAW  connections,  the  close  is
     immediate and deletes all internal structures.

     In addition to close for TCP connections, there is an  ioctl
     call,  NETCLOSE,  which  indicates that the local connection
     will send no more data, but is still able  to  receive  data
     from  the foreign peer.  In this case, subsequent writes are
     illegal and will terminate with errors, but subsequent reads
     will  work  until  the  connection  is closed by the foreign
     peer.

_R_A_W _C_O_N_N_E_C_T_I_O_N_S
     Raw IP and local network protocol packets may  be  sent  and
     received  by specifying CONIP or CONRAW in the mode field of
     the  open  call.   These  types  of  opens  do  not  set  up
     connections  in  the  sense  of TCP opens (i.e., they do not
     cause communication of a connection opening  protocol),  but
     the  resulting channel will be referred to as a "connection"
     for the sake of brevity.





Printed 9/1/81                                                  4






NET(5)              UNIX Programmer's Manual               NET(5)



     To  send  raw  IP  or  local  network  protocol  packets,  a
     connection  is opened and writes are issued on the resulting
     file descriptor.  The user may  specify  parameters  in  the
     open  call  (such  as  destination  host  address,  link  or
     protocol number) that are used by the software to  construct
     leaders for the data (RAWCOMP mode), or he may opt to supply
     the leaders (RAWASIS mode).  A third option  exists  for  IP
     connections, where the system fills in the checksum field in
     the supplied leader (RAWVER mode).  In each case, one packet
     is sent out for each write.  Writes do not block, and return
     as soon as the packet has been queued  for  sending  to  the
     local  network.   If  for  some reason, the packet cannot be
     sent (the selected network  interface  is  unavailable),  an
     error will be returned.

     To receive raw IP or local  network  protocol  packets,  the
     user  specifies  a  range  of link or protocol numbers and a
     foreign and local host address in the open call.  The  range
     is specified in the _c__h_i and _c__l_o fields.  The range must be
     unique (i.e., may not overlap other protocol or link numbers
     in  use), and _c__l_o must be less than or equal to _c__h_i, or an
     ENETRNG  error  results.   If  the  foreign  or  local  host
     addresses  are  specified,  only  messages  in the specified
     range  with  the  corresponding  source  and/or  destination
     address are queued for the user.  If the addresses are zero,
     all messages falling into the specified range are  returned.
     Reads return no more than one packet, though they may return
     less if a length shorter than the packet length is specified
     (subsequent  reads will return the remainder of the packet).
     The entire packet, including the header is returned.  If the
     read  buffer limit is exceeded, subsequent incoming messages
     in the specified range will  be  dropped.   Reads  block  if
     there  is  no  data  to  satisfy  the request.  The user may
     optionally receive ICMP or local network protocol error  and
     control  messages  associated  with  the range by specifying
     RAWERR mode in the open call.

_N_E_T_W_O_R_K _S_T_A_T_U_S
     There are several _i_o_c_t_l(_2)  calls  available  for  receiving
     network  status  information  or initiating certain modes or
     functions.  Most of these calls have been  described  above.
     The  status  call,  NETGETS,  takes a status buffer pointer,
     which points to a  netstate  structure,  illustrated  above,
     which is filled in by the call.

     To summarize, the various ioctl calls are:

     NETGETS   Return network status information to the structure
               pointed at by third argument of ioctl.

     NETSETU   Set urgent mode starting at next byte written (TCP



Printed 9/1/81                                                  5






NET(5)              UNIX Programmer's Manual               NET(5)



               only).

     NETRSETU  Reset urgent mode, urgent  pointer  ends  at  last
               byte written (TCP only).

     NETSETE   Set EOL mode,  send  EOL  at  last  byte  of  each
               subsequent write (TCP only).

     NETRSETE  Terminate EOL mode (TCP only).

     NETCLOSE  Start TCP connection close.  User can continue  to
               receive data (TCP only).

     NETABORT  Abort TCP connection.  Foreign peer is  reset  and
               no more data may be sent or received (TCP only).

     NETTCPOPT Set up an IP option string for a  TCP  connection.
               The  third  parameter  is a pointer to a structure
               containing a pointer to the option string and  the
               length of the option string in bytes.   The option
               string is  appended  to  the  IP  leader  of  each
               subsequent   TCP   segment  sent.   If  the  third
               parameter  is  zero,  the  previous  options   are
               cancelled   and   no   options  will  be  sent  on
               subsequent packets.  The options are specified  in
               the Internet Protocol description, and are sent as
               is, with no verification.  The option  length  may
               not exceed 40 bytes. (TCP only).

     In addition, there is another class of ioctl calls that  are
     associated  with  network control functions and not with any
     specific connection.  These calls may be issued from  normal
     TCP,  IP,  or  RAW  connections.   There  is  also a special
     control only connection which may  be  opened  (with  CONCTL
     passed to open, all other fields are ignored).  This type of
     connection exists solely for the purpose of issuing  control
     ioctls without involving any network resources.  The control
     ioctls are:

     NETSETD   Reset the debugging log to the file  name  pointed
               at  by  the third argument.  The file must already
               exist.  If the argument is zero,  turn  off  debug
               logging  (see, DEBUGGING). Only the super-user may
               issue this call.

     NETRESET  Cause the TCP  connection  specified  by  the  tcb
               address given as the third argument to be reset as
               if a connection clear request  had  been  received
               from  the  network.  Only the super-user may issue
               this call.




Printed 9/1/81                                                  6






NET(5)              UNIX Programmer's Manual               NET(5)



     NETDEBUG  Toggle the debugging flag for the  TCP  connection
               specified  by  the  TCB address given as the third
               argument.

     NETGINIT  Cause    the    gateway    initialization     file
               /_e_t_c/_n_e_t/_g_a_t_e_w_a_y to be read by the kernel, and the
               internal   gateway   forwarding   table   to    be
               reinitialized.   This file is in binary format and
               is generated from  an  ASCII  gateway  table  with
               _g_a_t_e_w_a_y(_1).

_D_E_B_U_G_G_I_N_G
     The network software enables certain trace information to be
     recorded for TCP connections.  This information is logged in
     a single debugging log file.  To enable  this  feature,  the
     CONDEBUG  bit  in  the  _c__m_o_d_e  field of the open connection
     parameter structure must be set, or the NETDEBUG ioctl  call
     must    issued.     The    default    debugging    log    is
     /_e_t_c/_n_e_t/_t_c_p_d_e_b_u_g. This may be changed or the feature may be
     disabled  system wide with the NETSETD ioctl call.  Only the
     super-user  may  do  this.   The  format  of  the  debugging
     information   is  several  bytes  of  binary  data  per  TCP
     transaction.  The log may be printed in readable  form  with
     _t_r_p_t(_1).

_D_I_A_G_N_O_S_T_I_C_S
     The following system error codes may be returned by  network
     system calls:

     ENETSTAT  (35) Network status available (not a fatal  error,
               see READS AND WRITES).

     ENETDWN   (36)  Open  failed   because   specified   network
               interface is unavailable.

     ENETCON   (37) Open  failed  because  there  were  too  many
               connections or different foreign hosts.

     ENETBUF   (38) Open failed because there was no more network
               buffer space.

     ENETERR   (39) Fatal error from network protocol  processor.
               Usually  occurs when issuing a read or write after
               the connections is half-closed  or  reset;  or  on
               open, if the connection mode bits are invalid.

     ENETRNG   (40) IP or RAW open failed because the protocol or
               dispatch  number  was  out  of range or already in
               use.  TCP open failed because the  user  tried  to
               open  an  already  existing  connection (i.e., one
               with the identical foreign host address and  local



Printed 9/1/81                                                  7






NET(5)              UNIX Programmer's Manual               NET(5)



               and  foreign  ports).  NETDEBUG or NETRESET ioctls
               failed because the connection with  the  specified
               TCB could not be found.

     ENETOPN   (41) TCP open failed because the foreign host  did
               not  respond  on  the  specified socket within the
               timeout period defined in the open request.

     ERAWBAD   (42) IP or RAW write failed, packet was not sent.

_F_I_L_E_S
     /dev/net/net
     /etc/net/tcpdebug
     /etc/net/gateway

_S_E_E _A_L_S_O
     ftp(1), gateway(1), telnet(1), trpt(1),  read(2),  write(2),
     open(2), close(2), ioctl(2), libnet(3)

     R.F.   Gurwitz,   _V_A_X-_U_N_I_X   _N_e_t_w_o_r_k_i_n_g   _S_u_p_p_o_r_t    _P_r_o_j_e_c_t
     _I_m_p_l_e_m_e_n_t_a_t_i_o_n  _D_e_s_c_r_i_p_t_i_o_n,  DARPA  Information  Processing
     Techniques Office, IEN 168, January, 1981.

     J. Postel  (ed.),  _D_o_D  _S_t_a_n_d_a_r_d  _I_n_t_e_r_n_e_t  _P_r_o_t_o_c_o_l,  DARPA
     Information  Processing Techniques Office, IEN 128, January,
     1980.

     J. Postel (ed.), _D_o_D _S_t_a_n_d_a_r_d _T_r_a_n_s_m_i_s_s_i_o_n _C_o_n_t_r_o_l _P_r_o_t_o_c_o_l,
     DARPA  Information  Processing  Techniques  Office, IEN 129,
     January, 1980.
























Printed 9/1/81                                                  8