xref: /freebsd/share/man/man4/ip.4 (revision 9538693040ec6282c4e5ff5cf3bccbfafa77bb40)
1afe61c15SRodney W. Grimes.\" Copyright (c) 1983, 1991, 1993
2afe61c15SRodney W. Grimes.\"	The Regents of the University of California.  All rights reserved.
3afe61c15SRodney W. Grimes.\"
4afe61c15SRodney W. Grimes.\" Redistribution and use in source and binary forms, with or without
5afe61c15SRodney W. Grimes.\" modification, are permitted provided that the following conditions
6afe61c15SRodney W. Grimes.\" are met:
7afe61c15SRodney W. Grimes.\" 1. Redistributions of source code must retain the above copyright
8afe61c15SRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer.
9afe61c15SRodney W. Grimes.\" 2. Redistributions in binary form must reproduce the above copyright
10afe61c15SRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer in the
11afe61c15SRodney W. Grimes.\"    documentation and/or other materials provided with the distribution.
12afe61c15SRodney W. Grimes.\" 3. All advertising materials mentioning features or use of this software
13afe61c15SRodney W. Grimes.\"    must display the following acknowledgement:
14afe61c15SRodney W. Grimes.\"	This product includes software developed by the University of
15afe61c15SRodney W. Grimes.\"	California, Berkeley and its contributors.
16afe61c15SRodney W. Grimes.\" 4. Neither the name of the University nor the names of its contributors
17afe61c15SRodney W. Grimes.\"    may be used to endorse or promote products derived from this software
18afe61c15SRodney W. Grimes.\"    without specific prior written permission.
19afe61c15SRodney W. Grimes.\"
20afe61c15SRodney W. Grimes.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21afe61c15SRodney W. Grimes.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22afe61c15SRodney W. Grimes.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23afe61c15SRodney W. Grimes.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24afe61c15SRodney W. Grimes.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25afe61c15SRodney W. Grimes.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26afe61c15SRodney W. Grimes.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27afe61c15SRodney W. Grimes.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28afe61c15SRodney W. Grimes.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29afe61c15SRodney W. Grimes.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30afe61c15SRodney W. Grimes.\" SUCH DAMAGE.
31afe61c15SRodney W. Grimes.\"
32afe61c15SRodney W. Grimes.\"     @(#)ip.4	8.2 (Berkeley) 11/30/93
337f3dea24SPeter Wemm.\" $FreeBSD$
34afe61c15SRodney W. Grimes.\"
35*95386930SAndre Oppermann.Dd November 14, 2011
36afe61c15SRodney W. Grimes.Dt IP 4
378ce3f3ddSRuslan Ermilov.Os
38afe61c15SRodney W. Grimes.Sh NAME
39afe61c15SRodney W. Grimes.Nm ip
40afe61c15SRodney W. Grimes.Nd Internet Protocol
41afe61c15SRodney W. Grimes.Sh SYNOPSIS
4232eef9aeSRuslan Ermilov.In sys/types.h
4332eef9aeSRuslan Ermilov.In sys/socket.h
4432eef9aeSRuslan Ermilov.In netinet/in.h
45afe61c15SRodney W. Grimes.Ft int
46afe61c15SRodney W. Grimes.Fn socket AF_INET SOCK_RAW proto
47afe61c15SRodney W. Grimes.Sh DESCRIPTION
48afe61c15SRodney W. Grimes.Tn IP
49afe61c15SRodney W. Grimesis the transport layer protocol used
50afe61c15SRodney W. Grimesby the Internet protocol family.
51afe61c15SRodney W. GrimesOptions may be set at the
52afe61c15SRodney W. Grimes.Tn IP
53afe61c15SRodney W. Grimeslevel
54afe61c15SRodney W. Grimeswhen using higher-level protocols that are based on
55afe61c15SRodney W. Grimes.Tn IP
56afe61c15SRodney W. Grimes(such as
57afe61c15SRodney W. Grimes.Tn TCP
58afe61c15SRodney W. Grimesand
59afe61c15SRodney W. Grimes.Tn UDP ) .
60afe61c15SRodney W. GrimesIt may also be accessed
61afe61c15SRodney W. Grimesthrough a
62afe61c15SRodney W. Grimes.Dq raw socket
63afe61c15SRodney W. Grimeswhen developing new protocols, or
64afe61c15SRodney W. Grimesspecial-purpose applications.
65afe61c15SRodney W. Grimes.Pp
66afe61c15SRodney W. GrimesThere are several
67afe61c15SRodney W. Grimes.Tn IP-level
68edf0e5b3SMike Pritchard.Xr setsockopt 2
69edf0e5b3SMike Pritchardand
70afe61c15SRodney W. Grimes.Xr getsockopt 2
71afe61c15SRodney W. Grimesoptions.
72afe61c15SRodney W. Grimes.Dv IP_OPTIONS
73afe61c15SRodney W. Grimesmay be used to provide
74afe61c15SRodney W. Grimes.Tn IP
75afe61c15SRodney W. Grimesoptions to be transmitted in the
76afe61c15SRodney W. Grimes.Tn IP
77afe61c15SRodney W. Grimesheader of each outgoing packet
78afe61c15SRodney W. Grimesor to examine the header options on incoming packets.
79afe61c15SRodney W. Grimes.Tn IP
80afe61c15SRodney W. Grimesoptions may be used with any socket type in the Internet family.
81afe61c15SRodney W. GrimesThe format of
82afe61c15SRodney W. Grimes.Tn IP
83afe61c15SRodney W. Grimesoptions to be sent is that specified by the
84afe61c15SRodney W. Grimes.Tn IP
85afe61c15SRodney W. Grimesprotocol specification (RFC-791), with one exception:
86afe61c15SRodney W. Grimesthe list of addresses for Source Route options must include the first-hop
87afe61c15SRodney W. Grimesgateway at the beginning of the list of gateways.
88afe61c15SRodney W. GrimesThe first-hop gateway address will be extracted from the option list
89afe61c15SRodney W. Grimesand the size adjusted accordingly before use.
90afe61c15SRodney W. GrimesTo disable previously specified options,
91afe61c15SRodney W. Grimesuse a zero-length buffer:
92afe61c15SRodney W. Grimes.Bd -literal
93afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_OPTIONS, NULL, 0);
94afe61c15SRodney W. Grimes.Ed
95afe61c15SRodney W. Grimes.Pp
96afe61c15SRodney W. Grimes.Dv IP_TOS
97afe61c15SRodney W. Grimesand
98afe61c15SRodney W. Grimes.Dv IP_TTL
99afe61c15SRodney W. Grimesmay be used to set the type-of-service and time-to-live
100afe61c15SRodney W. Grimesfields in the
101afe61c15SRodney W. Grimes.Tn IP
102afe61c15SRodney W. Grimesheader for
1038ce3f3ddSRuslan Ermilov.Dv SOCK_STREAM , SOCK_DGRAM ,
1048ce3f3ddSRuslan Ermilovand certain types of
1058ce3f3ddSRuslan Ermilov.Dv SOCK_RAW
1066d249eeeSSheldon Hearnsockets.
1076d249eeeSSheldon HearnFor example,
108afe61c15SRodney W. Grimes.Bd -literal
109a7c83731SRuslan Ermilovint tos = IPTOS_LOWDELAY;       /* see <netinet/ip.h> */
110afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));
111afe61c15SRodney W. Grimes
112afe61c15SRodney W. Grimesint ttl = 60;                   /* max = 255 */
113afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
114afe61c15SRodney W. Grimes.Ed
115afe61c15SRodney W. Grimes.Pp
1165090c754SAndre Oppermann.Dv IP_MINTTL
1175090c754SAndre Oppermannmay be used to set the minimum acceptable TTL a packet must have when
1185090c754SAndre Oppermannreceived on a socket.
1195090c754SAndre OppermannAll packets with a lower TTL are silently dropped.
12078ad5421SRuslan ErmilovThis option is only really useful when set to 255, preventing packets
1215090c754SAndre Oppermannfrom outside the directly connected networks reaching local listeners
1225090c754SAndre Oppermannon sockets.
1235090c754SAndre Oppermann.Pp
124c9ebaafaSAndre Oppermann.Dv IP_DONTFRAG
125c9ebaafaSAndre Oppermannmay be used to set the Don't Fragment flag on IP packets.
126c9ebaafaSAndre OppermannCurrently this option is respected only on
127c9ebaafaSAndre Oppermann.Xr udp 4
12878ad5421SRuslan Ermilovand raw
129c9ebaafaSAndre Oppermann.Xr ip 4
13078ad5421SRuslan Ermilovsockets, unless the
13178ad5421SRuslan Ermilov.Dv IP_HDRINCL
13278ad5421SRuslan Ermilovoption has been set.
133c9ebaafaSAndre OppermannOn
134c9ebaafaSAndre Oppermann.Xr tcp 4
13578ad5421SRuslan Ermilovsockets, the Don't Fragment flag is controlled by the Path
136c9ebaafaSAndre OppermannMTU Discovery option.
137c9ebaafaSAndre OppermannSending a packet larger than the MTU size of the egress interface,
13878ad5421SRuslan Ermilovdetermined by the destination address, returns an
13978ad5421SRuslan Ermilov.Er EMSGSIZE
14078ad5421SRuslan Ermiloverror.
141c9ebaafaSAndre Oppermann.Pp
142afe61c15SRodney W. GrimesIf the
143afe61c15SRodney W. Grimes.Dv IP_RECVDSTADDR
144afe61c15SRodney W. Grimesoption is enabled on a
145afe61c15SRodney W. Grimes.Dv SOCK_DGRAM
146afe61c15SRodney W. Grimessocket,
147afe61c15SRodney W. Grimesthe
148edf0e5b3SMike Pritchard.Xr recvmsg 2
149afe61c15SRodney W. Grimescall will return the destination
150afe61c15SRodney W. Grimes.Tn IP
151afe61c15SRodney W. Grimesaddress for a
152afe61c15SRodney W. Grimes.Tn UDP
153afe61c15SRodney W. Grimesdatagram.
1548d22ff75SRuslan ErmilovThe
1558d22ff75SRuslan Ermilov.Vt msg_control
1568d22ff75SRuslan Ermilovfield in the
1578d22ff75SRuslan Ermilov.Vt msghdr
1588d22ff75SRuslan Ermilovstructure points to a buffer
1598d22ff75SRuslan Ermilovthat contains a
1608d22ff75SRuslan Ermilov.Vt cmsghdr
1618d22ff75SRuslan Ermilovstructure followed by the
162afe61c15SRodney W. Grimes.Tn IP
163afe61c15SRodney W. Grimesaddress.
1648d22ff75SRuslan ErmilovThe
1658d22ff75SRuslan Ermilov.Vt cmsghdr
1668d22ff75SRuslan Ermilovfields have the following values:
167afe61c15SRodney W. Grimes.Bd -literal
168afe61c15SRodney W. Grimescmsg_len = sizeof(struct in_addr)
169afe61c15SRodney W. Grimescmsg_level = IPPROTO_IP
170afe61c15SRodney W. Grimescmsg_type = IP_RECVDSTADDR
171afe61c15SRodney W. Grimes.Ed
1727ee32b9fSPeter Wemm.Pp
173c557ae16SIan DowseThe source address to be used for outgoing
174c557ae16SIan Dowse.Tn UDP
175c557ae16SIan Dowsedatagrams on a socket that is not bound to a specific
176c557ae16SIan Dowse.Tn IP
177c557ae16SIan Dowseaddress can be specified as ancillary data with a type code of
178c557ae16SIan Dowse.Dv IP_SENDSRCADDR .
179c557ae16SIan DowseThe msg_control field in the msghdr structure should point to a buffer
1808d22ff75SRuslan Ermilovthat contains a
1818d22ff75SRuslan Ermilov.Vt cmsghdr
1828d22ff75SRuslan Ermilovstructure followed by the
183c557ae16SIan Dowse.Tn IP
184c557ae16SIan Dowseaddress.
185c557ae16SIan DowseThe cmsghdr fields should have the following values:
186c557ae16SIan Dowse.Bd -literal
187c557ae16SIan Dowsecmsg_len = sizeof(struct in_addr)
188c557ae16SIan Dowsecmsg_level = IPPROTO_IP
189c557ae16SIan Dowsecmsg_type = IP_SENDSRCADDR
190c557ae16SIan Dowse.Ed
191c557ae16SIan Dowse.Pp
192c557ae16SIan DowseFor convenience,
193c557ae16SIan Dowse.Dv IP_SENDSRCADDR
194c557ae16SIan Dowseis defined to have the same value as
195c557ae16SIan Dowse.Dv IP_RECVDSTADDR ,
196c557ae16SIan Dowseso the
197c557ae16SIan Dowse.Dv IP_RECVDSTADDR
198c557ae16SIan Dowsecontrol message from
199c557ae16SIan Dowse.Xr recvmsg 2
200c557ae16SIan Dowsecan be used directly as a control message for
201c557ae16SIan Dowse.Xr sendmsg 2 .
20204bcf5a9SBruce M Simpson.\"
203c557ae16SIan Dowse.Pp
2043b5f87e6SMatthew N. DoddIf the
2058afa2304SBruce M Simpson.Dv IP_ONESBCAST
2068afa2304SBruce M Simpsonoption is enabled on a
2078afa2304SBruce M Simpson.Dv SOCK_DGRAM
2088afa2304SBruce M Simpsonor a
2098afa2304SBruce M Simpson.Dv SOCK_RAW
2108afa2304SBruce M Simpsonsocket, the destination address of outgoing
2118afa2304SBruce M Simpsonbroadcast datagrams on that socket will be forced
2128afa2304SBruce M Simpsonto the undirected broadcast address,
2138afa2304SBruce M Simpson.Dv INADDR_BROADCAST ,
2148afa2304SBruce M Simpsonbefore transmission.
2158afa2304SBruce M SimpsonThis is in contrast to the default behavior of the
2168afa2304SBruce M Simpsonsystem, which is to transmit undirected broadcasts
2178afa2304SBruce M Simpsonvia the first network interface with the
2188afa2304SBruce M Simpson.Dv IFF_BROADCAST flag set.
2198afa2304SBruce M Simpson.Pp
2208afa2304SBruce M SimpsonThis option allows applications to choose which
2218afa2304SBruce M Simpsoninterface is used to transmit an undirected broadcast
2228afa2304SBruce M Simpsondatagram.
2238afa2304SBruce M SimpsonFor example, the following code would force an
2248afa2304SBruce M Simpsonundirected broadcast to be transmitted via the interface
2258afa2304SBruce M Simpsonconfigured with the broadcast address 192.168.2.255:
2268afa2304SBruce M Simpson.Bd -literal
2278afa2304SBruce M Simpsonchar msg[512];
2288afa2304SBruce M Simpsonstruct sockaddr_in sin;
2298afa2304SBruce M Simpsonu_char onesbcast = 1;	/* 0 = disable (default), 1 = enable */
2308afa2304SBruce M Simpson
2318afa2304SBruce M Simpsonsetsockopt(s, IPPROTO_IP, IP_ONESBCAST, &onesbcast, sizeof(onesbcast));
2328afa2304SBruce M Simpsonsin.sin_addr.s_addr = inet_addr("192.168.2.255");
2338afa2304SBruce M Simpsonsin.sin_port = htons(1234);
2348afa2304SBruce M Simpsonsendto(s, msg, sizeof(msg), 0, &sin, sizeof(sin));
2358afa2304SBruce M Simpson.Ed
2368afa2304SBruce M Simpson.Pp
2378afa2304SBruce M SimpsonIt is the application's responsibility to set the
2388afa2304SBruce M Simpson.Dv IP_TTL option
2398afa2304SBruce M Simpsonto an appropriate value in order to prevent broadcast storms.
2408afa2304SBruce M SimpsonThe application must have sufficient credentials to set the
2418afa2304SBruce M Simpson.Dv SO_BROADCAST
2428afa2304SBruce M Simpsonsocket level option, otherwise the
2438afa2304SBruce M Simpson.Dv IP_ONESBCAST option has no effect.
2448afa2304SBruce M Simpson.Pp
2458afa2304SBruce M SimpsonIf the
24679d6b3f3SPawel Jakub Dawidek.Dv IP_BINDANY
24779d6b3f3SPawel Jakub Dawidekoption is enabled on a
24879d6b3f3SPawel Jakub Dawidek.Dv SOCK_STREAM ,
24979d6b3f3SPawel Jakub Dawidek.Dv SOCK_DGRAM
25079d6b3f3SPawel Jakub Dawidekor a
25179d6b3f3SPawel Jakub Dawidek.Dv SOCK_RAW
25279d6b3f3SPawel Jakub Dawideksocket, one can
25379d6b3f3SPawel Jakub Dawidek.Xr bind 2
25479d6b3f3SPawel Jakub Dawidekto any address, even one not bound to any available network interface in the
25579d6b3f3SPawel Jakub Dawideksystem.
25679d6b3f3SPawel Jakub DawidekThis functionality (in conjunction with special firewall rules) can be used for
25779d6b3f3SPawel Jakub Dawidekimplementing a transparent proxy.
25879d6b3f3SPawel Jakub DawidekThe
25979d6b3f3SPawel Jakub Dawidek.Dv PRIV_NETINET_BINDANY
26079d6b3f3SPawel Jakub Dawidekprivilege is needed to set this option.
26179d6b3f3SPawel Jakub Dawidek.Pp
26279d6b3f3SPawel Jakub DawidekIf the
2634957466bSMatthew N. Dodd.Dv IP_RECVTTL
2644957466bSMatthew N. Doddoption is enabled on a
2654957466bSMatthew N. Dodd.Dv SOCK_DGRAM
2664957466bSMatthew N. Doddsocket, the
2674957466bSMatthew N. Dodd.Xr recvmsg 2
2684957466bSMatthew N. Doddcall will return the
2694957466bSMatthew N. Dodd.Tn IP
2704957466bSMatthew N. Dodd.Tn TTL
2714957466bSMatthew N. Dodd(time to live) field for a
2724957466bSMatthew N. Dodd.Tn UDP
2734957466bSMatthew N. Dodddatagram.
2744957466bSMatthew N. DoddThe msg_control field in the msghdr structure points to a buffer
2754957466bSMatthew N. Doddthat contains a cmsghdr structure followed by the
2764957466bSMatthew N. Dodd.Tn TTL .
2774957466bSMatthew N. DoddThe cmsghdr fields have the following values:
2784957466bSMatthew N. Dodd.Bd -literal
2794957466bSMatthew N. Doddcmsg_len = sizeof(u_char)
2804957466bSMatthew N. Doddcmsg_level = IPPROTO_IP
2814957466bSMatthew N. Doddcmsg_type = IP_RECVTTL
2824957466bSMatthew N. Dodd.Ed
28304bcf5a9SBruce M Simpson.\"
2844957466bSMatthew N. Dodd.Pp
2854957466bSMatthew N. DoddIf the
2863b5f87e6SMatthew N. Dodd.Dv IP_RECVIF
2873b5f87e6SMatthew N. Doddoption is enabled on a
2883b5f87e6SMatthew N. Dodd.Dv SOCK_DGRAM
2893b5f87e6SMatthew N. Doddsocket, the
2903b5f87e6SMatthew N. Dodd.Xr recvmsg 2
2918d22ff75SRuslan Ermilovcall returns a
2928d22ff75SRuslan Ermilov.Vt "struct sockaddr_dl"
2938d22ff75SRuslan Ermilovcorresponding to the interface on which the
2948d22ff75SRuslan Ermilovpacket was received.
2958d22ff75SRuslan ErmilovThe
2968d22ff75SRuslan Ermilov.Va msg_control
2978d22ff75SRuslan Ermilovfield in the
2988d22ff75SRuslan Ermilov.Vt msghdr
2998d22ff75SRuslan Ermilovstructure points to a buffer that contains a
3008d22ff75SRuslan Ermilov.Vt cmsghdr
3018d22ff75SRuslan Ermilovstructure followed by the
3028d22ff75SRuslan Ermilov.Vt "struct sockaddr_dl" .
3038d22ff75SRuslan ErmilovThe
3048d22ff75SRuslan Ermilov.Vt cmsghdr
3058d22ff75SRuslan Ermilovfields have the following values:
3063b5f87e6SMatthew N. Dodd.Bd -literal
3073b5f87e6SMatthew N. Doddcmsg_len = sizeof(struct sockaddr_dl)
3083b5f87e6SMatthew N. Doddcmsg_level = IPPROTO_IP
3093b5f87e6SMatthew N. Doddcmsg_type = IP_RECVIF
3103b5f87e6SMatthew N. Dodd.Ed
3113b5f87e6SMatthew N. Dodd.Pp
3127ee32b9fSPeter Wemm.Dv IP_PORTRANGE
3137ee32b9fSPeter Wemmmay be used to set the port range used for selecting a local port number
3146d249eeeSSheldon Hearnon a socket with an unspecified (zero) port number.
3156d249eeeSSheldon HearnIt has the following
3167ee32b9fSPeter Wemmpossible values:
3177ee32b9fSPeter Wemm.Bl -tag -width IP_PORTRANGE_DEFAULT
3187ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_DEFAULT
3197ee32b9fSPeter Wemmuse the default range of values, normally
32074c0361aSMike Silbersack.Dv IPPORT_HIFIRSTAUTO
3217ee32b9fSPeter Wemmthrough
32274c0361aSMike Silbersack.Dv IPPORT_HILASTAUTO .
3237ee32b9fSPeter WemmThis is adjustable through the sysctl setting:
324ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.first
3257ee32b9fSPeter Wemmand
326ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.last .
3277ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_HIGH
3287ee32b9fSPeter Wemmuse a high range of values, normally
3297ee32b9fSPeter Wemm.Dv IPPORT_HIFIRSTAUTO
3307ee32b9fSPeter Wemmand
3317ee32b9fSPeter Wemm.Dv IPPORT_HILASTAUTO .
3327ee32b9fSPeter WemmThis is adjustable through the sysctl setting:
333ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.hifirst
3347ee32b9fSPeter Wemmand
335ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.hilast .
3367ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_LOW
3377ee32b9fSPeter Wemmuse a low range of ports, which are normally restricted to
3387ee32b9fSPeter Wemmprivileged processes on
3397ee32b9fSPeter Wemm.Ux
3408d22ff75SRuslan Ermilovsystems.
3418d22ff75SRuslan ErmilovThe range is normally from
342ace5be68SRuslan Ermilov.Dv IPPORT_RESERVED
343ace5be68SRuslan Ermilov\- 1 down to
3448f5e8232SBen Smithurst.Li IPPORT_RESERVEDSTART
3458f5e8232SBen Smithurstin descending order.
3468f5e8232SBen SmithurstThis is adjustable through the sysctl setting:
347ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.lowfirst
3488f5e8232SBen Smithurstand
349ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.lowlast .
3507ee32b9fSPeter Wemm.El
351718b17bbSCrist J. Clark.Pp
352718b17bbSCrist J. ClarkThe range of privileged ports which only may be opened by
353718b17bbSCrist J. Clarkroot-owned processes may be modified by the
354ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.reservedlow
355718b17bbSCrist J. Clarkand
356ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.reservedhigh
357718b17bbSCrist J. Clarksysctl settings.
358718b17bbSCrist J. ClarkThe values default to the traditional range,
359718b17bbSCrist J. Clark0 through
360ace5be68SRuslan Ermilov.Dv IPPORT_RESERVED
361ace5be68SRuslan Ermilov\- 1
362718b17bbSCrist J. Clark(0 through 1023), respectively.
363718b17bbSCrist J. ClarkNote that these settings do not affect and are not accounted for in the
364718b17bbSCrist J. Clarkuse or calculation of the other
365ace5be68SRuslan Ermilov.Va net.inet.ip.portrange
366718b17bbSCrist J. Clarkvalues above.
367ace5be68SRuslan ErmilovChanging these values departs from
368ace5be68SRuslan Ermilov.Ux
369ace5be68SRuslan Ermilovtradition and has security
370ace5be68SRuslan Ermilovconsequences that the administrator should carefully evaluate before
371718b17bbSCrist J. Clarkmodifying these settings.
372fe9892eaSMike Silbersack.Pp
373fe9892eaSMike SilbersackPorts are allocated at random within the specified port range in order
374bf7f20c2SRuslan Ermilovto increase the difficulty of random spoofing attacks.
375c48524c2SMike PritchardIn scenarios such as benchmarking, this behavior may be undesirable.
376bf7f20c2SRuslan ErmilovIn these cases,
377fe9892eaSMike Silbersack.Va net.inet.ip.portrange.randomized
378fe9892eaSMike Silbersackcan be used to toggle randomization off.
3796ee79c59SMaxim KonovalovIf more than
3806ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomcps
3816ee79c59SMaxim Konovalovports have been allocated in the last second, then return to sequential
3826ee79c59SMaxim Konovalovport allocation.
3836ee79c59SMaxim KonovalovReturn to random allocation only once the current port allocation rate
3846ee79c59SMaxim Konovalovdrops below
3856ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomcps
3866ee79c59SMaxim Konovalovfor at least
3876ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomtime
3886ee79c59SMaxim Konovalovseconds.
3896ee79c59SMaxim KonovalovThe default values for
3906ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomcps
3916ee79c59SMaxim Konovalovand
3926ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomtime
3936ee79c59SMaxim Konovalovare 10 port allocations per second and 45 seconds correspondingly.
394afe61c15SRodney W. Grimes.Ss "Multicast Options"
395afe61c15SRodney W. Grimes.Pp
396afe61c15SRodney W. Grimes.Tn IP
397afe61c15SRodney W. Grimesmulticasting is supported only on
398afe61c15SRodney W. Grimes.Dv AF_INET
399afe61c15SRodney W. Grimessockets of type
400afe61c15SRodney W. Grimes.Dv SOCK_DGRAM
401afe61c15SRodney W. Grimesand
402afe61c15SRodney W. Grimes.Dv SOCK_RAW ,
403afe61c15SRodney W. Grimesand only on networks where the interface
404afe61c15SRodney W. Grimesdriver supports multicasting.
405afe61c15SRodney W. Grimes.Pp
406afe61c15SRodney W. GrimesThe
407afe61c15SRodney W. Grimes.Dv IP_MULTICAST_TTL
408afe61c15SRodney W. Grimesoption changes the time-to-live (TTL)
409afe61c15SRodney W. Grimesfor outgoing multicast datagrams
410afe61c15SRodney W. Grimesin order to control the scope of the multicasts:
411afe61c15SRodney W. Grimes.Bd -literal
412afe61c15SRodney W. Grimesu_char ttl;	/* range: 0 to 255, default = 1 */
413afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl));
414afe61c15SRodney W. Grimes.Ed
4150c3a1746SMike Pritchard.Pp
416afe61c15SRodney W. GrimesDatagrams with a TTL of 1 are not forwarded beyond the local network.
417afe61c15SRodney W. GrimesMulticast datagrams with a TTL of 0 will not be transmitted on any network,
418afe61c15SRodney W. Grimesbut may be delivered locally if the sending host belongs to the destination
419afe61c15SRodney W. Grimesgroup and if multicast loopback has not been disabled on the sending socket
4208d22ff75SRuslan Ermilov(see below).
4218d22ff75SRuslan ErmilovMulticast datagrams with TTL greater than 1 may be forwarded
422afe61c15SRodney W. Grimesto other networks if a multicast router is attached to the local network.
423afe61c15SRodney W. Grimes.Pp
424108ad5bdSBruce M SimpsonFor hosts with multiple interfaces, where an interface has not
425108ad5bdSBruce M Simpsonbeen specified for a multicast group membership,
426108ad5bdSBruce M Simpsoneach multicast transmission is sent from the primary network interface.
427afe61c15SRodney W. GrimesThe
428afe61c15SRodney W. Grimes.Dv IP_MULTICAST_IF
429afe61c15SRodney W. Grimesoption overrides the default for
430afe61c15SRodney W. Grimessubsequent transmissions from a given socket:
431afe61c15SRodney W. Grimes.Bd -literal
432afe61c15SRodney W. Grimesstruct in_addr addr;
433afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, &addr, sizeof(addr));
434afe61c15SRodney W. Grimes.Ed
4350c3a1746SMike Pritchard.Pp
436afe61c15SRodney W. Grimeswhere "addr" is the local
437afe61c15SRodney W. Grimes.Tn IP
438afe61c15SRodney W. Grimesaddress of the desired interface or
439afe61c15SRodney W. Grimes.Dv INADDR_ANY
440afe61c15SRodney W. Grimesto specify the default interface.
44171498f30SBruce M Simpson.Pp
44271498f30SBruce M SimpsonTo specify an interface by index, an instance of
44371498f30SBruce M Simpson.Vt ip_mreqn
444108ad5bdSBruce M Simpsonmay be passed instead.
44571498f30SBruce M SimpsonThe
44671498f30SBruce M Simpson.Vt imr_ifindex
44771498f30SBruce M Simpsonmember should be set to the index of the desired interface,
44871498f30SBruce M Simpsonor 0 to specify the default interface.
44971498f30SBruce M SimpsonThe kernel differentiates between these two structures by their size.
450108ad5bdSBruce M Simpson.Pp
451108ad5bdSBruce M SimpsonThe use of
452108ad5bdSBruce M Simpson.Vt IP_MULTICAST_IF
453108ad5bdSBruce M Simpsonis
454108ad5bdSBruce M Simpson.Em not recommended ,
455108ad5bdSBruce M Simpsonas multicast memberships are scoped to each
456108ad5bdSBruce M Simpsonindividual interface.
457108ad5bdSBruce M SimpsonIt is supported for legacy use only by applications,
458108ad5bdSBruce M Simpsonsuch as routing daemons, which expect to
459108ad5bdSBruce M Simpsonbe able to transmit link-local IPv4 multicast datagrams (224.0.0.0/24)
460108ad5bdSBruce M Simpsonon multiple interfaces,
461108ad5bdSBruce M Simpsonwithout requesting an individual membership for each interface.
462108ad5bdSBruce M Simpson.Pp
46371498f30SBruce M Simpson.\"
464afe61c15SRodney W. GrimesAn interface's local IP address and multicast capability can
465afe61c15SRodney W. Grimesbe obtained via the
466afe61c15SRodney W. Grimes.Dv SIOCGIFCONF
467afe61c15SRodney W. Grimesand
468afe61c15SRodney W. Grimes.Dv SIOCGIFFLAGS
469afe61c15SRodney W. Grimesioctls.
470afe61c15SRodney W. GrimesNormal applications should not need to use this option.
471afe61c15SRodney W. Grimes.Pp
472afe61c15SRodney W. GrimesIf a multicast datagram is sent to a group to which the sending host itself
473afe61c15SRodney W. Grimesbelongs (on the outgoing interface), a copy of the datagram is, by default,
474afe61c15SRodney W. Grimeslooped back by the IP layer for local delivery.
475afe61c15SRodney W. GrimesThe
476afe61c15SRodney W. Grimes.Dv IP_MULTICAST_LOOP
477afe61c15SRodney W. Grimesoption gives the sender explicit control
478afe61c15SRodney W. Grimesover whether or not subsequent datagrams are looped back:
479afe61c15SRodney W. Grimes.Bd -literal
480afe61c15SRodney W. Grimesu_char loop;	/* 0 = disable, 1 = enable (default) */
481afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
482afe61c15SRodney W. Grimes.Ed
4830c3a1746SMike Pritchard.Pp
484afe61c15SRodney W. GrimesThis option
485afe61c15SRodney W. Grimesimproves performance for applications that may have no more than one
486d10910e6SBruce M Simpsoninstance on a single host (such as a routing daemon), by eliminating
4878d22ff75SRuslan Ermilovthe overhead of receiving their own transmissions.
4888d22ff75SRuslan ErmilovIt should generally not
489afe61c15SRodney W. Grimesbe used by applications for which there may be more than one instance on a
490afe61c15SRodney W. Grimessingle host (such as a conferencing program) or for which the sender does
491afe61c15SRodney W. Grimesnot belong to the destination group (such as a time querying program).
492afe61c15SRodney W. Grimes.Pp
493d10910e6SBruce M SimpsonThe sysctl setting
494d10910e6SBruce M Simpson.Va net.inet.ip.mcast.loop
495d10910e6SBruce M Simpsoncontrols the default setting of the
496d10910e6SBruce M Simpson.Dv IP_MULTICAST_LOOP
497d10910e6SBruce M Simpsonsocket option for new sockets.
498d10910e6SBruce M Simpson.Pp
499afe61c15SRodney W. GrimesA multicast datagram sent with an initial TTL greater than 1 may be delivered
500afe61c15SRodney W. Grimesto the sending host on a different interface from that on which it was sent,
5018d22ff75SRuslan Ermilovif the host belongs to the destination group on that other interface.
5028d22ff75SRuslan ErmilovThe loopback control option has no effect on such delivery.
503afe61c15SRodney W. Grimes.Pp
504afe61c15SRodney W. GrimesA host must become a member of a multicast group before it can receive
5058d22ff75SRuslan Ermilovdatagrams sent to the group.
5068d22ff75SRuslan ErmilovTo join a multicast group, use the
507afe61c15SRodney W. Grimes.Dv IP_ADD_MEMBERSHIP
508afe61c15SRodney W. Grimesoption:
509afe61c15SRodney W. Grimes.Bd -literal
510afe61c15SRodney W. Grimesstruct ip_mreq mreq;
511afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
512afe61c15SRodney W. Grimes.Ed
5130c3a1746SMike Pritchard.Pp
514afe61c15SRodney W. Grimeswhere
515afe61c15SRodney W. Grimes.Fa mreq
516afe61c15SRodney W. Grimesis the following structure:
517afe61c15SRodney W. Grimes.Bd -literal
518afe61c15SRodney W. Grimesstruct ip_mreq {
5190c3a1746SMike Pritchard    struct in_addr imr_multiaddr; /* IP multicast address of group */
5200c3a1746SMike Pritchard    struct in_addr imr_interface; /* local IP address of interface */
521afe61c15SRodney W. Grimes}
522afe61c15SRodney W. Grimes.Ed
5230c3a1746SMike Pritchard.Pp
524bf7f20c2SRuslan Ermilov.Va imr_interface
525108ad5bdSBruce M Simpsonshould be set to the
526afe61c15SRodney W. Grimes.Tn IP
527afe61c15SRodney W. Grimesaddress of a particular multicast-capable interface if
528afe61c15SRodney W. Grimesthe host is multihomed.
529108ad5bdSBruce M SimpsonIt may be set to
530108ad5bdSBruce M Simpson.Dv INADDR_ANY
531108ad5bdSBruce M Simpsonto choose the default interface, although this is not recommended;
532108ad5bdSBruce M Simpsonthis is considered to be the first interface corresponding
533108ad5bdSBruce M Simpsonto the default route.
534108ad5bdSBruce M SimpsonOtherwise, the first multicast-capable interface
535108ad5bdSBruce M Simpsonconfigured in the system will be used.
536108ad5bdSBruce M Simpson.Pp
537108ad5bdSBruce M SimpsonPrior to
538108ad5bdSBruce M Simpson.Fx 7.0 ,
53926c3ef53SBruce M Simpsonif the
540bf7f20c2SRuslan Ermilov.Va imr_interface
54126c3ef53SBruce M Simpsonmember is within the network range
54226c3ef53SBruce M Simpson.Li 0.0.0.0/8 ,
54326c3ef53SBruce M Simpsonit is treated as an interface index in the system interface MIB,
54426c3ef53SBruce M Simpsonas per the RIP Version 2 MIB Extension (RFC-1724).
545108ad5bdSBruce M SimpsonIn versions of
546108ad5bdSBruce M Simpson.Fx
547108ad5bdSBruce M Simpsonsince 7.0, this behavior is no longer supported.
548108ad5bdSBruce M SimpsonDevelopers should
549108ad5bdSBruce M Simpsoninstead use the RFC 3678 multicast source filter APIs; in particular,
550108ad5bdSBruce M Simpson.Dv MCAST_JOIN_GROUP .
55126c3ef53SBruce M Simpson.Pp
552afe61c15SRodney W. GrimesUp to
553afe61c15SRodney W. Grimes.Dv IP_MAX_MEMBERSHIPS
55424135314SBruce M Simpsonmemberships may be added on a single socket.
55504bcf5a9SBruce M SimpsonMembership is associated with a single interface;
55604bcf5a9SBruce M Simpsonprograms running on multihomed hosts may need to
55704bcf5a9SBruce M Simpsonjoin the same group on more than one interface.
55804bcf5a9SBruce M Simpson.Pp
559afe61c15SRodney W. GrimesTo drop a membership, use:
560afe61c15SRodney W. Grimes.Bd -literal
561afe61c15SRodney W. Grimesstruct ip_mreq mreq;
562afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
563afe61c15SRodney W. Grimes.Ed
5640c3a1746SMike Pritchard.Pp
565afe61c15SRodney W. Grimeswhere
566afe61c15SRodney W. Grimes.Fa mreq
567afe61c15SRodney W. Grimescontains the same values as used to add the membership.
568afe61c15SRodney W. GrimesMemberships are dropped when the socket is closed or the process exits.
569108ad5bdSBruce M Simpson.\" TODO: Update this piece when IPv4 source-address selection is implemented.
570108ad5bdSBruce M Simpson.Pp
571108ad5bdSBruce M SimpsonThe IGMP protocol uses the primary IP address of the interface
572108ad5bdSBruce M Simpsonas its identifier for group membership.
573108ad5bdSBruce M SimpsonThis is the first IP address configured on the interface.
574108ad5bdSBruce M SimpsonIf this address is removed or changed, the results are
575108ad5bdSBruce M Simpsonundefined, as the IGMP membership state will then be inconsistent.
576108ad5bdSBruce M SimpsonIf multiple IP aliases are configured on the same interface,
577108ad5bdSBruce M Simpsonthey will be ignored.
578108ad5bdSBruce M Simpson.Pp
579108ad5bdSBruce M SimpsonThis shortcoming was addressed in IPv6; MLDv2 requires
580108ad5bdSBruce M Simpsonthat the unique link-local address for an interface is
581108ad5bdSBruce M Simpsonused to identify an MLDv2 listener.
582108ad5bdSBruce M Simpson.Ss "Source-Specific Multicast Options"
583108ad5bdSBruce M SimpsonSince
584108ad5bdSBruce M Simpson.Fx 8.0 ,
585108ad5bdSBruce M Simpsonthe use of Source-Specific Multicast (SSM) is supported.
586108ad5bdSBruce M SimpsonThese extensions require an IGMPv3 multicast router in order to
587108ad5bdSBruce M Simpsonmake best use of them.
588108ad5bdSBruce M SimpsonIf a legacy multicast router is present on the link,
589108ad5bdSBruce M Simpson.Fx
590108ad5bdSBruce M Simpsonwill simply downgrade to the version of IGMP spoken by the router,
591108ad5bdSBruce M Simpsonand the benefits of source filtering on the upstream link
592108ad5bdSBruce M Simpsonwill not be present, although the kernel will continue to
593108ad5bdSBruce M Simpsonsquelch transmissions from blocked sources.
594108ad5bdSBruce M Simpson.Pp
595108ad5bdSBruce M SimpsonEach group membership on a socket now has a filter mode:
596108ad5bdSBruce M Simpson.Bl -tag -width MCAST_EXCLUDE
597108ad5bdSBruce M Simpson.It Dv MCAST_EXCLUDE
598108ad5bdSBruce M SimpsonDatagrams sent to this group are accepted,
599108ad5bdSBruce M Simpsonunless the source is in a list of blocked source addresses.
600108ad5bdSBruce M Simpson.It Dv MCAST_INCLUDE
601108ad5bdSBruce M SimpsonDatagrams sent to this group are accepted
602108ad5bdSBruce M Simpsononly if the source is in a list of accepted source addresses.
603108ad5bdSBruce M Simpson.El
604108ad5bdSBruce M Simpson.Pp
605108ad5bdSBruce M SimpsonGroups joined using the legacy
606108ad5bdSBruce M Simpson.Dv IP_ADD_MEMBERSHIP
607108ad5bdSBruce M Simpsonoption are placed in exclusive-mode,
608108ad5bdSBruce M Simpsonand are able to request that certain sources are blocked or allowed.
609108ad5bdSBruce M SimpsonThis is known as the
610108ad5bdSBruce M Simpson.Em delta-based API .
611108ad5bdSBruce M Simpson.Pp
612108ad5bdSBruce M SimpsonTo block a multicast source on an existing group membership:
613108ad5bdSBruce M Simpson.Bd -literal
614108ad5bdSBruce M Simpsonstruct ip_mreq_source mreqs;
615108ad5bdSBruce M Simpsonsetsockopt(s, IPPROTO_IP, IP_BLOCK_SOURCE, &mreqs, sizeof(mreqs));
616108ad5bdSBruce M Simpson.Ed
617108ad5bdSBruce M Simpson.Pp
618108ad5bdSBruce M Simpsonwhere
619108ad5bdSBruce M Simpson.Fa mreqs
620108ad5bdSBruce M Simpsonis the following structure:
621108ad5bdSBruce M Simpson.Bd -literal
622108ad5bdSBruce M Simpsonstruct ip_mreq_source {
623108ad5bdSBruce M Simpson    struct in_addr imr_multiaddr; /* IP multicast address of group */
624108ad5bdSBruce M Simpson    struct in_addr imr_sourceaddr; /* IP address of source */
625108ad5bdSBruce M Simpson    struct in_addr imr_interface; /* local IP address of interface */
626108ad5bdSBruce M Simpson}
627108ad5bdSBruce M Simpson.Ed
628108ad5bdSBruce M Simpson.Va imr_sourceaddr
629108ad5bdSBruce M Simpsonshould be set to the address of the source to be blocked.
630108ad5bdSBruce M Simpson.Pp
631108ad5bdSBruce M SimpsonTo unblock a multicast source on an existing group:
632108ad5bdSBruce M Simpson.Bd -literal
633108ad5bdSBruce M Simpsonstruct ip_mreq_source mreqs;
634108ad5bdSBruce M Simpsonsetsockopt(s, IPPROTO_IP, IP_UNBLOCK_SOURCE, &mreqs, sizeof(mreqs));
635108ad5bdSBruce M Simpson.Ed
636108ad5bdSBruce M Simpson.Pp
637108ad5bdSBruce M SimpsonThe
638108ad5bdSBruce M Simpson.Dv IP_BLOCK_SOURCE
639108ad5bdSBruce M Simpsonand
640108ad5bdSBruce M Simpson.Dv IP_UNBLOCK_SOURCE
641108ad5bdSBruce M Simpsonoptions are
642108ad5bdSBruce M Simpson.Em not permitted
643108ad5bdSBruce M Simpsonfor inclusive-mode group memberships.
644108ad5bdSBruce M Simpson.Pp
645108ad5bdSBruce M SimpsonTo join a multicast group in
646108ad5bdSBruce M Simpson.Dv MCAST_INCLUDE
647108ad5bdSBruce M Simpsonmode with a single source,
648108ad5bdSBruce M Simpsonor add another source to an existing inclusive-mode membership:
649108ad5bdSBruce M Simpson.Bd -literal
650108ad5bdSBruce M Simpsonstruct ip_mreq_source mreqs;
651108ad5bdSBruce M Simpsonsetsockopt(s, IPPROTO_IP, IP_ADD_SOURCE_MEMBERSHIP, &mreqs, sizeof(mreqs));
652108ad5bdSBruce M Simpson.Ed
653108ad5bdSBruce M Simpson.Pp
654108ad5bdSBruce M SimpsonTo leave a single source from an existing group in inclusive mode:
655108ad5bdSBruce M Simpson.Bd -literal
656108ad5bdSBruce M Simpsonstruct ip_mreq_source mreqs;
657108ad5bdSBruce M Simpsonsetsockopt(s, IPPROTO_IP, IP_DROP_SOURCE_MEMBERSHIP, &mreqs, sizeof(mreqs));
658108ad5bdSBruce M Simpson.Ed
659108ad5bdSBruce M SimpsonIf this is the last accepted source for the group, the membership
660108ad5bdSBruce M Simpsonwill be dropped.
661108ad5bdSBruce M Simpson.Pp
662108ad5bdSBruce M SimpsonThe
663108ad5bdSBruce M Simpson.Dv IP_ADD_SOURCE_MEMBERSHIP
664108ad5bdSBruce M Simpsonand
665108ad5bdSBruce M Simpson.Dv IP_DROP_SOURCE_MEMBERSHIP
666108ad5bdSBruce M Simpsonoptions are
667108ad5bdSBruce M Simpson.Em not accepted
668108ad5bdSBruce M Simpsonfor exclusive-mode group memberships.
669108ad5bdSBruce M SimpsonHowever, both exclusive and inclusive mode memberships
670108ad5bdSBruce M Simpsonsupport the use of the
671108ad5bdSBruce M Simpson.Em full-state API
672108ad5bdSBruce M Simpsondocumented in RFC 3678.
673108ad5bdSBruce M SimpsonFor management of source filter lists using this API,
674108ad5bdSBruce M Simpsonplease refer to
675108ad5bdSBruce M Simpson.Xr sourcefilter 3 .
676d10910e6SBruce M Simpson.Pp
677d10910e6SBruce M SimpsonThe sysctl settings
678d10910e6SBruce M Simpson.Va net.inet.ip.mcast.maxsocksrc
679d10910e6SBruce M Simpsonand
680d10910e6SBruce M Simpson.Va net.inet.ip.mcast.maxgrpsrc
681d10910e6SBruce M Simpsonare used to specify an upper limit on the number of per-socket and per-group
682d10910e6SBruce M Simpsonsource filter entries which the kernel may allocate.
683afe61c15SRodney W. Grimes.\"-----------------------
684afe61c15SRodney W. Grimes.Ss "Raw IP Sockets"
685afe61c15SRodney W. Grimes.Pp
686afe61c15SRodney W. GrimesRaw
687afe61c15SRodney W. Grimes.Tn IP
688afe61c15SRodney W. Grimessockets are connectionless,
689afe61c15SRodney W. Grimesand are normally used with the
690edf0e5b3SMike Pritchard.Xr sendto 2
691afe61c15SRodney W. Grimesand
692edf0e5b3SMike Pritchard.Xr recvfrom 2
693afe61c15SRodney W. Grimescalls, though the
694afe61c15SRodney W. Grimes.Xr connect 2
695afe61c15SRodney W. Grimescall may also be used to fix the destination for future
696afe61c15SRodney W. Grimespackets (in which case the
697afe61c15SRodney W. Grimes.Xr read 2
698afe61c15SRodney W. Grimesor
699afe61c15SRodney W. Grimes.Xr recv 2
700afe61c15SRodney W. Grimesand
701afe61c15SRodney W. Grimes.Xr write 2
702afe61c15SRodney W. Grimesor
703afe61c15SRodney W. Grimes.Xr send 2
704afe61c15SRodney W. Grimessystem calls may be used).
705afe61c15SRodney W. Grimes.Pp
706afe61c15SRodney W. GrimesIf
707afe61c15SRodney W. Grimes.Fa proto
708afe61c15SRodney W. Grimesis 0, the default protocol
709afe61c15SRodney W. Grimes.Dv IPPROTO_RAW
710afe61c15SRodney W. Grimesis used for outgoing
711afe61c15SRodney W. Grimespackets, and only incoming packets destined for that protocol
712afe61c15SRodney W. Grimesare received.
713afe61c15SRodney W. GrimesIf
714afe61c15SRodney W. Grimes.Fa proto
715afe61c15SRodney W. Grimesis non-zero, that protocol number will be used on outgoing packets
716afe61c15SRodney W. Grimesand to filter incoming packets.
717afe61c15SRodney W. Grimes.Pp
718afe61c15SRodney W. GrimesOutgoing packets automatically have an
719afe61c15SRodney W. Grimes.Tn IP
720afe61c15SRodney W. Grimesheader prepended to
721afe61c15SRodney W. Grimesthem (based on the destination address and the protocol
722afe61c15SRodney W. Grimesnumber the socket is created with),
723afe61c15SRodney W. Grimesunless the
724afe61c15SRodney W. Grimes.Dv IP_HDRINCL
725afe61c15SRodney W. Grimesoption has been set.
726afe61c15SRodney W. GrimesIncoming packets are received with
727afe61c15SRodney W. Grimes.Tn IP
728afe61c15SRodney W. Grimesheader and options intact.
729afe61c15SRodney W. Grimes.Pp
730afe61c15SRodney W. Grimes.Dv IP_HDRINCL
731afe61c15SRodney W. Grimesindicates the complete IP header is included with the data
732afe61c15SRodney W. Grimesand may be used only with the
733afe61c15SRodney W. Grimes.Dv SOCK_RAW
734afe61c15SRodney W. Grimestype.
735afe61c15SRodney W. Grimes.Bd -literal
736ddbd0698SBruce Evans#include <netinet/in_systm.h>
737afe61c15SRodney W. Grimes#include <netinet/ip.h>
738afe61c15SRodney W. Grimes
739afe61c15SRodney W. Grimesint hincl = 1;                  /* 1 = on, 0 = off */
740afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_HDRINCL, &hincl, sizeof(hincl));
741afe61c15SRodney W. Grimes.Ed
7420c3a1746SMike Pritchard.Pp
743afe61c15SRodney W. GrimesUnlike previous
7448ce3f3ddSRuslan Ermilov.Bx
745afe61c15SRodney W. Grimesreleases, the program must set all
746afe61c15SRodney W. Grimesthe fields of the IP header, including the following:
747afe61c15SRodney W. Grimes.Bd -literal
748afe61c15SRodney W. Grimesip->ip_v = IPVERSION;
749afe61c15SRodney W. Grimesip->ip_hl = hlen >> 2;
750afe61c15SRodney W. Grimesip->ip_id = 0;  /* 0 means kernel set appropriate value */
751afe61c15SRodney W. Grimesip->ip_off = offset;
752afe61c15SRodney W. Grimes.Ed
7530c3a1746SMike Pritchard.Pp
754538a4c1fSBruce M SimpsonThe
755538a4c1fSBruce M Simpson.Va ip_len
756538a4c1fSBruce M Simpsonand
757538a4c1fSBruce M Simpson.Va ip_off
758538a4c1fSBruce M Simpsonfields
759538a4c1fSBruce M Simpson.Em must
760538a4c1fSBruce M Simpsonbe provided in host byte order.
7616f5bc70aSBruce M SimpsonAll other fields must be provided in network byte order.
7626f5bc70aSBruce M SimpsonSee
7635c8e5f24SRuslan Ermilov.Xr byteorder 3
7646f5bc70aSBruce M Simpsonfor more information on network byte order.
765538a4c1fSBruce M SimpsonIf the
766538a4c1fSBruce M Simpson.Va ip_id
767538a4c1fSBruce M Simpsonfield is set to 0 then the kernel will choose an
768c48524c2SMike Pritchardappropriate value.
769afe61c15SRodney W. GrimesIf the header source address is set to
770afe61c15SRodney W. Grimes.Dv INADDR_ANY ,
771afe61c15SRodney W. Grimesthe kernel will choose an appropriate address.
772ef0180edSDima Dorfman.Sh ERRORS
773afe61c15SRodney W. GrimesA socket operation may fail with one of the following errors returned:
774ef0180edSDima Dorfman.Bl -tag -width Er
775afe61c15SRodney W. Grimes.It Bq Er EISCONN
776afe61c15SRodney W. Grimeswhen trying to establish a connection on a socket which
777afe61c15SRodney W. Grimesalready has one, or when trying to send a datagram with the destination
778afe61c15SRodney W. Grimesaddress specified and the socket is already connected;
779afe61c15SRodney W. Grimes.It Bq Er ENOTCONN
780afe61c15SRodney W. Grimeswhen trying to send a datagram, but
7810227791bSRuslan Ermilovno destination address is specified, and the socket has not been
782afe61c15SRodney W. Grimesconnected;
783afe61c15SRodney W. Grimes.It Bq Er ENOBUFS
784afe61c15SRodney W. Grimeswhen the system runs out of memory for
785afe61c15SRodney W. Grimesan internal data structure;
786afe61c15SRodney W. Grimes.It Bq Er EADDRNOTAVAIL
787afe61c15SRodney W. Grimeswhen an attempt is made to create a
788afe61c15SRodney W. Grimessocket with a network address for which no network interface
789afe61c15SRodney W. Grimesexists.
7907bdf965dSAlexander Langer.It Bq Er EACCES
791afe61c15SRodney W. Grimeswhen an attempt is made to create
792afe61c15SRodney W. Grimesa raw IP socket by a non-privileged process.
793afe61c15SRodney W. Grimes.El
794afe61c15SRodney W. Grimes.Pp
795afe61c15SRodney W. GrimesThe following errors specific to
796afe61c15SRodney W. Grimes.Tn IP
797afe61c15SRodney W. Grimesmay occur when setting or getting
798afe61c15SRodney W. Grimes.Tn IP
799afe61c15SRodney W. Grimesoptions:
8008d22ff75SRuslan Ermilov.Bl -tag -width Er
801afe61c15SRodney W. Grimes.It Bq Er EINVAL
802afe61c15SRodney W. GrimesAn unknown socket option name was given.
803afe61c15SRodney W. Grimes.It Bq Er EINVAL
804afe61c15SRodney W. GrimesThe IP option field was improperly formed;
805afe61c15SRodney W. Grimesan option field was shorter than the minimum value
806afe61c15SRodney W. Grimesor longer than the option buffer provided.
807afe61c15SRodney W. Grimes.El
8086f5bc70aSBruce M Simpson.Pp
8096f5bc70aSBruce M SimpsonThe following errors may occur when attempting to send
8106f5bc70aSBruce M Simpson.Tn IP
8116f5bc70aSBruce M Simpsondatagrams via a
8126f5bc70aSBruce M Simpson.Dq raw socket
8136f5bc70aSBruce M Simpsonwith the
814538a4c1fSBruce M Simpson.Dv IP_HDRINCL
8156f5bc70aSBruce M Simpsonoption set:
8166f5bc70aSBruce M Simpson.Bl -tag -width Er
8176f5bc70aSBruce M Simpson.It Bq Er EINVAL
818538a4c1fSBruce M SimpsonThe user-supplied
819538a4c1fSBruce M Simpson.Va ip_len
820538a4c1fSBruce M Simpsonfield was not equal to the length of the datagram written to the socket.
8216f5bc70aSBruce M Simpson.El
822afe61c15SRodney W. Grimes.Sh SEE ALSO
823afe61c15SRodney W. Grimes.Xr getsockopt 2 ,
824afe61c15SRodney W. Grimes.Xr recv 2 ,
8250b992c1dSWolfram Schneider.Xr send 2 ,
8265c8e5f24SRuslan Ermilov.Xr byteorder 3 ,
827afe61c15SRodney W. Grimes.Xr icmp 4 ,
828d10910e6SBruce M Simpson.Xr igmp 4 ,
8290b992c1dSWolfram Schneider.Xr inet 4 ,
83004bcf5a9SBruce M Simpson.Xr intro 4 ,
831108ad5bdSBruce M Simpson.Xr multicast 4 ,
832108ad5bdSBruce M Simpson.Xr sourcefilter 3
833108ad5bdSBruce M Simpson.Rs
834108ad5bdSBruce M Simpson.%A D. Thaler
835108ad5bdSBruce M Simpson.%A B. Fenner
836108ad5bdSBruce M Simpson.%A B. Quinn
837108ad5bdSBruce M Simpson.%T "Socket Interface Extensions for Multicast Source Filters"
838108ad5bdSBruce M Simpson.%N RFC 3678
839108ad5bdSBruce M Simpson.%D Jan 2004
840108ad5bdSBruce M Simpson.Re
841afe61c15SRodney W. Grimes.Sh HISTORY
842afe61c15SRodney W. GrimesThe
843afe61c15SRodney W. Grimes.Nm
844afe61c15SRodney W. Grimesprotocol appeared in
845afe61c15SRodney W. Grimes.Bx 4.2 .
84671498f30SBruce M SimpsonThe
84771498f30SBruce M Simpson.Vt ip_mreqn
84871498f30SBruce M Simpsonstructure appeared in
84971498f30SBruce M Simpson.Tn Linux 2.4 .
850*95386930SAndre Oppermann.Sh BUGS
851*95386930SAndre OppermannBefore
852*95386930SAndre Oppermann.Fx 10.0 packets received on raw IP sockets had the
853*95386930SAndre Oppermann.Va ip_hl
854*95386930SAndre Oppermannsubtracted from the
855*95386930SAndre Oppermann.Va ip_len field.
856