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*e8574be3SGleb Smirnoff.Dd September 20, 2012 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 16830852968SMichael Tuexencmsg_len = CMSG_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 175f99a2a0cSGleb Smirnoffdatagrams on a socket can be specified as ancillary data with a type code of 176c557ae16SIan Dowse.Dv IP_SENDSRCADDR . 177c557ae16SIan DowseThe msg_control field in the msghdr structure should point to a buffer 1788d22ff75SRuslan Ermilovthat contains a 1798d22ff75SRuslan Ermilov.Vt cmsghdr 1808d22ff75SRuslan Ermilovstructure followed by the 181c557ae16SIan Dowse.Tn IP 182c557ae16SIan Dowseaddress. 183c557ae16SIan DowseThe cmsghdr fields should have the following values: 184c557ae16SIan Dowse.Bd -literal 18530852968SMichael Tuexencmsg_len = CMSG_LEN(sizeof(struct in_addr)) 186c557ae16SIan Dowsecmsg_level = IPPROTO_IP 187c557ae16SIan Dowsecmsg_type = IP_SENDSRCADDR 188c557ae16SIan Dowse.Ed 189c557ae16SIan Dowse.Pp 190*e8574be3SGleb SmirnoffThe socket should be either bound to 191*e8574be3SGleb Smirnoff.Dv INADDR_ANY 192*e8574be3SGleb Smirnoffand a local port, and the address supplied with 193f99a2a0cSGleb Smirnoff.Dv IP_SENDSRCADDR 194*e8574be3SGleb Smirnoffshould't be 195f99a2a0cSGleb Smirnoff.Dv INADDR_ANY , 196*e8574be3SGleb Smirnoffor the socket should be bound to a local address and the address supplied with 197f99a2a0cSGleb Smirnoff.Dv IP_SENDSRCADDR 198*e8574be3SGleb Smirnoffshould be 199f99a2a0cSGleb Smirnoff.Dv INADDR_ANY . 200*e8574be3SGleb SmirnoffIn the latter case bound address is overriden via generic source address 201*e8574be3SGleb Smirnoffselection logic, which would choose IP address of interface closest to 202*e8574be3SGleb Smirnoffdestination. 203f99a2a0cSGleb Smirnoff.Pp 204c557ae16SIan DowseFor convenience, 205c557ae16SIan Dowse.Dv IP_SENDSRCADDR 206c557ae16SIan Dowseis defined to have the same value as 207c557ae16SIan Dowse.Dv IP_RECVDSTADDR , 208c557ae16SIan Dowseso the 209c557ae16SIan Dowse.Dv IP_RECVDSTADDR 210c557ae16SIan Dowsecontrol message from 211c557ae16SIan Dowse.Xr recvmsg 2 212c557ae16SIan Dowsecan be used directly as a control message for 213c557ae16SIan Dowse.Xr sendmsg 2 . 21404bcf5a9SBruce M Simpson.\" 215c557ae16SIan Dowse.Pp 2163b5f87e6SMatthew N. DoddIf the 2178afa2304SBruce M Simpson.Dv IP_ONESBCAST 2188afa2304SBruce M Simpsonoption is enabled on a 2198afa2304SBruce M Simpson.Dv SOCK_DGRAM 2208afa2304SBruce M Simpsonor a 2218afa2304SBruce M Simpson.Dv SOCK_RAW 2228afa2304SBruce M Simpsonsocket, the destination address of outgoing 2238afa2304SBruce M Simpsonbroadcast datagrams on that socket will be forced 2248afa2304SBruce M Simpsonto the undirected broadcast address, 2258afa2304SBruce M Simpson.Dv INADDR_BROADCAST , 2268afa2304SBruce M Simpsonbefore transmission. 2278afa2304SBruce M SimpsonThis is in contrast to the default behavior of the 2288afa2304SBruce M Simpsonsystem, which is to transmit undirected broadcasts 2298afa2304SBruce M Simpsonvia the first network interface with the 23050d922a0SGlen Barber.Dv IFF_BROADCAST 23150d922a0SGlen Barberflag set. 2328afa2304SBruce M Simpson.Pp 2338afa2304SBruce M SimpsonThis option allows applications to choose which 2348afa2304SBruce M Simpsoninterface is used to transmit an undirected broadcast 2358afa2304SBruce M Simpsondatagram. 2368afa2304SBruce M SimpsonFor example, the following code would force an 2378afa2304SBruce M Simpsonundirected broadcast to be transmitted via the interface 2388afa2304SBruce M Simpsonconfigured with the broadcast address 192.168.2.255: 2398afa2304SBruce M Simpson.Bd -literal 2408afa2304SBruce M Simpsonchar msg[512]; 2418afa2304SBruce M Simpsonstruct sockaddr_in sin; 24267a3f4b2SRuslan Ermilovint onesbcast = 1; /* 0 = disable (default), 1 = enable */ 2438afa2304SBruce M Simpson 2448afa2304SBruce M Simpsonsetsockopt(s, IPPROTO_IP, IP_ONESBCAST, &onesbcast, sizeof(onesbcast)); 2458afa2304SBruce M Simpsonsin.sin_addr.s_addr = inet_addr("192.168.2.255"); 2468afa2304SBruce M Simpsonsin.sin_port = htons(1234); 2478afa2304SBruce M Simpsonsendto(s, msg, sizeof(msg), 0, &sin, sizeof(sin)); 2488afa2304SBruce M Simpson.Ed 2498afa2304SBruce M Simpson.Pp 2508afa2304SBruce M SimpsonIt is the application's responsibility to set the 25150d922a0SGlen Barber.Dv IP_TTL 25250d922a0SGlen Barberoption 2538afa2304SBruce M Simpsonto an appropriate value in order to prevent broadcast storms. 2548afa2304SBruce M SimpsonThe application must have sufficient credentials to set the 2558afa2304SBruce M Simpson.Dv SO_BROADCAST 2568afa2304SBruce M Simpsonsocket level option, otherwise the 25750d922a0SGlen Barber.Dv IP_ONESBCAST 25850d922a0SGlen Barberoption has no effect. 2598afa2304SBruce M Simpson.Pp 2608afa2304SBruce M SimpsonIf the 26179d6b3f3SPawel Jakub Dawidek.Dv IP_BINDANY 26279d6b3f3SPawel Jakub Dawidekoption is enabled on a 26379d6b3f3SPawel Jakub Dawidek.Dv SOCK_STREAM , 26479d6b3f3SPawel Jakub Dawidek.Dv SOCK_DGRAM 26579d6b3f3SPawel Jakub Dawidekor a 26679d6b3f3SPawel Jakub Dawidek.Dv SOCK_RAW 26779d6b3f3SPawel Jakub Dawideksocket, one can 26879d6b3f3SPawel Jakub Dawidek.Xr bind 2 26979d6b3f3SPawel Jakub Dawidekto any address, even one not bound to any available network interface in the 27079d6b3f3SPawel Jakub Dawideksystem. 27179d6b3f3SPawel Jakub DawidekThis functionality (in conjunction with special firewall rules) can be used for 27279d6b3f3SPawel Jakub Dawidekimplementing a transparent proxy. 27379d6b3f3SPawel Jakub DawidekThe 27479d6b3f3SPawel Jakub Dawidek.Dv PRIV_NETINET_BINDANY 27579d6b3f3SPawel Jakub Dawidekprivilege is needed to set this option. 27679d6b3f3SPawel Jakub Dawidek.Pp 27779d6b3f3SPawel Jakub DawidekIf the 2784957466bSMatthew N. Dodd.Dv IP_RECVTTL 2794957466bSMatthew N. Doddoption is enabled on a 2804957466bSMatthew N. Dodd.Dv SOCK_DGRAM 2814957466bSMatthew N. Doddsocket, the 2824957466bSMatthew N. Dodd.Xr recvmsg 2 2834957466bSMatthew N. Doddcall will return the 2844957466bSMatthew N. Dodd.Tn IP 2854957466bSMatthew N. Dodd.Tn TTL 2864957466bSMatthew N. Dodd(time to live) field for a 2874957466bSMatthew N. Dodd.Tn UDP 2884957466bSMatthew N. Dodddatagram. 2894957466bSMatthew N. DoddThe msg_control field in the msghdr structure points to a buffer 2904957466bSMatthew N. Doddthat contains a cmsghdr structure followed by the 2914957466bSMatthew N. Dodd.Tn TTL . 2924957466bSMatthew N. DoddThe cmsghdr fields have the following values: 2934957466bSMatthew N. Dodd.Bd -literal 29430852968SMichael Tuexencmsg_len = CMSG_LEN(sizeof(u_char)) 2954957466bSMatthew N. Doddcmsg_level = IPPROTO_IP 2964957466bSMatthew N. Doddcmsg_type = IP_RECVTTL 2974957466bSMatthew N. Dodd.Ed 29804bcf5a9SBruce M Simpson.\" 2994957466bSMatthew N. Dodd.Pp 3004957466bSMatthew N. DoddIf the 3013cca425bSMichael Tuexen.Dv IP_RECVTOS 3023cca425bSMichael Tuexenoption is enabled on a 3033cca425bSMichael Tuexen.Dv SOCK_DGRAM 3043cca425bSMichael Tuexensocket, the 3053cca425bSMichael Tuexen.Xr recvmsg 2 3063cca425bSMichael Tuexencall will return the 3073cca425bSMichael Tuexen.Tn IP 3083cca425bSMichael Tuexen.Tn TOS 3093cca425bSMichael Tuexen(type of service) field for a 3103cca425bSMichael Tuexen.Tn UDP 3113cca425bSMichael Tuexendatagram. 3123cca425bSMichael TuexenThe msg_control field in the msghdr structure points to a buffer 3133cca425bSMichael Tuexenthat contains a cmsghdr structure followed by the 3143cca425bSMichael Tuexen.Tn TOS . 3153cca425bSMichael TuexenThe cmsghdr fields have the following values: 3163cca425bSMichael Tuexen.Bd -literal 3173cca425bSMichael Tuexencmsg_len = CMSG_LEN(sizeof(u_char)) 3183cca425bSMichael Tuexencmsg_level = IPPROTO_IP 3193cca425bSMichael Tuexencmsg_type = IP_RECVTOS 3203cca425bSMichael Tuexen.Ed 3213cca425bSMichael Tuexen.\" 3223cca425bSMichael Tuexen.Pp 3233cca425bSMichael TuexenIf the 3243b5f87e6SMatthew N. Dodd.Dv IP_RECVIF 3253b5f87e6SMatthew N. Doddoption is enabled on a 3263b5f87e6SMatthew N. Dodd.Dv SOCK_DGRAM 3273b5f87e6SMatthew N. Doddsocket, the 3283b5f87e6SMatthew N. Dodd.Xr recvmsg 2 3298d22ff75SRuslan Ermilovcall returns a 3308d22ff75SRuslan Ermilov.Vt "struct sockaddr_dl" 3318d22ff75SRuslan Ermilovcorresponding to the interface on which the 3328d22ff75SRuslan Ermilovpacket was received. 3338d22ff75SRuslan ErmilovThe 3348d22ff75SRuslan Ermilov.Va msg_control 3358d22ff75SRuslan Ermilovfield in the 3368d22ff75SRuslan Ermilov.Vt msghdr 3378d22ff75SRuslan Ermilovstructure points to a buffer that contains a 3388d22ff75SRuslan Ermilov.Vt cmsghdr 3398d22ff75SRuslan Ermilovstructure followed by the 3408d22ff75SRuslan Ermilov.Vt "struct sockaddr_dl" . 3418d22ff75SRuslan ErmilovThe 3428d22ff75SRuslan Ermilov.Vt cmsghdr 3438d22ff75SRuslan Ermilovfields have the following values: 3443b5f87e6SMatthew N. Dodd.Bd -literal 34530852968SMichael Tuexencmsg_len = CMSG_LEN(sizeof(struct sockaddr_dl)) 3463b5f87e6SMatthew N. Doddcmsg_level = IPPROTO_IP 3473b5f87e6SMatthew N. Doddcmsg_type = IP_RECVIF 3483b5f87e6SMatthew N. Dodd.Ed 3493b5f87e6SMatthew N. Dodd.Pp 3507ee32b9fSPeter Wemm.Dv IP_PORTRANGE 3517ee32b9fSPeter Wemmmay be used to set the port range used for selecting a local port number 3526d249eeeSSheldon Hearnon a socket with an unspecified (zero) port number. 3536d249eeeSSheldon HearnIt has the following 3547ee32b9fSPeter Wemmpossible values: 3557ee32b9fSPeter Wemm.Bl -tag -width IP_PORTRANGE_DEFAULT 3567ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_DEFAULT 3577ee32b9fSPeter Wemmuse the default range of values, normally 35874c0361aSMike Silbersack.Dv IPPORT_HIFIRSTAUTO 3597ee32b9fSPeter Wemmthrough 36074c0361aSMike Silbersack.Dv IPPORT_HILASTAUTO . 3617ee32b9fSPeter WemmThis is adjustable through the sysctl setting: 362ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.first 3637ee32b9fSPeter Wemmand 364ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.last . 3657ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_HIGH 3667ee32b9fSPeter Wemmuse a high range of values, normally 3677ee32b9fSPeter Wemm.Dv IPPORT_HIFIRSTAUTO 3687ee32b9fSPeter Wemmand 3697ee32b9fSPeter Wemm.Dv IPPORT_HILASTAUTO . 3707ee32b9fSPeter WemmThis is adjustable through the sysctl setting: 371ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.hifirst 3727ee32b9fSPeter Wemmand 373ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.hilast . 3747ee32b9fSPeter Wemm.It Dv IP_PORTRANGE_LOW 3757ee32b9fSPeter Wemmuse a low range of ports, which are normally restricted to 3767ee32b9fSPeter Wemmprivileged processes on 3777ee32b9fSPeter Wemm.Ux 3788d22ff75SRuslan Ermilovsystems. 3798d22ff75SRuslan ErmilovThe range is normally from 380ace5be68SRuslan Ermilov.Dv IPPORT_RESERVED 381ace5be68SRuslan Ermilov\- 1 down to 3828f5e8232SBen Smithurst.Li IPPORT_RESERVEDSTART 3838f5e8232SBen Smithurstin descending order. 3848f5e8232SBen SmithurstThis is adjustable through the sysctl setting: 385ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.lowfirst 3868f5e8232SBen Smithurstand 387ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.lowlast . 3887ee32b9fSPeter Wemm.El 389718b17bbSCrist J. Clark.Pp 390718b17bbSCrist J. ClarkThe range of privileged ports which only may be opened by 391718b17bbSCrist J. Clarkroot-owned processes may be modified by the 392ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.reservedlow 393718b17bbSCrist J. Clarkand 394ace5be68SRuslan Ermilov.Va net.inet.ip.portrange.reservedhigh 395718b17bbSCrist J. Clarksysctl settings. 396718b17bbSCrist J. ClarkThe values default to the traditional range, 397718b17bbSCrist J. Clark0 through 398ace5be68SRuslan Ermilov.Dv IPPORT_RESERVED 399ace5be68SRuslan Ermilov\- 1 400718b17bbSCrist J. Clark(0 through 1023), respectively. 401718b17bbSCrist J. ClarkNote that these settings do not affect and are not accounted for in the 402718b17bbSCrist J. Clarkuse or calculation of the other 403ace5be68SRuslan Ermilov.Va net.inet.ip.portrange 404718b17bbSCrist J. Clarkvalues above. 405ace5be68SRuslan ErmilovChanging these values departs from 406ace5be68SRuslan Ermilov.Ux 407ace5be68SRuslan Ermilovtradition and has security 408ace5be68SRuslan Ermilovconsequences that the administrator should carefully evaluate before 409718b17bbSCrist J. Clarkmodifying these settings. 410fe9892eaSMike Silbersack.Pp 411fe9892eaSMike SilbersackPorts are allocated at random within the specified port range in order 412bf7f20c2SRuslan Ermilovto increase the difficulty of random spoofing attacks. 413c48524c2SMike PritchardIn scenarios such as benchmarking, this behavior may be undesirable. 414bf7f20c2SRuslan ErmilovIn these cases, 415fe9892eaSMike Silbersack.Va net.inet.ip.portrange.randomized 416fe9892eaSMike Silbersackcan be used to toggle randomization off. 4176ee79c59SMaxim KonovalovIf more than 4186ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomcps 4196ee79c59SMaxim Konovalovports have been allocated in the last second, then return to sequential 4206ee79c59SMaxim Konovalovport allocation. 4216ee79c59SMaxim KonovalovReturn to random allocation only once the current port allocation rate 4226ee79c59SMaxim Konovalovdrops below 4236ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomcps 4246ee79c59SMaxim Konovalovfor at least 4256ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomtime 4266ee79c59SMaxim Konovalovseconds. 4276ee79c59SMaxim KonovalovThe default values for 4286ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomcps 4296ee79c59SMaxim Konovalovand 4306ee79c59SMaxim Konovalov.Va net.inet.ip.portrange.randomtime 4316ee79c59SMaxim Konovalovare 10 port allocations per second and 45 seconds correspondingly. 432afe61c15SRodney W. Grimes.Ss "Multicast Options" 433afe61c15SRodney W. Grimes.Tn IP 434afe61c15SRodney W. Grimesmulticasting is supported only on 435afe61c15SRodney W. Grimes.Dv AF_INET 436afe61c15SRodney W. Grimessockets of type 437afe61c15SRodney W. Grimes.Dv SOCK_DGRAM 438afe61c15SRodney W. Grimesand 439afe61c15SRodney W. Grimes.Dv SOCK_RAW , 440afe61c15SRodney W. Grimesand only on networks where the interface 441afe61c15SRodney W. Grimesdriver supports multicasting. 442afe61c15SRodney W. Grimes.Pp 443afe61c15SRodney W. GrimesThe 444afe61c15SRodney W. Grimes.Dv IP_MULTICAST_TTL 445afe61c15SRodney W. Grimesoption changes the time-to-live (TTL) 446afe61c15SRodney W. Grimesfor outgoing multicast datagrams 447afe61c15SRodney W. Grimesin order to control the scope of the multicasts: 448afe61c15SRodney W. Grimes.Bd -literal 449afe61c15SRodney W. Grimesu_char ttl; /* range: 0 to 255, default = 1 */ 450afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)); 451afe61c15SRodney W. Grimes.Ed 4520c3a1746SMike Pritchard.Pp 453afe61c15SRodney W. GrimesDatagrams with a TTL of 1 are not forwarded beyond the local network. 454afe61c15SRodney W. GrimesMulticast datagrams with a TTL of 0 will not be transmitted on any network, 455afe61c15SRodney W. Grimesbut may be delivered locally if the sending host belongs to the destination 456afe61c15SRodney W. Grimesgroup and if multicast loopback has not been disabled on the sending socket 4578d22ff75SRuslan Ermilov(see below). 4588d22ff75SRuslan ErmilovMulticast datagrams with TTL greater than 1 may be forwarded 459afe61c15SRodney W. Grimesto other networks if a multicast router is attached to the local network. 460afe61c15SRodney W. Grimes.Pp 461108ad5bdSBruce M SimpsonFor hosts with multiple interfaces, where an interface has not 462108ad5bdSBruce M Simpsonbeen specified for a multicast group membership, 463108ad5bdSBruce M Simpsoneach multicast transmission is sent from the primary network interface. 464afe61c15SRodney W. GrimesThe 465afe61c15SRodney W. Grimes.Dv IP_MULTICAST_IF 466afe61c15SRodney W. Grimesoption overrides the default for 467afe61c15SRodney W. Grimessubsequent transmissions from a given socket: 468afe61c15SRodney W. Grimes.Bd -literal 469afe61c15SRodney W. Grimesstruct in_addr addr; 470afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, &addr, sizeof(addr)); 471afe61c15SRodney W. Grimes.Ed 4720c3a1746SMike Pritchard.Pp 473afe61c15SRodney W. Grimeswhere "addr" is the local 474afe61c15SRodney W. Grimes.Tn IP 475afe61c15SRodney W. Grimesaddress of the desired interface or 476afe61c15SRodney W. Grimes.Dv INADDR_ANY 477afe61c15SRodney W. Grimesto specify the default interface. 47871498f30SBruce M Simpson.Pp 47971498f30SBruce M SimpsonTo specify an interface by index, an instance of 48071498f30SBruce M Simpson.Vt ip_mreqn 481108ad5bdSBruce M Simpsonmay be passed instead. 48271498f30SBruce M SimpsonThe 48371498f30SBruce M Simpson.Vt imr_ifindex 48471498f30SBruce M Simpsonmember should be set to the index of the desired interface, 48571498f30SBruce M Simpsonor 0 to specify the default interface. 48671498f30SBruce M SimpsonThe kernel differentiates between these two structures by their size. 487108ad5bdSBruce M Simpson.Pp 488108ad5bdSBruce M SimpsonThe use of 489108ad5bdSBruce M Simpson.Vt IP_MULTICAST_IF 490108ad5bdSBruce M Simpsonis 491108ad5bdSBruce M Simpson.Em not recommended , 492108ad5bdSBruce M Simpsonas multicast memberships are scoped to each 493108ad5bdSBruce M Simpsonindividual interface. 494108ad5bdSBruce M SimpsonIt is supported for legacy use only by applications, 495108ad5bdSBruce M Simpsonsuch as routing daemons, which expect to 496108ad5bdSBruce M Simpsonbe able to transmit link-local IPv4 multicast datagrams (224.0.0.0/24) 497108ad5bdSBruce M Simpsonon multiple interfaces, 498108ad5bdSBruce M Simpsonwithout requesting an individual membership for each interface. 499108ad5bdSBruce M Simpson.Pp 50071498f30SBruce M Simpson.\" 501afe61c15SRodney W. GrimesAn interface's local IP address and multicast capability can 502afe61c15SRodney W. Grimesbe obtained via the 503afe61c15SRodney W. Grimes.Dv SIOCGIFCONF 504afe61c15SRodney W. Grimesand 505afe61c15SRodney W. Grimes.Dv SIOCGIFFLAGS 506afe61c15SRodney W. Grimesioctls. 507afe61c15SRodney W. GrimesNormal applications should not need to use this option. 508afe61c15SRodney W. Grimes.Pp 509afe61c15SRodney W. GrimesIf a multicast datagram is sent to a group to which the sending host itself 510afe61c15SRodney W. Grimesbelongs (on the outgoing interface), a copy of the datagram is, by default, 511afe61c15SRodney W. Grimeslooped back by the IP layer for local delivery. 512afe61c15SRodney W. GrimesThe 513afe61c15SRodney W. Grimes.Dv IP_MULTICAST_LOOP 514afe61c15SRodney W. Grimesoption gives the sender explicit control 515afe61c15SRodney W. Grimesover whether or not subsequent datagrams are looped back: 516afe61c15SRodney W. Grimes.Bd -literal 517afe61c15SRodney W. Grimesu_char loop; /* 0 = disable, 1 = enable (default) */ 518afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)); 519afe61c15SRodney W. Grimes.Ed 5200c3a1746SMike Pritchard.Pp 521afe61c15SRodney W. GrimesThis option 522afe61c15SRodney W. Grimesimproves performance for applications that may have no more than one 523d10910e6SBruce M Simpsoninstance on a single host (such as a routing daemon), by eliminating 5248d22ff75SRuslan Ermilovthe overhead of receiving their own transmissions. 5258d22ff75SRuslan ErmilovIt should generally not 526afe61c15SRodney W. Grimesbe used by applications for which there may be more than one instance on a 527afe61c15SRodney W. Grimessingle host (such as a conferencing program) or for which the sender does 528afe61c15SRodney W. Grimesnot belong to the destination group (such as a time querying program). 529afe61c15SRodney W. Grimes.Pp 530d10910e6SBruce M SimpsonThe sysctl setting 531d10910e6SBruce M Simpson.Va net.inet.ip.mcast.loop 532d10910e6SBruce M Simpsoncontrols the default setting of the 533d10910e6SBruce M Simpson.Dv IP_MULTICAST_LOOP 534d10910e6SBruce M Simpsonsocket option for new sockets. 535d10910e6SBruce M Simpson.Pp 536afe61c15SRodney W. GrimesA multicast datagram sent with an initial TTL greater than 1 may be delivered 537afe61c15SRodney W. Grimesto the sending host on a different interface from that on which it was sent, 5388d22ff75SRuslan Ermilovif the host belongs to the destination group on that other interface. 5398d22ff75SRuslan ErmilovThe loopback control option has no effect on such delivery. 540afe61c15SRodney W. Grimes.Pp 541afe61c15SRodney W. GrimesA host must become a member of a multicast group before it can receive 5428d22ff75SRuslan Ermilovdatagrams sent to the group. 5438d22ff75SRuslan ErmilovTo join a multicast group, use the 544afe61c15SRodney W. Grimes.Dv IP_ADD_MEMBERSHIP 545afe61c15SRodney W. Grimesoption: 546afe61c15SRodney W. Grimes.Bd -literal 547afe61c15SRodney W. Grimesstruct ip_mreq mreq; 548afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); 549afe61c15SRodney W. Grimes.Ed 5500c3a1746SMike Pritchard.Pp 551afe61c15SRodney W. Grimeswhere 552afe61c15SRodney W. Grimes.Fa mreq 553afe61c15SRodney W. Grimesis the following structure: 554afe61c15SRodney W. Grimes.Bd -literal 555afe61c15SRodney W. Grimesstruct ip_mreq { 5560c3a1746SMike Pritchard struct in_addr imr_multiaddr; /* IP multicast address of group */ 5570c3a1746SMike Pritchard struct in_addr imr_interface; /* local IP address of interface */ 558afe61c15SRodney W. Grimes} 559afe61c15SRodney W. Grimes.Ed 5600c3a1746SMike Pritchard.Pp 561bf7f20c2SRuslan Ermilov.Va imr_interface 562108ad5bdSBruce M Simpsonshould be set to the 563afe61c15SRodney W. Grimes.Tn IP 564afe61c15SRodney W. Grimesaddress of a particular multicast-capable interface if 565afe61c15SRodney W. Grimesthe host is multihomed. 566108ad5bdSBruce M SimpsonIt may be set to 567108ad5bdSBruce M Simpson.Dv INADDR_ANY 568108ad5bdSBruce M Simpsonto choose the default interface, although this is not recommended; 569108ad5bdSBruce M Simpsonthis is considered to be the first interface corresponding 570108ad5bdSBruce M Simpsonto the default route. 571108ad5bdSBruce M SimpsonOtherwise, the first multicast-capable interface 572108ad5bdSBruce M Simpsonconfigured in the system will be used. 573108ad5bdSBruce M Simpson.Pp 574108ad5bdSBruce M SimpsonPrior to 575108ad5bdSBruce M Simpson.Fx 7.0 , 57626c3ef53SBruce M Simpsonif the 577bf7f20c2SRuslan Ermilov.Va imr_interface 57826c3ef53SBruce M Simpsonmember is within the network range 57926c3ef53SBruce M Simpson.Li 0.0.0.0/8 , 58026c3ef53SBruce M Simpsonit is treated as an interface index in the system interface MIB, 58126c3ef53SBruce M Simpsonas per the RIP Version 2 MIB Extension (RFC-1724). 582108ad5bdSBruce M SimpsonIn versions of 583108ad5bdSBruce M Simpson.Fx 584108ad5bdSBruce M Simpsonsince 7.0, this behavior is no longer supported. 585108ad5bdSBruce M SimpsonDevelopers should 586108ad5bdSBruce M Simpsoninstead use the RFC 3678 multicast source filter APIs; in particular, 587108ad5bdSBruce M Simpson.Dv MCAST_JOIN_GROUP . 58826c3ef53SBruce M Simpson.Pp 589afe61c15SRodney W. GrimesUp to 590afe61c15SRodney W. Grimes.Dv IP_MAX_MEMBERSHIPS 59124135314SBruce M Simpsonmemberships may be added on a single socket. 59204bcf5a9SBruce M SimpsonMembership is associated with a single interface; 59304bcf5a9SBruce M Simpsonprograms running on multihomed hosts may need to 59404bcf5a9SBruce M Simpsonjoin the same group on more than one interface. 59504bcf5a9SBruce M Simpson.Pp 596afe61c15SRodney W. GrimesTo drop a membership, use: 597afe61c15SRodney W. Grimes.Bd -literal 598afe61c15SRodney W. Grimesstruct ip_mreq mreq; 599afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq)); 600afe61c15SRodney W. Grimes.Ed 6010c3a1746SMike Pritchard.Pp 602afe61c15SRodney W. Grimeswhere 603afe61c15SRodney W. Grimes.Fa mreq 604afe61c15SRodney W. Grimescontains the same values as used to add the membership. 605afe61c15SRodney W. GrimesMemberships are dropped when the socket is closed or the process exits. 606108ad5bdSBruce M Simpson.\" TODO: Update this piece when IPv4 source-address selection is implemented. 607108ad5bdSBruce M Simpson.Pp 608108ad5bdSBruce M SimpsonThe IGMP protocol uses the primary IP address of the interface 609108ad5bdSBruce M Simpsonas its identifier for group membership. 610108ad5bdSBruce M SimpsonThis is the first IP address configured on the interface. 611108ad5bdSBruce M SimpsonIf this address is removed or changed, the results are 612108ad5bdSBruce M Simpsonundefined, as the IGMP membership state will then be inconsistent. 613108ad5bdSBruce M SimpsonIf multiple IP aliases are configured on the same interface, 614108ad5bdSBruce M Simpsonthey will be ignored. 615108ad5bdSBruce M Simpson.Pp 616108ad5bdSBruce M SimpsonThis shortcoming was addressed in IPv6; MLDv2 requires 617108ad5bdSBruce M Simpsonthat the unique link-local address for an interface is 618108ad5bdSBruce M Simpsonused to identify an MLDv2 listener. 619108ad5bdSBruce M Simpson.Ss "Source-Specific Multicast Options" 620108ad5bdSBruce M SimpsonSince 621108ad5bdSBruce M Simpson.Fx 8.0 , 622108ad5bdSBruce M Simpsonthe use of Source-Specific Multicast (SSM) is supported. 623108ad5bdSBruce M SimpsonThese extensions require an IGMPv3 multicast router in order to 624108ad5bdSBruce M Simpsonmake best use of them. 625108ad5bdSBruce M SimpsonIf a legacy multicast router is present on the link, 626108ad5bdSBruce M Simpson.Fx 627108ad5bdSBruce M Simpsonwill simply downgrade to the version of IGMP spoken by the router, 628108ad5bdSBruce M Simpsonand the benefits of source filtering on the upstream link 629108ad5bdSBruce M Simpsonwill not be present, although the kernel will continue to 630108ad5bdSBruce M Simpsonsquelch transmissions from blocked sources. 631108ad5bdSBruce M Simpson.Pp 632108ad5bdSBruce M SimpsonEach group membership on a socket now has a filter mode: 633108ad5bdSBruce M Simpson.Bl -tag -width MCAST_EXCLUDE 634108ad5bdSBruce M Simpson.It Dv MCAST_EXCLUDE 635108ad5bdSBruce M SimpsonDatagrams sent to this group are accepted, 636108ad5bdSBruce M Simpsonunless the source is in a list of blocked source addresses. 637108ad5bdSBruce M Simpson.It Dv MCAST_INCLUDE 638108ad5bdSBruce M SimpsonDatagrams sent to this group are accepted 639108ad5bdSBruce M Simpsononly if the source is in a list of accepted source addresses. 640108ad5bdSBruce M Simpson.El 641108ad5bdSBruce M Simpson.Pp 642108ad5bdSBruce M SimpsonGroups joined using the legacy 643108ad5bdSBruce M Simpson.Dv IP_ADD_MEMBERSHIP 644108ad5bdSBruce M Simpsonoption are placed in exclusive-mode, 645108ad5bdSBruce M Simpsonand are able to request that certain sources are blocked or allowed. 646108ad5bdSBruce M SimpsonThis is known as the 647108ad5bdSBruce M Simpson.Em delta-based API . 648108ad5bdSBruce M Simpson.Pp 649108ad5bdSBruce M SimpsonTo block a multicast source on an existing group membership: 650108ad5bdSBruce M Simpson.Bd -literal 651108ad5bdSBruce M Simpsonstruct ip_mreq_source mreqs; 652108ad5bdSBruce M Simpsonsetsockopt(s, IPPROTO_IP, IP_BLOCK_SOURCE, &mreqs, sizeof(mreqs)); 653108ad5bdSBruce M Simpson.Ed 654108ad5bdSBruce M Simpson.Pp 655108ad5bdSBruce M Simpsonwhere 656108ad5bdSBruce M Simpson.Fa mreqs 657108ad5bdSBruce M Simpsonis the following structure: 658108ad5bdSBruce M Simpson.Bd -literal 659108ad5bdSBruce M Simpsonstruct ip_mreq_source { 660108ad5bdSBruce M Simpson struct in_addr imr_multiaddr; /* IP multicast address of group */ 661108ad5bdSBruce M Simpson struct in_addr imr_sourceaddr; /* IP address of source */ 662108ad5bdSBruce M Simpson struct in_addr imr_interface; /* local IP address of interface */ 663108ad5bdSBruce M Simpson} 664108ad5bdSBruce M Simpson.Ed 665108ad5bdSBruce M Simpson.Va imr_sourceaddr 666108ad5bdSBruce M Simpsonshould be set to the address of the source to be blocked. 667108ad5bdSBruce M Simpson.Pp 668108ad5bdSBruce M SimpsonTo unblock a multicast source on an existing group: 669108ad5bdSBruce M Simpson.Bd -literal 670108ad5bdSBruce M Simpsonstruct ip_mreq_source mreqs; 671108ad5bdSBruce M Simpsonsetsockopt(s, IPPROTO_IP, IP_UNBLOCK_SOURCE, &mreqs, sizeof(mreqs)); 672108ad5bdSBruce M Simpson.Ed 673108ad5bdSBruce M Simpson.Pp 674108ad5bdSBruce M SimpsonThe 675108ad5bdSBruce M Simpson.Dv IP_BLOCK_SOURCE 676108ad5bdSBruce M Simpsonand 677108ad5bdSBruce M Simpson.Dv IP_UNBLOCK_SOURCE 678108ad5bdSBruce M Simpsonoptions are 679108ad5bdSBruce M Simpson.Em not permitted 680108ad5bdSBruce M Simpsonfor inclusive-mode group memberships. 681108ad5bdSBruce M Simpson.Pp 682108ad5bdSBruce M SimpsonTo join a multicast group in 683108ad5bdSBruce M Simpson.Dv MCAST_INCLUDE 684108ad5bdSBruce M Simpsonmode with a single source, 685108ad5bdSBruce M Simpsonor add another source to an existing inclusive-mode membership: 686108ad5bdSBruce M Simpson.Bd -literal 687108ad5bdSBruce M Simpsonstruct ip_mreq_source mreqs; 688108ad5bdSBruce M Simpsonsetsockopt(s, IPPROTO_IP, IP_ADD_SOURCE_MEMBERSHIP, &mreqs, sizeof(mreqs)); 689108ad5bdSBruce M Simpson.Ed 690108ad5bdSBruce M Simpson.Pp 691108ad5bdSBruce M SimpsonTo leave a single source from an existing group in inclusive mode: 692108ad5bdSBruce M Simpson.Bd -literal 693108ad5bdSBruce M Simpsonstruct ip_mreq_source mreqs; 694108ad5bdSBruce M Simpsonsetsockopt(s, IPPROTO_IP, IP_DROP_SOURCE_MEMBERSHIP, &mreqs, sizeof(mreqs)); 695108ad5bdSBruce M Simpson.Ed 696108ad5bdSBruce M SimpsonIf this is the last accepted source for the group, the membership 697108ad5bdSBruce M Simpsonwill be dropped. 698108ad5bdSBruce M Simpson.Pp 699108ad5bdSBruce M SimpsonThe 700108ad5bdSBruce M Simpson.Dv IP_ADD_SOURCE_MEMBERSHIP 701108ad5bdSBruce M Simpsonand 702108ad5bdSBruce M Simpson.Dv IP_DROP_SOURCE_MEMBERSHIP 703108ad5bdSBruce M Simpsonoptions are 704108ad5bdSBruce M Simpson.Em not accepted 705108ad5bdSBruce M Simpsonfor exclusive-mode group memberships. 706108ad5bdSBruce M SimpsonHowever, both exclusive and inclusive mode memberships 707108ad5bdSBruce M Simpsonsupport the use of the 708108ad5bdSBruce M Simpson.Em full-state API 709108ad5bdSBruce M Simpsondocumented in RFC 3678. 710108ad5bdSBruce M SimpsonFor management of source filter lists using this API, 711108ad5bdSBruce M Simpsonplease refer to 712108ad5bdSBruce M Simpson.Xr sourcefilter 3 . 713d10910e6SBruce M Simpson.Pp 714d10910e6SBruce M SimpsonThe sysctl settings 715d10910e6SBruce M Simpson.Va net.inet.ip.mcast.maxsocksrc 716d10910e6SBruce M Simpsonand 717d10910e6SBruce M Simpson.Va net.inet.ip.mcast.maxgrpsrc 718d10910e6SBruce M Simpsonare used to specify an upper limit on the number of per-socket and per-group 719d10910e6SBruce M Simpsonsource filter entries which the kernel may allocate. 720afe61c15SRodney W. Grimes.\"----------------------- 721afe61c15SRodney W. Grimes.Ss "Raw IP Sockets" 722afe61c15SRodney W. GrimesRaw 723afe61c15SRodney W. Grimes.Tn IP 724afe61c15SRodney W. Grimessockets are connectionless, 725afe61c15SRodney W. Grimesand are normally used with the 726edf0e5b3SMike Pritchard.Xr sendto 2 727afe61c15SRodney W. Grimesand 728edf0e5b3SMike Pritchard.Xr recvfrom 2 729afe61c15SRodney W. Grimescalls, though the 730afe61c15SRodney W. Grimes.Xr connect 2 731afe61c15SRodney W. Grimescall may also be used to fix the destination for future 732afe61c15SRodney W. Grimespackets (in which case the 733afe61c15SRodney W. Grimes.Xr read 2 734afe61c15SRodney W. Grimesor 735afe61c15SRodney W. Grimes.Xr recv 2 736afe61c15SRodney W. Grimesand 737afe61c15SRodney W. Grimes.Xr write 2 738afe61c15SRodney W. Grimesor 739afe61c15SRodney W. Grimes.Xr send 2 740afe61c15SRodney W. Grimessystem calls may be used). 741afe61c15SRodney W. Grimes.Pp 742afe61c15SRodney W. GrimesIf 743afe61c15SRodney W. Grimes.Fa proto 744afe61c15SRodney W. Grimesis 0, the default protocol 745afe61c15SRodney W. Grimes.Dv IPPROTO_RAW 746afe61c15SRodney W. Grimesis used for outgoing 747afe61c15SRodney W. Grimespackets, and only incoming packets destined for that protocol 748afe61c15SRodney W. Grimesare received. 749afe61c15SRodney W. GrimesIf 750afe61c15SRodney W. Grimes.Fa proto 751afe61c15SRodney W. Grimesis non-zero, that protocol number will be used on outgoing packets 752afe61c15SRodney W. Grimesand to filter incoming packets. 753afe61c15SRodney W. Grimes.Pp 754afe61c15SRodney W. GrimesOutgoing packets automatically have an 755afe61c15SRodney W. Grimes.Tn IP 756afe61c15SRodney W. Grimesheader prepended to 757afe61c15SRodney W. Grimesthem (based on the destination address and the protocol 758afe61c15SRodney W. Grimesnumber the socket is created with), 759afe61c15SRodney W. Grimesunless the 760afe61c15SRodney W. Grimes.Dv IP_HDRINCL 761afe61c15SRodney W. Grimesoption has been set. 762afe61c15SRodney W. GrimesIncoming packets are received with 763afe61c15SRodney W. Grimes.Tn IP 764afe61c15SRodney W. Grimesheader and options intact. 765afe61c15SRodney W. Grimes.Pp 766afe61c15SRodney W. Grimes.Dv IP_HDRINCL 767afe61c15SRodney W. Grimesindicates the complete IP header is included with the data 768afe61c15SRodney W. Grimesand may be used only with the 769afe61c15SRodney W. Grimes.Dv SOCK_RAW 770afe61c15SRodney W. Grimestype. 771afe61c15SRodney W. Grimes.Bd -literal 772ddbd0698SBruce Evans#include <netinet/in_systm.h> 773afe61c15SRodney W. Grimes#include <netinet/ip.h> 774afe61c15SRodney W. Grimes 775afe61c15SRodney W. Grimesint hincl = 1; /* 1 = on, 0 = off */ 776afe61c15SRodney W. Grimessetsockopt(s, IPPROTO_IP, IP_HDRINCL, &hincl, sizeof(hincl)); 777afe61c15SRodney W. Grimes.Ed 7780c3a1746SMike Pritchard.Pp 779afe61c15SRodney W. GrimesUnlike previous 7808ce3f3ddSRuslan Ermilov.Bx 781afe61c15SRodney W. Grimesreleases, the program must set all 782afe61c15SRodney W. Grimesthe fields of the IP header, including the following: 783afe61c15SRodney W. Grimes.Bd -literal 784afe61c15SRodney W. Grimesip->ip_v = IPVERSION; 785afe61c15SRodney W. Grimesip->ip_hl = hlen >> 2; 786afe61c15SRodney W. Grimesip->ip_id = 0; /* 0 means kernel set appropriate value */ 787afe61c15SRodney W. Grimesip->ip_off = offset; 788afe61c15SRodney W. Grimes.Ed 7890c3a1746SMike Pritchard.Pp 790538a4c1fSBruce M SimpsonThe 791538a4c1fSBruce M Simpson.Va ip_len 792538a4c1fSBruce M Simpsonand 793538a4c1fSBruce M Simpson.Va ip_off 794538a4c1fSBruce M Simpsonfields 795538a4c1fSBruce M Simpson.Em must 796538a4c1fSBruce M Simpsonbe provided in host byte order. 7976f5bc70aSBruce M SimpsonAll other fields must be provided in network byte order. 7986f5bc70aSBruce M SimpsonSee 7995c8e5f24SRuslan Ermilov.Xr byteorder 3 8006f5bc70aSBruce M Simpsonfor more information on network byte order. 801538a4c1fSBruce M SimpsonIf the 802538a4c1fSBruce M Simpson.Va ip_id 803538a4c1fSBruce M Simpsonfield is set to 0 then the kernel will choose an 804c48524c2SMike Pritchardappropriate value. 805afe61c15SRodney W. GrimesIf the header source address is set to 806afe61c15SRodney W. Grimes.Dv INADDR_ANY , 807afe61c15SRodney W. Grimesthe kernel will choose an appropriate address. 808ef0180edSDima Dorfman.Sh ERRORS 809afe61c15SRodney W. GrimesA socket operation may fail with one of the following errors returned: 810ef0180edSDima Dorfman.Bl -tag -width Er 811afe61c15SRodney W. Grimes.It Bq Er EISCONN 812afe61c15SRodney W. Grimeswhen trying to establish a connection on a socket which 813afe61c15SRodney W. Grimesalready has one, or when trying to send a datagram with the destination 814afe61c15SRodney W. Grimesaddress specified and the socket is already connected; 815afe61c15SRodney W. Grimes.It Bq Er ENOTCONN 816afe61c15SRodney W. Grimeswhen trying to send a datagram, but 8170227791bSRuslan Ermilovno destination address is specified, and the socket has not been 818afe61c15SRodney W. Grimesconnected; 819afe61c15SRodney W. Grimes.It Bq Er ENOBUFS 820afe61c15SRodney W. Grimeswhen the system runs out of memory for 821afe61c15SRodney W. Grimesan internal data structure; 822afe61c15SRodney W. Grimes.It Bq Er EADDRNOTAVAIL 823afe61c15SRodney W. Grimeswhen an attempt is made to create a 824afe61c15SRodney W. Grimessocket with a network address for which no network interface 825afe61c15SRodney W. Grimesexists. 8267bdf965dSAlexander Langer.It Bq Er EACCES 827afe61c15SRodney W. Grimeswhen an attempt is made to create 828afe61c15SRodney W. Grimesa raw IP socket by a non-privileged process. 829afe61c15SRodney W. Grimes.El 830afe61c15SRodney W. Grimes.Pp 831afe61c15SRodney W. GrimesThe following errors specific to 832afe61c15SRodney W. Grimes.Tn IP 833afe61c15SRodney W. Grimesmay occur when setting or getting 834afe61c15SRodney W. Grimes.Tn IP 835afe61c15SRodney W. Grimesoptions: 8368d22ff75SRuslan Ermilov.Bl -tag -width Er 837afe61c15SRodney W. Grimes.It Bq Er EINVAL 838afe61c15SRodney W. GrimesAn unknown socket option name was given. 839afe61c15SRodney W. Grimes.It Bq Er EINVAL 840afe61c15SRodney W. GrimesThe IP option field was improperly formed; 841afe61c15SRodney W. Grimesan option field was shorter than the minimum value 842afe61c15SRodney W. Grimesor longer than the option buffer provided. 843afe61c15SRodney W. Grimes.El 8446f5bc70aSBruce M Simpson.Pp 8456f5bc70aSBruce M SimpsonThe following errors may occur when attempting to send 8466f5bc70aSBruce M Simpson.Tn IP 8476f5bc70aSBruce M Simpsondatagrams via a 8486f5bc70aSBruce M Simpson.Dq raw socket 8496f5bc70aSBruce M Simpsonwith the 850538a4c1fSBruce M Simpson.Dv IP_HDRINCL 8516f5bc70aSBruce M Simpsonoption set: 8526f5bc70aSBruce M Simpson.Bl -tag -width Er 8536f5bc70aSBruce M Simpson.It Bq Er EINVAL 854538a4c1fSBruce M SimpsonThe user-supplied 855538a4c1fSBruce M Simpson.Va ip_len 856538a4c1fSBruce M Simpsonfield was not equal to the length of the datagram written to the socket. 8576f5bc70aSBruce M Simpson.El 858afe61c15SRodney W. Grimes.Sh SEE ALSO 859afe61c15SRodney W. Grimes.Xr getsockopt 2 , 860afe61c15SRodney W. Grimes.Xr recv 2 , 8610b992c1dSWolfram Schneider.Xr send 2 , 8625c8e5f24SRuslan Ermilov.Xr byteorder 3 , 863afe61c15SRodney W. Grimes.Xr icmp 4 , 864d10910e6SBruce M Simpson.Xr igmp 4 , 8650b992c1dSWolfram Schneider.Xr inet 4 , 86604bcf5a9SBruce M Simpson.Xr intro 4 , 867108ad5bdSBruce M Simpson.Xr multicast 4 , 868108ad5bdSBruce M Simpson.Xr sourcefilter 3 869108ad5bdSBruce M Simpson.Rs 870108ad5bdSBruce M Simpson.%A D. Thaler 871108ad5bdSBruce M Simpson.%A B. Fenner 872108ad5bdSBruce M Simpson.%A B. Quinn 873108ad5bdSBruce M Simpson.%T "Socket Interface Extensions for Multicast Source Filters" 874108ad5bdSBruce M Simpson.%N RFC 3678 875108ad5bdSBruce M Simpson.%D Jan 2004 876108ad5bdSBruce M Simpson.Re 877afe61c15SRodney W. Grimes.Sh HISTORY 878afe61c15SRodney W. GrimesThe 879afe61c15SRodney W. Grimes.Nm 880afe61c15SRodney W. Grimesprotocol appeared in 881afe61c15SRodney W. Grimes.Bx 4.2 . 88271498f30SBruce M SimpsonThe 88371498f30SBruce M Simpson.Vt ip_mreqn 88471498f30SBruce M Simpsonstructure appeared in 88571498f30SBruce M Simpson.Tn Linux 2.4 . 88695386930SAndre Oppermann.Sh BUGS 88795386930SAndre OppermannBefore 888c53bbc07SAndre Oppermann.Fx 10.0 889c53bbc07SAndre Oppermannpackets received on raw IP sockets had the 89095386930SAndre Oppermann.Va ip_hl 89195386930SAndre Oppermannsubtracted from the 89250d922a0SGlen Barber.Va ip_len 89350d922a0SGlen Barberfield. 894