mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 13:21:22 +00:00
babeld: avoid segfault (bug 706).
This commit is contained in:
parent
4eedea5512
commit
0ee8a1f1d6
@ -486,6 +486,13 @@ interface_recalculate(struct interface *ifp)
|
|||||||
int mtu, rc;
|
int mtu, rc;
|
||||||
struct ipv6_mreq mreq;
|
struct ipv6_mreq mreq;
|
||||||
|
|
||||||
|
if (!if_is_operative(ifp) || !CHECK_FLAG(ifp->flags, IFF_RUNNING)) {
|
||||||
|
interface_reset(ifp);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_ifp->flags |= BABEL_IF_IS_UP;
|
||||||
|
|
||||||
mtu = MIN(ifp->mtu, ifp->mtu6);
|
mtu = MIN(ifp->mtu, ifp->mtu6);
|
||||||
|
|
||||||
/* We need to be able to fit at least two messages into a packet,
|
/* We need to be able to fit at least two messages into a packet,
|
||||||
@ -577,6 +584,9 @@ interface_reset(struct interface *ifp)
|
|||||||
struct ipv6_mreq mreq;
|
struct ipv6_mreq mreq;
|
||||||
babel_interface_nfo *babel_ifp = babel_get_if_nfo(ifp);
|
babel_interface_nfo *babel_ifp = babel_get_if_nfo(ifp);
|
||||||
|
|
||||||
|
debugf(BABEL_DEBUG_IF, "interface reset: %s", ifp->name);
|
||||||
|
babel_ifp->flags &= ~BABEL_IF_IS_UP;
|
||||||
|
|
||||||
flush_interface_routes(ifp, 0);
|
flush_interface_routes(ifp, 0);
|
||||||
babel_ifp->buffered = 0;
|
babel_ifp->buffered = 0;
|
||||||
babel_ifp->bufsize = 0;
|
babel_ifp->bufsize = 0;
|
||||||
|
@ -90,12 +90,15 @@ static inline babel_interface_nfo* babel_get_if_nfo(struct interface *ifp)
|
|||||||
#define BABEL_IF_SPLIT_HORIZON (1 << 2)
|
#define BABEL_IF_SPLIT_HORIZON (1 << 2)
|
||||||
#define BABEL_IF_LQ (1 << 3)
|
#define BABEL_IF_LQ (1 << 3)
|
||||||
#define BABEL_IF_IS_ENABLE (1 << 4)
|
#define BABEL_IF_IS_ENABLE (1 << 4)
|
||||||
|
#define BABEL_IF_IS_UP (1 << 5)
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
if_up(struct interface *ifp)
|
if_up(struct interface *ifp)
|
||||||
{
|
{
|
||||||
return (if_is_up(ifp) &&
|
return (if_is_operative(ifp) &&
|
||||||
ifp->connected != NULL &&
|
ifp->connected != NULL &&
|
||||||
|
babel_get_if_nfo(ifp) != NULL &&
|
||||||
|
(babel_get_if_nfo(ifp)->flags & BABEL_IF_IS_UP) &&
|
||||||
(babel_get_if_nfo(ifp)->flags & BABEL_IF_IS_ENABLE));
|
(babel_get_if_nfo(ifp)->flags & BABEL_IF_IS_ENABLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user