Disable multiple OSPF pseudointerfaces on BSD.
This commit is contained in:
parent
885b3d6127
commit
af157fa3db
5 changed files with 29 additions and 7 deletions
|
@ -423,7 +423,7 @@ ospf_iface_new(struct proto_ospf *po, struct iface *iface, struct ifa *addr,
|
||||||
ifa->strictnbma = ip->strictnbma;
|
ifa->strictnbma = ip->strictnbma;
|
||||||
ifa->waitint = ip->waitint;
|
ifa->waitint = ip->waitint;
|
||||||
ifa->dead = (ip->dead == 0) ? ip->deadc * ifa->helloint : ip->dead;
|
ifa->dead = (ip->dead == 0) ? ip->deadc * ifa->helloint : ip->dead;
|
||||||
ifa->stub = ip->stub;
|
ifa->stub = ospf_iface_stubby(ip, addr);
|
||||||
ifa->ioprob = OSPF_I_OK;
|
ifa->ioprob = OSPF_I_OK;
|
||||||
ifa->rxbuf = ip->rxbuf;
|
ifa->rxbuf = ip->rxbuf;
|
||||||
|
|
||||||
|
|
|
@ -763,16 +763,17 @@ ospf_reconfigure(struct proto *p, struct proto_config *c)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* stub */
|
/* stub */
|
||||||
if ((oldip->stub == 0) && (newip->stub != 0))
|
int old_stub = ospf_iface_stubby(oldip, ifa->addr);
|
||||||
|
int new_stub = ospf_iface_stubby(newip, ifa->addr);
|
||||||
|
if (!old_stub && new_stub)
|
||||||
{
|
{
|
||||||
ifa->stub = newip->stub;
|
ifa->stub = 1;
|
||||||
OSPF_TRACE(D_EVENTS, "Interface %s is now stub.", ifa->iface->name);
|
OSPF_TRACE(D_EVENTS, "Interface %s is now stub.", ifa->iface->name);
|
||||||
}
|
}
|
||||||
if ((oldip->stub != 0) && (newip->stub == 0) && (ifa->ioprob == OSPF_I_OK))
|
if (old_stub && !new_stub && (ifa->ioprob == OSPF_I_OK))
|
||||||
{
|
{
|
||||||
ifa->stub = newip->stub;
|
ifa->stub = 0;
|
||||||
OSPF_TRACE(D_EVENTS,
|
OSPF_TRACE(D_EVENTS, "Interface %s is no longer stub.", ifa->iface->name);
|
||||||
"Interface %s is no longer stub.", ifa->iface->name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OSPFv2
|
#ifdef OSPFv2
|
||||||
|
|
|
@ -772,6 +772,25 @@ struct ospf_iface_patt
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(OSPFv2) && !defined(CONFIG_MC_PROPER_SRC)
|
||||||
|
static inline int
|
||||||
|
ospf_iface_stubby(struct ospf_iface_patt *ip, struct ifa *addr)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* We cannot properly support multiple OSPF ifaces on real iface
|
||||||
|
* with multiple prefixes, therefore we force OSPF ifaces with
|
||||||
|
* non-primary IP prefixes to be stub.
|
||||||
|
*/
|
||||||
|
return ip->stub || !(addr->flags & IA_PRIMARY);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline int
|
||||||
|
ospf_iface_stubby(struct ospf_iface_patt *ip, struct ifa *addr UNUSED)
|
||||||
|
{
|
||||||
|
return ip->stub;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int ospf_import_control(struct proto *p, rte **new, ea_list **attrs,
|
int ospf_import_control(struct proto *p, rte **new, ea_list **attrs,
|
||||||
struct linpool *pool);
|
struct linpool *pool);
|
||||||
struct ea_list *ospf_make_tmp_attrs(struct rte *rt, struct linpool *pool);
|
struct ea_list *ospf_make_tmp_attrs(struct rte *rt, struct linpool *pool);
|
||||||
|
|
|
@ -5,6 +5,7 @@ CONFIG_AUTO_ROUTES Device routes are added automagically by the kernel
|
||||||
CONFIG_SELF_CONSCIOUS We're able to recognize whether route was installed by us
|
CONFIG_SELF_CONSCIOUS We're able to recognize whether route was installed by us
|
||||||
CONFIG_MULTIPLE_TABLES The kernel supports multiple routing tables
|
CONFIG_MULTIPLE_TABLES The kernel supports multiple routing tables
|
||||||
CONFIG_ALL_TABLES_AT_ONCE Kernel scanner wants to process all tables at once
|
CONFIG_ALL_TABLES_AT_ONCE Kernel scanner wants to process all tables at once
|
||||||
|
CONFIG_MC_PROPER_SRC Multicast packets have source address according to socket saddr field
|
||||||
|
|
||||||
CONFIG_UNIX_IFACE Use Unix interface scanner
|
CONFIG_UNIX_IFACE Use Unix interface scanner
|
||||||
CONFIG_UNIX_SET Use Unix route setting
|
CONFIG_UNIX_SET Use Unix route setting
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#define CONFIG_SELF_CONSCIOUS
|
#define CONFIG_SELF_CONSCIOUS
|
||||||
#define CONFIG_MULTIPLE_TABLES
|
#define CONFIG_MULTIPLE_TABLES
|
||||||
#define CONFIG_ALL_TABLES_AT_ONCE
|
#define CONFIG_ALL_TABLES_AT_ONCE
|
||||||
|
#define CONFIG_MC_PROPER_SRC
|
||||||
|
|
||||||
#undef CONFIG_SKIP_MC_BIND
|
#undef CONFIG_SKIP_MC_BIND
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue