OSPF neighbour-ship on multi-ip P2P interface

Santosh P K sapk at vmware.com
Thu Jan 9 04:09:13 EST 2020


Naveen,
     The issue is with unnumbered interface. With this you see flap only when multiple interface address is configured even if prefix is no /32. I tried with /31 and /24 as well but I still see flaps. Not sure how it worked for you. The reason for flap is due to the code below.

Sending hello:
There are two ospf interface created when you have multiple IP address. Hello will be sent on both with each IP address as the source address in it and rest of the hello content remains the same.

Receiving hello:
When hello is received then OSPF tries to get the OSPF interface. In case of unnumbered it gets the first ospf interface on that IFP. As in case of unnumbered there is no way we can match on prefix as received source may not have any overlapping IP address with what is configured as source.

In function ospf_if_lookup_recv_if which is called by ospf_read to get the ospf interface.

                                if (CHECK_FLAG(oi->connected->flags, ZEBRA_IFA_UNNUMBERED))
                                                match = oi;                                     >>>>> Gets the fist OI and uses that.
                                else if (prefix_match(CONNECTED_PREFIX(oi->connected),
                                                                      (struct prefix *)&addr)) {
                                                if ((match == NULL) || (match->address->prefixlen
                                                                                                < oi->address->prefixlen))
                                                                match = oi;
                                }


Flap:
Flap is caused due to receiving two hellos from peer and mapping to only single ospf interface. Now take the case where you have two IP address configured on the same interface on either end (R1- 10.10.10.1, 20.20.20.1 and R2- 10.10.10.2, 20.20.20.2). When Router R1 sends hello with source IP in IP header as 10.10.10.1 to R2 then it receives it and matches with first ospf interface let’s assume that is associated with IP 10.10.10.2. When R1 sends hello with source IP in IP header as 20.20.20.1 then R2 will still map to 10.10.10.2 ospf interface as that is first in list. R2 will keep receiving hello from R1 one with neighbour seen and other without it and hence we see OSPF session flapping.



Thanks
Santosh P K


From: Naveen K Suvarna <naveen.suvarna at broadcom.com>
Date: Wednesday, 8 January 2020 at 8:58 AM
To: Santosh P K <sapk at vmware.com>, "dev at lists.frrouting.org" <dev at lists.frrouting.org>
Subject: Re: OSPF neighbour-ship on multi-ip P2P interface

Hi Santosh,

   Yes, I have tried /31 prefix. Sessions do come up in /31 prefix.

   I am using version 7.2.  I have a loopback interface with multiple /32 prefix IPs assigned. This loopback is borrowed by an unnumbered OSPF interface. Two node, directly connected single link ospf topology, as give below. When only one IP is present in the loopback interface, sessions comes up. If more than one Ip is added to the loopback interface, ospf session keep getting flap/reset.

Difference I see between /32 and / <1-31> Prefix is that, in hello packet network mask is set to 0 in case of /32.  Upon receiving Hello for the other IP which is different from current adjacency ip, adjacency will be re-inited.

static int ospf_make_hello(struct ospf_interface *oi, struct stream *s)

      if (!(CHECK_FLAG(oi->connected->flags, ZEBRA_IFA_UNNUMBERED) && oi->type == OSPF_IFTYPE_POINTOPOINT)
          && oi->type != OSPF_IFTYPE_VIRTUALLINK)
            masklen2ip(oi->address->prefixlen, &mask);
      else
            memset((char *)&mask, 0, sizeof(struct in_addr));  <<<<

DUT1#
Sudo config loopback add Loopback0
sudo config interface ip add Loopback0 10.0.0.1/32;
sudo config interface ip add Loopback0 11.1.1.1/32;

config interface ip unnumbered add Ethernet16 Loopback0

interface Ethernet16
ip ospf network point-to-point
ip ospf area 0

router ospf
ospf router-id 1.1.1.1

DUT2#
Sudo config loopback add Loopback0
sudo config interface ip add Loopback0 10.0.0.2/32;
sudo config interface ip add Loopback0 11.1.1.2/32;

config interface ip unnumbered add Ethernet16 Loopback0

interface Ethernet16
ip ospf network point-to-point
ip ospf area 0

router ospf
ospf router-id 2.2.2.2

Regards
Naveen

From: Santosh P K <sapk at vmware.com>
Date: Tuesday, 7 January 2020 at 9:54 PM
To: Naveen K Suvarna <naveen.suvarna at broadcom.com>, "dev at lists.frrouting.org" <dev at lists.frrouting.org>
Subject: Re: OSPF neighbour-ship on multi-ip P2P interface

Naveeen,
     Did you test with /31 prefix configured on interface and did that work too? Could you also let me know which version of FRR you are using?

Thanks
Santosh P K

From: Naveen K Suvarna <naveen.suvarna at broadcom.com>
Date: Tuesday, 7 January 2020 at 2:33 PM
To: "dev at lists.frrouting.org" <dev at lists.frrouting.org>
Subject: OSPF neighbour-ship on multi-ip P2P interface

Hi,

     Does FRR OSPF support neighborship on an P2P interface with Multiple Interface IP addresses? I am using multiple 32bit host ip address on same interface.

     When I try to establish ospf neighborship on an P2P interface with multiple IP addresses assigned, OSPF neighborship keeps resetting due to, receival of interleaving hello of 1st or 2nd ip-address.   Is there any way to avoid this  and bring up sessions on the Interface.

    Above thing works good if the Interface IP addresses are assigned < 32 bit  subnet mask (for example, 10.0.0.1/24 instead of 10.0.0.1/32).

Regards
Naveen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.frrouting.org/pipermail/dev/attachments/20200109/5ca85366/attachment-0001.html>


More information about the dev mailing list