1 /* $OpenBSD: pim.h,v 1.2 2006/04/27 02:19:32 tedu Exp $ */
2 /* $NetBSD: pim.h,v 1.1 2004/09/04 23:32:29 manu Exp $ */
3
4 /*
5 * Copyright (c) 1996-2000
6 * University of Southern California/Information Sciences Institute.
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the project nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * $FreeBSD: /repoman/r/ncvs/src/sys/netinet/pim.h,v 1.2 2004/03/08 07:45:32 hsu Exp $
34 */
35
36 #ifndef _NETINET_PIM_H_
37 #define _NETINET_PIM_H_
38
39 /*
40 * Protocol Independent Multicast (PIM) definitions.
41 * RFC 2362, June 1998.
42 *
43 * Written by Ahmed Helmy, USC/SGI, July 1996.
44 * Modified by George Edmond Eddy (Rusty), ISI, February 1998.
45 * Modified by Pavlin Radoslavov, USC/ISI, May 1998, October 2000.
46 */
47
48 #include <sys/types.h>
49
50 #ifndef _PIM_VT
51 #ifndef _BYTE_ORDER
52 # error _BYTE_ORDER is not defined!
53 #endif
54 #if (_BYTE_ORDER != _BIG_ENDIAN) && (_BYTE_ORDER != _LITTLE_ENDIAN)
55 # error _BYTE_ORDER must be defined to either _BIG_ENDIAN or _LITTLE_ENDIAN
56 #endif
57 #endif /* ! _PIM_VT */
58
59 /*
60 * PIM packet header
61 */
62 struct pim {
63 #ifdef _PIM_VT
64 uint8_t pim_vt; /* PIM version and message type */
65 #else /* ! _PIM_VT */
66 #if _BYTE_ORDER == _BIG_ENDIAN
67 u_int pim_vers:4, /* PIM protocol version */
68 pim_type:4; /* PIM message type */
69 #endif
70 #if _BYTE_ORDER == _LITTLE_ENDIAN
71 u_int pim_type:4, /* PIM message type */
72 pim_vers:4; /* PIM protocol version */
73 #endif
74 #endif /* ! _PIM_VT */
75 uint8_t pim_reserved; /* Reserved */
76 uint16_t pim_cksum; /* IP-style checksum */
77 };
78 /* KAME-related name backward compatibility */
79 #define pim_ver pim_vers
80 #define pim_rsv pim_reserved
81
82 #ifdef _PIM_VT
83 #define PIM_MAKE_VT(v, t) (0xff & (((v) << 4) | (0x0f & (t))))
84 #define PIM_VT_V(x) (((x) >> 4) & 0x0f)
85 #define PIM_VT_T(x) ((x) & 0x0f)
86 #endif /* _PIM_VT */
87
88 #define PIM_VERSION 2
89 #define PIM_MINLEN 8 /* PIM message min. length */
90 #define PIM_REG_MINLEN (PIM_MINLEN+20) /* PIM Register hdr + inner IPv4 hdr */
91 #define PIM6_REG_MINLEN (PIM_MINLEN+40) /* PIM Register hdr + inner IPv6 hdr */
92
93 /*
94 * PIM message types
95 */
96 #define PIM_HELLO 0x0 /* PIM-SM and PIM-DM */
97 #define PIM_REGISTER 0x1 /* PIM-SM only */
98 #define PIM_REGISTER_STOP 0x2 /* PIM-SM only */
99 #define PIM_JOIN_PRUNE 0x3 /* PIM-SM and PIM-DM */
100 #define PIM_BOOTSTRAP 0x4 /* PIM-SM only */
101 #define PIM_ASSERT 0x5 /* PIM-SM and PIM-DM */
102 #define PIM_GRAFT 0x6 /* PIM-DM only */
103 #define PIM_GRAFT_ACK 0x7 /* PIM-DM only */
104 #define PIM_CAND_RP_ADV 0x8 /* PIM-SM only */
105 #define PIM_ALL_DF_ELECTION 0xa /* Bidir-PIM-SM only */
106
107 /*
108 * PIM-Register message flags
109 */
110 #define PIM_BORDER_REGISTER 0x80000000U /* The Border bit (host-order) */
111 #define PIM_NULL_REGISTER 0x40000000U /* The Null-Register bit (host-order)*/
112
113 /*
114 * All-PIM-Routers IPv4 and IPv6 multicast addresses
115 */
116 #define INADDR_ALLPIM_ROUTERS_GROUP (uint32_t)0xe000000dU /* 224.0.0.13 */
117 #define IN6ADDR_LINKLOCAL_ALLPIM_ROUTERS "ff02::d"
118 #define IN6ADDR_LINKLOCAL_ALLPIM_ROUTERS_INIT \
119 {{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d }}}
121
122 #endif /* _NETINET_PIM_H_ */