mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 23:58:44 +00:00
ospfd: Treat vrf interface as loopback type
Ticket:CM-19914 Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
This commit is contained in:
parent
b0fa6f6a10
commit
0c74bbe03e
6
lib/if.c
6
lib/if.c
@ -476,6 +476,12 @@ int if_is_loopback(struct interface *ifp)
|
|||||||
return (ifp->flags & (IFF_LOOPBACK | IFF_NOXMIT | IFF_VIRTUAL));
|
return (ifp->flags & (IFF_LOOPBACK | IFF_NOXMIT | IFF_VIRTUAL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check interface is VRF */
|
||||||
|
int if_is_vrf(struct interface *ifp)
|
||||||
|
{
|
||||||
|
return CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_VRF_LOOPBACK);
|
||||||
|
}
|
||||||
|
|
||||||
/* Does this interface support broadcast ? */
|
/* Does this interface support broadcast ? */
|
||||||
int if_is_broadcast(struct interface *ifp)
|
int if_is_broadcast(struct interface *ifp)
|
||||||
{
|
{
|
||||||
|
2
lib/if.h
2
lib/if.h
@ -288,6 +288,7 @@ struct interface {
|
|||||||
|
|
||||||
QOBJ_FIELDS
|
QOBJ_FIELDS
|
||||||
};
|
};
|
||||||
|
|
||||||
RB_HEAD(if_name_head, interface);
|
RB_HEAD(if_name_head, interface);
|
||||||
RB_PROTOTYPE(if_name_head, interface, name_entry, if_cmp_func);
|
RB_PROTOTYPE(if_name_head, interface, name_entry, if_cmp_func);
|
||||||
RB_HEAD(if_index_head, interface);
|
RB_HEAD(if_index_head, interface);
|
||||||
@ -491,6 +492,7 @@ extern int if_is_running(struct interface *);
|
|||||||
extern int if_is_operative(struct interface *);
|
extern int if_is_operative(struct interface *);
|
||||||
extern int if_is_no_ptm_operative(struct interface *);
|
extern int if_is_no_ptm_operative(struct interface *);
|
||||||
extern int if_is_loopback(struct interface *);
|
extern int if_is_loopback(struct interface *);
|
||||||
|
extern int if_is_vrf(struct interface *ifp);
|
||||||
extern int if_is_broadcast(struct interface *);
|
extern int if_is_broadcast(struct interface *);
|
||||||
extern int if_is_pointopoint(struct interface *);
|
extern int if_is_pointopoint(struct interface *);
|
||||||
extern int if_is_multicast(struct interface *);
|
extern int if_is_multicast(struct interface *);
|
||||||
|
@ -459,7 +459,7 @@ struct ospf_interface *ospf_if_lookup_recv_if(struct ospf *ospf,
|
|||||||
if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
|
if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (if_is_loopback(oi->ifp))
|
if (if_is_loopback(oi->ifp) || if_is_vrf(oi->ifp))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (CHECK_FLAG(oi->connected->flags, ZEBRA_IFA_UNNUMBERED))
|
if (CHECK_FLAG(oi->connected->flags, ZEBRA_IFA_UNNUMBERED))
|
||||||
@ -703,7 +703,7 @@ static int ospf_if_delete_hook(struct interface *ifp)
|
|||||||
|
|
||||||
int ospf_if_is_enable(struct ospf_interface *oi)
|
int ospf_if_is_enable(struct ospf_interface *oi)
|
||||||
{
|
{
|
||||||
if (!if_is_loopback(oi->ifp))
|
if (!(if_is_loopback(oi->ifp) || if_is_vrf(oi->ifp)))
|
||||||
if (if_is_up(oi->ifp))
|
if (if_is_up(oi->ifp))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@ -1206,7 +1206,7 @@ u_char ospf_default_iftype(struct interface *ifp)
|
|||||||
{
|
{
|
||||||
if (if_is_pointopoint(ifp))
|
if (if_is_pointopoint(ifp))
|
||||||
return OSPF_IFTYPE_POINTOPOINT;
|
return OSPF_IFTYPE_POINTOPOINT;
|
||||||
else if (if_is_loopback(ifp))
|
else if (if_is_loopback(ifp) || if_is_vrf(ifp))
|
||||||
return OSPF_IFTYPE_LOOPBACK;
|
return OSPF_IFTYPE_LOOPBACK;
|
||||||
else
|
else
|
||||||
return OSPF_IFTYPE_BROADCAST;
|
return OSPF_IFTYPE_BROADCAST;
|
||||||
|
Loading…
Reference in New Issue
Block a user