sortix-mirror/share/man/man4/inet.4

215 lines
5.2 KiB
Groff

.Dd June 1, 2017
.Dt INET 4
.Os
.Sh NAME
.Nm inet
.Nd internet protocol family
.Sh SYNOPSIS
.In sys/socket.h
.In netinet/in.h
.Pp
.Fd #define AF_INET 1
.Bd -literal
typedef uint16_t sa_family_t;
typedef uint16_t in_port_t;
typedef uint32_t in_addr_t;
struct in_addr {
in_addr_t s_addr;
};
struct sockaddr_in {
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
};
.Ed
.Sh DESCRIPTION
The Internet Protocol version 4 protocol family is a set of protocols using the
Internet Protocol version 4
.Xr ip 4
as the network layer.
.Dv SOCK_STREAM
sockets are provided by the Transmission Control Protocol
.Xr tcp 4 .
.Dv SOCK_DGRAM
sockets are provided by the User Datagram Protocol
.Xr udp 4 .
.Pp
Hosts are addressed with a four byte Internet Protocol (IP) address stored in a
.Vt struct in_addr
in network byte order.
IP addresses are notated by
the decimal byte values interspaced with periods, e.g. 192.0.2.255.
Subnetworks are ranges of IP addresses given by a starting IP address along with
how many leading bits (most significant bit first) of the IP address are common
to the network (the prefix), the first address of the the subnetwork is the
prefix with the remaining bits set to zero, and the last address is the prefix
with the
remaining bits set to one.
A subnetwork can be denoted by the starting IP address and the leading bits,
e.g. 198.51.100.0/24 spans from 198.51.100.0 to 198.51.100.255.
The subnet mask of a subnetwork is an IP address with the bits set that belong
to the network prefix, e.g. the subnet mask of 203.0.113.0/24 is 255.255.255.0.
The subnetworks 192.0.2.0/24 (TEST-NET-1), 198.51.100.0/24 (TEST-NET-2), and
203.0.113.0/24 (TEST-NET-2) are reserved for documentation.
The last address in a network is normally the broadcast address for the network.
.Pp
Services are addressed
with a 16-bit byte port number in a
.Vt in_port_t
in network byte order.
.Pp
Sockets are addressed with the combination of a host address and port number
stored in a
.Vt struct sockaddr_in
where
.Va sin_family
is set to
.Dv AF_INET ,
.Va sin_port
is set to the 16-bit port number in network byte order, and
.Va sin_addr
is set to the host address in network byte order.
.Pp
.Va sin_port
can be set to
.Li 0
(converted to network byte order)
to request
.Xr bind 2
allocate a port.
Port
.Li 0
is not valid as a destination port.
.Pp
.Va sin_addr.s_addr
can be set to
.Dv INADDR_ANY
.Pq 0.0.0.0
(converted to network byte order) to mean an unspecified address.
When a socket is bound to the address
.Dv INADDR_ANY ,
messages are accepted from any address.
In
.Xr connect 2
and
.Xr sendto 2 ,
the destination address
.Dv INADDR_ANY
means the current host.
.Pp
.Va sin_addr.s_addr
can be set to
.Dv INADDR_BROADCAST
.Pq 255.255.255.255
(converted to network byte order),
the broadcast address of the local network.
.Pp
.Va sin_addr.s_addr
can be set to
.Dv INADDR_LOOPBACK
.Pq 127.0.0.1
(converted to network byte order), the address of the loopback interface
.Xr lo 4 .
.Dv INADDR_LOOPMASK
.Pq 255.0.0.0
contains the subnet mask of the loopback interface.
.Pp
Sockets of this protocol family can be created by passing
.Dv AF_INET
as the
.Fa domain
parameter of
.Xr socket 2 .
.Pp
The network byte order is big-endian.
.Pp
IP addresses in 32-bit integer format in the host endian can be converted
to network byte order using
.Xr htobe32 3
or
.Xr htonl 3
and back using
.Xr be32toh 3
or
.Xr ntohl 3 .
.Pp
Port numbers in 16-bit integer format in the host endian can be converted
to network byte order using
.Xr htobe16 3
or
.Xr htons 3
and back using
.Xr be16toh 3
or
.Xr ntohs 3 .
.Pp
.Xr inet_pton 3
can be used to convert an IP address from textual representation to binary
representation.
.Xr inet_ntop 3
can be used to convert an IP address from binary representation to textual
representation.
.Sh EXAMPLES
This example manually constructs and deconstructs a
.Vt struct inaddr_in .
.Bd -literal
struct sockaddr_in saddr;
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = htobe32(0xC0000201); /* 192.0.2.1 */
saddr.sin_port = htobe16(1234);
sa_family_t family = saddr.sin_family;
in_addr_t addr = be32toh(saddr.sin_addr.s_addr);
in_port_t port = be16toh(saddr.sin_port);
.Ed
.Sh COMPATIBILITY
On some operating systems,
.Vt struct sockaddr_in
may contain padding and additional members and the structure should be
initialized to zero prior to initializing its members.
.Sh SEE ALSO
.Xr socket 2 ,
.Xr arp 4 ,
.Xr icmp 4 ,
.Xr ip 4 ,
.Xr ping 4 ,
.Xr tcp 4 ,
.Xr udp 4 ,
.Xr kernel 7
.Sh STANDARDS
.Rs
.%A J. Postel (ed.)
.%D September 1981
.%R STD 5
.%R RFC 791
.%T Internet Protocol - DARPA Internet Program Protocol Specification
.%Q USC/Information Sciences Institute
.Re
.Pp
.Rs
.%A Internet Engineering Task Force
.%A J. Arkko
.%A M. Cotton
.%A L. Vegoda
.%D January 2010
.%R RFC 5737
.%T IPv4 Address Blocks Reserved for Documentation
.%Q Ericsson
.%Q ICANN
.Re
.Pp
The protocol family programming interface conforms to
.St -p1003.1-2008 .
.Sh BUGS
The network stack implementation is incomplete and has known bugs.
See the protocol manual pages for more information.
.Pp
The 4-byte address space allows only a maximum of 4294967296 addresses and is
being exhausted.
The Internet Protocol version 6 replaces version 4 and provides a 16-byte
address space instead.