Provided by: freebsd-manpages_12.2-1_all bug

NAME

       inet — Internet protocol family

SYNOPSIS

       #include <sys/types.h>
       #include <netinet/in.h>

DESCRIPTION

       The  Internet  protocol  family  is  a  collection  of  protocols layered atop the Internet Protocol (IP)
       transport layer, and utilizing the Internet  address  format.   The  Internet  family  provides  protocol
       support  for  the  SOCK_STREAM,  SOCK_DGRAM,  and  SOCK_RAW socket types; the SOCK_RAW interface provides
       access to the IP protocol.

ADDRESSING

       Internet addresses are four byte  quantities,  stored  in  network  standard  format  (on  little  endian
       machines,  such  as  the  alpha,  amd64  and  i386  these  are word and byte reversed).  The include file
       <netinet/in.h> defines this address as a discriminated union.

       Sockets bound to the Internet protocol family utilize the following addressing structure,

             struct sockaddr_in {
                     uint8_t         sin_len;
                     sa_family_t     sin_family;
                     in_port_t       sin_port;
                     struct in_addr  sin_addr;
                     char            sin_zero[8];
             };

       Sockets may be created with the local address  INADDR_ANY  to  affect  “wildcard”  matching  on  incoming
       messages.   The address in a connect(2) or sendto(2) call may be given as INADDR_ANY to mean “this host”.
       The distinguished address INADDR_BROADCAST is allowed as a shorthand for the  broadcast  address  on  the
       primary network if the first network configured supports broadcast.

PROTOCOLS

       The  Internet  protocol family is comprised of the IP network protocol, Internet Control Message Protocol
       (ICMP), Internet Group Management Protocol (IGMP), Transmission Control Protocol (TCP), and User Datagram
       Protocol (UDP).  TCP is used to support the SOCK_STREAM abstraction while UDP  is  used  to  support  the
       SOCK_DGRAM  abstraction.   A  raw  interface  to  IP  is available by creating an Internet socket of type
       SOCK_RAW.  The ICMP message protocol is accessible from a raw socket.

       The inet address on an interface consist of the address itself, the netmask, either broadcast address  in
       case  of  a  broadcast  interface  or  peers  address in case of point-to-point interface.  The following
       ioctl(2) commands are provided for a datagram socket in the Internet domain:

             SIOCAIFADDR     Add address to an interface.  The command requires struct in_aliasreq as argument.
             SIOCDIFADDR     Delete address from an interface.  The command requires struct ifreq as argument.
             SIOCGIFADDR
             SIOCGIFBRDADDR
             SIOCGIFDSTADDR
             SIOCGIFNETMASK  Return address information from interface.  The returned value is in struct  ifreq.
                             This  way  of address information retrieval is obsoleted, a preferred way is to use
                             getifaddrs(3) API.

   MIB Variables
       A number of variables are implemented in the net.inet branch of the sysctl(3) MIB.  In  addition  to  the
       variables  supported by the transport protocols (for which the respective manual pages may be consulted),
       the following general variables are defined:

       IPCTL_FORWARDING         (ip.forwarding) Boolean: enable/disable forwarding of IP packets.   Defaults  to
                                off.

       IPCTL_SENDREDIRECTS      (ip.redirect)  Boolean:  enable/disable sending of ICMP redirects in response to
                                IP packets for which a better, and for the sender directly reachable, route  and
                                next hop is known.  Defaults to on.

       IPCTL_DEFTTL             (ip.ttl) Integer: default time-to-live (“TTL”) to use for outgoing IP packets.

       IPCTL_ACCEPTSOURCEROUTE  (ip.accept_sourceroute)  Boolean:  enable/disable  accepting of source-routed IP
                                packets (default false).

       IPCTL_SOURCEROUTE        (ip.sourceroute) Boolean: enable/disable forwarding of source-routed IP  packets
                                (default false).

       ip.process_options       Integer:  control  IP options processing.  By setting this variable to 0, all IP
                                options in the incoming packets will be ignored, and the packets will be  passed
                                unmodified.   By  setting  to  1,  IP  options  in  the incoming packets will be
                                processed accordingly.  By setting to 2, an ICMP “prohibited by filter”  message
                                will  be  sent back in response to incoming packets with IP options.  Default is
                                1.  This sysctl(8) variable affects packets destined for a local host as well as
                                packets forwarded to some other host.

       ip.rfc6864               Boolean: control IP  IDs  generation  behaviour.   True  value  enables  RFC6864
                                support,  which specifies that IP ID field of atomic datagrams can be set to any
                                value.  The FreeBSD implementation sets it to zero. Enabled by default.

       ip.random_id             Boolean: control IP IDs generation  behaviour.   Setting  this  sysctl(8)  to  1
                                causes  the  ID  field  in  non-atomic  IP  datagrams  (or  all IP datagrams, if
                                ip.rfc6864 is disabled) to be randomized instead of incremented by 1  with  each
                                packet  generated.   This  closes  a  minor information leak which allows remote
                                observers to determine the rate of packet generation on the machine by  watching
                                the  counter.   At  the  same  time, on high-speed links, it can decrease the ID
                                reuse cycle greatly.  Default is 0 (sequential  IP  IDs).   IPv6  flow  IDs  and
                                fragment IDs are always random.

       ip.maxfrags              Integer:  maximum  number  of  fragments the host will accept and simultaneously
                                hold across all reassembly queues in all VNETs.  If  set  to  0,  reassembly  is
                                disabled.   If set to -1, this limit is not applied.  This limit is recalculated
                                when the number of mbuf clusters is changed.  This is a global limit.

       ip.maxfragpackets        Integer:  maximum  number  of  fragmented  packets  the  host  will  accept  and
                                simultaneously hold in the reassembly queue for a particular VNET.  0 means that
                                the  host  will  not accept any fragmented packets for that VNET.  -1 means that
                                the host will not apply this limit for that VNET.  This  limit  is  recalculated
                                when the number of mbuf clusters is changed.  This is a per-VNET limit.

       ip.maxfragbucketsize     Integer: maximum number of reassembly queues per bucket.  Fragmented packets are
                                hashed  to  buckets.   Each  bucket has a list of reassembly queues.  The system
                                must compare the incoming packets to  the  existing  reassembly  queues  in  the
                                bucket  to  find a matching reassembly queue.  To preserve system resources, the
                                system limits the number of reassembly queues  allowed  in  each  bucket.   This
                                limit  is  recalculated  when the number of mbuf clusters is changed or when the
                                value of ip.maxfragpackets changes.  This is a per-VNET limit.

       ip.maxfragsperpacket     Integer: maximum number of fragments the  host  will  accept  and  hold  in  the
                                reassembly  queue  for  a  packet.   0  means  that the host will not accept any
                                fragmented packets for the VNET.  This is a per-VNET limit.

SEE ALSO

       ioctl(2), socket(2), getifaddrs(3), sysctl(3), icmp(4), intro(4), ip(4), ipfirewall(4), route(4), tcp(4),
       udp(4), pfil(9)

       “An Introductory 4.3 BSD Interprocess Communication Tutorial”, PS1, 7.

       “An Advanced 4.3 BSD Interprocess Communication Tutorial”, PS1, 8.

HISTORY

       The inet protocol interface appeared in 4.2BSD.  The “protocol cloning” code appeared in FreeBSD 2.1.

CAVEATS

       The Internet protocol support is subject to change as the Internet protocols develop.  Users  should  not
       depend on details of the current implementation, but rather the services exported.

Debian                                           August 14, 2018                                         INET(4)