]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/zebra_ns.h
Merge pull request #1825 from chiragshah6/ospfv3_dev
[mirror_frr.git] / zebra / zebra_ns.h
index 721b6c818be0d543bc14eaee8e0e1d8e4f34de0b..6655e5c019043d9119138e21770055b141b8f799 100644 (file)
 #define __ZEBRA_NS_H__
 
 #include <lib/ns.h>
+#include <lib/vrf.h>
 
 #ifdef HAVE_NETLINK
 /* Socket interface to kernel */
-struct nlsock
-{
-  int sock;
-  int seq;
-  struct sockaddr_nl snl;
-  char name[64];
+struct nlsock {
+       int sock;
+       int seq;
+       struct sockaddr_nl snl;
+       char name[64];
 };
 #endif
 
-struct zebra_ns
-{
-  /* net-ns name.  */
-  char name[VRF_NAMSIZ];
+struct zebra_ns_table {
+       RB_ENTRY(zebra_ns_table) zebra_ns_table_entry;
 
-  /* Identifier. */
-  ns_id_t ns_id;
+       uint32_t tableid;
+       afi_t afi;
+
+       struct route_table *table;
+};
+RB_HEAD(zebra_ns_table_head, zebra_ns_table);
+RB_PROTOTYPE(zebra_ns_table_head, zebra_ns_table, zebra_ns_table_entry,
+            zebra_ns_table_entry_compare)
+
+struct zebra_ns {
+       /* net-ns name.  */
+       char name[VRF_NAMSIZ];
+
+       /* Identifier. */
+       ns_id_t ns_id;
 
 #ifdef HAVE_NETLINK
-  struct nlsock netlink;     /* kernel messages */
-  struct nlsock netlink_cmd; /* command channel */
-  struct thread *t_netlink;
+       struct nlsock netlink;     /* kernel messages */
+       struct nlsock netlink_cmd; /* command channel */
+       struct thread *t_netlink;
 #endif
 
-  struct route_table *if_table;
+       struct route_table *if_table;
+
+       /* L3-VNI hash table (for EVPN). Only in default instance */
+       struct hash *l3vni_table;
 
-#if defined (HAVE_RTADV)
-  struct rtadv rtadv;
+#if defined(HAVE_RTADV)
+       struct rtadv rtadv;
 #endif /* HAVE_RTADV */
+
+       struct zebra_ns_table_head ns_tables;
+
+       struct hash *rules_hash;
+
+       /* Back pointer */
+       struct ns *ns;
 };
 
-#define NS_DEFAULT 0
-#define NS_UNKNOWN UINT16_MAX
+struct zebra_ns *zebra_ns_lookup(ns_id_t ns_id);
+
+int zebra_ns_init(void);
+int zebra_ns_enable(ns_id_t ns_id, void **info);
+int zebra_ns_disabled(struct ns *ns);
+int zebra_ns_disable(ns_id_t ns_id, void **info);
 
-struct zebra_ns *zebra_ns_lookup (ns_id_t ns_id);
+extern struct route_table *zebra_ns_find_table(struct zebra_ns *zns,
+                                              uint32_t tableid, afi_t afi);
+extern struct route_table *zebra_ns_get_table(struct zebra_ns *zns,
+                                             struct zebra_vrf *zvrf,
+                                             uint32_t tableid, afi_t afi);
+int zebra_ns_config_write(struct vty *vty, struct ns *ns);
 
-int zebra_ns_init (void);
-int zebra_ns_enable (ns_id_t ns_id, void **info);
-int zebra_ns_disable (ns_id_t ns_id, void **info);
+unsigned long zebra_ns_score_proto(u_char proto, u_short instance);
+void zebra_ns_sweep_route(void);
 #endif