xref: /freebsd/share/man/man4/ip.4 (revision 5090c7544f2817178c5d6eb3c684481b6606c0f6)
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.\"
355090c754SAndre Oppermann.Dd August 22, 2005
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.
1205090c754SAndre OppermannThis 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
124afe61c15SRodney W. GrimesIf the
125afe61c15SRodney W. Grimes.Dv IP_RECVDSTADDR
126afe61c15SRodney W. Grimesoption is enabled on a
127afe61c15SRodney W. Grimes.Dv SOCK_DGRAM
128afe61c15SRodney W. Grimessocket,
129afe61c15SRodney W. Grimesthe
130edf0e5b3SMike Pritchard.Xr recvmsg 2
131afe61c15SRodney W. Grimescall will return the destination
132afe61c15SRodney W. Grimes.Tn IP
133afe61c15SRodney W. Grimesaddress for a
134afe61c15SRodney W. Grimes.Tn UDP
135afe61c15SRodney W. Grimesdatagram.
1368d22ff75SRuslan ErmilovThe
1378d22ff75SRuslan Ermilov.Vt msg_control
1388d22ff75SRuslan Ermilovfield in the
1398d22ff75SRuslan Ermilov.Vt msghdr
1408d22ff75SRuslan Ermilovstructure points to a buffer
1418d22ff75SRuslan Ermilovthat contains a
1428d22ff75SRuslan Ermilov.Vt cmsghdr
1438d22ff75SRuslan Ermilovstructure followed by the
144afe61c15SRodney W. Grimes.Tn IP
145afe61c15SRodney W. Grimesaddress.
1468d22ff75SRuslan ErmilovThe
1478d22ff75SRuslan Ermilov.Vt cmsghdr
1488d22ff75SRuslan Ermilovfields have the following values:
149afe61c15SRodney W. Grimes.Bd -literal
150afe61c15SRodney W. Grimescmsg_len = sizeof(struct in_addr)
151afe61c15SRodney W. Grimescmsg_level = IPPROTO_IP
152afe61c15SRodney W. Grimescmsg_type = IP_RECVDSTADDR
153afe61c15SRodney W. Grimes.Ed
1547ee32b9fSPeter Wemm.Pp
155c557ae16SIan DowseThe source address to be used for outgoing
156c557ae16SIan Dowse.Tn UDP
157c557ae16SIan Dowsedatagrams on a socket that is not bound to a specific
158c557ae16SIan Dowse.Tn IP
159c557ae16SIan Dowseaddress can be specified as ancillary data with a type code of
160c557ae16SIan Dowse.Dv IP_SENDSRCADDR .
161c557ae16SIan DowseThe msg_control field in the msghdr structure should point to a buffer
1628d22ff75SRuslan Ermilovthat contains a
1638d22ff75SRuslan Ermilov.Vt cmsghdr
1648d22ff75SRuslan Ermilovstructure followed by the
165c557ae16SIan Dowse.Tn IP
166c557ae16SIan Dowseaddress.
167c557ae16SIan DowseThe cmsghdr fields should have the following values:
168c557ae16SIan Dowse.Bd -literal
169c557ae16SIan Dowsecmsg_len = sizeof(struct in_addr)
170c557ae16SIan Dowsecmsg_level = IPPROTO_IP
171c557ae16SIan Dowsecmsg_type = IP_SENDSRCADDR
172c557ae16SIan Dowse.Ed
173c557ae16SIan Dowse.Pp
174c557ae16SIan DowseFor convenience,
175c557ae16SIan Dowse.Dv IP_SENDSRCADDR
176c557ae16SIan Dowseis defined to have the same value as
177c557ae16SIan Dowse.Dv IP_RECVDSTADDR ,
178c557ae16SIan Dowseso the
179c557ae16SIan Dowse.Dv IP_RECVDSTADDR
180c557ae16SIan Dowsecontrol message from
181c557ae16SIan Dowse.Xr recvmsg 2
182c557ae16SIan Dowsecan be used directly as a control message for
183c557ae16SIan Dowse.Xr sendmsg 2 .
184c557ae16SIan Dowse.Pp
1853b5f87e6SMatthew N. DoddIf the
1868afa2304SBruce M Simpson.Dv IP_ONESBCAST
1878afa2304SBruce M Simpsonoption is enabled on a
1888afa2304SBruce M Simpson.Dv SOCK_DGRAM
1898afa2304SBruce M Simpsonor a
1908afa2304SBruce M Simpson.Dv SOCK_RAW
1918afa2304SBruce M Simpsonsocket, the destination address of outgoing
1928afa2304SBruce M Simpsonbroadcast datagrams on that socket will be forced
1938afa2304SBruce M Simpsonto the undirected broadcast address,
1948afa2304SBruce M Simpson.Dv INADDR_BROADCAST ,
1958afa2304SBruce M Simpsonbefore transmission.
1968afa2304SBruce M SimpsonThis is in contrast to the default behavior of the
1978afa2304SBruce M Simpsonsystem, which is to transmit undirected broadcasts
1988afa2304SBruce M Simpsonvia the first network interface with the
1998afa2304SBruce M Simpson.Dv IFF_BROADCAST flag set.
2008afa2304SBruce M Simpson.Pp
2018afa2304SBruce M SimpsonThis option allows applications to choose which
2028afa2304SBruce M Simpsoninterface is used to transmit an undirected broadcast
2038afa2304SBruce M Simpsondatagram.
2048afa2304SBruce M SimpsonFor example, the following code would force an
2058afa2304SBruce M Simpsonundirected broadcast to be transmitted via the interface
2068afa2304SBruce M Simpsonconfigured with the broadcast address 192.168.2.255:
2078afa2304SBruce M Simpson.Bd -literal
2088afa2304SBruce M Simpsonchar msg[512];
2098afa2304SBruce M Simpsonstruct sockaddr_in sin;
2108afa2304SBruce M Simpsonu_char onesbcast = 1;	/* 0 = disable (default), 1 = enable */
2118afa2304SBruce M Simpson
2128afa2304SBruce M Simpsonsetsockopt(s, IPPROTO_IP, IP_ONESBCAST, &onesbcast, sizeof(onesbcast));
2138afa2304SBruce M Simpsonsin.sin_addr.s_addr = inet_addr("192.168.2.255");
2148afa2304SBruce M Simpsonsin.sin_port = htons(1234);
2158afa2304SBruce M Simpsonsendto(s, msg, sizeof(msg), 0, &sin, sizeof(sin));
2168afa2304SBruce M Simpson.Ed
2178afa2304SBruce M Simpson.Pp
2188afa2304SBruce M SimpsonIt is the application's responsibility to set the
2198afa2304SBruce M Simpson.Dv IP_TTL option
2208afa2304SBruce M Simpsonto an appropriate value in order to prevent broadcast storms.
2218afa2304SBruce M SimpsonThe application must have sufficient credentials to set the
2228afa2304SBruce M Simpson.Dv SO_BROADCAST
2238afa2304SBruce M Simpsonsocket level option, otherwise the
2248afa2304SBruce M Simpson.Dv IP_ONESBCAST option has no effect.
2258afa2304SBruce M Simpson.Pp
2268afa2304SBruce M SimpsonIf the
2274957466bSMatthew N. Dodd.Dv IP_RECVTTL
2284957466bSMatthew N. Doddoption is enabled on a
2294957466bSMatthew N. Dodd.Dv SOCK_DGRAM
2304957466bSMatthew N. Doddsocket, the
2314957466bSMatthew N. Dodd.Xr recvmsg 2
2324957466bSMatthew N. Doddcall will return the
2334957466bSMatthew N. Dodd.Tn IP
2344957466bSMatthew N. Dodd.Tn TTL
2354957466bSMatthew N. Dodd(time to live) field for a
2364957466bSMatthew N. Dodd.Tn UDP
2374957466bSMatthew N. Dodddatagram.
2384957466bSMatthew N. DoddThe msg_control field in the msghdr structure points to a buffer
2394957466bSMatthew N. Doddthat contains a cmsghdr structure followed by the
2404957466bSMatthew N. Dodd.Tn TTL .
2414957466bSMatthew N. DoddThe cmsghdr fields have the following values:
2424957466bSMatthew N. Dodd.Bd -literal
2434957466bSMatthew N. Doddcmsg_len = sizeof(u_char)
2444957466bSMatthew N. Doddcmsg_level = IPPROTO_IP
2454957466bSMatthew N. Doddcmsg_type = IP_RECVTTL
2464957466bSMatthew N. Dodd.Ed
2474957466bSMatthew N. Dodd.Pp
2484957466bSMatthew N. DoddIf the
2493b5f87e6SMatthew N. Dodd.Dv IP_RECVIF
2503b5f87e6SMatthew N. Doddoption is enabled on a
2513b5f87e6SMatthew N. Dodd.Dv SOCK_DGRAM
2523b5f87e6SMatthew N. Doddsocket, the
2533b5f87e6SMatthew N. Dodd.Xr recvmsg 2
2548d22ff75SRuslan Ermilovcall returns a
2558d22ff75SRuslan Ermilov.Vt "struct sockaddr_dl"
2568d22ff75SRuslan Ermilovcorresponding to the interface on which the
2578d22ff75SRuslan Ermilovpacket was received.
2588d22ff75SRuslan ErmilovThe
2598d22ff75SRuslan Ermilov.Va msg_control
2608d22ff75SRuslan Ermilovfield in the
2618d22ff75SRuslan Ermilov.Vt msghdr
2628d22ff75SRuslan Ermilovstructure points to a buffer that contains a
2638d22ff75SRuslan Ermilov.Vt cmsghdr
2648d22ff75SRuslan Ermilovstructure followed by the
2658d22ff75SRuslan Ermilov.Vt "struct sockaddr_dl" .
2668d22ff75SRuslan ErmilovThe
2678d22ff75SRuslan Ermilov.Vt cmsghdr
2688d22ff75SRuslan Ermilovfields have the following values:
2693b5f87e6SMatthew N. Dodd.Bd -literal
2703b5f87e6SMatthew N. Doddcmsg_len = sizeof(struct sockaddr_dl)
2713b5f87e6SMatthew N. Doddcmsg_level = IPPROTO_IP
2723b5f87e6SMatthew N. Doddcmsg_type = IP_RECVIF
2733b5f87e6SMatthew N. Dodd.Ed
2743b5f87e6SMatthew N. Dodd.Pp
2757ee32b9fSPeter Wemm.Dv IP_PORTRANGE
2767ee32b9fSPeter Wemmmay be used to set the port range used for selecting a local port number
2776d249eeeSSheldon Hearnon a socket with an unspecified (zero) port number.
2786d249eeeSSheldon HearnIt has the following
2797ee32b9fSPeter Wemmpossible values:
2807ee32b9fSPeter Wemm.Bl -tag -width IP_PORTRANGE_DEFAULT
2817ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_DEFAULT
2827ee32b9fSPeter Wemmuse the default range of values, normally
28374c0361aSMike Silbersack.Dv IPPORT_HIFIRSTAUTO
2847ee32b9fSPeter Wemmthrough
28574c0361aSMike Silbersack.Dv IPPORT_HILASTAUTO .
2867ee32b9fSPeter WemmThis is adjustable through the sysctl setting:
287ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.first
2887ee32b9fSPeter Wemmand
289ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.last .
2907ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_HIGH
2917ee32b9fSPeter Wemmuse a high range of values, normally
2927ee32b9fSPeter Wemm.Dv IPPORT_HIFIRSTAUTO
2937ee32b9fSPeter Wemmand
2947ee32b9fSPeter Wemm.Dv IPPORT_HILASTAUTO .
2957ee32b9fSPeter WemmThis is adjustable through the sysctl setting:
296ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.hifirst
2977ee32b9fSPeter Wemmand
298ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.hilast .
2997ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_LOW
3007ee32b9fSPeter Wemmuse a low range of ports, which are normally restricted to
3017ee32b9fSPeter Wemmprivileged processes on
3027ee32b9fSPeter Wemm.Ux
3038d22ff75SRuslan Ermilovsystems.
3048d22ff75SRuslan ErmilovThe range is normally from
305ace5be68SRuslan Ermilov.Dv IPPORT_RESERVED
306ace5be68SRuslan Ermilov\- 1 down to
3078f5e8232SBen Smithurst.Li IPPORT_RESERVEDSTART
3088f5e8232SBen Smithurstin descending order.
3098f5e8232SBen SmithurstThis is adjustable through the sysctl setting:
310ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.lowfirst
3118f5e8232SBen Smithurstand
312ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.lowlast .
3137ee32b9fSPeter Wemm.El
314718b17bbSCrist J. Clark.Pp
315718b17bbSCrist J. ClarkThe range of privileged ports which only may be opened by
316718b17bbSCrist J. Clarkroot-owned processes may be modified by the
317ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.reservedlow
318718b17bbSCrist J. Clarkand
319ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.reservedhigh
320718b17bbSCrist J. Clarksysctl settings.
321718b17bbSCrist J. ClarkThe values default to the traditional range,
322718b17bbSCrist J. Clark0 through
323ace5be68SRuslan Ermilov.Dv IPPORT_RESERVED
324ace5be68SRuslan Ermilov\- 1
325718b17bbSCrist J. Clark(0 through 1023), respectively.
326718b17bbSCrist J. ClarkNote that these settings do not affect and are not accounted for in the
327718b17bbSCrist J. Clarkuse or calculation of the other
328ace5be68SRuslan Ermilov.Va net.inet.ip.portrange
329718b17bbSCrist J. Clarkvalues above.
330ace5be68SRuslan ErmilovChanging these values departs from
331ace5be68SRuslan Ermilov.Ux
332ace5be68SRuslan Ermilovtradition and has security
333ace5be68SRuslan Ermilovconsequences that the administrator should carefully evaluate before
334718b17bbSCrist J. Clarkmodifying these settings.
335fe9892eaSMike Silbersack.Pp
336fe9892eaSMike SilbersackPorts are allocated at random within the specified port range in order
337bf7f20c2SRuslan Ermilovto increase the difficulty of random spoofing attacks.
338c48524c2SMike PritchardIn scenarios such as benchmarking, this behavior may be undesirable.
339bf7f20c2SRuslan ErmilovIn these cases,
340fe9892eaSMike Silbersack.Va net.inet.ip.portrange.randomized
341fe9892eaSMike Silbersackcan be used to toggle randomization off.
3426ee79c59SMaxim KonovalovIf more than
3436ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomcps
3446ee79c59SMaxim Konovalovports have been allocated in the last second, then return to sequential
3456ee79c59SMaxim Konovalovport allocation.
3466ee79c59SMaxim KonovalovReturn to random allocation only once the current port allocation rate
3476ee79c59SMaxim Konovalovdrops below
3486ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomcps
3496ee79c59SMaxim Konovalovfor at least
3506ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomtime
3516ee79c59SMaxim Konovalovseconds.
3526ee79c59SMaxim KonovalovThe default values for
3536ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomcps
3546ee79c59SMaxim Konovalovand
3556ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomtime
3566ee79c59SMaxim Konovalovare 10 port allocations per second and 45 seconds correspondingly.
357afe61c15SRodney W. Grimes.Ss "Multicast Options"
358afe61c15SRodney W. Grimes.Pp
359afe61c15SRodney W. Grimes.Tn IP
360afe61c15SRodney W. Grimesmulticasting is supported only on
361afe61c15SRodney W. Grimes.Dv AF_INET
362afe61c15SRodney W. Grimessockets of type
363afe61c15SRodney W. Grimes.Dv SOCK_DGRAM
364afe61c15SRodney W. Grimesand
365afe61c15SRodney W. Grimes.Dv SOCK_RAW ,
366afe61c15SRodney W. Grimesand only on networks where the interface
367afe61c15SRodney W. Grimesdriver supports multicasting.
368afe61c15SRodney W. Grimes.Pp
369afe61c15SRodney W. GrimesThe
370afe61c15SRodney W. Grimes.Dv IP_MULTICAST_TTL
371afe61c15SRodney W. Grimesoption changes the time-to-live (TTL)
372afe61c15SRodney W. Grimesfor outgoing multicast datagrams
373afe61c15SRodney W. Grimesin order to control the scope of the multicasts:
374afe61c15SRodney W. Grimes.Bd -literal
375afe61c15SRodney W. Grimesu_char ttl;	/* range: 0 to 255, default = 1 */
376afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl));
377afe61c15SRodney W. Grimes.Ed
3780c3a1746SMike Pritchard.Pp
379afe61c15SRodney W. GrimesDatagrams with a TTL of 1 are not forwarded beyond the local network.
380afe61c15SRodney W. GrimesMulticast datagrams with a TTL of 0 will not be transmitted on any network,
381afe61c15SRodney W. Grimesbut may be delivered locally if the sending host belongs to the destination
382afe61c15SRodney W. Grimesgroup and if multicast loopback has not been disabled on the sending socket
3838d22ff75SRuslan Ermilov(see below).
3848d22ff75SRuslan ErmilovMulticast datagrams with TTL greater than 1 may be forwarded
385afe61c15SRodney W. Grimesto other networks if a multicast router is attached to the local network.
386afe61c15SRodney W. Grimes.Pp
387afe61c15SRodney W. GrimesFor hosts with multiple interfaces, each multicast transmission is
388afe61c15SRodney W. Grimessent from the primary network interface.
389afe61c15SRodney W. GrimesThe
390afe61c15SRodney W. Grimes.Dv IP_MULTICAST_IF
391afe61c15SRodney W. Grimesoption overrides the default for
392afe61c15SRodney W. Grimessubsequent transmissions from a given socket:
393afe61c15SRodney W. Grimes.Bd -literal
394afe61c15SRodney W. Grimesstruct in_addr addr;
395afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, &addr, sizeof(addr));
396afe61c15SRodney W. Grimes.Ed
3970c3a1746SMike Pritchard.Pp
398afe61c15SRodney W. Grimeswhere "addr" is the local
399afe61c15SRodney W. Grimes.Tn IP
400afe61c15SRodney W. Grimesaddress of the desired interface or
401afe61c15SRodney W. Grimes.Dv INADDR_ANY
402afe61c15SRodney W. Grimesto specify the default interface.
403afe61c15SRodney W. GrimesAn interface's local IP address and multicast capability can
404afe61c15SRodney W. Grimesbe obtained via the
405afe61c15SRodney W. Grimes.Dv SIOCGIFCONF
406afe61c15SRodney W. Grimesand
407afe61c15SRodney W. Grimes.Dv SIOCGIFFLAGS
408afe61c15SRodney W. Grimesioctls.
409afe61c15SRodney W. GrimesNormal applications should not need to use this option.
410afe61c15SRodney W. Grimes.Pp
411afe61c15SRodney W. GrimesIf a multicast datagram is sent to a group to which the sending host itself
412afe61c15SRodney W. Grimesbelongs (on the outgoing interface), a copy of the datagram is, by default,
413afe61c15SRodney W. Grimeslooped back by the IP layer for local delivery.
414afe61c15SRodney W. GrimesThe
415afe61c15SRodney W. Grimes.Dv IP_MULTICAST_LOOP
416afe61c15SRodney W. Grimesoption gives the sender explicit control
417afe61c15SRodney W. Grimesover whether or not subsequent datagrams are looped back:
418afe61c15SRodney W. Grimes.Bd -literal
419afe61c15SRodney W. Grimesu_char loop;	/* 0 = disable, 1 = enable (default) */
420afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
421afe61c15SRodney W. Grimes.Ed
4220c3a1746SMike Pritchard.Pp
423afe61c15SRodney W. GrimesThis option
424afe61c15SRodney W. Grimesimproves performance for applications that may have no more than one
425aabbf63eSBen Smithurstinstance on a single host (such as a router daemon), by eliminating
4268d22ff75SRuslan Ermilovthe overhead of receiving their own transmissions.
4278d22ff75SRuslan ErmilovIt should generally not
428afe61c15SRodney W. Grimesbe used by applications for which there may be more than one instance on a
429afe61c15SRodney W. Grimessingle host (such as a conferencing program) or for which the sender does
430afe61c15SRodney W. Grimesnot belong to the destination group (such as a time querying program).
431afe61c15SRodney W. Grimes.Pp
432afe61c15SRodney W. GrimesA multicast datagram sent with an initial TTL greater than 1 may be delivered
433afe61c15SRodney W. Grimesto the sending host on a different interface from that on which it was sent,
4348d22ff75SRuslan Ermilovif the host belongs to the destination group on that other interface.
4358d22ff75SRuslan ErmilovThe loopback control option has no effect on such delivery.
436afe61c15SRodney W. Grimes.Pp
437afe61c15SRodney W. GrimesA host must become a member of a multicast group before it can receive
4388d22ff75SRuslan Ermilovdatagrams sent to the group.
4398d22ff75SRuslan ErmilovTo join a multicast group, use the
440afe61c15SRodney W. Grimes.Dv IP_ADD_MEMBERSHIP
441afe61c15SRodney W. Grimesoption:
442afe61c15SRodney W. Grimes.Bd -literal
443afe61c15SRodney W. Grimesstruct ip_mreq mreq;
444afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
445afe61c15SRodney W. Grimes.Ed
4460c3a1746SMike Pritchard.Pp
447afe61c15SRodney W. Grimeswhere
448afe61c15SRodney W. Grimes.Fa mreq
449afe61c15SRodney W. Grimesis the following structure:
450afe61c15SRodney W. Grimes.Bd -literal
451afe61c15SRodney W. Grimesstruct ip_mreq {
4520c3a1746SMike Pritchard    struct in_addr imr_multiaddr; /* IP multicast address of group */
4530c3a1746SMike Pritchard    struct in_addr imr_interface; /* local IP address of interface */
454afe61c15SRodney W. Grimes}
455afe61c15SRodney W. Grimes.Ed
4560c3a1746SMike Pritchard.Pp
457bf7f20c2SRuslan Ermilov.Va imr_interface
45826c3ef53SBruce M Simpsonshould be set to
459afe61c15SRodney W. Grimes.Dv INADDR_ANY
460afe61c15SRodney W. Grimesto choose the default multicast interface,
461afe61c15SRodney W. Grimesor the
462afe61c15SRodney W. Grimes.Tn IP
463afe61c15SRodney W. Grimesaddress of a particular multicast-capable interface if
464afe61c15SRodney W. Grimesthe host is multihomed.
46526c3ef53SBruce M SimpsonSince
46626c3ef53SBruce M Simpson.Fx 4.4 ,
46726c3ef53SBruce M Simpsonif the
468bf7f20c2SRuslan Ermilov.Va imr_interface
46926c3ef53SBruce M Simpsonmember is within the network range
47026c3ef53SBruce M Simpson.Li 0.0.0.0/8 ,
47126c3ef53SBruce M Simpsonit is treated as an interface index in the system interface MIB,
47226c3ef53SBruce M Simpsonas per the RIP Version 2 MIB Extension (RFC-1724).
47326c3ef53SBruce M Simpson.Pp
474afe61c15SRodney W. GrimesMembership is associated with a single interface;
475afe61c15SRodney W. Grimesprograms running on multihomed hosts may need to
476afe61c15SRodney W. Grimesjoin the same group on more than one interface.
477afe61c15SRodney W. GrimesUp to
478afe61c15SRodney W. Grimes.Dv IP_MAX_MEMBERSHIPS
479afe61c15SRodney W. Grimes(currently 20) memberships may be added on a
480afe61c15SRodney W. Grimessingle socket.
481afe61c15SRodney W. Grimes.Pp
482afe61c15SRodney W. GrimesTo drop a membership, use:
483afe61c15SRodney W. Grimes.Bd -literal
484afe61c15SRodney W. Grimesstruct ip_mreq mreq;
485afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
486afe61c15SRodney W. Grimes.Ed
4870c3a1746SMike Pritchard.Pp
488afe61c15SRodney W. Grimeswhere
489afe61c15SRodney W. Grimes.Fa mreq
490afe61c15SRodney W. Grimescontains the same values as used to add the membership.
491afe61c15SRodney W. GrimesMemberships are dropped when the socket is closed or the process exits.
492afe61c15SRodney W. Grimes.\"-----------------------
493afe61c15SRodney W. Grimes.Ss "Raw IP Sockets"
494afe61c15SRodney W. Grimes.Pp
495afe61c15SRodney W. GrimesRaw
496afe61c15SRodney W. Grimes.Tn IP
497afe61c15SRodney W. Grimessockets are connectionless,
498afe61c15SRodney W. Grimesand are normally used with the
499edf0e5b3SMike Pritchard.Xr sendto 2
500afe61c15SRodney W. Grimesand
501edf0e5b3SMike Pritchard.Xr recvfrom 2
502afe61c15SRodney W. Grimescalls, though the
503afe61c15SRodney W. Grimes.Xr connect 2
504afe61c15SRodney W. Grimescall may also be used to fix the destination for future
505afe61c15SRodney W. Grimespackets (in which case the
506afe61c15SRodney W. Grimes.Xr read 2
507afe61c15SRodney W. Grimesor
508afe61c15SRodney W. Grimes.Xr recv 2
509afe61c15SRodney W. Grimesand
510afe61c15SRodney W. Grimes.Xr write 2
511afe61c15SRodney W. Grimesor
512afe61c15SRodney W. Grimes.Xr send 2
513afe61c15SRodney W. Grimessystem calls may be used).
514afe61c15SRodney W. Grimes.Pp
515afe61c15SRodney W. GrimesIf
516afe61c15SRodney W. Grimes.Fa proto
517afe61c15SRodney W. Grimesis 0, the default protocol
518afe61c15SRodney W. Grimes.Dv IPPROTO_RAW
519afe61c15SRodney W. Grimesis used for outgoing
520afe61c15SRodney W. Grimespackets, and only incoming packets destined for that protocol
521afe61c15SRodney W. Grimesare received.
522afe61c15SRodney W. GrimesIf
523afe61c15SRodney W. Grimes.Fa proto
524afe61c15SRodney W. Grimesis non-zero, that protocol number will be used on outgoing packets
525afe61c15SRodney W. Grimesand to filter incoming packets.
526afe61c15SRodney W. Grimes.Pp
527afe61c15SRodney W. GrimesOutgoing packets automatically have an
528afe61c15SRodney W. Grimes.Tn IP
529afe61c15SRodney W. Grimesheader prepended to
530afe61c15SRodney W. Grimesthem (based on the destination address and the protocol
531afe61c15SRodney W. Grimesnumber the socket is created with),
532afe61c15SRodney W. Grimesunless the
533afe61c15SRodney W. Grimes.Dv IP_HDRINCL
534afe61c15SRodney W. Grimesoption has been set.
535afe61c15SRodney W. GrimesIncoming packets are received with
536afe61c15SRodney W. Grimes.Tn IP
537afe61c15SRodney W. Grimesheader and options intact.
538afe61c15SRodney W. Grimes.Pp
539afe61c15SRodney W. Grimes.Dv IP_HDRINCL
540afe61c15SRodney W. Grimesindicates the complete IP header is included with the data
541afe61c15SRodney W. Grimesand may be used only with the
542afe61c15SRodney W. Grimes.Dv SOCK_RAW
543afe61c15SRodney W. Grimestype.
544afe61c15SRodney W. Grimes.Bd -literal
545ddbd0698SBruce Evans#include <netinet/in_systm.h>
546afe61c15SRodney W. Grimes#include <netinet/ip.h>
547afe61c15SRodney W. Grimes
548afe61c15SRodney W. Grimesint hincl = 1;                  /* 1 = on, 0 = off */
549afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_HDRINCL, &hincl, sizeof(hincl));
550afe61c15SRodney W. Grimes.Ed
5510c3a1746SMike Pritchard.Pp
552afe61c15SRodney W. GrimesUnlike previous
5538ce3f3ddSRuslan Ermilov.Bx
554afe61c15SRodney W. Grimesreleases, the program must set all
555afe61c15SRodney W. Grimesthe fields of the IP header, including the following:
556afe61c15SRodney W. Grimes.Bd -literal
557afe61c15SRodney W. Grimesip->ip_v = IPVERSION;
558afe61c15SRodney W. Grimesip->ip_hl = hlen >> 2;
559afe61c15SRodney W. Grimesip->ip_id = 0;  /* 0 means kernel set appropriate value */
560afe61c15SRodney W. Grimesip->ip_off = offset;
561afe61c15SRodney W. Grimes.Ed
5620c3a1746SMike Pritchard.Pp
563538a4c1fSBruce M SimpsonThe
564538a4c1fSBruce M Simpson.Va ip_len
565538a4c1fSBruce M Simpsonand
566538a4c1fSBruce M Simpson.Va ip_off
567538a4c1fSBruce M Simpsonfields
568538a4c1fSBruce M Simpson.Em must
569538a4c1fSBruce M Simpsonbe provided in host byte order .
5706f5bc70aSBruce M SimpsonAll other fields must be provided in network byte order.
5716f5bc70aSBruce M SimpsonSee
5725c8e5f24SRuslan Ermilov.Xr byteorder 3
5736f5bc70aSBruce M Simpsonfor more information on network byte order.
574538a4c1fSBruce M SimpsonIf the
575538a4c1fSBruce M Simpson.Va ip_id
576538a4c1fSBruce M Simpsonfield is set to 0 then the kernel will choose an
577c48524c2SMike Pritchardappropriate value.
578afe61c15SRodney W. GrimesIf the header source address is set to
579afe61c15SRodney W. Grimes.Dv INADDR_ANY ,
580afe61c15SRodney W. Grimesthe kernel will choose an appropriate address.
581ef0180edSDima Dorfman.Sh ERRORS
582afe61c15SRodney W. GrimesA socket operation may fail with one of the following errors returned:
583ef0180edSDima Dorfman.Bl -tag -width Er
584afe61c15SRodney W. Grimes.It Bq Er EISCONN
585afe61c15SRodney W. Grimeswhen trying to establish a connection on a socket which
586afe61c15SRodney W. Grimesalready has one, or when trying to send a datagram with the destination
587afe61c15SRodney W. Grimesaddress specified and the socket is already connected;
588afe61c15SRodney W. Grimes.It Bq Er ENOTCONN
589afe61c15SRodney W. Grimeswhen trying to send a datagram, but
5900227791bSRuslan Ermilovno destination address is specified, and the socket has not been
591afe61c15SRodney W. Grimesconnected;
592afe61c15SRodney W. Grimes.It Bq Er ENOBUFS
593afe61c15SRodney W. Grimeswhen the system runs out of memory for
594afe61c15SRodney W. Grimesan internal data structure;
595afe61c15SRodney W. Grimes.It Bq Er EADDRNOTAVAIL
596afe61c15SRodney W. Grimeswhen an attempt is made to create a
597afe61c15SRodney W. Grimessocket with a network address for which no network interface
598afe61c15SRodney W. Grimesexists.
5997bdf965dSAlexander Langer.It Bq Er EACCES
600afe61c15SRodney W. Grimeswhen an attempt is made to create
601afe61c15SRodney W. Grimesa raw IP socket by a non-privileged process.
602afe61c15SRodney W. Grimes.El
603afe61c15SRodney W. Grimes.Pp
604afe61c15SRodney W. GrimesThe following errors specific to
605afe61c15SRodney W. Grimes.Tn IP
606afe61c15SRodney W. Grimesmay occur when setting or getting
607afe61c15SRodney W. Grimes.Tn IP
608afe61c15SRodney W. Grimesoptions:
6098d22ff75SRuslan Ermilov.Bl -tag -width Er
610afe61c15SRodney W. Grimes.It Bq Er EINVAL
611afe61c15SRodney W. GrimesAn unknown socket option name was given.
612afe61c15SRodney W. Grimes.It Bq Er EINVAL
613afe61c15SRodney W. GrimesThe IP option field was improperly formed;
614afe61c15SRodney W. Grimesan option field was shorter than the minimum value
615afe61c15SRodney W. Grimesor longer than the option buffer provided.
616afe61c15SRodney W. Grimes.El
6176f5bc70aSBruce M Simpson.Pp
6186f5bc70aSBruce M SimpsonThe following errors may occur when attempting to send
6196f5bc70aSBruce M Simpson.Tn IP
6206f5bc70aSBruce M Simpsondatagrams via a
6216f5bc70aSBruce M Simpson.Dq raw socket
6226f5bc70aSBruce M Simpsonwith the
623538a4c1fSBruce M Simpson.Dv IP_HDRINCL
6246f5bc70aSBruce M Simpsonoption set:
6256f5bc70aSBruce M Simpson.Bl -tag -width Er
6266f5bc70aSBruce M Simpson.It Bq Er EINVAL
627538a4c1fSBruce M SimpsonThe user-supplied
628538a4c1fSBruce M Simpson.Va ip_len
629538a4c1fSBruce M Simpsonfield was not equal to the length of the datagram written to the socket.
6306f5bc70aSBruce M Simpson.El
631afe61c15SRodney W. Grimes.Sh SEE ALSO
632afe61c15SRodney W. Grimes.Xr getsockopt 2 ,
633afe61c15SRodney W. Grimes.Xr recv 2 ,
6340b992c1dSWolfram Schneider.Xr send 2 ,
6355c8e5f24SRuslan Ermilov.Xr byteorder 3 ,
636afe61c15SRodney W. Grimes.Xr icmp 4 ,
6370b992c1dSWolfram Schneider.Xr inet 4 ,
6380b992c1dSWolfram Schneider.Xr intro 4
639afe61c15SRodney W. Grimes.Sh HISTORY
640afe61c15SRodney W. GrimesThe
641afe61c15SRodney W. Grimes.Nm
642afe61c15SRodney W. Grimesprotocol appeared in
643afe61c15SRodney W. Grimes.Bx 4.2 .
644