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 <anuradhak@cumulusnetworks.com>
This commit is contained in:
Anuradha Karuppiah 2019-03-22 10:31:20 -07:00
parent 1595f9bb9e
commit d889ab755c
2 changed files with 24 additions and 0 deletions

View File

@ -39,6 +39,8 @@
#include "pim_zebra.h" #include "pim_zebra.h"
#include "pim_vxlan.h" #include "pim_vxlan.h"
/* pim-vxlan global info */
struct pim_vxlan vxlan_info, *pim_vxlan_p = &vxlan_info;
/************************** vxlan SG cache management ************************/ /************************** vxlan SG cache management ************************/
static unsigned int pim_vxlan_sg_hash_key_make(void *p) static unsigned int pim_vxlan_sg_hash_key_make(void *p)

View File

@ -22,6 +22,15 @@
#ifndef PIM_VXLAN_H #ifndef PIM_VXLAN_H
#define 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 { enum pim_vxlan_sg_flags {
PIM_VXLAN_SGF_NONE = 0, PIM_VXLAN_SGF_NONE = 0,
PIM_VXLAN_SGF_DEL_IN_PROG = (1 << 0), PIM_VXLAN_SGF_DEL_IN_PROG = (1 << 0),
@ -37,6 +46,7 @@ struct pim_vxlan_sg {
enum pim_vxlan_sg_flags flags; enum pim_vxlan_sg_flags flags;
struct pim_upstream *up; struct pim_upstream *up;
struct listnode *work_node; /* to pim_vxlan.work_list */
/* termination info (only applicable to termination XG mroutes) /* termination info (only applicable to termination XG mroutes)
* term_if - termination device ipmr-lo is added to the OIL * term_if - termination device ipmr-lo is added to the OIL
@ -73,7 +83,19 @@ struct pim_vxlan_mlag {
struct in_addr reg_addr; struct in_addr reg_addr;
}; };
enum pim_vxlan_flags {
PIM_VXLANF_NONE = 0,
PIM_VXLANF_WORK_INITED = (1 << 0)
};
struct pim_vxlan { 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; struct pim_vxlan_mlag mlag;
}; };