xref: /freebsd/share/man/man4/ip.4 (revision edf0e5b3f896da8bf8b1fd0b923401d0c0141aa4)
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
33afe61c15SRodney W. Grimes.\"
34afe61c15SRodney W. Grimes.Dd November 30, 1993
35afe61c15SRodney W. Grimes.Dt IP 4
36afe61c15SRodney W. Grimes.Os BSD 4.2
37afe61c15SRodney W. Grimes.Sh NAME
38afe61c15SRodney W. Grimes.Nm ip
39afe61c15SRodney W. Grimes.Nd Internet Protocol
40afe61c15SRodney W. Grimes.Sh SYNOPSIS
41afe61c15SRodney W. Grimes.Fd #include <sys/socket.h>
42afe61c15SRodney W. Grimes.Fd #include <netinet/in.h>
43afe61c15SRodney W. Grimes.Ft int
44afe61c15SRodney W. Grimes.Fn socket AF_INET SOCK_RAW proto
45afe61c15SRodney W. Grimes.Sh DESCRIPTION
46afe61c15SRodney W. Grimes.Tn IP
47afe61c15SRodney W. Grimesis the transport layer protocol used
48afe61c15SRodney W. Grimesby the Internet protocol family.
49afe61c15SRodney W. GrimesOptions may be set at the
50afe61c15SRodney W. Grimes.Tn IP
51afe61c15SRodney W. Grimeslevel
52afe61c15SRodney W. Grimeswhen using higher-level protocols that are based on
53afe61c15SRodney W. Grimes.Tn IP
54afe61c15SRodney W. Grimes(such as
55afe61c15SRodney W. Grimes.Tn TCP
56afe61c15SRodney W. Grimesand
57afe61c15SRodney W. Grimes.Tn UDP ) .
58afe61c15SRodney W. GrimesIt may also be accessed
59afe61c15SRodney W. Grimesthrough a
60afe61c15SRodney W. Grimes.Dq raw socket
61afe61c15SRodney W. Grimeswhen developing new protocols, or
62afe61c15SRodney W. Grimesspecial-purpose applications.
63afe61c15SRodney W. Grimes.Pp
64afe61c15SRodney W. GrimesThere are several
65afe61c15SRodney W. Grimes.Tn IP-level
66edf0e5b3SMike Pritchard.Xr setsockopt 2
67edf0e5b3SMike Pritchardand
68afe61c15SRodney W. Grimes.Xr getsockopt 2
69afe61c15SRodney W. Grimesoptions.
70afe61c15SRodney W. Grimes.Dv IP_OPTIONS
71afe61c15SRodney W. Grimesmay be used to provide
72afe61c15SRodney W. Grimes.Tn IP
73afe61c15SRodney W. Grimesoptions to be transmitted in the
74afe61c15SRodney W. Grimes.Tn IP
75afe61c15SRodney W. Grimesheader of each outgoing packet
76afe61c15SRodney W. Grimesor to examine the header options on incoming packets.
77afe61c15SRodney W. Grimes.Tn IP
78afe61c15SRodney W. Grimesoptions may be used with any socket type in the Internet family.
79afe61c15SRodney W. GrimesThe format of
80afe61c15SRodney W. Grimes.Tn IP
81afe61c15SRodney W. Grimesoptions to be sent is that specified by the
82afe61c15SRodney W. Grimes.Tn IP
83afe61c15SRodney W. Grimesprotocol specification (RFC-791), with one exception:
84afe61c15SRodney W. Grimesthe list of addresses for Source Route options must include the first-hop
85afe61c15SRodney W. Grimesgateway at the beginning of the list of gateways.
86afe61c15SRodney W. GrimesThe first-hop gateway address will be extracted from the option list
87afe61c15SRodney W. Grimesand the size adjusted accordingly before use.
88afe61c15SRodney W. GrimesTo disable previously specified options,
89afe61c15SRodney W. Grimesuse a zero-length buffer:
90afe61c15SRodney W. Grimes.Bd -literal
91afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_OPTIONS, NULL, 0);
92afe61c15SRodney W. Grimes.Ed
93afe61c15SRodney W. Grimes.Pp
94afe61c15SRodney W. Grimes.Dv IP_TOS
95afe61c15SRodney W. Grimesand
96afe61c15SRodney W. Grimes.Dv IP_TTL
97afe61c15SRodney W. Grimesmay be used to set the type-of-service and time-to-live
98afe61c15SRodney W. Grimesfields in the
99afe61c15SRodney W. Grimes.Tn IP
100afe61c15SRodney W. Grimesheader for
101afe61c15SRodney W. Grimes.Dv SOCK_STREAM
102afe61c15SRodney W. Grimesand
103afe61c15SRodney W. Grimes.Dv SOCK_DGRAM
104afe61c15SRodney W. Grimessockets. For example,
105afe61c15SRodney W. Grimes.Bd -literal
106afe61c15SRodney W. Grimesint tos = IPTOS_LOWDELAY;       /* see <netinet/in.h> */
107afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));
108afe61c15SRodney W. Grimes
109afe61c15SRodney W. Grimesint ttl = 60;                   /* max = 255 */
110afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
111afe61c15SRodney W. Grimes.Ed
112afe61c15SRodney W. Grimes.Pp
113afe61c15SRodney W. GrimesIf the
114afe61c15SRodney W. Grimes.Dv IP_RECVDSTADDR
115afe61c15SRodney W. Grimesoption is enabled on a
116afe61c15SRodney W. Grimes.Dv SOCK_DGRAM
117afe61c15SRodney W. Grimessocket,
118afe61c15SRodney W. Grimesthe
119edf0e5b3SMike Pritchard.Xr recvmsg 2
120afe61c15SRodney W. Grimescall will return the destination
121afe61c15SRodney W. Grimes.Tn IP
122afe61c15SRodney W. Grimesaddress for a
123afe61c15SRodney W. Grimes.Tn UDP
124afe61c15SRodney W. Grimesdatagram.
125afe61c15SRodney W. GrimesThe msg_control field in the msghdr structure points to a buffer
126afe61c15SRodney W. Grimesthat contains a cmsghdr structure followed by the
127afe61c15SRodney W. Grimes.Tn IP
128afe61c15SRodney W. Grimesaddress.
129afe61c15SRodney W. GrimesThe cmsghdr fields have the following values:
130afe61c15SRodney W. Grimes.Bd -literal
131afe61c15SRodney W. Grimescmsg_len = sizeof(struct in_addr)
132afe61c15SRodney W. Grimescmsg_level = IPPROTO_IP
133afe61c15SRodney W. Grimescmsg_type = IP_RECVDSTADDR
134afe61c15SRodney W. Grimes.Ed
1357ee32b9fSPeter Wemm.Pp
1367ee32b9fSPeter Wemm.Dv IP_PORTRANGE
1377ee32b9fSPeter Wemmmay be used to set the port range used for selecting a local port number
1387ee32b9fSPeter Wemmon a socket with an unspecified (zero) port number. It has the following
1397ee32b9fSPeter Wemmpossible values:
1407ee32b9fSPeter Wemm.Bl -tag -width IP_PORTRANGE_DEFAULT
1417ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_DEFAULT
1427ee32b9fSPeter Wemmuse the default range of values, normally
1437ee32b9fSPeter Wemm.Dv IPPORT_RESERVED
1447ee32b9fSPeter Wemmthrough
1457ee32b9fSPeter Wemm.Dv IPPORT_RESERVED .
1467ee32b9fSPeter WemmThis is adjustable through the sysctl setting:
1477ee32b9fSPeter Wemm.Nm net.inet.ip.portrange.first
1487ee32b9fSPeter Wemmand
1497ee32b9fSPeter Wemm.Nm net.inet.ip.portrange.last .
1507ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_HIGH
1517ee32b9fSPeter Wemmuse a high range of values, normally
1527ee32b9fSPeter Wemm.Dv IPPORT_HIFIRSTAUTO
1537ee32b9fSPeter Wemmand
1547ee32b9fSPeter Wemm.Dv IPPORT_HILASTAUTO .
1557ee32b9fSPeter WemmThis is adjustable through the sysctl setting:
1567ee32b9fSPeter Wemm.Nm net.inet.ip.portrange.hifirst
1577ee32b9fSPeter Wemmand
1587ee32b9fSPeter Wemm.Nm net.inet.ip.portrange.hilast .
1597ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_LOW
1607ee32b9fSPeter Wemmuse a low range of ports, which are normally restricted to
1617ee32b9fSPeter Wemmprivileged processes on
1627ee32b9fSPeter Wemm.Ux
1637ee32b9fSPeter Wemmsystems.  The range is normally from
1647ee32b9fSPeter Wemm.Dv IPPORT_RESERVED
1657ee32b9fSPeter Wemmdown to
1667ee32b9fSPeter Wemm.Li 1
1677ee32b9fSPeter Wemmin descending order.  This range is not sysctl configurable.
1687ee32b9fSPeter Wemm.El
169afe61c15SRodney W. Grimes.Ss "Multicast Options"
170afe61c15SRodney W. Grimes.Pp
171afe61c15SRodney W. Grimes.Tn IP
172afe61c15SRodney W. Grimesmulticasting is supported only on
173afe61c15SRodney W. Grimes.Dv AF_INET
174afe61c15SRodney W. Grimessockets of type
175afe61c15SRodney W. Grimes.Dv SOCK_DGRAM
176afe61c15SRodney W. Grimesand
177afe61c15SRodney W. Grimes.Dv SOCK_RAW,
178afe61c15SRodney W. Grimesand only on networks where the interface
179afe61c15SRodney W. Grimesdriver supports multicasting.
180afe61c15SRodney W. Grimes.Pp
181afe61c15SRodney W. GrimesThe
182afe61c15SRodney W. Grimes.Dv IP_MULTICAST_TTL
183afe61c15SRodney W. Grimesoption changes the time-to-live (TTL)
184afe61c15SRodney W. Grimesfor outgoing multicast datagrams
185afe61c15SRodney W. Grimesin order to control the scope of the multicasts:
186afe61c15SRodney W. Grimes.Bd -literal
187afe61c15SRodney W. Grimesu_char ttl;	/* range: 0 to 255, default = 1 */
188afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl));
189afe61c15SRodney W. Grimes.Ed
190afe61c15SRodney W. Grimes.sp
191afe61c15SRodney W. GrimesDatagrams with a TTL of 1 are not forwarded beyond the local network.
192afe61c15SRodney W. GrimesMulticast datagrams with a TTL of 0 will not be transmitted on any network,
193afe61c15SRodney W. Grimesbut may be delivered locally if the sending host belongs to the destination
194afe61c15SRodney W. Grimesgroup and if multicast loopback has not been disabled on the sending socket
195afe61c15SRodney W. Grimes(see below).  Multicast datagrams with TTL greater than 1 may be forwarded
196afe61c15SRodney W. Grimesto other networks if a multicast router is attached to the local network.
197afe61c15SRodney W. Grimes.Pp
198afe61c15SRodney W. GrimesFor hosts with multiple interfaces, each multicast transmission is
199afe61c15SRodney W. Grimessent from the primary network interface.
200afe61c15SRodney W. GrimesThe
201afe61c15SRodney W. Grimes.Dv IP_MULTICAST_IF
202afe61c15SRodney W. Grimesoption overrides the default for
203afe61c15SRodney W. Grimessubsequent transmissions from a given socket:
204afe61c15SRodney W. Grimes.Bd -literal
205afe61c15SRodney W. Grimesstruct in_addr addr;
206afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, &addr, sizeof(addr));
207afe61c15SRodney W. Grimes.Ed
208afe61c15SRodney W. Grimes.sp
209afe61c15SRodney W. Grimeswhere "addr" is the local
210afe61c15SRodney W. Grimes.Tn IP
211afe61c15SRodney W. Grimesaddress of the desired interface or
212afe61c15SRodney W. Grimes.Dv INADDR_ANY
213afe61c15SRodney W. Grimesto specify the default interface.
214afe61c15SRodney W. GrimesAn interface's local IP address and multicast capability can
215afe61c15SRodney W. Grimesbe obtained via the
216afe61c15SRodney W. Grimes.Dv SIOCGIFCONF
217afe61c15SRodney W. Grimesand
218afe61c15SRodney W. Grimes.Dv SIOCGIFFLAGS
219afe61c15SRodney W. Grimesioctls.
220afe61c15SRodney W. GrimesNormal applications should not need to use this option.
221afe61c15SRodney W. Grimes.Pp
222afe61c15SRodney W. GrimesIf a multicast datagram is sent to a group to which the sending host itself
223afe61c15SRodney W. Grimesbelongs (on the outgoing interface), a copy of the datagram is, by default,
224afe61c15SRodney W. Grimeslooped back by the IP layer for local delivery.
225afe61c15SRodney W. GrimesThe
226afe61c15SRodney W. Grimes.Dv IP_MULTICAST_LOOP
227afe61c15SRodney W. Grimesoption gives the sender explicit control
228afe61c15SRodney W. Grimesover whether or not subsequent datagrams are looped back:
229afe61c15SRodney W. Grimes.Bd -literal
230afe61c15SRodney W. Grimesu_char loop;	/* 0 = disable, 1 = enable (default) */
231afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
232afe61c15SRodney W. Grimes.Ed
233afe61c15SRodney W. Grimes.sp
234afe61c15SRodney W. GrimesThis option
235afe61c15SRodney W. Grimesimproves performance for applications that may have no more than one
236afe61c15SRodney W. Grimesinstance on a single host (such as a router demon), by eliminating
237afe61c15SRodney W. Grimesthe overhead of receiving their own transmissions.  It should generally not
238afe61c15SRodney W. Grimesbe used by applications for which there may be more than one instance on a
239afe61c15SRodney W. Grimessingle host (such as a conferencing program) or for which the sender does
240afe61c15SRodney W. Grimesnot belong to the destination group (such as a time querying program).
241afe61c15SRodney W. Grimes.Pp
242afe61c15SRodney W. GrimesA multicast datagram sent with an initial TTL greater than 1 may be delivered
243afe61c15SRodney W. Grimesto the sending host on a different interface from that on which it was sent,
244afe61c15SRodney W. Grimesif the host belongs to the destination group on that other interface.  The
245afe61c15SRodney W. Grimesloopback control option has no effect on such delivery.
246afe61c15SRodney W. Grimes.Pp
247afe61c15SRodney W. GrimesA host must become a member of a multicast group before it can receive
248afe61c15SRodney W. Grimesdatagrams sent to the group.  To join a multicast group, use the
249afe61c15SRodney W. Grimes.Dv IP_ADD_MEMBERSHIP
250afe61c15SRodney W. Grimesoption:
251afe61c15SRodney W. Grimes.Bd -literal
252afe61c15SRodney W. Grimesstruct ip_mreq mreq;
253afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
254afe61c15SRodney W. Grimes.Ed
255afe61c15SRodney W. Grimes.sp
256afe61c15SRodney W. Grimeswhere
257afe61c15SRodney W. Grimes.Fa mreq
258afe61c15SRodney W. Grimesis the following structure:
259afe61c15SRodney W. Grimes.Bd -literal
260afe61c15SRodney W. Grimesstruct ip_mreq {
261afe61c15SRodney W. Grimes    struct in_addr imr_multiaddr; /* multicast group to join */
262afe61c15SRodney W. Grimes    struct in_addr imr_interface; /* interface to join on */
263afe61c15SRodney W. Grimes}
264afe61c15SRodney W. Grimes.Ed
265afe61c15SRodney W. Grimes.sp
266afe61c15SRodney W. Grimes.Dv imr_interface
267afe61c15SRodney W. Grimesshould
268afe61c15SRodney W. Grimesbe
269afe61c15SRodney W. Grimes.Dv INADDR_ANY
270afe61c15SRodney W. Grimesto choose the default multicast interface,
271afe61c15SRodney W. Grimesor the
272afe61c15SRodney W. Grimes.Tn IP
273afe61c15SRodney W. Grimesaddress of a particular multicast-capable interface if
274afe61c15SRodney W. Grimesthe host is multihomed.
275afe61c15SRodney W. GrimesMembership is associated with a single interface;
276afe61c15SRodney W. Grimesprograms running on multihomed hosts may need to
277afe61c15SRodney W. Grimesjoin the same group on more than one interface.
278afe61c15SRodney W. GrimesUp to
279afe61c15SRodney W. Grimes.Dv IP_MAX_MEMBERSHIPS
280afe61c15SRodney W. Grimes(currently 20) memberships may be added on a
281afe61c15SRodney W. Grimessingle socket.
282afe61c15SRodney W. Grimes.Pp
283afe61c15SRodney W. GrimesTo drop a membership, use:
284afe61c15SRodney W. Grimes.Bd -literal
285afe61c15SRodney W. Grimesstruct ip_mreq mreq;
286afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
287afe61c15SRodney W. Grimes.Ed
288afe61c15SRodney W. Grimes.sp
289afe61c15SRodney W. Grimeswhere
290afe61c15SRodney W. Grimes.Fa mreq
291afe61c15SRodney W. Grimescontains the same values as used to add the membership.
292afe61c15SRodney W. GrimesMemberships are dropped when the socket is closed or the process exits.
293afe61c15SRodney W. Grimes.\"-----------------------
294afe61c15SRodney W. Grimes.Ss "Raw IP Sockets"
295afe61c15SRodney W. Grimes.Pp
296afe61c15SRodney W. GrimesRaw
297afe61c15SRodney W. Grimes.Tn IP
298afe61c15SRodney W. Grimessockets are connectionless,
299afe61c15SRodney W. Grimesand are normally used with the
300edf0e5b3SMike Pritchard.Xr sendto 2
301afe61c15SRodney W. Grimesand
302edf0e5b3SMike Pritchard.Xr recvfrom 2
303afe61c15SRodney W. Grimescalls, though the
304afe61c15SRodney W. Grimes.Xr connect 2
305afe61c15SRodney W. Grimescall may also be used to fix the destination for future
306afe61c15SRodney W. Grimespackets (in which case the
307afe61c15SRodney W. Grimes.Xr read 2
308afe61c15SRodney W. Grimesor
309afe61c15SRodney W. Grimes.Xr recv 2
310afe61c15SRodney W. Grimesand
311afe61c15SRodney W. Grimes.Xr write 2
312afe61c15SRodney W. Grimesor
313afe61c15SRodney W. Grimes.Xr send 2
314afe61c15SRodney W. Grimessystem calls may be used).
315afe61c15SRodney W. Grimes.Pp
316afe61c15SRodney W. GrimesIf
317afe61c15SRodney W. Grimes.Fa proto
318afe61c15SRodney W. Grimesis 0, the default protocol
319afe61c15SRodney W. Grimes.Dv IPPROTO_RAW
320afe61c15SRodney W. Grimesis used for outgoing
321afe61c15SRodney W. Grimespackets, and only incoming packets destined for that protocol
322afe61c15SRodney W. Grimesare received.
323afe61c15SRodney W. GrimesIf
324afe61c15SRodney W. Grimes.Fa proto
325afe61c15SRodney W. Grimesis non-zero, that protocol number will be used on outgoing packets
326afe61c15SRodney W. Grimesand to filter incoming packets.
327afe61c15SRodney W. Grimes.Pp
328afe61c15SRodney W. GrimesOutgoing packets automatically have an
329afe61c15SRodney W. Grimes.Tn IP
330afe61c15SRodney W. Grimesheader prepended to
331afe61c15SRodney W. Grimesthem (based on the destination address and the protocol
332afe61c15SRodney W. Grimesnumber the socket is created with),
333afe61c15SRodney W. Grimesunless the
334afe61c15SRodney W. Grimes.Dv IP_HDRINCL
335afe61c15SRodney W. Grimesoption has been set.
336afe61c15SRodney W. GrimesIncoming packets are received with
337afe61c15SRodney W. Grimes.Tn IP
338afe61c15SRodney W. Grimesheader and options intact.
339afe61c15SRodney W. Grimes.Pp
340afe61c15SRodney W. Grimes.Dv IP_HDRINCL
341afe61c15SRodney W. Grimesindicates the complete IP header is included with the data
342afe61c15SRodney W. Grimesand may be used only with the
343afe61c15SRodney W. Grimes.Dv SOCK_RAW
344afe61c15SRodney W. Grimestype.
345afe61c15SRodney W. Grimes.Bd -literal
346afe61c15SRodney W. Grimes#include <netinet/ip.h>
347afe61c15SRodney W. Grimes
348afe61c15SRodney W. Grimesint hincl = 1;                  /* 1 = on, 0 = off */
349afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_HDRINCL, &hincl, sizeof(hincl));
350afe61c15SRodney W. Grimes.Ed
351afe61c15SRodney W. Grimes.sp
352afe61c15SRodney W. GrimesUnlike previous
353afe61c15SRodney W. Grimes.Tn BSD
354afe61c15SRodney W. Grimesreleases, the program must set all
355afe61c15SRodney W. Grimesthe fields of the IP header, including the following:
356afe61c15SRodney W. Grimes.Bd -literal
357afe61c15SRodney W. Grimesip->ip_v = IPVERSION;
358afe61c15SRodney W. Grimesip->ip_hl = hlen >> 2;
359afe61c15SRodney W. Grimesip->ip_id = 0;  /* 0 means kernel set appropriate value */
360afe61c15SRodney W. Grimesip->ip_off = offset;
361afe61c15SRodney W. Grimes.Ed
362afe61c15SRodney W. Grimes.sp .5
363afe61c15SRodney W. GrimesIf the header source address is set to
364afe61c15SRodney W. Grimes.Dv INADDR_ANY,
365afe61c15SRodney W. Grimesthe kernel will choose an appropriate address.
366afe61c15SRodney W. Grimes.Sh DIAGNOSTICS
367afe61c15SRodney W. GrimesA socket operation may fail with one of the following errors returned:
368afe61c15SRodney W. Grimes.Bl -tag -width [EADDRNOTAVAIL]
369afe61c15SRodney W. Grimes.It Bq Er EISCONN
370afe61c15SRodney W. Grimeswhen trying to establish a connection on a socket which
371afe61c15SRodney W. Grimesalready has one, or when trying to send a datagram with the destination
372afe61c15SRodney W. Grimesaddress specified and the socket is already connected;
373afe61c15SRodney W. Grimes.It Bq Er ENOTCONN
374afe61c15SRodney W. Grimeswhen trying to send a datagram, but
375afe61c15SRodney W. Grimesno destination address is specified, and the socket hasn't been
376afe61c15SRodney W. Grimesconnected;
377afe61c15SRodney W. Grimes.It Bq Er ENOBUFS
378afe61c15SRodney W. Grimeswhen the system runs out of memory for
379afe61c15SRodney W. Grimesan internal data structure;
380afe61c15SRodney W. Grimes.It Bq Er EADDRNOTAVAIL
381afe61c15SRodney W. Grimeswhen an attempt is made to create a
382afe61c15SRodney W. Grimessocket with a network address for which no network interface
383afe61c15SRodney W. Grimesexists.
384afe61c15SRodney W. Grimes.It Bq Er EACESS
385afe61c15SRodney W. Grimeswhen an attempt is made to create
386afe61c15SRodney W. Grimesa raw IP socket by a non-privileged process.
387afe61c15SRodney W. Grimes.El
388afe61c15SRodney W. Grimes.Pp
389afe61c15SRodney W. GrimesThe following errors specific to
390afe61c15SRodney W. Grimes.Tn IP
391afe61c15SRodney W. Grimesmay occur when setting or getting
392afe61c15SRodney W. Grimes.Tn IP
393afe61c15SRodney W. Grimesoptions:
394afe61c15SRodney W. Grimes.Bl -tag -width EADDRNOTAVAILxx
395afe61c15SRodney W. Grimes.It Bq Er EINVAL
396afe61c15SRodney W. GrimesAn unknown socket option name was given.
397afe61c15SRodney W. Grimes.It Bq Er EINVAL
398afe61c15SRodney W. GrimesThe IP option field was improperly formed;
399afe61c15SRodney W. Grimesan option field was shorter than the minimum value
400afe61c15SRodney W. Grimesor longer than the option buffer provided.
401afe61c15SRodney W. Grimes.El
402afe61c15SRodney W. Grimes.Sh SEE ALSO
403afe61c15SRodney W. Grimes.Xr getsockopt 2 ,
404afe61c15SRodney W. Grimes.Xr send 2 ,
405afe61c15SRodney W. Grimes.Xr recv 2 ,
406afe61c15SRodney W. Grimes.Xr intro 4 ,
407afe61c15SRodney W. Grimes.Xr icmp 4 ,
408afe61c15SRodney W. Grimes.Xr inet 4
409afe61c15SRodney W. Grimes.Sh HISTORY
410afe61c15SRodney W. GrimesThe
411afe61c15SRodney W. Grimes.Nm
412afe61c15SRodney W. Grimesprotocol appeared in
413afe61c15SRodney W. Grimes.Bx 4.2 .
414