Commit 6c84554b authored by Ondrej Zajicek's avatar Ondrej Zajicek
Browse files

Merge branch 'master' into dev

parents f434d191 4d176e14
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -114,6 +114,10 @@ else
				;;
		ipv4:freebsd*)	sysdesc=bsd
				;;
		ipv6:openbsd*)	sysdesc=bsd-v6
				;;
		ipv4:openbsd*)	sysdesc=bsd
				;;
		*)		AC_MSG_ERROR([Cannot determine correct system configuration. Please use --with-sysconfig to set it manually.])
				;;
		esac
+4 −1
Original line number Diff line number Diff line
@@ -435,7 +435,7 @@ This argument can be omitted if there exists only a single instance.
	<tag>show symbols</tag>
	Show the list of symbols defined in the configuration (names of protocols, routing tables etc.).

	<tag>show route [[for] <m/prefix/|<m/IP/] [table <m/sym/] [filter <m/f/|where <m/c/] [(import|preimport) <m/p/] [<m/options/]</tag>
	<tag>show route [[for] <m/prefix/|<m/IP/] [table <m/sym/] [filter <m/f/|where <m/c/] [(import|preimport) <m/p/] [protocol <m/p/] [<m/options/]</tag>
	Show contents of a routing table (by default of the main one),
	that is routes, their metrics and (in case the <cf/all/ switch is given)
	all their attributes.
@@ -454,6 +454,9 @@ This argument can be omitted if there exists only a single instance.
	that are imported to the specified protocol. With <cf/preimport/, the
	import filter of the protocol is skipped.

	<p>You can also select just routes added by a specific protocol.
	<cf>protocol <m/p/</cf>.

	<p>The <cf/stats/ switch requests showing of route statistics (the
	number of networks, number of routes before and after filtering). If
	you use <cf/count/ instead, only the statistics will be printed.
+12 −4
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ CF_ENUM(T_ENUM_RTD, RTD_, ROUTER, DEVICE, BLACKHOLE, UNREACHABLE, PROHIBIT)
%type <r> rtable
%type <s> optsym
%type <ra> r_args
%type <i> echo_mask echo_size debug_mask debug_list debug_flag import_or_proto
%type <i> echo_mask echo_size debug_mask debug_list debug_flag import_or_preimport
%type <t> proto_patt

CF_GRAMMAR
@@ -298,7 +298,7 @@ CF_CLI(SHOW INTERFACES,,, [[Show network interfaces]])
CF_CLI(SHOW INTERFACES SUMMARY,,, [[Show summary of network interfaces]])
{ if_show_summary(); } ;

CF_CLI(SHOW ROUTE, r_args, [[[<prefix>|for <prefix>|for <ip>] [table <t>] [filter <f>|where <cond>] [all] [primary] [(import|protocol) <p>] [stats|count]]], [[Show routing table]])
CF_CLI(SHOW ROUTE, r_args, [[[<prefix>|for <prefix>|for <ip>] [table <t>] [filter <f>|where <cond>] [all] [primary] [(import|preimport) <p>] [protocol <p>] [stats|count]]], [[Show routing table]])
{ rt_show($3); } ;

r_args:
@@ -344,7 +344,7 @@ r_args:
     $$ = $1;
     $$->primary_only = 1;
   }
 | r_args import_or_proto SYM {
 | r_args import_or_preimport SYM {
     struct proto_config *c = (struct proto_config *) $3->def;
     $$ = $1;
     if ($$->import_mode) cf_error("Protocol specified twice");
@@ -354,6 +354,14 @@ r_args:
     $$->import_protocol = c->proto;
     $$->running_on_config = c->proto->cf->global;
   }
 | r_args PROTOCOL SYM {
     struct proto_config *c = (struct proto_config *) $3->def;
     $$ = $1;
     if ($$->show_protocol) cf_error("Protocol specified twice");
     if ($3->class != SYM_PROTO || !c->proto) cf_error("%s is not a protocol", $3->name);
     $$->show_protocol = c->proto;
     $$->running_on_config = c->proto->cf->global;
   }
 | r_args STATS {
     $$ = $1;
     $$->stats = 1;
@@ -364,7 +372,7 @@ r_args:
   }
 ;

import_or_proto:
import_or_preimport:
   PREIMPORT { $$ = 1; }
 | IMPORT { $$ = 2; }
 ;
+1 −0
Original line number Diff line number Diff line
@@ -211,6 +211,7 @@ struct rt_show_data {
  struct filter *filter;
  int verbose;
  struct fib_iterator fit;
  struct proto *show_protocol;
  struct proto *import_protocol;
  int import_mode, primary_only;
  struct config *running_on_config;
+2 −0
Original line number Diff line number Diff line
@@ -979,11 +979,13 @@ rt_show_net(struct cli *c, net *n, struct rt_show_data *d)
      struct ea_list *tmpa, *old_tmpa;
      struct proto *p0 = e->attrs->proto;
      struct proto *p1 = d->import_protocol;
      struct proto *p2 = d->show_protocol;
      d->rt_counter++;
      ee = e;
      rte_update_lock();		/* We use the update buffer for filtering */
      old_tmpa = tmpa = p0->make_tmp_attrs ? p0->make_tmp_attrs(e, rte_update_pool) : NULL;
      ok = (d->filter == FILTER_ACCEPT || f_run(d->filter, &e, &tmpa, rte_update_pool, FF_FORCE_TMPATTR) <= F_ACCEPT);
      if (p2 && p2 != p0) ok = 0;
      if (ok && d->import_mode)
	{
	  int ic = (p1->import_control ? p1->import_control(p1, &e, &tmpa, rte_update_pool) : 0);
Loading