aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/l2/l2_fib.h
diff options
context:
space:
mode:
authorJohn Lo <loj@cisco.com>2017-08-03 00:35:36 -0400
committerNeale Ranns <nranns@cisco.com>2017-08-03 08:45:32 +0000
commit8d00fff8dff4e449767601645422e03df92a83af (patch)
treeba16f948bcd2bb65dec310876c5febd84fc85665 /src/vnet/l2/l2_fib.h
parenta825c8bf5c641051b0cf71c63c3ddd269d90069b (diff)
Add support for API client to receive L2 MAC events
Added APIs want_l2_macs_events and l2_macs_event to allow an API client to receive notification events from VPP for MAC learned or aged in L2FIB. Only one API client is allowed for L2 MAC events. The want_l2_macs_events API allow caller to specify MAC learn limit, event scan delay and max number of MACs that can be included in a event message. These parameters should be choosen properly as to not have too many MAC events sent by VPP and overwhelm the API share memory. They can all be left as 0's so VPP will setup reasonable defaults which are: 1000 learn limit, 100 msec scan delay and 100 MACs per event message. If want_l2_macs_events is never called, VPP learning and aging should behave as before except that MAC entries provisioned by API or CLI will not be aged, even if it is not set as static_mac. These non static MACs, however, can be overwritten by MAC learning on a MAC move as a leared MAC. Only learned MACs are subject to aging. Change-Id: Ia3757a80cf8adb2811a089d2eafbd6439461285c Signed-off-by: John Lo <loj@cisco.com>
Diffstat (limited to 'src/vnet/l2/l2_fib.h')
-rw-r--r--src/vnet/l2/l2_fib.h37
1 files changed, 31 insertions, 6 deletions
diff --git a/src/vnet/l2/l2_fib.h b/src/vnet/l2/l2_fib.h
index ee6f0dc56a4..49a8b5b628c 100644
--- a/src/vnet/l2/l2_fib.h
+++ b/src/vnet/l2/l2_fib.h
@@ -27,6 +27,18 @@
#define L2FIB_NUM_BUCKETS (64 * 1024)
#define L2FIB_MEMORY_SIZE (256<<20)
+/* Ager scan interval is 1 minute for aging */
+#define L2FIB_AGE_SCAN_INTERVAL (60.0)
+
+/* MAC event scan delay is 100 msec unless specified by MAC event client */
+#define L2FIB_EVENT_SCAN_DELAY_DEFAULT (0.1)
+
+/* Max MACs in a event message is 100 unless specified by MAC event client */
+#define L2FIB_EVENT_MAX_MACS_DEFAULT (100)
+
+/* MAC event learn limit is 1000 unless specified by MAC event client */
+#define L2FIB_EVENT_LEARN_LIMIT_DEFAULT (1000)
+
typedef struct
{
@@ -36,6 +48,16 @@ typedef struct
/* per swif vector of sequence number for interface based flush of MACs */
u8 *swif_seq_num;
+ /* last event or ager scan duration */
+ f64 evt_scan_duration;
+ f64 age_scan_duration;
+
+ /* delay between event scans, default to 100 msec */
+ f64 event_scan_delay;
+
+ /* max macs in evet message, default to 100 entries */
+ u32 max_macs_in_event;
+
/* convenience variables */
vlib_main_t *vlib_main;
vnet_main_t *vnet_main;
@@ -89,12 +111,15 @@ typedef struct
{
struct
{
- u32 sw_if_index; /* output sw_if_index (L3 interface if bvi==1) */
+ u32 sw_if_index; /* output sw_if_index (L3 intf if bvi==1) */
- u8 static_mac:1; /* static mac, no dataplane learning */
+ u8 static_mac:1; /* static mac, no MAC move */
+ u8 age_not:1; /* not subject to age */
u8 bvi:1; /* mac is for a bridged virtual interface */
u8 filter:1; /* drop packets to/from this mac */
- u8 unused1:5;
+ u8 lrn_evt:1; /* MAC learned to be sent in L2 MAC event */
+ u8 unused:3;
+
u8 timestamp; /* timestamp for aging */
l2fib_seq_num_t sn; /* bd/int seq num */
} fields;
@@ -348,11 +373,11 @@ void l2fib_clear_table (void);
void
l2fib_add_entry (u64 mac,
u32 bd_index,
- u32 sw_if_index, u32 static_mac, u32 drop_mac, u32 bvi_mac);
+ u32 sw_if_index, u8 static_mac, u8 drop_mac, u8 bvi_mac);
static inline void
-l2fib_add_fwd_entry (u64 mac, u32 bd_index, u32 sw_if_index, u32 static_mac,
- u32 bvi_mac)
+l2fib_add_fwd_entry (u64 mac, u32 bd_index, u32 sw_if_index, u8 static_mac,
+ u8 bvi_mac)
{
l2fib_add_entry (mac, bd_index, sw_if_index, static_mac, 0, bvi_mac);
}