1 /* 2 * kernel routing table update prototype. 3 * Copyright (C) 1998 Kunihiro Ishiguro 4 * 5 * This file is part of GNU Zebra. 6 * 7 * GNU Zebra is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License as published by the 9 * Free Software Foundation; either version 2, or (at your option) any 10 * later version. 11 * 12 * GNU Zebra is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License along 18 * with this program; see the file COPYING; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22 #ifndef _ZEBRA_RT_H 23 #define _ZEBRA_RT_H 24 25 #include "prefix.h" 26 #include "if.h" 27 #include "vlan.h" 28 #include "vxlan.h" 29 #include "zebra/rib.h" 30 #include "zebra/zebra_ns.h" 31 #include "zebra/zebra_mpls.h" 32 #include "zebra/zebra_dplane.h" 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif 37 38 #define RKERNEL_ROUTE(type) ((type) == ZEBRA_ROUTE_KERNEL) 39 40 #define RSYSTEM_ROUTE(type) \ 41 ((RKERNEL_ROUTE(type)) || (type) == ZEBRA_ROUTE_CONNECT) 42 43 #ifndef HAVE_NETLINK 44 /* 45 * Update or delete a route, nexthop, LSP, pseudowire, or vxlan MAC from the 46 * kernel, using info from a dataplane context. 47 */ 48 extern enum zebra_dplane_result kernel_route_update( 49 struct zebra_dplane_ctx *ctx); 50 51 extern enum zebra_dplane_result 52 kernel_nexthop_update(struct zebra_dplane_ctx *ctx); 53 54 extern enum zebra_dplane_result kernel_lsp_update( 55 struct zebra_dplane_ctx *ctx); 56 57 enum zebra_dplane_result kernel_pw_update(struct zebra_dplane_ctx *ctx); 58 59 enum zebra_dplane_result kernel_address_update_ctx( 60 struct zebra_dplane_ctx *ctx); 61 62 enum zebra_dplane_result kernel_mac_update_ctx(struct zebra_dplane_ctx *ctx); 63 64 enum zebra_dplane_result kernel_neigh_update_ctx(struct zebra_dplane_ctx *ctx); 65 66 extern enum zebra_dplane_result 67 kernel_pbr_rule_update(struct zebra_dplane_ctx *ctx); 68 69 #endif /* !HAVE_NETLINK */ 70 71 extern int kernel_neigh_update(int cmd, int ifindex, uint32_t addr, char *lla, 72 int llalen, ns_id_t ns_id); 73 extern int kernel_interface_set_master(struct interface *master, 74 struct interface *slave); 75 76 extern int mpls_kernel_init(void); 77 78 extern uint32_t kernel_get_speed(struct interface *ifp, int *error); 79 extern int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *mroute); 80 81 /* 82 * Southbound Initialization routines to get initial starting 83 * state. 84 */ 85 extern void interface_list(struct zebra_ns *zns); 86 extern void kernel_init(struct zebra_ns *zns); 87 extern void kernel_terminate(struct zebra_ns *zns, bool complete); 88 extern void macfdb_read(struct zebra_ns *zns); 89 extern void macfdb_read_for_bridge(struct zebra_ns *zns, struct interface *ifp, 90 struct interface *br_if); 91 extern void macfdb_read_specific_mac(struct zebra_ns *zns, 92 struct interface *br_if, 93 struct ethaddr *mac, vlanid_t vid); 94 extern void neigh_read(struct zebra_ns *zns); 95 extern void neigh_read_for_vlan(struct zebra_ns *zns, struct interface *ifp); 96 extern void neigh_read_specific_ip(struct ipaddr *ip, 97 struct interface *vlan_if); 98 extern void route_read(struct zebra_ns *zns); 99 extern int kernel_upd_mac_nh(uint32_t nh_id, struct in_addr vtep_ip); 100 extern int kernel_del_mac_nh(uint32_t nh_id); 101 extern int kernel_upd_mac_nhg(uint32_t nhg_id, uint32_t nh_cnt, 102 struct nh_grp *nh_ids); 103 extern int kernel_del_mac_nhg(uint32_t nhg_id); 104 105 /* 106 * Message batching interface. 107 */ 108 extern void kernel_update_multi(struct dplane_ctx_q *ctx_list); 109 110 #ifdef __cplusplus 111 } 112 #endif 113 114 #endif /* _ZEBRA_RT_H */ 115