<tag>rx buffer <M>num</M></tag>
This sets the size of buffer used for receiving packets. The buffer should
be bigger than maximal size of any packets. Value NORMAL (default)
- means 2*MTU, value LARGE means maximal allowed packet - 65536.
+ means 2*MTU, value LARGE means maximal allowed packet - 65535.
<tag>type broadcast</tag>
BIRD detects a type of a connected network automatically, but sometimes it's
If set, don't send hello to any undefined neighbor. This switch
is ignored on any non-NBMA network. Default is No.
+ <tag>check link <M>switch</M></tag>
+ if set, a hardware link state (reported by OS) is taken into
+ consideration. When a link disappears (e.g. an ethernet cable is
+ unplugged), neighbors are immediately considered unreachable
+ and only the address of the iface (instead of whole network
+ prefix) is propagated. It is possible that some hardware
+ drivers or platforms do not implement this feature. Default: off.
+
<tag>authentication none</tag>
No passwords are sent in OSPF packets. This is the default value.
uninstalls the route from the table it is connected to and adds it again as soon
as the destination becomes adjacent again.
-<p>The Static protocol has no configuration options. Instead, the
-definition of the protocol contains a list of static routes:
+<p>The Static protocol does not have many configuration options. The
+definition of the protocol contains mainly a list of static routes:
<descrip>
<tag>route <m/prefix/ via <m/ip/</tag> Static route through
<tag>route <m/prefix/ drop|reject|prohibit</tag> Special routes
specifying to drop the packet, return it as unreachable or return
it as administratively prohibited.
+
+ <tag>check link <M>switch</M></tag>
+ The only option of the static protocol. If set, hardware link
+ states of network interfaces are taken into consideration.
+ When link disappears (e.g. ethernet cable is unplugged),
+ static routes directing to that interface are removed. It is
+ possible that some hardware drivers or platforms do not
+ implement this feature. Default: off.
</descrip>
<p>Static routes have no specific attributes.
CF_KEYWORDS(BROADCAST, NEIGHBORS, RFC1583COMPAT, STUB, TICK, COST, RETRANSMIT)
CF_KEYWORDS(HELLO, TRANSMIT, PRIORITY, DEAD, NONBROADCAST, POINTOPOINT, TYPE)
CF_KEYWORDS(NONE, SIMPLE, AUTHENTICATION, STRICT, CRYPTOGRAPHIC)
-CF_KEYWORDS(ELIGIBLE, POLL, NETWORKS, HIDDEN, VIRTUAL, LINK)
+CF_KEYWORDS(ELIGIBLE, POLL, NETWORKS, HIDDEN, VIRTUAL, CHECK, LINK)
CF_KEYWORDS(RX, BUFFER, LARGE, NORMAL, STUBNET, HIDDEN, SUMMARY)
CF_KEYWORDS(WAIT, DELAY, LSADB)
| TYPE POINTOPOINT { OSPF_PATT->type = OSPF_IT_PTP ; }
| STRICT NONBROADCAST bool { OSPF_PATT->strictnbma = $3 ; }
| STUB bool { OSPF_PATT->stub = $2 ; }
- | LINK bool { OSPF_PATT->use_link = $2 ; }
+ | CHECK LINK bool { OSPF_PATT->check_link = $3; }
| NEIGHBORS '{' ipa_list '}'
| AUTHENTICATION NONE { OSPF_PATT->autype = OSPF_AUTH_NONE ; }
| AUTHENTICATION SIMPLE { OSPF_PATT->autype = OSPF_AUTH_SIMPLE ; }
OSPF_PATT->deadc = DEADC_D;
OSPF_PATT->dead = 0;
OSPF_PATT->type = OSPF_IT_UNDEF;
- OSPF_PATT->strictnbma = 0;
- OSPF_PATT->stub = 0;
- OSPF_PATT->use_link = 1;
init_list(&OSPF_PATT->nbma_list);
OSPF_PATT->autype = OSPF_AUTH_NONE;
reset_passwords();
else
ifa = (struct ospf_iface *) timer->data;
- if (ifa->state == OSPF_IS_DOWN)
+ if (ifa->state <= OSPF_IS_LOOP)
return;
if (ifa->stub)
break;
case ISM_LOOP:
- if (ifa->sk && ifa->use_link)
+ if (ifa->sk && ifa->check_link)
ospf_iface_chstate(ifa, OSPF_IS_LOOP);
break;
}
/* Do iface UP, unless there is no link and we use link detection */
- ospf_iface_sm(ifa, (ifa->use_link && !(ifa->iface->flags & IF_LINK_UP)) ? ISM_LOOP : ISM_UP);
+ ospf_iface_sm(ifa, (ifa->check_link && !(ifa->iface->flags & IF_LINK_UP)) ? ISM_LOOP : ISM_UP);
}
void
ifa->stub = ospf_iface_stubby(ip, addr);
ifa->ioprob = OSPF_I_OK;
ifa->rxbuf = ip->rxbuf;
- ifa->use_link = ip->use_link;
+ ifa->check_link = ip->check_link;
#ifdef OSPFv2
ifa->autype = ip->autype;
switch (ifa->state)
{
case OSPF_IS_DOWN:
+ case OSPF_IS_LOOP:
bug("%s: Iface %s in down state?", p->name, ifa->iface->name);
break;
case OSPF_IS_WAITING:
}
/* LINK */
- if (oldip->use_link != newip->use_link)
+ if (oldip->check_link != newip->check_link)
{
- ifa->use_link = newip->use_link;
+ ifa->check_link = newip->check_link;
if (!(ifa->iface->flags & IF_LINK_UP))
- ospf_iface_sm(ifa, ifa->use_link ? ISM_LOOP : ISM_UNLOOP);
+ ospf_iface_sm(ifa, ifa->check_link ? ISM_LOOP : ISM_UNLOOP);
}
/* strict nbma */
u8 sk_spf; /* Socket is a member of SPFRouters group */
u8 sk_dr; /* Socket is a member of DRouters group */
u16 rxbuf; /* Buffer size */
- u8 use_link; /* Whether iface link change is used */
+ u8 check_link; /* Whether iface link change is used */
};
struct ospf_md5
u32 stub;
u32 vid;
u16 rxbuf;
- u8 use_link;
+ u8 check_link;
#define OSPF_RXBUF_NORMAL 0
#define OSPF_RXBUF_LARGE 1
#define OSPF_RXBUF_MINSIZE 256 /* Minimal allowed size */
static_proto:
static_proto_start proto_name '{'
| static_proto proto_item ';'
- | static_proto CHECK LINK ';' { STATIC_CFG->check = STATIC_CHECK_LINK; }
+ | static_proto CHECK LINK bool ';' { STATIC_CFG->check_link = $4; }
| static_proto stat_route ';'
;
if (!ifa)
return 0;
- if ((cf->check == STATIC_CHECK_LINK) && !(ifa->flags & IF_LINK_UP))
+ if (cf->check_link && !(ifa->flags & IF_LINK_UP))
return 0;
return 1;
struct proto_config c;
list iface_routes; /* Routes to search on interface events */
list other_routes; /* Routes hooked to neighbor cache and reject routes */
- int check; /* Condition for route install */
+ int check_link; /* Whether iface link state is used */
};
-#define STATIC_CHECK_NONE 0
-#define STATIC_CHECK_LINK 1
void static_init_config(struct static_config *);