summaryrefslogtreecommitdiff
path: root/pimd/pim_oil.h
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_oil.h')
-rw-r--r--pimd/pim_oil.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/pimd/pim_oil.h b/pimd/pim_oil.h
index 94d3840e98..8b95324142 100644
--- a/pimd/pim_oil.h
+++ b/pimd/pim_oil.h
@@ -64,6 +64,25 @@ struct channel_counts {
Each channel_oil.oil is used to control an (S,G) entry in the Kernel
Multicast Forwarding Cache.
+
+ There is a case when we create a channel_oil but don't install in the kernel
+
+ Case where (S, G) entry not installed in the kernel:
+ FRR receives IGMP/PIM (*, G) join and RP is not configured or
+ not-reachable, then create a channel_oil for the group G with the incoming
+ interface(channel_oil.oil.mfcc_parent) as invalid i.e "MAXVIF" and populate
+ the outgoing interface where join is received. Keep this entry in the stack,
+ but don't install in the kernel(channel_oil.installed = 0).
+
+ Case where (S, G) entry installed in the kernel:
+ When RP is configured and is reachable for the group G, and receiving a
+ join if channel_oil is already present then populate the incoming interface
+ and install the entry in the kernel, if channel_oil not present, then create
+ a new_channel oil(channel_oil.installed = 1).
+
+ is_valid: indicate if this entry is valid to get installed in kernel.
+ installed: indicate if this entry is installed in the kernel.
+
*/
struct channel_oil {
@@ -78,6 +97,7 @@ struct channel_oil {
uint32_t oif_flags[MAXVIFS];
struct channel_counts cc;
struct pim_upstream *up;
+ time_t mroute_creation;
};
extern struct list *pim_channel_oil_list;