net: pim: add all RFC7761 message types
authorNikolay Aleksandrov <nikolay@cumulusnetworks.com>
Mon, 31 Oct 2016 12:21:04 +0000 (13:21 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 31 Oct 2016 20:18:30 +0000 (16:18 -0400)
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/pim.h
net/ipv4/ipmr.c
net/ipv6/ip6mr.c

index 1b6c0db..0e81b27 100644 (file)
 
 /* Message types - V2 */
 #define PIM_VERSION            2
-#define PIM_REGISTER           1
+
+/* RFC7761, sec 4.9:
+ *  Type
+ *        Types for specific PIM messages.  PIM Types are:
+ *
+ *  Message Type                          Destination
+ *  ---------------------------------------------------------------------
+ *  0 = Hello                             Multicast to ALL-PIM-ROUTERS
+ *  1 = Register                          Unicast to RP
+ *  2 = Register-Stop                     Unicast to source of Register
+ *                                        packet
+ *  3 = Join/Prune                        Multicast to ALL-PIM-ROUTERS
+ *  4 = Bootstrap                         Multicast to ALL-PIM-ROUTERS
+ *  5 = Assert                            Multicast to ALL-PIM-ROUTERS
+ *  6 = Graft (used in PIM-DM only)       Unicast to RPF'(S)
+ *  7 = Graft-Ack (used in PIM-DM only)   Unicast to source of Graft
+ *                                        packet
+ *  8 = Candidate-RP-Advertisement        Unicast to Domain's BSR
+ */
+enum {
+       PIM_TYPE_HELLO,
+       PIM_TYPE_REGISTER,
+       PIM_TYPE_REGISTER_STOP,
+       PIM_TYPE_JOIN_PRUNE,
+       PIM_TYPE_BOOTSTRAP,
+       PIM_TYPE_ASSERT,
+       PIM_TYPE_GRAFT,
+       PIM_TYPE_GRAFT_ACK,
+       PIM_TYPE_CANDIDATE_RP_ADV
+};
 
 #define PIM_NULL_REGISTER      cpu_to_be32(0x40000000)
 
index 5f006e1..51d71a7 100644 (file)
@@ -2053,7 +2053,7 @@ static int pim_rcv(struct sk_buff *skb)
                goto drop;
 
        pim = (struct pimreghdr *)skb_transport_header(skb);
-       if (pim->type != ((PIM_VERSION << 4) | (PIM_REGISTER)) ||
+       if (pim->type != ((PIM_VERSION << 4) | (PIM_TYPE_REGISTER)) ||
            (pim->flags & PIM_NULL_REGISTER) ||
            (ip_compute_csum((void *)pim, sizeof(*pim)) != 0 &&
             csum_fold(skb_checksum(skb, 0, skb->len, 0))))
index 7f4265b..52101b3 100644 (file)
@@ -636,7 +636,7 @@ static int pim6_rcv(struct sk_buff *skb)
                goto drop;
 
        pim = (struct pimreghdr *)skb_transport_header(skb);
-       if (pim->type != ((PIM_VERSION << 4) | PIM_REGISTER) ||
+       if (pim->type != ((PIM_VERSION << 4) | PIM_TYPE_REGISTER) ||
            (pim->flags & PIM_NULL_REGISTER) ||
            (csum_ipv6_magic(&ipv6_hdr(skb)->saddr, &ipv6_hdr(skb)->daddr,
                             sizeof(*pim), IPPROTO_PIM,