summaryrefslogtreecommitdiff
path: root/isisd/isis_pfpacket.c
diff options
context:
space:
mode:
Diffstat (limited to 'isisd/isis_pfpacket.c')
-rw-r--r--isisd/isis_pfpacket.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/isisd/isis_pfpacket.c b/isisd/isis_pfpacket.c
index d91d988858..1bc5f763cd 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 != (int)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 != (int)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,