diff options
Diffstat (limited to 'isisd/isis_pfpacket.c')
| -rw-r--r-- | isisd/isis_pfpacket.c | 22 |
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, |
