~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/pim.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef __LINUX_PIM_H
  3 #define __LINUX_PIM_H
  4 
  5 #include <linux/skbuff.h>
  6 #include <asm/byteorder.h>
  7 
  8 /* Message types - V1 */
  9 #define PIM_V1_VERSION          cpu_to_be32(0x10000000)
 10 #define PIM_V1_REGISTER         1
 11 
 12 /* Message types - V2 */
 13 #define PIM_VERSION             2
 14 
 15 /* RFC7761, sec 4.9:
 16  *  Type
 17  *        Types for specific PIM messages.  PIM Types are:
 18  *
 19  *  Message Type                          Destination
 20  *  ---------------------------------------------------------------------
 21  *  0 = Hello                             Multicast to ALL-PIM-ROUTERS
 22  *  1 = Register                          Unicast to RP
 23  *  2 = Register-Stop                     Unicast to source of Register
 24  *                                        packet
 25  *  3 = Join/Prune                        Multicast to ALL-PIM-ROUTERS
 26  *  4 = Bootstrap                         Multicast to ALL-PIM-ROUTERS
 27  *  5 = Assert                            Multicast to ALL-PIM-ROUTERS
 28  *  6 = Graft (used in PIM-DM only)       Unicast to RPF'(S)
 29  *  7 = Graft-Ack (used in PIM-DM only)   Unicast to source of Graft
 30  *                                        packet
 31  *  8 = Candidate-RP-Advertisement        Unicast to Domain's BSR
 32  */
 33 enum {
 34         PIM_TYPE_HELLO,
 35         PIM_TYPE_REGISTER,
 36         PIM_TYPE_REGISTER_STOP,
 37         PIM_TYPE_JOIN_PRUNE,
 38         PIM_TYPE_BOOTSTRAP,
 39         PIM_TYPE_ASSERT,
 40         PIM_TYPE_GRAFT,
 41         PIM_TYPE_GRAFT_ACK,
 42         PIM_TYPE_CANDIDATE_RP_ADV
 43 };
 44 
 45 #define PIM_NULL_REGISTER       cpu_to_be32(0x40000000)
 46 
 47 /* RFC7761, sec 4.9:
 48  * The PIM header common to all PIM messages is:
 49  *   0                   1                   2                   3
 50  *   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
 51  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 52  *  |PIM Ver| Type  |   Reserved    |           Checksum            |
 53  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 54  */
 55 struct pimhdr {
 56         __u8    type;
 57         __u8    reserved;
 58         __be16  csum;
 59 };
 60 
 61 /* PIMv2 register message header layout (ietf-draft-idmr-pimvsm-v2-00.ps */
 62 struct pimreghdr {
 63         __u8    type;
 64         __u8    reserved;
 65         __be16  csum;
 66         __be32  flags;
 67 };
 68 
 69 int pim_rcv_v1(struct sk_buff *skb);
 70 
 71 static inline bool ipmr_pimsm_enabled(void)
 72 {
 73         return IS_BUILTIN(CONFIG_IP_PIMSM_V1) || IS_BUILTIN(CONFIG_IP_PIMSM_V2);
 74 }
 75 
 76 static inline struct pimhdr *pim_hdr(const struct sk_buff *skb)
 77 {
 78         return (struct pimhdr *)skb_transport_header(skb);
 79 }
 80 
 81 static inline u8 pim_hdr_version(const struct pimhdr *pimhdr)
 82 {
 83         return pimhdr->type >> 4;
 84 }
 85 
 86 static inline u8 pim_hdr_type(const struct pimhdr *pimhdr)
 87 {
 88         return pimhdr->type & 0xf;
 89 }
 90 
 91 /* check if the address is 224.0.0.13, RFC7761 sec 4.3.1 */
 92 static inline bool pim_ipv4_all_pim_routers(__be32 addr)
 93 {
 94         return addr == htonl(0xE000000D);
 95 }
 96 #endif
 97 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php