]>
git.ipfire.org Git - thirdparty/kernel/stable.git/blob - include/linux/pim.h
4 #include <linux/skbuff.h>
5 #include <asm/byteorder.h>
7 /* Message types - V1 */
8 #define PIM_V1_VERSION cpu_to_be32(0x10000000)
9 #define PIM_V1_REGISTER 1
11 /* Message types - V2 */
13 #define PIM_REGISTER 1
15 #define PIM_NULL_REGISTER cpu_to_be32(0x40000000)
18 * The PIM header common to all PIM messages is:
20 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
21 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
22 * |PIM Ver| Type | Reserved | Checksum |
23 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
31 /* PIMv2 register message header layout (ietf-draft-idmr-pimvsm-v2-00.ps */
39 int pim_rcv_v1(struct sk_buff
*skb
);
41 static inline bool ipmr_pimsm_enabled(void)
43 return IS_BUILTIN(CONFIG_IP_PIMSM_V1
) || IS_BUILTIN(CONFIG_IP_PIMSM_V2
);
46 static inline struct pimhdr
*pim_hdr(const struct sk_buff
*skb
)
48 return (struct pimhdr
*)skb_transport_header(skb
);
51 static inline u8
pim_hdr_version(const struct pimhdr
*pimhdr
)
53 return pimhdr
->type
>> 4;
56 static inline u8
pim_hdr_type(const struct pimhdr
*pimhdr
)
58 return pimhdr
->type
& 0xf;
61 /* check if the address is 224.0.0.13, RFC7761 sec 4.3.1 */
62 static inline bool pim_ipv4_all_pim_routers(__be32 addr
)
64 return addr
== htonl(0xE000000D);