mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-29 15:51:32 +00:00
Merge pull request #12837 from donaldsharp/unlikely_routemap
Unlikely routemap
This commit is contained in:
commit
c0656e9040
@ -445,7 +445,9 @@ babel_fill_with_next_timeout(struct timeval *tv)
|
|||||||
#define printIfMin(a,b,c,d)
|
#define printIfMin(a,b,c,d)
|
||||||
#else
|
#else
|
||||||
#define printIfMin(a, b, c, d) \
|
#define printIfMin(a, b, c, d) \
|
||||||
if (UNLIKELY(debug & BABEL_DEBUG_TIMEOUT)) {printIfMin(a,b,c,d);}
|
if (unlikely(debug & BABEL_DEBUG_TIMEOUT)) { \
|
||||||
|
printIfMin(a, b, c, d); \
|
||||||
|
}
|
||||||
|
|
||||||
struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
|
struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
|
||||||
struct interface *ifp = NULL;
|
struct interface *ifp = NULL;
|
||||||
|
@ -26,12 +26,8 @@ Copyright 2011 by Matthieu Boutier and Juliusz Chroboczek
|
|||||||
|
|
||||||
#if defined(__GNUC__) && (__GNUC__ >= 3)
|
#if defined(__GNUC__) && (__GNUC__ >= 3)
|
||||||
#define ATTRIBUTE(x) __attribute__ (x)
|
#define ATTRIBUTE(x) __attribute__ (x)
|
||||||
#define LIKELY(_x) __builtin_expect(!!(_x), 1)
|
|
||||||
#define UNLIKELY(_x) __builtin_expect(!!(_x), 0)
|
|
||||||
#else
|
#else
|
||||||
#define ATTRIBUTE(x) /**/
|
#define ATTRIBUTE(x) /**/
|
||||||
#define LIKELY(_x) !!(_x)
|
|
||||||
#define UNLIKELY(_x) !!(_x)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3)
|
#if defined(__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3)
|
||||||
|
@ -124,7 +124,8 @@ extern const unsigned char v4prefix[16];
|
|||||||
|
|
||||||
#define debugf(level, ...) \
|
#define debugf(level, ...) \
|
||||||
do { \
|
do { \
|
||||||
if(UNLIKELY(debug & level)) zlog_debug(__VA_ARGS__); \
|
if (unlikely(debug & level)) \
|
||||||
|
zlog_debug(__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#endif /* NO_DEBUG */
|
#endif /* NO_DEBUG */
|
||||||
|
@ -461,7 +461,8 @@ route_match_ip_address(void *rule, const struct prefix *prefix, void *object)
|
|||||||
if (prefix->family == AF_INET) {
|
if (prefix->family == AF_INET) {
|
||||||
alist = access_list_lookup(AFI_IP, (char *)rule);
|
alist = access_list_lookup(AFI_IP, (char *)rule);
|
||||||
if (alist == NULL) {
|
if (alist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug,
|
||||||
|
DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -521,7 +522,8 @@ route_match_ip_next_hop(void *rule, const struct prefix *prefix, void *object)
|
|||||||
|
|
||||||
alist = access_list_lookup(AFI_IP, (char *)rule);
|
alist = access_list_lookup(AFI_IP, (char *)rule);
|
||||||
if (alist == NULL) {
|
if (alist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug,
|
||||||
|
DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -581,7 +583,8 @@ route_match_ip_route_source(void *rule, const struct prefix *pfx, void *object)
|
|||||||
|
|
||||||
alist = access_list_lookup(AFI_IP, (char *)rule);
|
alist = access_list_lookup(AFI_IP, (char *)rule);
|
||||||
if (alist == NULL) {
|
if (alist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug,
|
||||||
|
DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -676,7 +679,7 @@ route_match_address_prefix_list(void *rule, afi_t afi,
|
|||||||
|
|
||||||
plist = prefix_list_lookup(afi, (char *)rule);
|
plist = prefix_list_lookup(afi, (char *)rule);
|
||||||
if (plist == NULL) {
|
if (plist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -737,7 +740,8 @@ route_match_ip_next_hop_prefix_list(void *rule, const struct prefix *prefix,
|
|||||||
|
|
||||||
plist = prefix_list_lookup(AFI_IP, (char *)rule);
|
plist = prefix_list_lookup(AFI_IP, (char *)rule);
|
||||||
if (plist == NULL) {
|
if (plist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug,
|
||||||
|
DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -786,7 +790,8 @@ route_match_ipv6_next_hop_prefix_list(void *rule, const struct prefix *prefix,
|
|||||||
|
|
||||||
plist = prefix_list_lookup(AFI_IP6, (char *)rule);
|
plist = prefix_list_lookup(AFI_IP6, (char *)rule);
|
||||||
if (!plist) {
|
if (!plist) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug,
|
||||||
|
DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -891,7 +896,8 @@ route_match_ip_route_source_prefix_list(void *rule, const struct prefix *prefix,
|
|||||||
|
|
||||||
plist = prefix_list_lookup(AFI_IP, (char *)rule);
|
plist = prefix_list_lookup(AFI_IP, (char *)rule);
|
||||||
if (plist == NULL) {
|
if (plist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug,
|
||||||
|
DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -956,7 +962,7 @@ route_match_mac_address(void *rule, const struct prefix *prefix, void *object)
|
|||||||
|
|
||||||
alist = access_list_lookup(AFI_L2VPN, (char *)rule);
|
alist = access_list_lookup(AFI_L2VPN, (char *)rule);
|
||||||
if (alist == NULL) {
|
if (alist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -964,7 +970,7 @@ route_match_mac_address(void *rule, const struct prefix *prefix, void *object)
|
|||||||
return RMAP_NOMATCH;
|
return RMAP_NOMATCH;
|
||||||
}
|
}
|
||||||
if (prefix->u.prefix_evpn.route_type != BGP_EVPN_MAC_IP_ROUTE) {
|
if (prefix->u.prefix_evpn.route_type != BGP_EVPN_MAC_IP_ROUTE) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Prefix %pFX is not a EVPN MAC IP ROUTE defaulting to NO_MATCH",
|
"%s: Prefix %pFX is not a EVPN MAC IP ROUTE defaulting to NO_MATCH",
|
||||||
__func__, prefix);
|
__func__, prefix);
|
||||||
@ -3242,7 +3248,8 @@ route_match_ipv6_address(void *rule, const struct prefix *prefix, void *object)
|
|||||||
if (prefix->family == AF_INET6) {
|
if (prefix->family == AF_INET6) {
|
||||||
alist = access_list_lookup(AFI_IP6, (char *)rule);
|
alist = access_list_lookup(AFI_IP6, (char *)rule);
|
||||||
if (alist == NULL) {
|
if (alist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug,
|
||||||
|
DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -3299,7 +3306,8 @@ route_match_ipv6_next_hop(void *rule, const struct prefix *prefix, void *object)
|
|||||||
|
|
||||||
alist = access_list_lookup(AFI_IP6, (char *)rule);
|
alist = access_list_lookup(AFI_IP6, (char *)rule);
|
||||||
if (!alist) {
|
if (!alist) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug,
|
||||||
|
DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
|
@ -439,6 +439,14 @@ _Static_assert(sizeof(_uint64_t) == 8 && sizeof(_int64_t) == 8,
|
|||||||
#pragma diag_suppress 167
|
#pragma diag_suppress 167
|
||||||
#endif /* __INTELISENSE__ */
|
#endif /* __INTELISENSE__ */
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ >= 3)
|
||||||
|
#define likely(_x) __builtin_expect(!!(_x), 1)
|
||||||
|
#define unlikely(_x) __builtin_expect(!!(_x), 0)
|
||||||
|
#else
|
||||||
|
#define likely(_x) !!(_x)
|
||||||
|
#define unlikely(_x) !!(_x)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -669,7 +669,7 @@ static struct route_map *route_map_add(const char *name)
|
|||||||
if (!map->ipv6_prefix_table)
|
if (!map->ipv6_prefix_table)
|
||||||
map->ipv6_prefix_table = route_table_init();
|
map->ipv6_prefix_table = route_table_init();
|
||||||
|
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug("Add route-map %s", name);
|
zlog_debug("Add route-map %s", name);
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
@ -689,7 +689,7 @@ static void route_map_free_map(struct route_map *map)
|
|||||||
while ((index = map->head) != NULL)
|
while ((index = map->head) != NULL)
|
||||||
route_map_index_delete(index, 0);
|
route_map_index_delete(index, 0);
|
||||||
|
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug("Deleting route-map %s", map->name);
|
zlog_debug("Deleting route-map %s", map->name);
|
||||||
|
|
||||||
list = &route_map_master;
|
list = &route_map_master;
|
||||||
@ -706,6 +706,9 @@ static void route_map_free_map(struct route_map *map)
|
|||||||
else
|
else
|
||||||
list->head = map->next;
|
list->head = map->next;
|
||||||
|
|
||||||
|
route_table_finish(map->ipv4_prefix_table);
|
||||||
|
route_table_finish(map->ipv6_prefix_table);
|
||||||
|
|
||||||
hash_release(route_map_master_hash, map);
|
hash_release(route_map_master_hash, map);
|
||||||
XFREE(MTYPE_ROUTE_MAP_NAME, map->name);
|
XFREE(MTYPE_ROUTE_MAP_NAME, map->name);
|
||||||
XFREE(MTYPE_ROUTE_MAP, map);
|
XFREE(MTYPE_ROUTE_MAP, map);
|
||||||
@ -1120,7 +1123,7 @@ void route_map_index_delete(struct route_map_index *index, int notify)
|
|||||||
|
|
||||||
QOBJ_UNREG(index);
|
QOBJ_UNREG(index);
|
||||||
|
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug("Deleting route-map %s sequence %d",
|
zlog_debug("Deleting route-map %s sequence %d",
|
||||||
index->map->name, index->pref);
|
index->map->name, index->pref);
|
||||||
|
|
||||||
@ -1231,7 +1234,7 @@ route_map_index_add(struct route_map *map, enum route_map_type type, int pref)
|
|||||||
route_map_notify_dependencies(map->name, RMAP_EVENT_CALL_ADDED);
|
route_map_notify_dependencies(map->name, RMAP_EVENT_CALL_ADDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug("Route-map %s add sequence %d, type: %s",
|
zlog_debug("Route-map %s add sequence %d, type: %s",
|
||||||
map->name, pref, route_map_type_str(type));
|
map->name, pref, route_map_type_str(type));
|
||||||
|
|
||||||
@ -1811,10 +1814,8 @@ route_map_get_index(struct route_map *map, const struct prefix *prefix,
|
|||||||
* must be AF_INET or AF_INET6 in order for the lookup to succeed. So if
|
* must be AF_INET or AF_INET6 in order for the lookup to succeed. So if
|
||||||
* the AF doesn't line up with the LPM trees, skip the optimization.
|
* the AF doesn't line up with the LPM trees, skip the optimization.
|
||||||
*/
|
*/
|
||||||
if (map->optimization_disabled ||
|
if (map->optimization_disabled) {
|
||||||
(prefix->family == AF_INET && !map->ipv4_prefix_table) ||
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
(prefix->family == AF_INET6 && !map->ipv6_prefix_table)) {
|
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"Skipping route-map optimization for route-map: %s, pfx: %pFX, family: %d",
|
"Skipping route-map optimization for route-map: %s, pfx: %pFX, family: %d",
|
||||||
map->name, prefix, prefix->family);
|
map->name, prefix, prefix->family);
|
||||||
@ -1826,9 +1827,6 @@ route_map_get_index(struct route_map *map, const struct prefix *prefix,
|
|||||||
else
|
else
|
||||||
table = map->ipv6_prefix_table;
|
table = map->ipv6_prefix_table;
|
||||||
|
|
||||||
if (!table)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
candidate_rmap_list =
|
candidate_rmap_list =
|
||||||
route_map_get_index_list(&rn, prefix, table);
|
route_map_get_index_list(&rn, prefix, table);
|
||||||
@ -1914,19 +1912,10 @@ static void route_map_pfx_table_add_default(afi_t afi,
|
|||||||
p.family = afi2family(afi);
|
p.family = afi2family(afi);
|
||||||
p.prefixlen = 0;
|
p.prefixlen = 0;
|
||||||
|
|
||||||
if (p.family == AF_INET) {
|
if (p.family == AF_INET)
|
||||||
table = index->map->ipv4_prefix_table;
|
table = index->map->ipv4_prefix_table;
|
||||||
if (!table)
|
else
|
||||||
index->map->ipv4_prefix_table = route_table_init();
|
|
||||||
|
|
||||||
table = index->map->ipv4_prefix_table;
|
|
||||||
} else {
|
|
||||||
table = index->map->ipv6_prefix_table;
|
table = index->map->ipv6_prefix_table;
|
||||||
if (!table)
|
|
||||||
index->map->ipv6_prefix_table = route_table_init();
|
|
||||||
|
|
||||||
table = index->map->ipv6_prefix_table;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add default route to table */
|
/* Add default route to table */
|
||||||
rn = route_node_get(table, &p);
|
rn = route_node_get(table, &p);
|
||||||
@ -2317,8 +2306,6 @@ static void route_map_pfx_tbl_update(route_map_event_t event,
|
|||||||
struct route_map_index *index, afi_t afi,
|
struct route_map_index *index, afi_t afi,
|
||||||
const char *plist_name)
|
const char *plist_name)
|
||||||
{
|
{
|
||||||
struct route_map *rmap = NULL;
|
|
||||||
|
|
||||||
if (!index)
|
if (!index)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2332,19 +2319,6 @@ static void route_map_pfx_tbl_update(route_map_event_t event,
|
|||||||
route_map_pfx_table_del_default(AFI_IP, index);
|
route_map_pfx_table_del_default(AFI_IP, index);
|
||||||
route_map_pfx_table_del_default(AFI_IP6, index);
|
route_map_pfx_table_del_default(AFI_IP6, index);
|
||||||
|
|
||||||
if ((index->map->head == NULL) && (index->map->tail == NULL)) {
|
|
||||||
rmap = index->map;
|
|
||||||
|
|
||||||
if (rmap->ipv4_prefix_table) {
|
|
||||||
route_table_finish(rmap->ipv4_prefix_table);
|
|
||||||
rmap->ipv4_prefix_table = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rmap->ipv6_prefix_table) {
|
|
||||||
route_table_finish(rmap->ipv6_prefix_table);
|
|
||||||
rmap->ipv6_prefix_table = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2569,12 +2543,14 @@ route_map_result_t route_map_apply_ext(struct route_map *map,
|
|||||||
*/
|
*/
|
||||||
if (prefix->family == AF_EVPN) {
|
if (prefix->family == AF_EVPN) {
|
||||||
if (evpn_prefix2prefix(prefix, &conv) != 0) {
|
if (evpn_prefix2prefix(prefix, &conv) != 0) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug,
|
||||||
|
DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"Unable to convert EVPN prefix %pFX into IPv4/IPv6 prefix. Falling back to non-optimized route-map lookup",
|
"Unable to convert EVPN prefix %pFX into IPv4/IPv6 prefix. Falling back to non-optimized route-map lookup",
|
||||||
prefix);
|
prefix);
|
||||||
} else {
|
} else {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug,
|
||||||
|
DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"Converted EVPN prefix %pFX into %pFX for optimized route-map lookup",
|
"Converted EVPN prefix %pFX into %pFX for optimized route-map lookup",
|
||||||
prefix, &conv);
|
prefix, &conv);
|
||||||
@ -2586,13 +2562,13 @@ route_map_result_t route_map_apply_ext(struct route_map *map,
|
|||||||
index = route_map_get_index(map, prefix, match_object, &match_ret);
|
index = route_map_get_index(map, prefix, match_object, &match_ret);
|
||||||
if (index) {
|
if (index) {
|
||||||
index->applied++;
|
index->applied++;
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"Best match route-map: %s, sequence: %d for pfx: %pFX, result: %s",
|
"Best match route-map: %s, sequence: %d for pfx: %pFX, result: %s",
|
||||||
map->name, index->pref, prefix,
|
map->name, index->pref, prefix,
|
||||||
route_map_cmd_result_str(match_ret));
|
route_map_cmd_result_str(match_ret));
|
||||||
} else {
|
} else {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"No best match sequence for pfx: %pFX in route-map: %s, result: %s",
|
"No best match sequence for pfx: %pFX in route-map: %s, result: %s",
|
||||||
prefix, map->name,
|
prefix, map->name,
|
||||||
@ -2615,7 +2591,7 @@ route_map_result_t route_map_apply_ext(struct route_map *map,
|
|||||||
/* Apply this index. */
|
/* Apply this index. */
|
||||||
match_ret = route_map_apply_match(&index->match_list,
|
match_ret = route_map_apply_match(&index->match_list,
|
||||||
prefix, match_object);
|
prefix, match_object);
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)) {
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))) {
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"Route-map: %s, sequence: %d, prefix: %pFX, result: %s",
|
"Route-map: %s, sequence: %d, prefix: %pFX, result: %s",
|
||||||
map->name, index->pref, prefix,
|
map->name, index->pref, prefix,
|
||||||
@ -2728,7 +2704,7 @@ route_map_result_t route_map_apply_ext(struct route_map *map,
|
|||||||
}
|
}
|
||||||
|
|
||||||
route_map_apply_end:
|
route_map_apply_end:
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug("Route-map: %s, prefix: %pFX, result: %s",
|
zlog_debug("Route-map: %s, prefix: %pFX, result: %s",
|
||||||
(map ? map->name : "null"), prefix,
|
(map ? map->name : "null"), prefix,
|
||||||
route_map_result_str(ret));
|
route_map_result_str(ret));
|
||||||
@ -2783,7 +2759,7 @@ static void route_map_clear_reference(struct hash_bucket *bucket, void *arg)
|
|||||||
tmp_dep_data.rname = arg;
|
tmp_dep_data.rname = arg;
|
||||||
dep_data = hash_release(dep->dep_rmap_hash, &tmp_dep_data);
|
dep_data = hash_release(dep->dep_rmap_hash, &tmp_dep_data);
|
||||||
if (dep_data) {
|
if (dep_data) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug("Clearing reference for %s to %s count: %d",
|
zlog_debug("Clearing reference for %s to %s count: %d",
|
||||||
dep->dep_name, tmp_dep_data.rname,
|
dep->dep_name, tmp_dep_data.rname,
|
||||||
dep_data->refcnt);
|
dep_data->refcnt);
|
||||||
@ -2803,7 +2779,7 @@ static void route_map_clear_all_references(char *rmap_name)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug("Clearing references for %s", rmap_name);
|
zlog_debug("Clearing references for %s", rmap_name);
|
||||||
|
|
||||||
for (i = 1; i < ROUTE_MAP_DEP_MAX; i++) {
|
for (i = 1; i < ROUTE_MAP_DEP_MAX; i++) {
|
||||||
@ -2879,7 +2855,7 @@ static int route_map_dep_update(struct hash *dephash, const char *dep_name,
|
|||||||
case RMAP_EVENT_LLIST_ADDED:
|
case RMAP_EVENT_LLIST_ADDED:
|
||||||
case RMAP_EVENT_CALL_ADDED:
|
case RMAP_EVENT_CALL_ADDED:
|
||||||
case RMAP_EVENT_FILTER_ADDED:
|
case RMAP_EVENT_FILTER_ADDED:
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug("Adding dependency for filter %s in route-map %s",
|
zlog_debug("Adding dependency for filter %s in route-map %s",
|
||||||
dep_name, rmap_name);
|
dep_name, rmap_name);
|
||||||
dep = (struct route_map_dep *)hash_get(
|
dep = (struct route_map_dep *)hash_get(
|
||||||
@ -2908,7 +2884,7 @@ static int route_map_dep_update(struct hash *dephash, const char *dep_name,
|
|||||||
case RMAP_EVENT_LLIST_DELETED:
|
case RMAP_EVENT_LLIST_DELETED:
|
||||||
case RMAP_EVENT_CALL_DELETED:
|
case RMAP_EVENT_CALL_DELETED:
|
||||||
case RMAP_EVENT_FILTER_DELETED:
|
case RMAP_EVENT_FILTER_DELETED:
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug("Deleting dependency for filter %s in route-map %s",
|
zlog_debug("Deleting dependency for filter %s in route-map %s",
|
||||||
dep_name, rmap_name);
|
dep_name, rmap_name);
|
||||||
dep = (struct route_map_dep *)hash_get(dephash, dname, NULL);
|
dep = (struct route_map_dep *)hash_get(dephash, dname, NULL);
|
||||||
@ -3034,7 +3010,7 @@ static void route_map_process_dependency(struct hash_bucket *bucket, void *data)
|
|||||||
dep_data = bucket->data;
|
dep_data = bucket->data;
|
||||||
rmap_name = dep_data->rname;
|
rmap_name = dep_data->rname;
|
||||||
|
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug("Notifying %s of dependency", rmap_name);
|
zlog_debug("Notifying %s of dependency", rmap_name);
|
||||||
if (route_map_master.event_hook)
|
if (route_map_master.event_hook)
|
||||||
(*route_map_master.event_hook)(rmap_name);
|
(*route_map_master.event_hook)(rmap_name);
|
||||||
@ -3082,7 +3058,7 @@ void route_map_notify_dependencies(const char *affected_name,
|
|||||||
if (!dep->this_hash)
|
if (!dep->this_hash)
|
||||||
dep->this_hash = upd8_hash;
|
dep->this_hash = upd8_hash;
|
||||||
|
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP)))
|
||||||
zlog_debug("Filter %s updated", dep->dep_name);
|
zlog_debug("Filter %s updated", dep->dep_name);
|
||||||
hash_iterate(dep->dep_rmap_hash, route_map_process_dependency,
|
hash_iterate(dep->dep_rmap_hash, route_map_process_dependency,
|
||||||
(void *)event);
|
(void *)event);
|
||||||
|
@ -1,13 +1,5 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
#if defined(__GNUC__) && (__GNUC__ >= 3)
|
|
||||||
#define likely(_x) __builtin_expect(!!(_x), 1)
|
|
||||||
#define unlikely(_x) __builtin_expect(!!(_x), 0)
|
|
||||||
#else
|
|
||||||
#define likely(_x) !!(_x)
|
|
||||||
#define unlikely(_x) !!(_x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define NHRP_DEBUG_COMMON (1 << 0)
|
#define NHRP_DEBUG_COMMON (1 << 0)
|
||||||
#define NHRP_DEBUG_KERNEL (1 << 1)
|
#define NHRP_DEBUG_KERNEL (1 << 1)
|
||||||
#define NHRP_DEBUG_IF (1 << 2)
|
#define NHRP_DEBUG_IF (1 << 2)
|
||||||
|
@ -120,7 +120,7 @@ route_match_ip_nexthop(void *rule, const struct prefix *prefix, void *object)
|
|||||||
|
|
||||||
alist = access_list_lookup(AFI_IP, (char *)rule);
|
alist = access_list_lookup(AFI_IP, (char *)rule);
|
||||||
if (alist == NULL) {
|
if (alist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -168,7 +168,7 @@ route_match_ip_next_hop_prefix_list(void *rule, const struct prefix *prefix,
|
|||||||
|
|
||||||
plist = prefix_list_lookup(AFI_IP, (char *)rule);
|
plist = prefix_list_lookup(AFI_IP, (char *)rule);
|
||||||
if (plist == NULL) {
|
if (plist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -245,7 +245,7 @@ route_match_ip_address(void *rule, const struct prefix *prefix, void *object)
|
|||||||
|
|
||||||
alist = access_list_lookup(AFI_IP, (char *)rule);
|
alist = access_list_lookup(AFI_IP, (char *)rule);
|
||||||
if (alist == NULL) {
|
if (alist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -286,7 +286,7 @@ route_match_ip_address_prefix_list(void *rule, const struct prefix *prefix,
|
|||||||
|
|
||||||
plist = prefix_list_lookup(AFI_IP, (char *)rule);
|
plist = prefix_list_lookup(AFI_IP, (char *)rule);
|
||||||
if (plist == NULL) {
|
if (plist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
|
@ -1041,7 +1041,7 @@ route_match_ip_next_hop(void *rule, const struct prefix *prefix, void *object)
|
|||||||
}
|
}
|
||||||
alist = access_list_lookup(AFI_IP, (char *)rule);
|
alist = access_list_lookup(AFI_IP, (char *)rule);
|
||||||
if (alist == NULL) {
|
if (alist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -1104,7 +1104,7 @@ route_match_ip_next_hop_prefix_list(void *rule, const struct prefix *prefix,
|
|||||||
}
|
}
|
||||||
plist = prefix_list_lookup(AFI_IP, (char *)rule);
|
plist = prefix_list_lookup(AFI_IP, (char *)rule);
|
||||||
if (plist == NULL) {
|
if (plist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -1145,7 +1145,7 @@ route_match_address(afi_t afi, void *rule, const struct prefix *prefix,
|
|||||||
|
|
||||||
alist = access_list_lookup(afi, (char *)rule);
|
alist = access_list_lookup(afi, (char *)rule);
|
||||||
if (alist == NULL) {
|
if (alist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
"%s: Access-List Specified: %s does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
@ -1207,7 +1207,7 @@ route_match_address_prefix_list(void *rule, const struct prefix *prefix,
|
|||||||
|
|
||||||
plist = prefix_list_lookup(afi, (char *)rule);
|
plist = prefix_list_lookup(afi, (char *)rule);
|
||||||
if (plist == NULL) {
|
if (plist == NULL) {
|
||||||
if (CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL))
|
if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP_DETAIL)))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
"%s: Prefix List %s specified does not exist defaulting to NO_MATCH",
|
||||||
__func__, (char *)rule);
|
__func__, (char *)rule);
|
||||||
|
Loading…
Reference in New Issue
Block a user