]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/zebra_vxlan_private.h
Merge pull request #3543 from donaldsharp/eigrp_router_id_is_the_bee
[mirror_frr.git] / zebra / zebra_vxlan_private.h
index b4a8b5d4803ac5e9f29f3bdbe9f2dd4c616da87a..3be7dc012ac2839bb4939f258c25a84c4e0e2495 100644 (file)
@@ -215,6 +215,15 @@ static inline void zl3vni_get_rmac(zebra_l3vni_t *zl3vni, struct ethaddr *rmac)
                memcpy(rmac->octet, zl3vni->svi_if->hw_addr, ETH_ALEN);
 }
 
+struct host_rb_entry {
+       RB_ENTRY(host_rb_entry) hl_entry;
+
+       struct prefix p;
+};
+
+RB_HEAD(host_rb_tree_entry, host_rb_entry);
+RB_PROTOTYPE(host_rb_tree_entry, host_rb_entry, hl_entry,
+            host_rb_entry_compare);
 /*
  * MAC hash table.
  *
@@ -238,6 +247,12 @@ struct zebra_mac_t_ {
 #define ZEBRA_MAC_STICKY  0x08  /* Static MAC */
 #define ZEBRA_MAC_REMOTE_RMAC  0x10  /* remote router mac */
 #define ZEBRA_MAC_DEF_GW  0x20
+/* remote VTEP advertised MAC as default GW */
+#define ZEBRA_MAC_REMOTE_DEF_GW        0x40
+#define ZEBRA_MAC_DUPLICATE 0x80
+
+       /* back pointer to zvni */
+       zebra_vni_t     *zvni;
 
        /* Local or remote info. */
        union {
@@ -249,11 +264,24 @@ struct zebra_mac_t_ {
                struct in_addr r_vtep_ip;
        } fwd_info;
 
+       /* Mobility sequence numbers associated with this entry. */
+       uint32_t rem_seq;
+       uint32_t loc_seq;
+
        /* List of neigh associated with this mac */
        struct list *neigh_list;
 
        /* list of hosts pointing to this remote RMAC */
-       struct list *host_list;
+       struct host_rb_tree_entry host_rb;
+
+       /* Duplicate mac detection */
+       uint32_t dad_count;
+
+       struct thread *dad_mac_auto_recovery_timer;
+
+       struct timeval detect_start_time;
+
+       time_t dad_dup_detect_time;
 };
 
 /*
@@ -277,6 +305,7 @@ struct mac_walk_ctx {
        struct vty *vty;          /* Used by VTY handlers */
        uint32_t count;           /* Used by VTY handlers */
        struct json_object *json; /* Used for JSON Output */
+       bool print_dup; /* Used to print dup addr list */
 };
 
 struct rmac_walk_ctx {
@@ -315,19 +344,42 @@ struct zebra_neigh_t_ {
        /* Underlying interface. */
        ifindex_t ifindex;
 
+       zebra_vni_t *zvni;
+
        uint32_t flags;
 #define ZEBRA_NEIGH_LOCAL     0x01
 #define ZEBRA_NEIGH_REMOTE    0x02
 #define ZEBRA_NEIGH_REMOTE_NH    0x04 /* neigh entry for remote vtep */
 #define ZEBRA_NEIGH_DEF_GW    0x08
+#define ZEBRA_NEIGH_ROUTER_FLAG 0x10
+#define ZEBRA_NEIGH_DUPLICATE 0x20
 
        enum zebra_neigh_state state;
 
        /* Remote VTEP IP - applicable only for remote neighbors. */
        struct in_addr r_vtep_ip;
 
+       /*
+        * Mobility sequence numbers associated with this entry. The rem_seq
+        * represents the sequence number from the client (BGP) for the most
+        * recent add or update of this entry while the loc_seq represents
+        * the sequence number informed (or to be informed) by zebra to BGP
+        * for this entry.
+        */
+       uint32_t rem_seq;
+       uint32_t loc_seq;
+
        /* list of hosts pointing to this remote NH entry */
-       struct list *host_list;
+       struct host_rb_tree_entry host_rb;
+
+       /* Duplicate ip detection */
+       uint32_t dad_count;
+
+       struct thread *dad_ip_auto_recovery_timer;
+
+       struct timeval detect_start_time;
+
+       time_t dad_dup_detect_time;
 };
 
 /*