diff options
-rw-r--r-- | src/stateless/cp/trex_stream_vm.cpp | 6 | ||||
-rw-r--r-- | src/stateless/cp/trex_stream_vm.h | 7 |
2 files changed, 7 insertions, 6 deletions
diff --git a/src/stateless/cp/trex_stream_vm.cpp b/src/stateless/cp/trex_stream_vm.cpp index a9935759..96ba8934 100644 --- a/src/stateless/cp/trex_stream_vm.cpp +++ b/src/stateless/cp/trex_stream_vm.cpp @@ -644,9 +644,9 @@ void StreamVm::build_program(){ err(ss.str()); } - if (lpFix->m_l3_len < 8 ) { + if (lpFix->m_l3_len < 20 ) { std::stringstream ss; - ss << "instruction id '" << ins_id << "' fix hw offset l3 " << lpFix->m_l3_len << " is lower than 8 "; + ss << "instruction id '" << ins_id << "' fix hw offset l3 " << lpFix->m_l3_len << " is lower than 20 "; err(ss.str()); } @@ -673,7 +673,7 @@ void StreamVm::build_program(){ } }else{ if (ipv4->getVersion() ==6) { - /* pass */ + packet_is_ipv4=false; }else{ std::stringstream ss; ss << "instruction id '" << ins_id << "' fix hw command should work on IPv4 or IPv6 " ; diff --git a/src/stateless/cp/trex_stream_vm.h b/src/stateless/cp/trex_stream_vm.h index c9f459d3..f3c35013 100644 --- a/src/stateless/cp/trex_stream_vm.h +++ b/src/stateless/cp/trex_stream_vm.h @@ -558,20 +558,21 @@ public: UDPHeader * udp; } u; - u.tcp = (TCPHeader*)(pkt_base+m_l3_len); + u.tcp = (TCPHeader*)(pkt_base+m_l2_len+m_l3_len); /* set the mbuf info */ m->l2_len = m_l2_len; m->l3_len = m_l3_len; m->ol_flags |= m_ol_flags; if (m_ol_flags & PKT_TX_IPV4 ){ /* splitting to 4 instructions didn't improve performance .. */ ipv4->ClearCheckSum(); - if (m_ol_flags & PKT_TX_TCP_CKSUM ){ + if ((m_ol_flags & PKT_TX_L4_MASK) == PKT_TX_TCP_CKSUM ){ u.tcp->setChecksumRaw(rte_ipv4_phdr_cksum((struct ipv4_hdr *)ipv4,m_ol_flags)); }else{ u.udp->setChecksumRaw(rte_ipv4_phdr_cksum((struct ipv4_hdr *)ipv4,m_ol_flags)); } + }else{ - if (m_ol_flags & PKT_TX_TCP_CKSUM ){ + if ((m_ol_flags & PKT_TX_L4_MASK) == PKT_TX_TCP_CKSUM ){ u.tcp->setChecksumRaw(rte_ipv6_phdr_cksum((struct ipv6_hdr *)ipv4,m_ol_flags)); }else{ u.udp->setChecksumRaw(rte_ipv6_phdr_cksum((struct ipv6_hdr *)ipv4,m_ol_flags)); |