summaryrefslogtreecommitdiffstats
path: root/pimd/pim_join.c
diff options
context:
space:
mode:
authorLeonard Herve <leonard.herve@yahoo.fr>2009-08-11 15:51:52 -0300
committerEverton Marques <everton.marques@gmail.com>2009-10-02 10:44:31 -0300
commit834200830bd0a27c09465b6e23941364a149b9a3 (patch)
treeb2e849b56035fee771c7e0f841c184093658a4e4 /pimd/pim_join.c
parent077339fc42d51afb3e936171d112b1da8519220a (diff)
downloadquagga-834200830bd0a27c09465b6e23941364a149b9a3.tar.bz2
quagga-834200830bd0a27c09465b6e23941364a149b9a3.tar.xz
[pim] igmpv3: specific query interval set to 1 second (RFC 3376 8.8.)
[pim] pim messages: encoded source address format with Sparse bit=1 (RFC 4601 4.9.1.) [pim] and Mask Len MUST be equal to 32 [pim] dr election: new traces [pim] fix triggered_hello_delay_msec randomization
Diffstat (limited to 'pimd/pim_join.c')
-rw-r--r--pimd/pim_join.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/pimd/pim_join.c b/pimd/pim_join.c
index ce4ec4e6..6b46759a 100644
--- a/pimd/pim_join.c
+++ b/pimd/pim_join.c
@@ -239,6 +239,19 @@ int pim_joinprune_recv(struct interface *ifp,
if (addr_offset < 1) {
return -7;
}
+
+ /*
+ RFC 4601: 4.9.1 Encoded Source and Group Address Formats
+
+ Encoded-Source Address
+ (...)
+ The mask length MUST be equal to the mask length in bits for the
+ given Address Family and Encoding Type (32 for IPv4 native and
+ 128 for IPv6 native). A router SHOULD ignore any messages
+ received with any other mask length.
+ */
+ if (msg_source_addr.prefixlen!=32) return;
+
buf += addr_offset;
recv_join(ifp, neigh, msg_holdtime,
@@ -257,6 +270,19 @@ int pim_joinprune_recv(struct interface *ifp,
if (addr_offset < 1) {
return -8;
}
+
+ /*
+ RFC 4601: 4.9.1 Encoded Source and Group Address Formats
+
+ Encoded-Source Address
+ (...)
+ The mask length MUST be equal to the mask length in bits for the
+ given Address Family and Encoding Type (32 for IPv4 native and
+ 128 for IPv6 native). A router SHOULD ignore any messages
+ received with any other mask length.
+ */
+ if (msg_source_addr.prefixlen!=32) return;
+
buf += addr_offset;
recv_prune(ifp, neigh, msg_holdtime,