diff options
Diffstat (limited to 'pimd/pim_oil.h')
| -rw-r--r-- | pimd/pim_oil.h | 20 |
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; |
