]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: header changes for pim-vxlan staggered processing
authorAnuradha Karuppiah <anuradhak@cumulusnetworks.com>
Fri, 22 Mar 2019 17:31:20 +0000 (10:31 -0700)
committerAnuradha Karuppiah <anuradhak@cumulusnetworks.com>
Sat, 20 Apr 2019 15:33:22 +0000 (08:33 -0700)
pim-vxlan work is maintained in a lists and processing staggered. One
such work is the generation of periodic null registers for the local
VTEP-IP.

This info is instance agnostic and maintained in a global cache.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
pimd/pim_vxlan.c
pimd/pim_vxlan.h

index 893f9f0e563f63987d1ce62e54f123f9c915fead..b35bc70c795bf046cde0a377754ace8587e171e3 100644 (file)
@@ -39,6 +39,8 @@
 #include "pim_zebra.h"
 #include "pim_vxlan.h"
 
+/* pim-vxlan global info */
+struct pim_vxlan vxlan_info, *pim_vxlan_p = &vxlan_info;
 
 /************************** vxlan SG cache management ************************/
 static unsigned int pim_vxlan_sg_hash_key_make(void *p)
index 383adb6d9800ed0242a13678703cfc8490efa9f2..ba783928c74fe4e85c6d223bcd5929ac9faa389d 100644 (file)
 #ifndef PIM_VXLAN_H
 #define PIM_VXLAN_H
 
+/* global timer used for miscellaneous staggered processing */
+#define PIM_VXLAN_WORK_TIME 1
+/* number of SG entries processed at one shot */
+#define PIM_VXLAN_WORK_MAX 500
+/* frequency of periodic NULL registers */
+#define PIM_VXLAN_NULL_REG_INTERVAL 60 /* seconds */
+
+#define vxlan_mlag (vxlan_info.mlag)
+
 enum pim_vxlan_sg_flags {
        PIM_VXLAN_SGF_NONE = 0,
        PIM_VXLAN_SGF_DEL_IN_PROG = (1 << 0),
@@ -37,6 +46,7 @@ struct pim_vxlan_sg {
 
        enum pim_vxlan_sg_flags flags;
        struct pim_upstream *up;
+       struct listnode *work_node; /* to pim_vxlan.work_list */
 
        /* termination info (only applicable to termination XG mroutes)
         * term_if - termination device ipmr-lo is added to the OIL
@@ -73,7 +83,19 @@ struct pim_vxlan_mlag {
        struct in_addr reg_addr;
 };
 
+enum pim_vxlan_flags {
+       PIM_VXLANF_NONE = 0,
+       PIM_VXLANF_WORK_INITED = (1 << 0)
+};
+
 struct pim_vxlan {
+       enum pim_vxlan_flags flags;
+
+       struct thread *work_timer;
+       struct list *work_list;
+       struct listnode *next_work;
+       int max_work_cnt;
+
        struct pim_vxlan_mlag mlag;
 };