Due to the time window between opening socket and binding it to an interface, 
the same hello
packet is delivered on multiple interfaces, unique socket per circuit is not 
yet established.
When such hellos get processed, they form incorrect adjacencies. So, drop the 
packet that is
received on multiple interfaces because the socket for the circuit is yet to 
bind to an interface.

Signed-off-by: Amritha Nambiar <[email protected]>
---
 isisd/isis_pfpacket.c |   22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/isisd/isis_pfpacket.c b/isisd/isis_pfpacket.c
index d202264..fa05bae 100644
--- a/isisd/isis_pfpacket.c
+++ b/isisd/isis_pfpacket.c
@@ -230,12 +230,24 @@ isis_recv_pdu_bcast (struct isis_circuit *circuit, u_char 
* ssnpa)
                        LLC_LEN, MSG_PEEK,
                        (struct sockaddr *) &s_addr, (socklen_t *) &addr_len);
 
-  if (bytesread < 0)
+  if ((bytesread < 0) || (s_addr.sll_ifindex != circuit->interface->ifindex))
     {
-      zlog_warn ("isis_recv_packet_bcast(): ifname %s, fd %d, bytesread %d, "
-                 "recvfrom(): %s",
-                 circuit->interface->name, circuit->fd, bytesread,
-                 safe_strerror (errno));
+      if (bytesread < 0)
+        {
+          zlog_warn ("isis_recv_packet_bcast(): ifname %s, fd %d, "
+                     "bytesread %d, recvfrom(): %s",
+                     circuit->interface->name, circuit->fd, bytesread,
+                     safe_strerror (errno));
+        }
+      if (s_addr.sll_ifindex != circuit->interface->ifindex)
+        {
+          zlog_warn("packet is received on multiple interfaces: "
+                    "socket interface %d, circuit interface %d, "
+                    "packet type %u",
+                    s_addr.sll_ifindex, circuit->interface->ifindex,
+                    s_addr.sll_pkttype);
+        }
+
       /* get rid of the packet */
       bytesread = recvfrom (circuit->fd, discard_buff, sizeof (discard_buff),
                             MSG_DONTWAIT, (struct sockaddr *) &s_addr,


_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to