xref: /dragonfly/share/man/man4/pim.4 (revision 5fb3968e)
1.\" Copyright (c) 2001-2003 International Computer Science Institute
2.\"
3.\" Permission is hereby granted, free of charge, to any person obtaining a
4.\" copy of this software and associated documentation files (the "Software"),
5.\" to deal in the Software without restriction, including without limitation
6.\" the rights to use, copy, modify, merge, publish, distribute, sublicense,
7.\" and/or sell copies of the Software, and to permit persons to whom the
8.\" Software is furnished to do so, subject to the following conditions:
9.\"
10.\" The above copyright notice and this permission notice shall be included in
11.\" all copies or substantial portions of the Software.
12.\"
13.\" The names and trademarks of copyright holders may not be used in
14.\" advertising or publicity pertaining to the software without specific
15.\" prior permission. Title to copyright in this software and any associated
16.\" documentation will at all times remain with the copyright holders.
17.\"
18.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19.\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21.\" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22.\" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23.\" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24.\" DEALINGS IN THE SOFTWARE.
25.\"
26.\" $FreeBSD: src/share/man/man4/pim.4,v 1.2 2004/07/09 09:22:36 ru Exp $
27.\" $DragonFly: src/share/man/man4/pim.4,v 1.5 2008/04/15 23:51:00 swildner Exp $
28.\"
29.Dd April 16, 2008
30.Dt PIM 4
31.Os
32.\"
33.Sh NAME
34.Nm pim
35.Nd Protocol Independent Multicast
36.\"
37.Sh SYNOPSIS
38.Cd "options MROUTING"
39.Cd "options PIM"
40.Pp
41.In sys/types.h
42.In sys/socket.h
43.In netinet/in.h
44.In net/ip_mroute/ip_mroute.h
45.In netinet/pim.h
46.Ft int
47.Fn getsockopt "int s" IPPROTO_IP MRT_PIM "void *optval" "socklen_t *optlen"
48.Ft int
49.Fn setsockopt "int s" IPPROTO_IP MRT_PIM "const void *optval" "socklen_t optlen"
50.Ft int
51.Fn getsockopt "int s" IPPROTO_IPV6 MRT6_PIM "void *optval" "socklen_t *optlen"
52.Ft int
53.Fn setsockopt "int s" IPPROTO_IPV6 MRT6_PIM "const void *optval" "socklen_t optlen"
54.Sh DESCRIPTION
55.Tn PIM
56is the common name for two multicast routing protocols:
57Protocol Independent Multicast - Sparse Mode (PIM-SM) and
58Protocol Independent Multicast - Dense Mode (PIM-DM).
59.Pp
60PIM-SM is a multicast routing protocol that can use the underlying
61unicast routing information base or a separate multicast-capable
62routing information base.
63It builds unidirectional shared trees rooted at a Rendezvous
64Point (RP) per group,
65and optionally creates shortest-path trees per source.
66.Pp
67PIM-DM is a multicast routing protocol that uses the underlying
68unicast routing information base to flood multicast datagrams
69to all multicast routers.
70Prune messages are used to prevent future datagrams from propagating
71to routers with no group membership information.
72.Pp
73Both PIM-SM and PIM-DM are fairly complex protocols,
74though PIM-SM is much more complex.
75To enable PIM-SM or PIM-DM multicast routing in a router,
76the user must enable multicast routing and PIM processing in the kernel
77(see
78.Sx SYNOPSIS
79about the kernel configuration options),
80and must run a PIM-SM or PIM-DM capable user-level process.
81From developer's point of view,
82the programming guide described in the
83.Sx "Programming Guide"
84section should be used to control the PIM processing in the kernel.
85.\"
86.Ss Programming Guide
87After a multicast routing socket is open and multicast forwarding
88is enabled in the kernel
89(see
90.Xr multicast 4 ) ,
91one of the following socket options should be used to enable or disable
92PIM processing in the kernel.
93Note that those options require certain privilege
94(i.e., root privilege):
95.Bd -literal
96/* IPv4 */
97int v = 1;        /* 1 to enable, or 0 to disable */
98setsockopt(mrouter_s4, IPPROTO_IP, MRT_PIM, (void *)&v, sizeof(v));
99.Ed
100.Bd -literal
101/* IPv6 */
102int v = 1;        /* 1 to enable, or 0 to disable */
103setsockopt(mrouter_s6, IPPROTO_IPV6, MRT6_PIM, (void *)&v, sizeof(v));
104.Ed
105.Pp
106After PIM processing is enabled, the multicast-capable interfaces
107should be added
108(see
109.Xr multicast 4 ) .
110In case of PIM-SM, the PIM-Register virtual interface must be added
111as well.
112This can be accomplished by using the following options:
113.Bd -literal
114/* IPv4 */
115struct vifctl vc;
116memset(&vc, 0, sizeof(vc));
117/* Assign all vifctl fields as appropriate */
118\&...
119if (is_pim_register_vif)
120    vc.vifc_flags |= VIFF_REGISTER;
121setsockopt(mrouter_s4, IPPROTO_IP, MRT_ADD_VIF, (void *)&vc,
122           sizeof(vc));
123.Ed
124.Bd -literal
125/* IPv6 */
126struct mif6ctl mc;
127memset(&mc, 0, sizeof(mc));
128/* Assign all mif6ctl fields as appropriate */
129\&...
130if (is_pim_register_vif)
131    mc.mif6c_flags |= MIFF_REGISTER;
132setsockopt(mrouter_s6, IPPROTO_IPV6, MRT6_ADD_MIF, (void *)&mc,
133           sizeof(mc));
134.Ed
135.Pp
136Sending or receiving of PIM packets can be accomplished by
137opening first a
138.Dq raw socket
139(see
140.Xr socket 2 ) ,
141with protocol value of
142.Dv IPPROTO_PIM :
143.Bd -literal
144/* IPv4 */
145int pim_s4;
146pim_s4 = socket(AF_INET, SOCK_RAW, IPPROTO_PIM);
147.Ed
148.Bd -literal
149/* IPv6 */
150int pim_s6;
151pim_s6 = socket(AF_INET6, SOCK_RAW, IPPROTO_PIM);
152.Ed
153.Pp
154Then, the following system calls can be used to send or receive PIM
155packets:
156.Xr sendto 2 ,
157.Xr sendmsg 2 ,
158.Xr recvfrom 2 ,
159.Xr recvmsg 2 .
160.\"
161.Sh SEE ALSO
162.Xr getsockopt 2 ,
163.Xr recvfrom 2 ,
164.Xr recvmsg 2 ,
165.Xr sendmsg 2 ,
166.Xr sendto 2 ,
167.Xr setsockopt 2 ,
168.Xr socket 2 ,
169.Xr inet 4 ,
170.Xr intro 4 ,
171.Xr ip 4 ,
172.Xr multicast 4
173.\"
174.Sh STANDARDS
175The PIM-SM protocol is specified in RFC 4601.
176The PIM-DM protocol is specified in RFC 3973.
177.\"
178.Sh AUTHORS
179.An -nosplit
180The original IPv4 PIM kernel support for IRIX and SunOS-4.x was
181implemented by
182.An Ahmed Helmy
183(USC and SGI).
184Later the code was ported to various
185.Bx
186flavors and modified by
187.An George Edmond Eddy
188(Rusty) (ISI),
189.An Hitoshi Asaeda
190(WIDE Project), and
191.An Pavlin Radoslavov
192(USC/ISI and ICSI).
193The IPv6 PIM kernel support was implemented by the KAME project
194.Pa ( http://www.kame.net ) ,
195and was based on the IPv4 PIM kernel support.
196.Pp
197This manual page was written by
198.An Pavlin Radoslavov
199(ICSI).
200