From 80fc6e4d8d2eba7c62ba6f688bdbbb56acd4405a Mon Sep 17 00:00:00 2001 From: Ido Barnea Date: Thu, 24 Nov 2016 12:51:59 +0200 Subject: Fix issue of TRex dropping ARP packets shorter than 60 bytes Signed-off-by: Ido Barnea --- src/pre_test.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/pre_test.cpp') diff --git a/src/pre_test.cpp b/src/pre_test.cpp index 583427eb..593d5f07 100644 --- a/src/pre_test.cpp +++ b/src/pre_test.cpp @@ -121,6 +121,8 @@ COneIPv6Info *CPretestOnePortInfo::find_ipv6(uint16_t ip[8], uint16_t vlan) { } bool CPretestOnePortInfo::get_mac(COneIPInfo *ip, uint8_t *mac) { + MacAddress defaultmac; + for (std::vector::iterator it = m_dst_info.begin(); it != m_dst_info.end(); ++it) { if (ip->ip_ver() != (*it)->ip_ver()) continue; @@ -139,7 +141,11 @@ bool CPretestOnePortInfo::get_mac(COneIPInfo *ip, uint8_t *mac) { } (*it)->get_mac(mac); - return true; + if (! memcmp(mac, defaultmac.GetConstBuffer(), ETHER_ADDR_LEN)) { + return false; + } else { + return true; + } } return false; @@ -361,7 +367,7 @@ bool CPretest::is_arp(const uint8_t *p, uint16_t pkt_size, ArpHdr *&arp, uint16_ EthernetHeader *m_ether = (EthernetHeader *)p; vlan_tag = 0; - if ((pkt_size < 60) || + if ((pkt_size < sizeof(EthernetHeader)) || ((m_ether->getNextProtocol() != EthernetHeader::Protocol::ARP) && (m_ether->getNextProtocol() != EthernetHeader::Protocol::VLAN))) return false; -- cgit 1.2.3-korg