1 /* 2 * Zebra NS header 3 * Copyright (C) 2016 Cumulus Networks, Inc. 4 * Donald Sharp 5 * 6 * This file is part of Quagga. 7 * 8 * Quagga is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU General Public License as published by the 10 * Free Software Foundation; either version 2, or (at your option) any 11 * later version. 12 * 13 * Quagga is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License along 19 * with this program; see the file COPYING; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 21 */ 22 #if !defined(__ZEBRA_NS_H__) 23 #define __ZEBRA_NS_H__ 24 25 #include <lib/ns.h> 26 #include <lib/vrf.h> 27 28 #include "zebra/rib.h" 29 #include "zebra/zebra_vrf.h" 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 #ifdef HAVE_NETLINK 36 /* Socket interface to kernel */ 37 struct nlsock { 38 int sock; 39 int seq; 40 struct sockaddr_nl snl; 41 char name[64]; 42 }; 43 #endif 44 45 struct zebra_ns { 46 /* net-ns name. */ 47 char name[VRF_NAMSIZ]; 48 49 /* Identifier. */ 50 ns_id_t ns_id; 51 52 #ifdef HAVE_NETLINK 53 struct nlsock netlink; /* kernel messages */ 54 struct nlsock netlink_cmd; /* command channel */ 55 struct nlsock netlink_dplane; /* dataplane channel */ 56 struct thread *t_netlink; 57 #endif 58 59 struct route_table *if_table; 60 61 /* Back pointer */ 62 struct ns *ns; 63 }; 64 65 struct zebra_ns *zebra_ns_lookup(ns_id_t ns_id); 66 67 int zebra_ns_init(const char *optional_default_name); 68 int zebra_ns_enable(ns_id_t ns_id, void **info); 69 int zebra_ns_disabled(struct ns *ns); 70 int zebra_ns_early_shutdown(struct ns *ns, 71 void *param_in __attribute__((unused)), 72 void **param_out __attribute__((unused))); 73 int zebra_ns_final_shutdown(struct ns *ns, 74 void *param_in __attribute__((unused)), 75 void **param_out __attribute__((unused))); 76 int zebra_ns_config_write(struct vty *vty, struct ns *ns); 77 78 #ifdef __cplusplus 79 } 80 #endif 81 82 #endif 83