]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/zebra_vrf.h
Merge pull request #1314 from donaldsharp/pim_rpf_address
[mirror_frr.git] / zebra / zebra_vrf.h
index df25fad947631183a1a00bb1776a18425b2ebaa7..1dfc0b3eb8b11f941209e6cb8a372ef49a377d93 100644 (file)
 #define __ZEBRA_RIB_H__
 
 #include <zebra/zebra_ns.h>
+#include <zebra/zebra_pw.h>
 
 /* MPLS (Segment Routing) global block */
-typedef struct mpls_srgb_t_
-{
-  u_int32_t start_label;
-  u_int32_t end_label;
+typedef struct mpls_srgb_t_ {
+       u_int32_t start_label;
+       u_int32_t end_label;
 } mpls_srgb_t;
 
 /* Routing table instance.  */
-struct zebra_vrf
-{
-  /* Back pointer */
-  struct vrf *vrf;
+struct zebra_vrf {
+       /* Back pointer */
+       struct vrf *vrf;
 
-  /* Description.  */
-  char *desc;
+       /* Description.  */
+       char *desc;
 
-  /* FIB identifier.  */
-  u_char fib_id;
+       /* FIB identifier.  */
+       u_char fib_id;
 
-  /* Flags. */
-  u_int16_t flags;
+       /* Flags. */
+       u_int16_t flags;
 #define ZEBRA_VRF_RIB_SCHEDULED   (1 << 0)
 #define ZEBRA_VRF_RETAIN          (2 << 0)
 
-  u_int32_t table_id;
+       u_int32_t table_id;
 
-  /* Routing table.  */
-  struct route_table *table[AFI_MAX][SAFI_MAX];
+       /* Routing table.  */
+       struct route_table *table[AFI_MAX][SAFI_MAX];
 
-  /* Static route configuration.  */
-  struct route_table *stable[AFI_MAX][SAFI_MAX];
+       /* Static route configuration.  */
+       struct route_table *stable[AFI_MAX][SAFI_MAX];
 
-  /* Recursive Nexthop table */
-  struct route_table *rnh_table[AFI_MAX];
+       /* Recursive Nexthop table */
+       struct route_table *rnh_table[AFI_MAX];
 
-  /* Import check table (used mostly by BGP */
-  struct route_table *import_check_table[AFI_MAX];
+       /* Import check table (used mostly by BGP */
+       struct route_table *import_check_table[AFI_MAX];
 
-  /* Routing tables off of main table for redistribute table */
-  struct route_table *other_table[AFI_MAX][ZEBRA_KERNEL_TABLE_MAX];
+       /* Routing tables off of main table for redistribute table */
+       struct route_table *other_table[AFI_MAX][ZEBRA_KERNEL_TABLE_MAX];
 
-  /* 2nd pointer type used primarily to quell a warning on
-   * ALL_LIST_ELEMENTS_RO
-   */
-  struct list _rid_all_sorted_list;
-  struct list _rid_lo_sorted_list;
-  struct list *rid_all_sorted_list;
-  struct list *rid_lo_sorted_list;
-  struct prefix rid_user_assigned;
+       /* 2nd pointer type used primarily to quell a warning on
+        * ALL_LIST_ELEMENTS_RO
+        */
+       struct list _rid_all_sorted_list;
+       struct list _rid_lo_sorted_list;
+       struct list *rid_all_sorted_list;
+       struct list *rid_lo_sorted_list;
+       struct prefix rid_user_assigned;
 
-  /*
-   * Back pointer to the owning namespace.
-   */
-  struct zebra_ns *zns;
+       /*
+        * Back pointer to the owning namespace.
+        */
+       struct zebra_ns *zns;
 
-  /* MPLS static LSP config table */
-  struct hash *slsp_table;
+       /* MPLS static LSP config table */
+       struct hash *slsp_table;
 
-  /* MPLS label forwarding table */
-  struct hash *lsp_table;
+       /* MPLS label forwarding table */
+       struct hash *lsp_table;
 
-  /* MPLS FEC binding table */
-  struct route_table *fec_table[AFI_MAX];
+       /* MPLS FEC binding table */
+       struct route_table *fec_table[AFI_MAX];
 
-  /* MPLS Segment Routing Global block */
-  mpls_srgb_t mpls_srgb;
+       /* MPLS Segment Routing Global block */
+       mpls_srgb_t mpls_srgb;
 
-  /* MPLS processing flags */
-  u_int16_t mpls_flags;
+       /* Pseudowires. */
+       struct zebra_pw_head pseudowires;
+       struct zebra_static_pw_head static_pseudowires;
+
+       /* MPLS processing flags */
+       u_int16_t mpls_flags;
 #define MPLS_FLAG_SCHEDULE_LSPS    (1 << 0)
+
+       /*
+        * VNI hash table (for EVPN). Only in default instance.
+        */
+       struct hash *vni_table;
+
+       /*
+        * Whether EVPN is enabled or not. Only in default instance.
+        */
+       int advertise_all_vni;
+
+       /*
+        * Whether we are advertising g/w macip in EVPN or not.
+        * Only in default instance.
+        */
+       int advertise_gw_macip;
+
+       /* Route Installs */
+       uint64_t installs;
+       uint64_t removals;
+       uint64_t neigh_updates;
+       uint64_t lsp_installs;
+       uint64_t lsp_removals;
 };
 
-static inline vrf_id_t
-zvrf_id (struct zebra_vrf *zvrf)
+static inline vrf_id_t zvrf_id(struct zebra_vrf *zvrf)
 {
-  return zvrf->vrf->vrf_id;
+       return zvrf->vrf->vrf_id;
 }
 
-static inline const char *
-zvrf_name (struct zebra_vrf *zvrf)
+static inline const char *zvrf_name(struct zebra_vrf *zvrf)
 {
-  return zvrf->vrf->name;
+       return zvrf->vrf->name;
 }
 
-struct route_table *
-zebra_vrf_table_with_table_id (afi_t afi, safi_t safi,
-                               vrf_id_t vrf_id, u_int32_t table_id);
-
-extern void zebra_vrf_static_route_interface_fixup (struct interface *ifp);
-extern void zebra_vrf_update_all (struct zserv *client);
-extern struct zebra_vrf *zebra_vrf_lookup_by_id (vrf_id_t vrf_id);
-extern struct zebra_vrf *zebra_vrf_lookup_by_name (const char *);
-extern struct zebra_vrf *zebra_vrf_alloc (void);
-extern struct route_table *zebra_vrf_table (afi_t, safi_t, vrf_id_t);
-extern struct route_table *zebra_vrf_static_table (afi_t, safi_t, struct zebra_vrf *zvrf);
-extern struct route_table *zebra_vrf_other_route_table (afi_t afi, u_int32_t table_id,
-                                                       vrf_id_t vrf_id);
-extern void zebra_vrf_init (void);
+struct route_table *zebra_vrf_table_with_table_id(afi_t afi, safi_t safi,
+                                                 vrf_id_t vrf_id,
+                                                 u_int32_t table_id);
+
+extern void zebra_vrf_update_all(struct zserv *client);
+extern struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id);
+extern struct zebra_vrf *zebra_vrf_lookup_by_name(const char *);
+extern struct zebra_vrf *zebra_vrf_alloc(void);
+extern struct route_table *zebra_vrf_table(afi_t, safi_t, vrf_id_t);
+extern struct route_table *zebra_vrf_static_table(afi_t, safi_t,
+                                                 struct zebra_vrf *zvrf);
+extern struct route_table *
+zebra_vrf_other_route_table(afi_t afi, u_int32_t table_id, vrf_id_t vrf_id);
+extern void zebra_vrf_init(void);
 #endif