frr/zebra/zebra_routemap.h

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

46 lines
1.4 KiB
C
Raw Normal View History

// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Zebra routemap header
* Copyright (C) 2015 Cumulus Networks, Inc.
*/
#ifndef __ZEBRA_ROUTEMAP_H__
#define __ZEBRA_ROUTEMAP_H__
#include "lib/routemap.h"
#ifdef __cplusplus
extern "C" {
#endif
extern void zebra_route_map_init(void);
extern void zebra_routemap_config_write_protocol(struct vty *vty,
struct zebra_vrf *vrf);
extern char *zebra_get_import_table_route_map(afi_t afi, uint32_t table);
extern void zebra_add_import_table_route_map(afi_t afi, const char *rmap_name,
uint32_t table);
extern void zebra_del_import_table_route_map(afi_t afi, uint32_t table);
zebra: import table match against interface name could fail If an import table route-map is trying to match against a particular interface, The code is matching against the actual vrf the route entry is in -vs- the vrf the nexthop entry is in. Let's modify the code to actually allow the import table entry to match against the nexthops vrf. Not working: ip import-table 91 ip import-table 93 route-map FOO no service integrated-vtysh-config ! debug zebra events ! interface green ip address 192.168.4.3/24 exit ! route-map FOO permit 10 match interface green exit eva# show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup t - trapped, o - offload failure K>* 0.0.0.0/0 [0/100] via 192.168.119.1, enp13s0, 1d10h07m T[91]>* 1.2.3.5/32 [15/0] via 192.168.119.1, enp13s0, 00:00:05 K>* 169.254.0.0/16 [0/1000] is directly connected, virbr0 linkdown, 1d16h34m C>* 192.168.44.0/24 is directly connected, virbr1, 01:30:51 C>* 192.168.45.0/24 is directly connected, virbr2, 01:30:51 C>* 192.168.119.0/24 is directly connected, enp13s0, 1d16h34m C>* 192.168.122.0/24 is directly connected, virbr0 linkdown, 01:30:51 eva# show ip route table 91 Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup t - trapped, o - offload failure VRF default table 91: K>* 1.2.3.5/32 [0/0] via 192.168.119.1, enp13s0, 00:00:15 eva# show ip route table 93 Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup t - trapped, o - offload failure VRF default table 93: K * 1.2.3.4/32 [0/0] via 192.168.4.5, green (vrf green), 00:03:05 Working: eva# show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup t - trapped, o - offload failure K>* 0.0.0.0/0 [0/100] via 192.168.119.1, enp13s0, 00:03:09 T[93]>* 1.2.3.4/32 [15/0] via 192.168.4.5, green (vrf green), 00:02:21 T[91]>* 1.2.3.5/32 [15/0] via 192.168.119.1, enp13s0, 00:02:26 K>* 169.254.0.0/16 [0/1000] is directly connected, virbr0, 00:03:09 C>* 192.168.44.0/24 is directly connected, virbr1, 00:03:09 C>* 192.168.45.0/24 is directly connected, virbr2, 00:03:09 C>* 192.168.119.0/24 is directly connected, enp13s0, 00:03:09 C>* 192.168.122.0/24 is directly connected, virbr0, 00:03:09 eva# show ip route table 91 Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup t - trapped, o - offload failure VRF default table 91: K * 1.2.3.5/32 [0/0] via 192.168.119.1, enp13s0, 00:03:12 eva# show ip route table 93 Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup t - trapped, o - offload failure VRF default table 93: K * 1.2.3.4/32 [0/0] via 192.168.4.5, green (vrf green), 00:03:14 Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-08-11 16:18:41 +02:00
extern route_map_result_t zebra_import_table_route_map_check(
int family, int rib_type, uint8_t instance, const struct prefix *p,
struct nexthop *nexthop, route_tag_t tag, const char *rmap_name);
extern route_map_result_t
zebra_route_map_check(afi_t family, int rib_type, uint8_t instance,
const struct prefix *p, struct nexthop *nexthop,
struct zebra_vrf *zvrf, route_tag_t tag);
extern route_map_result_t
zebra_nht_route_map_check(afi_t afi, int client_proto, const struct prefix *p,
struct zebra_vrf *zvrf, struct route_entry *,
struct nexthop *nexthop);
extern void zebra_routemap_vrf_delete(struct zebra_vrf *zvrf);
#ifdef __cplusplus
}
#endif
extern void zebra_routemap_finish(void);
extern const struct frr_yang_module_info frr_zebra_route_map_info;
#endif