Commit 0ec031f7 authored by Ondřej Zajíček's avatar Ondřej Zajíček

Allows to set instance ID for OSPFv3 interfaces.

parent 47c447c4
......@@ -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.
......
......@@ -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:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment