#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