From d889ab755c94076fc6c487fabebf34df87f502a4 Mon Sep 17 00:00:00 2001 From: Anuradha Karuppiah Date: Fri, 22 Mar 2019 10:31:20 -0700 Subject: [PATCH] pimd: header changes for pim-vxlan staggered processing 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 --- pimd/pim_vxlan.c | 2 ++ pimd/pim_vxlan.h | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/pimd/pim_vxlan.c b/pimd/pim_vxlan.c index 893f9f0e56..b35bc70c79 100644 --- a/pimd/pim_vxlan.c +++ b/pimd/pim_vxlan.c @@ -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) diff --git a/pimd/pim_vxlan.h b/pimd/pim_vxlan.h index 383adb6d98..ba783928c7 100644 --- a/pimd/pim_vxlan.h +++ b/pimd/pim_vxlan.h @@ -22,6 +22,15 @@ #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; };