diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-26 16:38:00 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-26 16:38:00 -0400 |
| commit | 97d5c458cfa039d857301e1ca7d5af3beb37131d (patch) | |
| tree | b460cd850d0537eb71806ba30358840377b27688 /static/plan9-4e/man3/ip.3 | |
| parent | b89dc2331a50c63f8b33272a5c4c61ab98abdaa3 (diff) | |
build: Better Build System
Diffstat (limited to 'static/plan9-4e/man3/ip.3')
| -rw-r--r-- | static/plan9-4e/man3/ip.3 | 926 |
1 files changed, 926 insertions, 0 deletions
diff --git a/static/plan9-4e/man3/ip.3 b/static/plan9-4e/man3/ip.3 new file mode 100644 index 00000000..84be502f --- /dev/null +++ b/static/plan9-4e/man3/ip.3 @@ -0,0 +1,926 @@ +.TH IP 3 +.SH NAME +ip \- network protocols over IP +.SH SYNOPSIS +.nf +.B bind -a #I\fIspec\fP /net + +.B /net/ipifc +.B /net/ipifc/clone +.B /net/ipifc/stats +.BI /net/ipifc/ n +.BI /net/ipifc/ n /status +.BI /net/ipifc/ n /ctl +\&... + +.B /net/arp +.B /net/log +.B /net/ndb +.B /net/iproute +.B /net/ipselftab + +.B /net/esp +.B /net/gre +.B /net/icmp +.B /net/il +.B /net/ipmux +.B /net/rudp +.B /net/tcp +.B /net/udp + +.B /net/tcp/clone +.B /net/tcp/stats +.BI /net/tcp/ n +.BI /net/tcp/ n /data +.BI /net/tcp/ n /ctl +.BI /net/tcp/ n /local +.BI /net/tcp/ n /remote +.BI /net/tcp/ n /status +.BI /net/tcp/ n /listen +\&... +.fi +.SH DESCRIPTION +The IP device provides the interface to Internet protocol stacks. +.I Spec +is an integer from 0 to 15 identifying a stack. +Each stack is physically independent of all others: +the only information transfer between them is via programs that +mount multiple stacks. +Normally a system uses only one stack. +However multiple stacks can be used for debugging +new IP networks or implementing firewalls or proxy +services. +.PP +All addresses used are 16-byte IPv6 addresses. Though +we currently implement only IPv4, the IPv6 format is intended to +prepare the way for an IPv6 implementation. IPv4 addresses +are a subset of the IPv6 addresses and both standard +.SM ASCII +formats +are accepted. In binary, all v4 addresses start with the +12 bytes: +.EX + 00 00 00 00 00 00 00 00 00 00 ff ff +.EE +.SS "Configuring interfaces +.PP +Each stack may have multiple interfaces and each interface +may have multiple addresses. +The +.B /net/ipifc +directory contains a +.B clone +file, a +.B stats +file, and numbered subdirectories for each physical interface. +.PP +Opening the +.B clone +file reserves an interface. +The file descriptor returned from the +.IR open (2) +will point to the control file, +.BR ctl , +of the newly allocated interface. +Reading +.B ctl +returns a text string representing the number of the interface. +Writing +.B ctl +alters aspects of the interface. +The possible +.I ctl +messages are: +.TP +.BI "bind ether " path +Treat the device mounted at +.I path +as an Ethernet medium carrying IP and ARP packets +and associate it with this interface. +The kernel will +.IR dial (2) +.IR path !0x800 +and +.IR path !0x806 +and use the two connections for IP and +ARP respectively. +.TP +.B "bind pkt +Treat this interface as a packet interface. Assume +a user program will read and write the +.I data +file to receive and transmit IP packets to the kernel. +This is used by programs such as +.IR ppp (8) +to mediate IP packet transfer between the kernel and +a PPP encoded device. +.TP +.BI "bind netdev " path +Treat this interface as a packet interface. +The kernel will open +.I path +and read and write the resulting file descriptor +to receive and transmit IP packets. +.TP +.BI "bind loopback " +Treat this interface as a local loopback. Anything +written to it will be looped back. +.TP +.B "unbind +Disassociate the physical device from an IP interface. +.TP +.BI add\ "local mask remote mtu " proxy +Add a local IP address to the interface. The +.IR mask , +.IR remote , +.IR mtu , +and +.B proxy +arguments are all optional. The default mask is +the class mask for the local address. The default +remote address is +.I local +ANDed with +.IR mask . +The default mtu is 1514 for Ethernet and 4096 for packet +media. +.IR Proxy , +if specified, means that this machine should answer +ARP requests for the remote address. +.IR Ppp (8) +does this to make remote machines appear +to be connected to the local Ethernet. +.TP +.BI remove\ "local mask" +Remove a local IP address from an interface. +.TP +.BI mtu\ n +Set the maximum transfer unit for this device to +.IR n . +The mtu is the maximum size of the packet including any +medium-specific headers. +.TP +.BI reassemble +Reassemble IP fragments before forwarding to this interface +.TP +.BI iprouting\ n +Allow +.RI ( n is missing +or non-zero) or disallow +.RI ( n +is 0) forwarding packets between this interface and +others. +.TP +.BI addmulti\ addr +Treat the multicast +.I addr +on this interface as a local address. +.TP +.BI remmulti\ addr +Remove the multicast address +.I addr +from this interface. +.PP +Reading the interface's +.I status +file returns information about the interface, one line for each +local address on that interface. The first line +has 9 white-space-separated fields: device, mtu, local address, +mask, remote or network address, packets in, packets out, input errors, +output errors. Each subsequent line contains all but the device and mtu. +See +.B readipifc +in +.IR ip (2). +.SS "Routing +.PP +The file +.I iproute +controls information about IP routing. +When read, it returns one line per routing entry. +Each line contains six white-space-separated fields: +target address, target mask, address of next hop, flags, +tag, and interface number. +The entry used for routing an IP packet is the one with +the longest mask for which destination address ANDed with +target mask equals the target address. +The one character flags are: +.TP +.B 4 +IPv4 route +.TP +.B 6 +IPv6 route +.TP +.B i +local interface +.TP +.B b +broadcast address +.TP +.B u +local unicast address +.TP +.B m +multicast route +.TP +.B p +point-to-point route +.PP +The tag is an arbitrary, up to 4 character, string. It is normally used to +indicate what routing protocol originated the route. +.PP +Writing to +.B /net/iproute +changes the route table. The messages are: +.TP +.B flush +Remove all routes. +.TP +.BI tag\ string +Associate the tag, +.IR string , +with all subsequent routes added via this file descriptor. +.TP +.BI add\ "target mask nexthop" +Add the route to the table. If one already exists with the +same target and mask, replace it. +.TP +.BI remove\ "target mask" +Remove a route with a matching target and mask. +.SS "Address resolution +.PP +The file +.B /net/arp +controls information about address resolution. +The kernel automatically updates the ARP information for Ethernet +interfaces. +When read, the file returns one line per address containing the +type of medium, the status of the entry (OK, WAIT), the IP +address, and the medium address. +Writing to +.B /net/arp +administers the ARP information. The control messages are: +.TP +.B flush +Remove all entries. +.TP +.BI add\ "type IP-addr Media-addr" +Add an entry or replace an existing one for the +same IP address. +.PP +ARP entries do not time out. The ARP table is a +cache with an LRU replacement policy. The IP stack +listens for all ARP requests and, if the requester is in +the table, the entry is updated. +Also, whenever a new address is configured onto an +Ethernet, an ARP request is sent to help +update the table on other systems. +.PP +Currently, the only medium type is +.BR ether . +.SS "Debugging and stack information +.PP +If any process is holding +.B /net/log +open, the IP stack queues debugging information to it. +This is intended primarily for debugging the IP stack. +The information provided is implementation-defined; +see the source for details. Generally, what is returned is error messages +about bad packets. +.PP +Writing to +.B /net/log +controls debugging. The control messages +are: +.TP +.BI set\ arglist +.I Arglist +is a space-separated list of items for which to enable debugging. +The possible items are: +.BR ppp , +.BR ip , +.BR fs , +.BR tcp , +.BR il , +.BR icmp , +.BR udb , +.BR compress , +.BR ilmsg , +.BR gre , +.BR tcpmsg , +.BR udpmsg , +.BR ipmsg , +and +.BR esp . +.TP +.BI clear\ arglist +.I Arglist +is a space-separated list of items for which to disable debugging. +.TP +.BI only\ addr +If +.I addr +is non-zero, restrict debugging to only those +packets whose source or destination is that +address. +.PP +The file +.B /net/ndb +can be read or written by +programs. It is normally used by +.IR ipconfig (8) +to leave configuration information for other programs +such as +.B dns +and +.B cs +(see +.IR ndb (8)). +.B /net/ndb +may contain up tp 1024 bytes. +.PP +The file +.B /net/ipselftab +is a read-only file containing all the IP addresses +considered local. Each line in the file contains +three white-space-separated fields: IP address, usage count, +and flags. The usage count is the number of interfaces to which +the address applies. The flags are the same as for routing +entries. +.SS "Protocol directories +.PP +The +.I ip +device +supports IP as well as several protocols that run over it: +TCP, IL, UDP, GRE, ESP, ICMP, and RUDP. +TCP and UDP provide the standard Internet +protocols for reliable stream and unreliable datagram +communication. +IL provides a reliable datagram service for communication +between Plan 9 machines. +GRE is a general encapsulation protocol. +ESP is the encapsulation protocol for IPSEC. +ICMP is IP's catch-all control protocol used to send +low level error messages and to implement +.IR ping (8). +RUDP is a locally developed reliable datagram protocol based on +UDP. +.PP +Each protocol is a subdirectory of the IP stack. +The top level directory of each protocol contains a +.B clone +file, a +.B stats +file, and subdirectories numbered from zero to the number of connections +opened for this protocol. +.PP +Opening the +.B clone +file reserves a connection. The file descriptor returned from the +.IR open (2) +will point to the control file, +.BR ctl , +of the newly allocated connection. +Reading +.B ctl +returns a text +string representing the number of the +connection. +Connections may be used either to listen for incoming calls +or to initiate calls to other machines. +.PP +A connection is controlled by writing text strings to the associated +.B ctl +file. +After a connection has been established data may be read from +and written to +.BR data . +A connection can be actively established using the +.B connect +message (see also +.IR dial (2)). +A connection can be established passively by first +using an +.B announce +message (see +.IR dial (2)) +to bind to a local port and then +opening the +.B listen +file (see +.IR dial (2)) +to receive incoming calls. +.PP +The following control messages are supported: +.TP +.BI connect\ ipaddress ! port "!r " local +Establish a connection to the remote address +.I ipaddress +and remote port +.IR port . +If +.I local +is specified, it is used as the local port number. +If +.I local +is not specified but +.B !r +is, the system will allocate +a restricted port number (less than 1024) for the connection to allow communication +with Unix +.B login +and +.B exec +services. +Otherwise a free port number starting at 5000 is chosen. +The connect fails if the combination of local and remote address/port pairs +are already assigned to another port. +.TP +.BI announce\ X +.I X +is a decimal port number or +.LR * . +Set the local port +number to +.I X +and accept calls to +.IR X . +If +.I X +is +.LR * , +accept +calls for any port that no process has explicitly announced. +The local IP address cannot be set. +.B Announce +fails if the connection is already announced or connected. +.TP +.BI bind\ X +.I X +is a decimal port number or +.LR * . +Set the local port number to +.IR X . +This exists to support emulation +of BSD sockets by the APE libraries (see +.IR pcc (1)) +and is not otherwise used. +.TP +.BI backlog\ n +Set the maximum number of unanswered (queued) incoming +connections to an announced port to +.IR n . +By default +.I n +is set to five. If more than +.I n +connections are pending, +further requests for a service will be rejected. +.TP +.BI ttl\ n +Set the time to live IP field in outgoing packets to +.IR n . +.TP +.BI tos\ n +Set the service type IP field in outgoing packets to +.IR n . +.PP +Port numbers must be in the range 1 to 32767. +.PP +Several files report the status of a +connection. +The +.B remote +and +.B local +files contain the IP address and port number for the remote and local side of the +connection. The +.B status +file contains protocol-dependent information to help debug network connections. +On receiving and error or EOF reading or writing the +.B data +file, the +.B err +file contains the reason for error. +.PP +A process may accept incoming connections by +.IR open (2)ing +the +.B listen +file. +The +.B open +will block until a new connection request arrives. +Then +.B open +will return an open file descriptor which points to the control file of the +newly accepted connection. +This procedure will accept all calls for the +given protocol. +See +.IR dial (2). +.SS TCP +.PP +TCP connections are reliable point-to-point byte streams; there are no +message delimiters. +A connection is determined by the address and port numbers of the two +ends. +TCP +.B ctl +files support the following additional messages: +.TP +.B hangup +close down a TCP connection +.TP +.BI keepalive \ n +turn on keep alive messages. +.IR N , +if given, is the milliseconds between keepalives +(default 30000). +.SS UDP +.PP +UDP connections carry unreliable and unordered datagrams. A read from +.B data +will return the next datagram, discarding anything +that doesn't fit in the read buffer. +A write is sent as a single datagram. +.PP +By default, a UDP connection is a point-to-point link. +Either a +.B connect +establishes a local and remote address/port pair or +after an +.BR announce , +each datagram coming from a different remote address/port pair +establishes a new incoming connection. +However, many-to-one semantics is also possible. +.PP +If, after an +.BR announce , +one of the following messages is written to +.BR ctl , +then all messages sent to the announced port +are received on the announced connection prefixed with the given structure. +.TP +.B headers4 +.EX +typedef struct Udphdr4 Udphdr4; +struct Udphdr +{ + uchar raddr[4]; /* v4 remote address and port */ + uchar laddr[4]; /* v4 local address and port */ + uchar rport[2]; + uchar lport[2]; +}; +.EE +.TP +.B headers +.EX +typedef struct Udphdr Udphdr; +struct Udphdr +{ + uchar raddr[16]; /* v6 remote address and port */ + uchar laddr[16]; /* v6 local address and port */ + uchar rport[2]; + uchar lport[2]; +}; +.EE +.PP +The only difference in the two is the type of address, IPv4 or IPv6. +Before a write, a user must prefix a similar structure to each message. +The system overrides the user specified local port with the announced +one. If the user specifies an address that isn't a unicast address in +.BR /net/ipselftab , +that too is overridden. +Since the prefixed structure is the same in read and write, it is relatively +easy to write a server that responds to client requests by just copying new +data into the message body and then writing back the same buffer that was +written. +.SS RUDP +.PP +RUDP is a reliable datagram protocol based on UDP. +Packets are delivered in order. +RUDP does not support +.BR listen . +One must use either +.B connect +or +.B announce +followed immediately by +.B headers +or +.BR headers4 . +.PP +Unlike IL or TCP, the reboot of one end of a connection does +not force a closing of the connection. Communications will +resume when the rebooted machine resumes talking. Any unacknowledged +packets queued before the reboot will be lost. A reboot can +be detected by reading the +.B err +file. It will have the message +.IP +.BI hangup\ address ! port +.PP +where +.I address +and +.I port +are of the far side of the connection. +Retransmitting a datagram more than 10 times +is treated like a reboot: +all queued messages are dropped, an error is queued to the +.B err +file, and the conversation resumes. +.SS IL +.PP +IL is a reliable point-to-point datagram protocol. Like TCP, IL delivers datagrams +reliably and in order. Also like TCP, a connection is +determined by the address and port numbers of the two ends. +Like UDP, each read and write transfers a single datagram. +.PP +IL is efficient for LANs but doesn't have the +congestion control features needed for use through +the Internet. +.SS GRE +.PP +GRE is the encapsulation protocol used by PPTP. +The kernel implements just enough of the protocol +to multiplex it. +.B Announce +is not allowed in GRE, only +.BR connect . +Since GRE has no port numbers, the port number in the connect +is actually the 16 bit +.B eproto +field in the GRE header. +.PP +Reads and writes transfer a +GRE datagram starting at the GRE header. +On write, the kernel fills in the +.B eproto +field with the port number specified +in the connect message. +.SS ESP +.PP +ESP is the Encapsulating Security Payload (RFC 1827). +It is used to set up an encrypted tunnel between machines. +Like GRE, ESP has no port numbers. Instead, the +port number in the +.B connect +message is the SPI (Security Association Identifier (sic)). +IP packets are written to and read from +.BR data . +The kernel encrypts any packets written to +.BR data , +appends a MAC, and prefixes an ESP header before +sending to the other end of the tunnel. +Received packets are checked against their MAC's, +decrypted, and queued for reading from +.BR data . +The control messages are: +.TP +.BI esp\ "alg secret +Encrypt with the algorithm, +.IR alg , +using +.I secret +as the key. +Possible algorithms are: +.BR null , +.BR des_56_cbc , +and +.BR rc4_128 . +.TP +.BI ah\ "alg secret +Use the hash algorithm, +.IR alg , +with +.I secret +as the key for generating the MAC. +Possible algorithms are: +.BR null , +.BR hmac_sha1_96 , +and +.BR hmac_md5_96 . +.TP +.B header +Turn on header mode. Every buffer read from +.B data +starts with 4 unsued bytes, and the first 4 bytes +of every buffer written to +.B data +are ignored. +.TP +.B noheader +Turn off header mode. +.SS "IP packet filter +.PP +The directory +.B /net/ipmux +looks like another protocol directory. +It is a packet filter built on top of IP. Each numbered +subdirectory represents a different filter. +The connect messages written to the +.I ctl +file describe the filter. Packets matching the filter can be read on the +.B data +file. Packets written to the +.B data +file are routed to an interface and transmitted. +.PP +A filter is a semicolon-separated list of +relations. Each relation describes a portion +of a packet to match. The possible relations are: +.TP +.BI proto= n +the IP protocol number must be +.IR n . +.TP +.BI dat[ n : m ]= expr +bytes +.I n +through +.I m +following the IP packet must match +.IR expr . +.TP +.BI ifc= expr +the packet must have been received on an interface whose address +matches +.IR expr . +.TP +.BI src= expr +The source address in the packet must match +.IR expr . +.TP +.BI dst= expr +The destination address in the packet must match +.IR expr . +.PP +.I Expr +is of the form: +.TP +.I \ value +.TP +.IB \ value | value | ... +.TP +.IB \ value & mask +.TP +.IB \ value | value & mask +.PP +If a mask is given, the relevant field is first ANDed with +the mask. The result is compared against the value or list +of values for a match. In the case of +.BR ifc , +.BR dst , +and +.B src +the value is a dot-formatted IP address and the mask is a dot-formatted +IP mask. In the case of +.BR dat , +both value and mask are strings of 2 character hexadecimal digits representing +8 bit values. +.PP +A packet is delivered to only one filter. +The filters are merged into a single comparison tree. +If two filters match the same packet, the following +rules apply in order (here '>' means is preferred to): +.IP 1) +protocol > data > source > destination > interface +.IP 2) +lower data offsets > higher data offsets +.IP 3) +longer matches > shorter matches +.IP 4) +older > younger +.PP +So far this has just been used to implement a version of +OSPF in Inferno. +.SS Statistics +.PP +The +.B stats +files are read only and contain statistics useful to network +monitoring. +.PP +Reading +.B /net/ipifc/stats +returns a list of 19 tagged and new line separated fields representing: +.EX +.ft 1 + forwarding status (0 and 2 mean forwarding off, 1 means on) + default TTL + input packets + input header errors + input address errors + packets forwarded + input packets for unknown protocols + input packets discarded + input packets delivered to higher level protocols + output packets + output packets discarded + output packets with no route + timed out fragments in reassembly queue + requested reassemblies + successful reassemblies + failed reassemblies + successful fragmentations + unsuccessful fragmentations + fragments created +.ft +.EE +.PP +Reading +.B /net/icmp/stats +returns a list of 25 tagged and new line separated fields representing: +.EX +.ft 1 + messages received + bad received messages + unreachables received + time exceededs received + input parameter problems received + source quenches received + redirects received + echo requests received + echo replies received + timestamps received + timestamp replies received + address mask requests received + address mask replies received + messages sent + transmission errors + unreachables sent + time exceededs sent + input parameter problems sent + source quenches sent + redirects sent + echo requests sent + echo replies sent + timestamps sent + timestamp replies sent + address mask requests sent + address mask replies sent +.EE +.PP +Reading +.B /net/tcp/stats +returns a list of 11 tagged and new line separated fields representing: +.EX +.ft 1 + maximum number of connections + total outgoing calls + total incoming calls + number of established connections to be reset + number of currently established connections + segments received + segments sent + segments retransmitted + retransmit timeouts + bad received segments + transmission failures +.EE +.PP +Reading +.B /net/udp/stats +returns a list of 4 tagged and new line separated fields representing: +.EX +.ft 1 + datagrams received + datagrams received for bad ports + malformed datagrams received + datagrams sent +.EE +.PP +Reading +.B /net/il/stats +returns a list of 7 tagged and new line separated fields representing: +.EX +.ft 1 + checksum errors + header length errors + out of order messages + retransmitted messages + duplicate messages + duplicate bytes +.EE +.PP +Reading +.B /net/gre/stats +returns a list of 1 tagged number representing: +.EX +.ft 1 + header length errors +.EE +.SH "SEE ALSO" +.IR listen (8), +.IR dial (2), +.IR ndb (6) +.SH SOURCE +.B /sys/src/9/ip +.SH BUGS +.I Ipmux +has not been heavily used and should be considered experimental. +It may disappear in favor of a more traditional packet filter in the future. |
