diff options
author | Timo Teräs <timo.teras@iki.fi> | 2014-06-30 13:57:01 +0300 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2014-06-30 13:57:01 +0300 |
commit | dfe933b7227e91533200981cbc4a2ee51a5f5e51 (patch) | |
tree | 4b5a42d3a57e73306a66a06de34b41611a92ec58 /main/quagga/0002-bgpd-remove-duplicate-route-map-extcommunity-code.patch | |
parent | db7f405e94e690b550f70f4a1c7a8681d167f904 (diff) | |
download | aports-dfe933b7227e91533200981cbc4a2ee51a5f5e51.tar.bz2 aports-dfe933b7227e91533200981cbc4a2ee51a5f5e51.tar.xz |
main/quagga: cherry-pick bgp fixes from 0.99.23-stable branch
Diffstat (limited to 'main/quagga/0002-bgpd-remove-duplicate-route-map-extcommunity-code.patch')
-rw-r--r-- | main/quagga/0002-bgpd-remove-duplicate-route-map-extcommunity-code.patch | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/main/quagga/0002-bgpd-remove-duplicate-route-map-extcommunity-code.patch b/main/quagga/0002-bgpd-remove-duplicate-route-map-extcommunity-code.patch new file mode 100644 index 000000000..81a38d60d --- /dev/null +++ b/main/quagga/0002-bgpd-remove-duplicate-route-map-extcommunity-code.patch @@ -0,0 +1,119 @@ +From 73d78ea0153fd36a300be5fec2ef0fca34a67477 Mon Sep 17 00:00:00 2001 +From: David Lamparter <equinox@opensourcerouting.org> +Date: Wed, 4 Jun 2014 00:58:47 +0200 +Subject: [PATCH] bgpd: remove duplicate route-map extcommunity code + +route_set_ecommunity_rt and _soo share almost all of their code. +Let's remove one of the redundant copies. + +Signed-off-by: David Lamparter <equinox@opensourcerouting.org> +--- + bgpd/bgp_routemap.c | 59 ++++++++--------------------------------------------- + 1 file changed, 9 insertions(+), 50 deletions(-) + +diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c +index 6dc88b3..eb5e80f 100644 +--- a/bgpd/bgp_routemap.c ++++ b/bgpd/bgp_routemap.c +@@ -1530,10 +1530,10 @@ struct route_map_rule_cmd route_set_community_delete_cmd = + + /* `set extcommunity rt COMMUNITY' */ + +-/* For community set mechanism. */ ++/* For community set mechanism. Used by _rt and _soo. */ + static route_map_result_t +-route_set_ecommunity_rt (void *rule, struct prefix *prefix, +- route_map_object_t type, void *object) ++route_set_ecommunity (void *rule, struct prefix *prefix, ++ route_map_object_t type, void *object) + { + struct ecommunity *ecom; + struct ecommunity *new_ecom; +@@ -1578,9 +1578,9 @@ route_set_ecommunity_rt_compile (const char *arg) + return ecommunity_intern (ecom); + } + +-/* Free function for set community. */ ++/* Free function for set community. Used by _rt and _soo */ + static void +-route_set_ecommunity_rt_free (void *rule) ++route_set_ecommunity_free (void *rule) + { + struct ecommunity *ecom = rule; + ecommunity_unintern (&ecom); +@@ -1590,46 +1590,13 @@ route_set_ecommunity_rt_free (void *rule) + struct route_map_rule_cmd route_set_ecommunity_rt_cmd = + { + "extcommunity rt", +- route_set_ecommunity_rt, ++ route_set_ecommunity, + route_set_ecommunity_rt_compile, +- route_set_ecommunity_rt_free, ++ route_set_ecommunity_free, + }; + + /* `set extcommunity soo COMMUNITY' */ + +-/* For community set mechanism. */ +-static route_map_result_t +-route_set_ecommunity_soo (void *rule, struct prefix *prefix, +- route_map_object_t type, void *object) +-{ +- struct ecommunity *ecom, *old_ecom, *new_ecom; +- struct bgp_info *bgp_info; +- +- if (type == RMAP_BGP) +- { +- ecom = rule; +- bgp_info = object; +- +- if (! ecom) +- return RMAP_OKAY; +- +- old_ecom = (bgp_attr_extra_get (bgp_info->attr))->ecommunity; +- +- if (old_ecom) +- new_ecom = ecommunity_merge (ecommunity_dup (old_ecom), ecom); +- else +- new_ecom = ecommunity_dup (ecom); +- +- bgp_info->attr->extra->ecommunity = ecommunity_intern (new_ecom); +- +- if (old_ecom) +- ecommunity_unintern (&old_ecom); +- +- bgp_info->attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_EXT_COMMUNITIES); +- } +- return RMAP_OKAY; +-} +- + /* Compile function for set community. */ + static void * + route_set_ecommunity_soo_compile (const char *arg) +@@ -1643,21 +1610,13 @@ route_set_ecommunity_soo_compile (const char *arg) + return ecommunity_intern (ecom); + } + +-/* Free function for set community. */ +-static void +-route_set_ecommunity_soo_free (void *rule) +-{ +- struct ecommunity *ecom = rule; +- ecommunity_unintern (&ecom); +-} +- + /* Set community rule structure. */ + struct route_map_rule_cmd route_set_ecommunity_soo_cmd = + { + "extcommunity soo", +- route_set_ecommunity_soo, ++ route_set_ecommunity, + route_set_ecommunity_soo_compile, +- route_set_ecommunity_soo_free, ++ route_set_ecommunity_free, + }; + + /* `set origin ORIGIN' */ +-- +2.0.1 + |