Commit 0ec031f7 authored by Ondrej Zajicek's avatar Ondrej Zajicek
Browse files

Allows to set instance ID for OSPFv3 interfaces.

parent 47c447c4
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -1811,7 +1811,7 @@ protocol ospf <name> {
			summary <switch>;
			cost <num>;
		}
		interface <interface pattern> {
		interface <interface pattern> [instance <num>] {
			cost <num>;
			stub <switch>;
			hello <num>;
@@ -1841,7 +1841,7 @@ protocol ospf <name> {
				<ip> eligible;
			};
		};
		virtual link <id>	{
		virtual link <id> [instance <num>] {
			hello <num>;
			retransmit <num>;
			wait <num>;
@@ -1961,14 +1961,19 @@ protocol ospf <name> {
	 subnetworks of given stub network are suppressed. This might
	 be used, for example, to aggregate generated stub networks.
	 
	<tag>interface <M>pattern</M></tag>
	<tag>interface <M>pattern</M> [instance <m/num/]</tag>
	 Defines that the specified interfaces belong to the area being defined.
	 See <ref id="dsc-iface" name="interface"> common option for detailed description.

	<tag>virtual link <M>id</M></tag>
	 Virtual link to router with the router id. Virtual link acts as a
         point-to-point interface belonging to backbone. The actual area is
         used as transport area. This item cannot be in the backbone.
	 In OSPFv3, you can specify instance ID for that interface
	 description, so it is possible to have several instances of
	 that interface with different options or even in different areas.

	<tag>virtual link <M>id</M> [instance <m/num/]</tag>
	 Virtual link to router with the router id. Virtual link acts
         as a point-to-point interface belonging to backbone. The
         actual area is used as transport area. This item cannot be in
         the backbone. In OSPFv3, you could also use several virtual
         links to one destination with different instance IDs.

	<tag>cost <M>num</M></tag>
	 Specifies output cost (metric) of an interface. Default value is 10.
+20 −5
Original line number Diff line number Diff line
@@ -107,7 +107,17 @@ static inline void
check_defcost(int cost)
{
  if ((cost <= 0) || (cost >= LSINFINITY))
   cf_error("Default cost must be in range 1-%d", LSINFINITY);
   cf_error("Default cost must be in range 1-%d", LSINFINITY-1);
}

static inline void
set_instance_id(unsigned id)
{
#ifdef OSPFv3
  OSPF_PATT->instance_id = id;
#else
  cf_error("Instance ID requires OSPFv3");
#endif
}

CF_DECLS
@@ -120,7 +130,7 @@ CF_KEYWORDS(NONE, SIMPLE, AUTHENTICATION, STRICT, CRYPTOGRAPHIC)
CF_KEYWORDS(ELIGIBLE, POLL, NETWORKS, HIDDEN, VIRTUAL, CHECK, LINK)
CF_KEYWORDS(RX, BUFFER, LARGE, NORMAL, STUBNET, HIDDEN, SUMMARY, TAG, EXTERNAL)
CF_KEYWORDS(WAIT, DELAY, LSADB, ECMP, LIMIT, WEIGHT, NSSA, TRANSLATOR, STABILITY)
CF_KEYWORDS(GLOBAL, LSID, ROUTER, SELF)
CF_KEYWORDS(GLOBAL, LSID, ROUTER, SELF, INSTANCE)

%type <t> opttext
%type <ld> lsadb_args
@@ -218,8 +228,8 @@ ospf_stubnet_item:
 ;

ospf_vlink:
   ospf_vlink_start '{' ospf_vlink_opts '}' { ospf_iface_finish(); }
 | ospf_vlink_start { ospf_iface_finish(); }
   ospf_vlink_start ospf_instance_id '{' ospf_vlink_opts '}' { ospf_iface_finish(); }
 | ospf_vlink_start ospf_instance_id { ospf_iface_finish(); }
 ;

ospf_vlink_opts:
@@ -364,6 +374,11 @@ ospf_iface_start:
 }
;

ospf_instance_id:
   /* empty */
 | INSTANCE expr { set_instance_id($2); }
 ;

ospf_iface_opts:
   /* empty */
 | ospf_iface_opts ospf_iface_item ';'
@@ -375,7 +390,7 @@ ospf_iface_opt_list:
 ;

ospf_iface:
  ospf_iface_start iface_patt_list ospf_iface_opt_list { ospf_iface_finish(); }
  ospf_iface_start iface_patt_list ospf_instance_id ospf_iface_opt_list { ospf_iface_finish(); }
 ;

opttext: