]> CyberLeo.Net >> Repos - FreeBSD/stable/8.git/blob - share/man/man4/ip.4
MFC r362623:
[FreeBSD/stable/8.git] / share / man / man4 / ip.4
1 .\" Copyright (c) 1983, 1991, 1993
2 .\"     The Regents of the University of California.  All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\" 3. All advertising materials mentioning features or use of this software
13 .\"    must display the following acknowledgement:
14 .\"     This product includes software developed by the University of
15 .\"     California, Berkeley and its contributors.
16 .\" 4. Neither the name of the University nor the names of its contributors
17 .\"    may be used to endorse or promote products derived from this software
18 .\"    without specific prior written permission.
19 .\"
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 .\" SUCH DAMAGE.
31 .\"
32 .\"     @(#)ip.4        8.2 (Berkeley) 11/30/93
33 .\" $FreeBSD$
34 .\"
35 .Dd June 12, 2012
36 .Dt IP 4
37 .Os
38 .Sh NAME
39 .Nm ip
40 .Nd Internet Protocol
41 .Sh SYNOPSIS
42 .In sys/types.h
43 .In sys/socket.h
44 .In netinet/in.h
45 .Ft int
46 .Fn socket AF_INET SOCK_RAW proto
47 .Sh DESCRIPTION
48 .Tn IP
49 is the transport layer protocol used
50 by the Internet protocol family.
51 Options may be set at the
52 .Tn IP
53 level
54 when using higher-level protocols that are based on
55 .Tn IP
56 (such as
57 .Tn TCP
58 and
59 .Tn UDP ) .
60 It may also be accessed
61 through a
62 .Dq raw socket
63 when developing new protocols, or
64 special-purpose applications.
65 .Pp
66 There are several
67 .Tn IP-level
68 .Xr setsockopt 2
69 and
70 .Xr getsockopt 2
71 options.
72 .Dv IP_OPTIONS
73 may be used to provide
74 .Tn IP
75 options to be transmitted in the
76 .Tn IP
77 header of each outgoing packet
78 or to examine the header options on incoming packets.
79 .Tn IP
80 options may be used with any socket type in the Internet family.
81 The format of
82 .Tn IP
83 options to be sent is that specified by the
84 .Tn IP
85 protocol specification (RFC-791), with one exception:
86 the list of addresses for Source Route options must include the first-hop
87 gateway at the beginning of the list of gateways.
88 The first-hop gateway address will be extracted from the option list
89 and the size adjusted accordingly before use.
90 To disable previously specified options,
91 use a zero-length buffer:
92 .Bd -literal
93 setsockopt(s, IPPROTO_IP, IP_OPTIONS, NULL, 0);
94 .Ed
95 .Pp
96 .Dv IP_TOS
97 and
98 .Dv IP_TTL
99 may be used to set the type-of-service and time-to-live
100 fields in the
101 .Tn IP
102 header for
103 .Dv SOCK_STREAM , SOCK_DGRAM ,
104 and certain types of
105 .Dv SOCK_RAW
106 sockets.
107 For example,
108 .Bd -literal
109 int tos = IPTOS_LOWDELAY;       /* see <netinet/ip.h> */
110 setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));
111
112 int ttl = 60;                   /* max = 255 */
113 setsockopt(s, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
114 .Ed
115 .Pp
116 .Dv IP_MINTTL
117 may be used to set the minimum acceptable TTL a packet must have when
118 received on a socket.
119 All packets with a lower TTL are silently dropped.
120 This option is only really useful when set to 255, preventing packets
121 from outside the directly connected networks reaching local listeners
122 on sockets.
123 .Pp
124 .Dv IP_DONTFRAG
125 may be used to set the Don't Fragment flag on IP packets.
126 Currently this option is respected only on
127 .Xr udp 4
128 and raw
129 .Xr ip 4
130 sockets, unless the
131 .Dv IP_HDRINCL
132 option has been set.
133 On
134 .Xr tcp 4
135 sockets, the Don't Fragment flag is controlled by the Path
136 MTU Discovery option.
137 Sending a packet larger than the MTU size of the egress interface,
138 determined by the destination address, returns an
139 .Er EMSGSIZE
140 error.
141 .Pp
142 If the
143 .Dv IP_RECVDSTADDR
144 option is enabled on a
145 .Dv SOCK_DGRAM
146 socket,
147 the
148 .Xr recvmsg 2
149 call will return the destination
150 .Tn IP
151 address for a
152 .Tn UDP
153 datagram.
154 The
155 .Vt msg_control
156 field in the
157 .Vt msghdr
158 structure points to a buffer
159 that contains a
160 .Vt cmsghdr
161 structure followed by the
162 .Tn IP
163 address.
164 The
165 .Vt cmsghdr
166 fields have the following values:
167 .Bd -literal
168 cmsg_len = CMSG_LEN(sizeof(struct in_addr))
169 cmsg_level = IPPROTO_IP
170 cmsg_type = IP_RECVDSTADDR
171 .Ed
172 .Pp
173 The source address to be used for outgoing
174 .Tn UDP
175 datagrams on a socket that is not bound to a specific
176 .Tn IP
177 address can be specified as ancillary data with a type code of
178 .Dv IP_SENDSRCADDR .
179 The msg_control field in the msghdr structure should point to a buffer
180 that contains a
181 .Vt cmsghdr
182 structure followed by the
183 .Tn IP
184 address.
185 The cmsghdr fields should have the following values:
186 .Bd -literal
187 cmsg_len = CMSG_LEN(sizeof(struct in_addr))
188 cmsg_level = IPPROTO_IP
189 cmsg_type = IP_SENDSRCADDR
190 .Ed
191 .Pp
192 For convenience,
193 .Dv IP_SENDSRCADDR
194 is defined to have the same value as
195 .Dv IP_RECVDSTADDR ,
196 so the
197 .Dv IP_RECVDSTADDR
198 control message from
199 .Xr recvmsg 2
200 can be used directly as a control message for
201 .Xr sendmsg 2 .
202 .\"
203 .Pp
204 If the
205 .Dv IP_ONESBCAST
206 option is enabled on a
207 .Dv SOCK_DGRAM
208 or a
209 .Dv SOCK_RAW
210 socket, the destination address of outgoing
211 broadcast datagrams on that socket will be forced
212 to the undirected broadcast address,
213 .Dv INADDR_BROADCAST ,
214 before transmission.
215 This is in contrast to the default behavior of the
216 system, which is to transmit undirected broadcasts
217 via the first network interface with the
218 .Dv IFF_BROADCAST
219 flag set.
220 .Pp
221 This option allows applications to choose which
222 interface is used to transmit an undirected broadcast
223 datagram.
224 For example, the following code would force an
225 undirected broadcast to be transmitted via the interface
226 configured with the broadcast address 192.168.2.255:
227 .Bd -literal
228 char msg[512];
229 struct sockaddr_in sin;
230 u_char onesbcast = 1;   /* 0 = disable (default), 1 = enable */
231
232 setsockopt(s, IPPROTO_IP, IP_ONESBCAST, &onesbcast, sizeof(onesbcast));
233 sin.sin_addr.s_addr = inet_addr("192.168.2.255");
234 sin.sin_port = htons(1234);
235 sendto(s, msg, sizeof(msg), 0, &sin, sizeof(sin));
236 .Ed
237 .Pp
238 It is the application's responsibility to set the
239 .Dv IP_TTL
240 option
241 to an appropriate value in order to prevent broadcast storms.
242 The application must have sufficient credentials to set the
243 .Dv SO_BROADCAST
244 socket level option, otherwise the
245 .Dv IP_ONESBCAST
246 option has no effect.
247 .Pp
248 If the
249 .Dv IP_BINDANY
250 option is enabled on a
251 .Dv SOCK_STREAM ,
252 .Dv SOCK_DGRAM
253 or a
254 .Dv SOCK_RAW
255 socket, one can
256 .Xr bind 2
257 to any address, even one not bound to any available network interface in the
258 system.
259 This functionality (in conjunction with special firewall rules) can be used for
260 implementing a transparent proxy.
261 The
262 .Dv PRIV_NETINET_BINDANY
263 privilege is needed to set this option.
264 .Pp
265 If the
266 .Dv IP_RECVTTL
267 option is enabled on a
268 .Dv SOCK_DGRAM
269 socket, the
270 .Xr recvmsg 2
271 call will return the
272 .Tn IP
273 .Tn TTL
274 (time to live) field for a
275 .Tn UDP
276 datagram.
277 The msg_control field in the msghdr structure points to a buffer
278 that contains a cmsghdr structure followed by the
279 .Tn TTL .
280 The cmsghdr fields have the following values:
281 .Bd -literal
282 cmsg_len = CMSG_LEN(sizeof(u_char))
283 cmsg_level = IPPROTO_IP
284 cmsg_type = IP_RECVTTL
285 .Ed
286 .\"
287 .Pp
288 If the
289 .Dv IP_RECVTOS
290 option is enabled on a
291 .Dv SOCK_DGRAM
292 socket, the
293 .Xr recvmsg 2
294 call will return the
295 .Tn IP
296 .Tn TOS
297 (type of service) field for a
298 .Tn UDP
299 datagram.
300 The msg_control field in the msghdr structure points to a buffer
301 that contains a cmsghdr structure followed by the
302 .Tn TOS .
303 The cmsghdr fields have the following values:
304 .Bd -literal
305 cmsg_len = CMSG_LEN(sizeof(u_char))
306 cmsg_level = IPPROTO_IP
307 cmsg_type = IP_RECVTOS
308 .Ed
309 .\"
310 .Pp
311 If the
312 .Dv IP_RECVIF
313 option is enabled on a
314 .Dv SOCK_DGRAM
315 socket, the
316 .Xr recvmsg 2
317 call returns a
318 .Vt "struct sockaddr_dl"
319 corresponding to the interface on which the
320 packet was received.
321 The
322 .Va msg_control
323 field in the
324 .Vt msghdr
325 structure points to a buffer that contains a
326 .Vt cmsghdr
327 structure followed by the
328 .Vt "struct sockaddr_dl" .
329 The
330 .Vt cmsghdr
331 fields have the following values:
332 .Bd -literal
333 cmsg_len = CMSG_LEN(sizeof(struct sockaddr_dl))
334 cmsg_level = IPPROTO_IP
335 cmsg_type = IP_RECVIF
336 .Ed
337 .Pp
338 .Dv IP_PORTRANGE
339 may be used to set the port range used for selecting a local port number
340 on a socket with an unspecified (zero) port number.
341 It has the following
342 possible values:
343 .Bl -tag -width IP_PORTRANGE_DEFAULT
344 .It Dv IP_PORTRANGE_DEFAULT
345 use the default range of values, normally
346 .Dv IPPORT_HIFIRSTAUTO
347 through
348 .Dv IPPORT_HILASTAUTO .
349 This is adjustable through the sysctl setting:
350 .Va net.inet.ip.portrange.first
351 and
352 .Va net.inet.ip.portrange.last .
353 .It Dv IP_PORTRANGE_HIGH
354 use a high range of values, normally
355 .Dv IPPORT_HIFIRSTAUTO
356 and
357 .Dv IPPORT_HILASTAUTO .
358 This is adjustable through the sysctl setting:
359 .Va net.inet.ip.portrange.hifirst
360 and
361 .Va net.inet.ip.portrange.hilast .
362 .It Dv IP_PORTRANGE_LOW
363 use a low range of ports, which are normally restricted to
364 privileged processes on
365 .Ux
366 systems.
367 The range is normally from
368 .Dv IPPORT_RESERVED
369 \- 1 down to
370 .Li IPPORT_RESERVEDSTART
371 in descending order.
372 This is adjustable through the sysctl setting:
373 .Va net.inet.ip.portrange.lowfirst
374 and
375 .Va net.inet.ip.portrange.lowlast .
376 .El
377 .Pp
378 The range of privileged ports which only may be opened by
379 root-owned processes may be modified by the
380 .Va net.inet.ip.portrange.reservedlow
381 and
382 .Va net.inet.ip.portrange.reservedhigh
383 sysctl settings.
384 The values default to the traditional range,
385 0 through
386 .Dv IPPORT_RESERVED
387 \- 1
388 (0 through 1023), respectively.
389 Note that these settings do not affect and are not accounted for in the
390 use or calculation of the other
391 .Va net.inet.ip.portrange
392 values above.
393 Changing these values departs from
394 .Ux
395 tradition and has security
396 consequences that the administrator should carefully evaluate before
397 modifying these settings.
398 .Pp
399 Ports are allocated at random within the specified port range in order
400 to increase the difficulty of random spoofing attacks.
401 In scenarios such as benchmarking, this behavior may be undesirable.
402 In these cases,
403 .Va net.inet.ip.portrange.randomized
404 can be used to toggle randomization off.
405 If more than
406 .Va net.inet.ip.portrange.randomcps
407 ports have been allocated in the last second, then return to sequential
408 port allocation.
409 Return to random allocation only once the current port allocation rate
410 drops below
411 .Va net.inet.ip.portrange.randomcps
412 for at least
413 .Va net.inet.ip.portrange.randomtime
414 seconds.
415 The default values for
416 .Va net.inet.ip.portrange.randomcps
417 and
418 .Va net.inet.ip.portrange.randomtime
419 are 10 port allocations per second and 45 seconds correspondingly.
420 .Ss "Multicast Options"
421 .Pp
422 .Tn IP
423 multicasting is supported only on
424 .Dv AF_INET
425 sockets of type
426 .Dv SOCK_DGRAM
427 and
428 .Dv SOCK_RAW ,
429 and only on networks where the interface
430 driver supports multicasting.
431 .Pp
432 The
433 .Dv IP_MULTICAST_TTL
434 option changes the time-to-live (TTL)
435 for outgoing multicast datagrams
436 in order to control the scope of the multicasts:
437 .Bd -literal
438 u_char ttl;     /* range: 0 to 255, default = 1 */
439 setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl));
440 .Ed
441 .Pp
442 Datagrams with a TTL of 1 are not forwarded beyond the local network.
443 Multicast datagrams with a TTL of 0 will not be transmitted on any network,
444 but may be delivered locally if the sending host belongs to the destination
445 group and if multicast loopback has not been disabled on the sending socket
446 (see below).
447 Multicast datagrams with TTL greater than 1 may be forwarded
448 to other networks if a multicast router is attached to the local network.
449 .Pp
450 For hosts with multiple interfaces, where an interface has not
451 been specified for a multicast group membership,
452 each multicast transmission is sent from the primary network interface.
453 The
454 .Dv IP_MULTICAST_IF
455 option overrides the default for
456 subsequent transmissions from a given socket:
457 .Bd -literal
458 struct in_addr addr;
459 setsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, &addr, sizeof(addr));
460 .Ed
461 .Pp
462 where "addr" is the local
463 .Tn IP
464 address of the desired interface or
465 .Dv INADDR_ANY
466 to specify the default interface.
467 .Pp
468 To specify an interface by index, an instance of
469 .Vt ip_mreqn
470 may be passed instead.
471 The
472 .Vt imr_ifindex
473 member should be set to the index of the desired interface,
474 or 0 to specify the default interface.
475 The kernel differentiates between these two structures by their size.
476 .Pp
477 The use of
478 .Vt IP_MULTICAST_IF
479 is
480 .Em not recommended ,
481 as multicast memberships are scoped to each
482 individual interface.
483 It is supported for legacy use only by applications,
484 such as routing daemons, which expect to
485 be able to transmit link-local IPv4 multicast datagrams (224.0.0.0/24)
486 on multiple interfaces,
487 without requesting an individual membership for each interface.
488 .Pp
489 .\"
490 An interface's local IP address and multicast capability can
491 be obtained via the
492 .Dv SIOCGIFCONF
493 and
494 .Dv SIOCGIFFLAGS
495 ioctls.
496 Normal applications should not need to use this option.
497 .Pp
498 If a multicast datagram is sent to a group to which the sending host itself
499 belongs (on the outgoing interface), a copy of the datagram is, by default,
500 looped back by the IP layer for local delivery.
501 The
502 .Dv IP_MULTICAST_LOOP
503 option gives the sender explicit control
504 over whether or not subsequent datagrams are looped back:
505 .Bd -literal
506 u_char loop;    /* 0 = disable, 1 = enable (default) */
507 setsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
508 .Ed
509 .Pp
510 This option
511 improves performance for applications that may have no more than one
512 instance on a single host (such as a routing daemon), by eliminating
513 the overhead of receiving their own transmissions.
514 It should generally not
515 be used by applications for which there may be more than one instance on a
516 single host (such as a conferencing program) or for which the sender does
517 not belong to the destination group (such as a time querying program).
518 .Pp
519 The sysctl setting
520 .Va net.inet.ip.mcast.loop
521 controls the default setting of the
522 .Dv IP_MULTICAST_LOOP
523 socket option for new sockets.
524 .Pp
525 A multicast datagram sent with an initial TTL greater than 1 may be delivered
526 to the sending host on a different interface from that on which it was sent,
527 if the host belongs to the destination group on that other interface.
528 The loopback control option has no effect on such delivery.
529 .Pp
530 A host must become a member of a multicast group before it can receive
531 datagrams sent to the group.
532 To join a multicast group, use the
533 .Dv IP_ADD_MEMBERSHIP
534 option:
535 .Bd -literal
536 struct ip_mreq mreq;
537 setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
538 .Ed
539 .Pp
540 where
541 .Fa mreq
542 is the following structure:
543 .Bd -literal
544 struct ip_mreq {
545     struct in_addr imr_multiaddr; /* IP multicast address of group */
546     struct in_addr imr_interface; /* local IP address of interface */
547 }
548 .Ed
549 .Pp
550 .Va imr_interface
551 should be set to the
552 .Tn IP
553 address of a particular multicast-capable interface if
554 the host is multihomed.
555 It may be set to
556 .Dv INADDR_ANY
557 to choose the default interface, although this is not recommended;
558 this is considered to be the first interface corresponding
559 to the default route.
560 Otherwise, the first multicast-capable interface
561 configured in the system will be used.
562 .Pp
563 Prior to
564 .Fx 7.0 ,
565 if the
566 .Va imr_interface
567 member is within the network range
568 .Li 0.0.0.0/8 ,
569 it is treated as an interface index in the system interface MIB,
570 as per the RIP Version 2 MIB Extension (RFC-1724).
571 In versions of
572 .Fx
573 since 7.0, this behavior is no longer supported.
574 Developers should
575 instead use the RFC 3678 multicast source filter APIs; in particular,
576 .Dv MCAST_JOIN_GROUP .
577 .Pp
578 Up to
579 .Dv IP_MAX_MEMBERSHIPS
580 memberships may be added on a single socket.
581 Membership is associated with a single interface;
582 programs running on multihomed hosts may need to
583 join the same group on more than one interface.
584 .Pp
585 To drop a membership, use:
586 .Bd -literal
587 struct ip_mreq mreq;
588 setsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
589 .Ed
590 .Pp
591 where
592 .Fa mreq
593 contains the same values as used to add the membership.
594 Memberships are dropped when the socket is closed or the process exits.
595 .\" TODO: Update this piece when IPv4 source-address selection is implemented.
596 .Pp
597 The IGMP protocol uses the primary IP address of the interface
598 as its identifier for group membership.
599 This is the first IP address configured on the interface.
600 If this address is removed or changed, the results are
601 undefined, as the IGMP membership state will then be inconsistent.
602 If multiple IP aliases are configured on the same interface,
603 they will be ignored.
604 .Pp
605 This shortcoming was addressed in IPv6; MLDv2 requires
606 that the unique link-local address for an interface is
607 used to identify an MLDv2 listener.
608 .Ss "Source-Specific Multicast Options"
609 Since
610 .Fx 8.0 ,
611 the use of Source-Specific Multicast (SSM) is supported.
612 These extensions require an IGMPv3 multicast router in order to
613 make best use of them.
614 If a legacy multicast router is present on the link,
615 .Fx
616 will simply downgrade to the version of IGMP spoken by the router,
617 and the benefits of source filtering on the upstream link
618 will not be present, although the kernel will continue to
619 squelch transmissions from blocked sources.
620 .Pp
621 Each group membership on a socket now has a filter mode:
622 .Bl -tag -width MCAST_EXCLUDE
623 .It Dv MCAST_EXCLUDE
624 Datagrams sent to this group are accepted,
625 unless the source is in a list of blocked source addresses.
626 .It Dv MCAST_INCLUDE
627 Datagrams sent to this group are accepted
628 only if the source is in a list of accepted source addresses.
629 .El
630 .Pp
631 Groups joined using the legacy
632 .Dv IP_ADD_MEMBERSHIP
633 option are placed in exclusive-mode,
634 and are able to request that certain sources are blocked or allowed.
635 This is known as the
636 .Em delta-based API .
637 .Pp
638 To block a multicast source on an existing group membership:
639 .Bd -literal
640 struct ip_mreq_source mreqs;
641 setsockopt(s, IPPROTO_IP, IP_BLOCK_SOURCE, &mreqs, sizeof(mreqs));
642 .Ed
643 .Pp
644 where
645 .Fa mreqs
646 is the following structure:
647 .Bd -literal
648 struct ip_mreq_source {
649     struct in_addr imr_multiaddr; /* IP multicast address of group */
650     struct in_addr imr_sourceaddr; /* IP address of source */
651     struct in_addr imr_interface; /* local IP address of interface */
652 }
653 .Ed
654 .Va imr_sourceaddr
655 should be set to the address of the source to be blocked.
656 .Pp
657 To unblock a multicast source on an existing group:
658 .Bd -literal
659 struct ip_mreq_source mreqs;
660 setsockopt(s, IPPROTO_IP, IP_UNBLOCK_SOURCE, &mreqs, sizeof(mreqs));
661 .Ed
662 .Pp
663 The
664 .Dv IP_BLOCK_SOURCE
665 and
666 .Dv IP_UNBLOCK_SOURCE
667 options are
668 .Em not permitted
669 for inclusive-mode group memberships.
670 .Pp
671 To join a multicast group in
672 .Dv MCAST_INCLUDE
673 mode with a single source,
674 or add another source to an existing inclusive-mode membership:
675 .Bd -literal
676 struct ip_mreq_source mreqs;
677 setsockopt(s, IPPROTO_IP, IP_ADD_SOURCE_MEMBERSHIP, &mreqs, sizeof(mreqs));
678 .Ed
679 .Pp
680 To leave a single source from an existing group in inclusive mode:
681 .Bd -literal
682 struct ip_mreq_source mreqs;
683 setsockopt(s, IPPROTO_IP, IP_DROP_SOURCE_MEMBERSHIP, &mreqs, sizeof(mreqs));
684 .Ed
685 If this is the last accepted source for the group, the membership
686 will be dropped.
687 .Pp
688 The
689 .Dv IP_ADD_SOURCE_MEMBERSHIP
690 and
691 .Dv IP_DROP_SOURCE_MEMBERSHIP
692 options are
693 .Em not accepted
694 for exclusive-mode group memberships.
695 However, both exclusive and inclusive mode memberships
696 support the use of the
697 .Em full-state API
698 documented in RFC 3678.
699 For management of source filter lists using this API,
700 please refer to
701 .Xr sourcefilter 3 .
702 .Pp
703 The sysctl settings
704 .Va net.inet.ip.mcast.maxsocksrc
705 and
706 .Va net.inet.ip.mcast.maxgrpsrc
707 are used to specify an upper limit on the number of per-socket and per-group
708 source filter entries which the kernel may allocate.
709 .\"-----------------------
710 .Ss "Raw IP Sockets"
711 .Pp
712 Raw
713 .Tn IP
714 sockets are connectionless,
715 and are normally used with the
716 .Xr sendto 2
717 and
718 .Xr recvfrom 2
719 calls, though the
720 .Xr connect 2
721 call may also be used to fix the destination for future
722 packets (in which case the
723 .Xr read 2
724 or
725 .Xr recv 2
726 and
727 .Xr write 2
728 or
729 .Xr send 2
730 system calls may be used).
731 .Pp
732 If
733 .Fa proto
734 is 0, the default protocol
735 .Dv IPPROTO_RAW
736 is used for outgoing
737 packets, and only incoming packets destined for that protocol
738 are received.
739 If
740 .Fa proto
741 is non-zero, that protocol number will be used on outgoing packets
742 and to filter incoming packets.
743 .Pp
744 Outgoing packets automatically have an
745 .Tn IP
746 header prepended to
747 them (based on the destination address and the protocol
748 number the socket is created with),
749 unless the
750 .Dv IP_HDRINCL
751 option has been set.
752 Incoming packets are received with
753 .Tn IP
754 header and options intact.
755 .Pp
756 .Dv IP_HDRINCL
757 indicates the complete IP header is included with the data
758 and may be used only with the
759 .Dv SOCK_RAW
760 type.
761 .Bd -literal
762 #include <netinet/in_systm.h>
763 #include <netinet/ip.h>
764
765 int hincl = 1;                  /* 1 = on, 0 = off */
766 setsockopt(s, IPPROTO_IP, IP_HDRINCL, &hincl, sizeof(hincl));
767 .Ed
768 .Pp
769 Unlike previous
770 .Bx
771 releases, the program must set all
772 the fields of the IP header, including the following:
773 .Bd -literal
774 ip->ip_v = IPVERSION;
775 ip->ip_hl = hlen >> 2;
776 ip->ip_id = 0;  /* 0 means kernel set appropriate value */
777 ip->ip_off = offset;
778 .Ed
779 .Pp
780 The
781 .Va ip_len
782 and
783 .Va ip_off
784 fields
785 .Em must
786 be provided in host byte order .
787 All other fields must be provided in network byte order.
788 See
789 .Xr byteorder 3
790 for more information on network byte order.
791 If the
792 .Va ip_id
793 field is set to 0 then the kernel will choose an
794 appropriate value.
795 If the header source address is set to
796 .Dv INADDR_ANY ,
797 the kernel will choose an appropriate address.
798 .Sh ERRORS
799 A socket operation may fail with one of the following errors returned:
800 .Bl -tag -width Er
801 .It Bq Er EISCONN
802 when trying to establish a connection on a socket which
803 already has one, or when trying to send a datagram with the destination
804 address specified and the socket is already connected;
805 .It Bq Er ENOTCONN
806 when trying to send a datagram, but
807 no destination address is specified, and the socket has not been
808 connected;
809 .It Bq Er ENOBUFS
810 when the system runs out of memory for
811 an internal data structure;
812 .It Bq Er EADDRNOTAVAIL
813 when an attempt is made to create a
814 socket with a network address for which no network interface
815 exists.
816 .It Bq Er EACCES
817 when an attempt is made to create
818 a raw IP socket by a non-privileged process.
819 .El
820 .Pp
821 The following errors specific to
822 .Tn IP
823 may occur when setting or getting
824 .Tn IP
825 options:
826 .Bl -tag -width Er
827 .It Bq Er EINVAL
828 An unknown socket option name was given.
829 .It Bq Er EINVAL
830 The IP option field was improperly formed;
831 an option field was shorter than the minimum value
832 or longer than the option buffer provided.
833 .El
834 .Pp
835 The following errors may occur when attempting to send
836 .Tn IP
837 datagrams via a
838 .Dq raw socket
839 with the
840 .Dv IP_HDRINCL
841 option set:
842 .Bl -tag -width Er
843 .It Bq Er EINVAL
844 The user-supplied
845 .Va ip_len
846 field was not equal to the length of the datagram written to the socket.
847 .El
848 .Sh SEE ALSO
849 .Xr getsockopt 2 ,
850 .Xr recv 2 ,
851 .Xr send 2 ,
852 .Xr byteorder 3 ,
853 .Xr icmp 4 ,
854 .Xr igmp 4 ,
855 .Xr inet 4 ,
856 .Xr intro 4 ,
857 .Xr multicast 4 ,
858 .Xr sourcefilter 3
859 .Rs
860 .%A D. Thaler
861 .%A B. Fenner
862 .%A B. Quinn
863 .%T "Socket Interface Extensions for Multicast Source Filters"
864 .%N RFC 3678
865 .%D Jan 2004
866 .Re
867 .Sh HISTORY
868 The
869 .Nm
870 protocol appeared in
871 .Bx 4.2 .
872 The
873 .Vt ip_mreqn
874 structure appeared in
875 .Tn Linux 2.4 .