net: pim: add all RFC7761 message types
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
20bb6ce987
commit
56245cae19
3 changed files with 32 additions and 3 deletions
|
@ -10,7 +10,36 @@
|
||||||
|
|
||||||
/* Message types - V2 */
|
/* Message types - V2 */
|
||||||
#define PIM_VERSION 2
|
#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)
|
#define PIM_NULL_REGISTER cpu_to_be32(0x40000000)
|
||||||
|
|
||||||
|
|
|
@ -2053,7 +2053,7 @@ static int pim_rcv(struct sk_buff *skb)
|
||||||
goto drop;
|
goto drop;
|
||||||
|
|
||||||
pim = (struct pimreghdr *)skb_transport_header(skb);
|
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) ||
|
(pim->flags & PIM_NULL_REGISTER) ||
|
||||||
(ip_compute_csum((void *)pim, sizeof(*pim)) != 0 &&
|
(ip_compute_csum((void *)pim, sizeof(*pim)) != 0 &&
|
||||||
csum_fold(skb_checksum(skb, 0, skb->len, 0))))
|
csum_fold(skb_checksum(skb, 0, skb->len, 0))))
|
||||||
|
|
|
@ -636,7 +636,7 @@ static int pim6_rcv(struct sk_buff *skb)
|
||||||
goto drop;
|
goto drop;
|
||||||
|
|
||||||
pim = (struct pimreghdr *)skb_transport_header(skb);
|
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) ||
|
(pim->flags & PIM_NULL_REGISTER) ||
|
||||||
(csum_ipv6_magic(&ipv6_hdr(skb)->saddr, &ipv6_hdr(skb)->daddr,
|
(csum_ipv6_magic(&ipv6_hdr(skb)->saddr, &ipv6_hdr(skb)->daddr,
|
||||||
sizeof(*pim), IPPROTO_PIM,
|
sizeof(*pim), IPPROTO_PIM,
|
||||||
|
|
Loading…
Add table
Reference in a new issue