]>
Commit | Line | Data |
---|---|---|
718e3744 | 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 | * | |
896014f4 DL |
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 | |
718e3744 | 20 | */ |
21 | ||
22 | #ifndef _ZEBRA_RT_H | |
23 | #define _ZEBRA_RT_H | |
24 | ||
ec1a4283 | 25 | #include "prefix.h" |
26 | #include "if.h" | |
2232a77c | 27 | #include "vlan.h" |
13d60d35 | 28 | #include "vxlan.h" |
5c78b3d0 | 29 | #include "zebra/rib.h" |
40c7bdb0 | 30 | #include "zebra/zebra_ns.h" |
31 | #include "zebra/zebra_mpls.h" | |
ec1a4283 | 32 | |
b33803d7 DS |
33 | /* |
34 | * Philosophy Note: | |
35 | * | |
36 | * Flags being SET/UNSET do not belong in the South Bound | |
37 | * Interface. This Setting belongs at the calling level | |
38 | * because we can and will have multiple different interfaces | |
39 | * and we will have potentially multiple different | |
40 | * modules/filters to call. As such Setting/Unsetting | |
41 | * success failure should be handled by the caller. | |
42 | */ | |
43 | ||
0c555cc6 | 44 | |
215181cb DS |
45 | enum dp_results { |
46 | DP_INSTALL_SUCCESS, | |
47 | DP_INSTALL_FAILURE, | |
48 | DP_DELETE_SUCCESS, | |
49 | DP_DELETE_FAILURE, | |
0c555cc6 DS |
50 | }; |
51 | ||
1e885672 DS |
52 | enum dp_req_result { |
53 | DP_REQUEST_QUEUED, | |
54 | DP_REQUEST_SUCCESS, | |
55 | DP_REQUEST_FAILURE, | |
56 | }; | |
57 | ||
0c555cc6 DS |
58 | /* |
59 | * Install/delete the specified prefix p from the kernel | |
60 | * | |
61 | * old = NULL, new = pointer - Install new | |
62 | * old = pointer, new = pointer - Route replace Old w/ New | |
63 | * old = pointer, new = NULL, - Route Delete | |
64 | * | |
65 | * Please note not all kernels support route replace | |
66 | * semantics so we will end up with a delete than | |
67 | * a re-add. | |
68 | */ | |
1e885672 | 69 | extern enum dp_req_result kernel_route_rib(struct route_node *rn, |
86391e56 MS |
70 | const struct prefix *p, |
71 | const struct prefix *src_p, | |
1e885672 DS |
72 | struct route_entry *old, |
73 | struct route_entry *new); | |
0c555cc6 DS |
74 | |
75 | /* | |
76 | * So route install/failure may not be immediately known | |
77 | * so let's separate it out and allow the result to | |
78 | * be passed back up. | |
79 | */ | |
86391e56 MS |
80 | extern void kernel_route_rib_pass_fail(struct route_node *rn, |
81 | const struct prefix *p, | |
0c555cc6 | 82 | struct route_entry *re, |
215181cb | 83 | enum dp_results res); |
d62a17ae | 84 | |
85 | extern int kernel_address_add_ipv4(struct interface *, struct connected *); | |
86 | extern int kernel_address_delete_ipv4(struct interface *, struct connected *); | |
996c9314 LB |
87 | extern int kernel_address_add_ipv6(struct interface *, struct connected *); |
88 | extern int kernel_address_delete_ipv6(struct interface *, struct connected *); | |
89 | extern int kernel_neigh_update(int cmd, int ifindex, uint32_t addr, char *lla, | |
90 | int llalen, ns_id_t ns_id); | |
e0ae31b8 DS |
91 | extern int kernel_interface_set_master(struct interface *master, |
92 | struct interface *slave); | |
4a83e7a0 | 93 | |
7c5d0e18 DS |
94 | extern enum dp_req_result kernel_add_lsp(zebra_lsp_t *lsp); |
95 | extern enum dp_req_result kernel_upd_lsp(zebra_lsp_t *lsp); | |
96 | extern enum dp_req_result kernel_del_lsp(zebra_lsp_t *lsp); | |
4a83e7a0 DS |
97 | |
98 | /* | |
99 | * Add the ability to pass back up the lsp install/delete | |
100 | * success/failure. | |
101 | * | |
102 | * This functions goal is similiar to kernel_route_rib_pass_fail | |
103 | * in that we are separating out the mechanics for | |
104 | * the install/failure to set/unset flags and to notify | |
105 | * as needed. | |
106 | */ | |
215181cb | 107 | extern void kernel_lsp_pass_fail(zebra_lsp_t *lsp, enum dp_results res); |
4a83e7a0 | 108 | |
d62a17ae | 109 | extern int mpls_kernel_init(void); |
110 | ||
dc7b3cae | 111 | extern uint32_t kernel_get_speed(struct interface *ifp); |
43b5cc5e | 112 | extern int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *mroute); |
d62a17ae | 113 | extern int kernel_add_vtep(vni_t vni, struct interface *ifp, |
114 | struct in_addr *vtep_ip); | |
115 | extern int kernel_del_vtep(vni_t vni, struct interface *ifp, | |
116 | struct in_addr *vtep_ip); | |
117 | extern int kernel_add_mac(struct interface *ifp, vlanid_t vid, | |
118 | struct ethaddr *mac, struct in_addr vtep_ip, | |
d7c0a89a | 119 | uint8_t sticky); |
d62a17ae | 120 | extern int kernel_del_mac(struct interface *ifp, vlanid_t vid, |
121 | struct ethaddr *mac, struct in_addr vtep_ip, | |
122 | int local); | |
123 | ||
124 | extern int kernel_add_neigh(struct interface *ifp, struct ipaddr *ip, | |
68e33151 | 125 | struct ethaddr *mac, uint8_t flags); |
d62a17ae | 126 | extern int kernel_del_neigh(struct interface *ifp, struct ipaddr *ip); |
2232a77c | 127 | |
05f7f5db DS |
128 | /* |
129 | * Southbound Initialization routines to get initial starting | |
130 | * state. | |
131 | */ | |
132 | extern void interface_list(struct zebra_ns *zns); | |
133 | extern void kernel_init(struct zebra_ns *zns); | |
134 | extern void kernel_terminate(struct zebra_ns *zns); | |
135 | extern void macfdb_read(struct zebra_ns *zns); | |
136 | extern void macfdb_read_for_bridge(struct zebra_ns *zns, struct interface *ifp, | |
137 | struct interface *br_if); | |
138 | extern void neigh_read(struct zebra_ns *zns); | |
139 | extern void neigh_read_for_vlan(struct zebra_ns *zns, struct interface *ifp); | |
140 | extern void route_read(struct zebra_ns *zns); | |
141 | ||
718e3744 | 142 | #endif /* _ZEBRA_RT_H */ |