diff options
-rw-r--r-- | bgpd/ChangeLog | 4 | ||||
-rw-r--r-- | bgpd/Makefile.in | 175 | ||||
-rw-r--r-- | bgpd/bgp_clist.c | 44 | ||||
-rw-r--r-- | bgpd/bgp_clist.h | 1 | ||||
-rw-r--r-- | bgpd/bgp_ecommunity.c | 39 | ||||
-rw-r--r-- | bgpd/bgp_ecommunity.h | 2 | ||||
-rw-r--r-- | bgpd/bgp_routemap.c | 82 | ||||
-rw-r--r-- | ripngd/ripngd.c | 2 |
8 files changed, 225 insertions, 124 deletions
diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog index 4f7a20e9..39e6185e 100644 --- a/bgpd/ChangeLog +++ b/bgpd/ChangeLog @@ -1,3 +1,7 @@ +2003-01-09 Akihiro Mizutani <mizutani@net-chef.net> + + * bgp_routemap.c: Add match extcommunity command. + 2002-10-23 Kunihiro Ishiguro <kunihiro@ipinfusion.com> * bgp_aspath.c (aspath_init): Extend hash size from default to diff --git a/bgpd/Makefile.in b/bgpd/Makefile.in index 06c51892..85b49e48 100644 --- a/bgpd/Makefile.in +++ b/bgpd/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.7 from Makefile.am. +# Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 @@ -13,128 +13,94 @@ # PARTICULAR PURPOSE. @SET_MAKE@ +SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c +INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) +transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : +host_alias = @host_alias@ host_triplet = @host@ -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ + +EXEEXT = @EXEEXT@ +OBJEXT = @OBJEXT@ +PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BGPD = @BGPD@ CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ CURSES = @CURSES@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\" DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ IF_METHOD = @IF_METHOD@ IF_PROC = @IF_PROC@ INCLUDES = @INCLUDES@ -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPFORWARD = @IPFORWARD@ KERNEL_METHOD = @KERNEL_METHOD@ -LDFLAGS = @LDFLAGS@ LIBPAM = @LIBPAM@ -LIBS = @LIBS@ LIB_IPV6 = @LIB_IPV6@ LIB_REGEX = @LIB_REGEX@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ MULTIPATH_NUM = @MULTIPATH_NUM@ -OBJEXT = @OBJEXT@ OSPF6D = @OSPF6D@ OSPFD = @OSPFD@ OTHER_METHOD = @OTHER_METHOD@ PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ RIPD = @RIPD@ RIPNGD = @RIPNGD@ RTREAD_METHOD = @RTREAD_METHOD@ RT_METHOD = @RT_METHOD@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VTYSH = @VTYSH@ ZEBRA = @ZEBRA@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__quote = @am__quote@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ +DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\" INSTALL_SDATA = @INSTALL@ -m 600 noinst_LIBRARIES = libbgp.a @@ -199,8 +165,10 @@ am_bgpd_OBJECTS = bgp_main.$(OBJEXT) $(am__objects_1) bgpd_OBJECTS = $(am_bgpd_OBJECTS) bgpd_DEPENDENCIES = ../lib/libzebra.a bgpd_LDFLAGS = - DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bgp_advertise.Po \ @@ -223,6 +191,7 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CFLAGS = @CFLAGS@ DIST_SOURCES = $(libbgp_a_SOURCES) $(bgpd_SOURCES) DATA = $(sysconf_DATA) @@ -257,7 +226,7 @@ install-sbinPROGRAMS: $(sbin_PROGRAMS) ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f"; \ - $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f || exit 1; \ + $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f; \ else :; fi; \ done @@ -311,26 +280,17 @@ distclean-depend: -rm -rf ./$(DEPDIR) .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ -@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ -@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ -@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ -@am__fastdepCC_TRUE@ fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< +@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ -@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'`; \ -@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ -@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ -@am__fastdepCC_TRUE@ fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'` +@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + $(COMPILE) -c `cygpath -w $<` +CCDEPMODE = @CCDEPMODE@ uninstall-info-am: sysconfDATA_INSTALL = $(INSTALL_DATA) @@ -345,9 +305,6 @@ uninstall-sysconfDATA: ETAGS = etags ETAGSFLAGS = -CTAGS = ctags -CTAGSFLAGS = - tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -373,39 +330,20 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ + @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ @@ -492,19 +430,11 @@ mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - uninstall-am: uninstall-info-am uninstall-sbinPROGRAMS \ uninstall-sysconfDATA -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES clean-sbinPROGRAMS ctags distclean \ +.PHONY: GTAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES clean-sbinPROGRAMS distclean \ distclean-compile distclean-depend distclean-generic \ distclean-tags distdir dvi dvi-am info info-am install \ install-am install-data install-data-am install-exec \ @@ -512,9 +442,8 @@ uninstall-am: uninstall-info-am uninstall-sbinPROGRAMS \ install-sbinPROGRAMS install-strip install-sysconfDATA \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-info-am uninstall-sbinPROGRAMS \ - uninstall-sysconfDATA + mostlyclean-generic tags uninstall uninstall-am \ + uninstall-info-am uninstall-sbinPROGRAMS uninstall-sysconfDATA install-sysconfDATA: $(sysconf_DATA) diff --git a/bgpd/bgp_clist.c b/bgpd/bgp_clist.c index 0b6a2e8c..4bf194e3 100644 --- a/bgpd/bgp_clist.c +++ b/bgpd/bgp_clist.c @@ -364,6 +364,26 @@ community_regexp_match (struct community *com, regex_t *reg) return 0; } +static int +ecommunity_regexp_match (struct ecommunity *ecom, regex_t *reg) +{ + char *str; + + /* When there is no communities attribute it is treated as empty + string. */ + if (ecom == NULL || ecom->size == 0) + str = ""; + else + str = ecommunity_str (ecom); + + /* Regular expression match. */ + if (regexec (reg, str, 0, NULL, 0) == 0) + return 1; + + /* No match. */ + return 0; +} + /* Delete community attribute using regular expression match. Return modified communites attribute. */ static struct community * @@ -441,6 +461,30 @@ community_list_match (struct community *com, struct community_list *list) return 0; } +int +ecommunity_list_match (struct ecommunity *ecom, struct community_list *list) +{ + struct community_entry *entry; + + for (entry = list->head; entry; entry = entry->next) + { + if (entry->any) + return entry->direct == COMMUNITY_PERMIT ? 1 : 0; + + if (entry->style == EXTCOMMUNITY_LIST_STANDARD) + { + if (ecommunity_match (ecom, entry->u.ecom)) + return entry->direct == COMMUNITY_PERMIT ? 1 : 0; + } + else if (entry->style == EXTCOMMUNITY_LIST_EXPANDED) + { + if (ecommunity_regexp_match (ecom, entry->reg)) + return entry->direct == COMMUNITY_PERMIT ? 1 : 0; + } + } + return 0; +} + /* Perform exact matching. In case of expanded community-list, do same thing as community_list_match(). */ int diff --git a/bgpd/bgp_clist.h b/bgpd/bgp_clist.h index ffc707c2..50b43ab4 100644 --- a/bgpd/bgp_clist.h +++ b/bgpd/bgp_clist.h @@ -137,6 +137,7 @@ struct community_list * community_list_lookup (struct community_list_handler *, char *, int); int community_list_match (struct community *, struct community_list *); +int ecommunity_list_match (struct ecommunity *, struct community_list *); int community_list_exact_match (struct community *, struct community_list *); struct community * community_list_match_delete (struct community *, diff --git a/bgpd/bgp_ecommunity.c b/bgpd/bgp_ecommunity.c index 2f9cc945..aa0f1176 100644 --- a/bgpd/bgp_ecommunity.c +++ b/bgpd/bgp_ecommunity.c @@ -158,6 +158,15 @@ ecommunity_dup (struct ecommunity *ecom) return new; } +/* Retrun string representation of communities attribute. */ +char * +ecommunity_str (struct ecommunity *ecom) +{ + if (! ecom->str) + ecom->str = ecommunity_ecom2str (ecom, ECOMMUNITY_FORMAT_DISPLAY); + return ecom->str; +} + /* Merge two Extended Communities Attribute structure. */ struct ecommunity * ecommunity_merge (struct ecommunity *ecom1, struct ecommunity *ecom2) @@ -639,3 +648,33 @@ ecommunity_ecom2str (struct ecommunity *ecom, int format) } return str_buf; } + +int +ecommunity_match (struct ecommunity *ecom1, struct ecommunity *ecom2) +{ + int i = 0; + int j = 0; + + if (ecom1 == NULL && ecom2 == NULL) + return 1; + + if (ecom1 == NULL || ecom2 == NULL) + return 0; + + if (ecom1->size < ecom2->size) + return 0; + + /* Every community on com2 needs to be on com1 for this to match */ + while (i < ecom1->size && j < ecom2->size) + { + if (memcmp (ecom1->val + i, ecom2->val + j, ECOMMUNITY_SIZE) == 0) + j++; + i++; + } + + if (j == ecom2->size) + return 1; + else + return 0; +} + diff --git a/bgpd/bgp_ecommunity.h b/bgpd/bgp_ecommunity.h index 678d1308..7bc59a69 100644 --- a/bgpd/bgp_ecommunity.h +++ b/bgpd/bgp_ecommunity.h @@ -70,3 +70,5 @@ void ecommunity_unintern (struct ecommunity *); unsigned int ecommunity_hash_make (struct ecommunity *); struct ecommunity *ecommunity_str2com (char *, int, int); char *ecommunity_ecom2str (struct ecommunity *, int); +int ecommunity_match (struct ecommunity *, struct ecommunity *); +char *ecommunity_str (struct ecommunity *); diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c index 498a6005..b5494d52 100644 --- a/bgpd/bgp_routemap.c +++ b/bgpd/bgp_routemap.c @@ -518,6 +518,52 @@ struct route_map_rule_cmd route_match_community_cmd = route_match_community_free }; +/* Match function for extcommunity match. */ +route_map_result_t +route_match_ecommunity (void *rule, struct prefix *prefix, + route_map_object_t type, void *object) +{ + struct community_list *list; + struct bgp_info *bgp_info; + + if (type == RMAP_BGP) + { + bgp_info = object; + + list = community_list_lookup (bgp_clist, (char *) rule, + EXTCOMMUNITY_LIST_AUTO); + if (! list) + return RMAP_NOMATCH; + + if (ecommunity_list_match (bgp_info->attr->ecommunity, list)) + return RMAP_MATCH; + } + return RMAP_NOMATCH; +} + +/* Compile function for extcommunity match. */ +void * +route_match_ecommunity_compile (char *arg) +{ + return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg); +} + +/* Compile function for extcommunity match. */ +void +route_match_ecommunity_free (void *rule) +{ + XFREE (MTYPE_ROUTE_MAP_COMPILED, rule); +} + +/* Route map commands for community matching. */ +struct route_map_rule_cmd route_match_ecommunity_cmd = +{ + "extcommunity", + route_match_ecommunity, + route_match_ecommunity_compile, + route_match_ecommunity_free +}; + /* `match nlri` and `set nlri` are replaced by `address-family ipv4` and `address-family vpnv4'. */ @@ -2222,6 +2268,38 @@ ALIAS (no_match_community, "Community-list name\n" "Do exact matching of communities\n") +DEFUN (match_ecommunity, + match_ecommunity_cmd, + "match extcommunity (<1-99>|<100-199>|WORD)", + MATCH_STR + "Match BGP/VPN extended community list\n" + "Extended community-list number (standard)\n" + "Extended community-list number (expanded)\n" + "Extended community-list name\n") +{ + return bgp_route_match_add (vty, vty->index, "extcommunity", argv[0]); +} + +DEFUN (no_match_ecommunity, + no_match_ecommunity_cmd, + "no match extcommunity", + NO_STR + MATCH_STR + "Match BGP/VPN extended community list\n") +{ + return bgp_route_match_delete (vty, vty->index, "extcommunity", NULL); +} + +ALIAS (no_match_ecommunity, + no_match_ecommunity_val_cmd, + "no match extcommunity (<1-99>|<100-199>|WORD)", + NO_STR + MATCH_STR + "Match BGP/VPN extended community list\n" + "Extended community-list number (standard)\n" + "Extended community-list number (expanded)\n" + "Extended community-list name\n") + DEFUN (match_aspath, match_aspath_cmd, "match as-path WORD", @@ -3093,6 +3171,7 @@ bgp_route_map_init () route_map_install_match (&route_match_ip_next_hop_prefix_list_cmd); route_map_install_match (&route_match_aspath_cmd); route_map_install_match (&route_match_community_cmd); + route_map_install_match (&route_match_ecommunity_cmd); route_map_install_match (&route_match_metric_cmd); route_map_install_match (&route_match_origin_cmd); @@ -3136,6 +3215,9 @@ bgp_route_map_init () install_element (RMAP_NODE, &no_match_community_cmd); install_element (RMAP_NODE, &no_match_community_val_cmd); install_element (RMAP_NODE, &no_match_community_exact_cmd); + install_element (RMAP_NODE, &match_ecommunity_cmd); + install_element (RMAP_NODE, &no_match_ecommunity_cmd); + install_element (RMAP_NODE, &no_match_ecommunity_val_cmd); install_element (RMAP_NODE, &match_origin_cmd); install_element (RMAP_NODE, &no_match_origin_cmd); install_element (RMAP_NODE, &no_match_origin_val_cmd); diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c index 81f0ecad..98d4bb70 100644 --- a/ripngd/ripngd.c +++ b/ripngd/ripngd.c @@ -535,7 +535,7 @@ ripng_route_process (struct rte *rte, struct sockaddr_in6 *from, int ret; struct ripng_info newinfo; - memset (&rinfo, 0, sizeof (struct ripng_info)); + memset (&newinfo, 0, sizeof (struct ripng_info)); newinfo.metric = rte->metric; ret = route_map_apply (ri->routemap[RIPNG_FILTER_IN], |