diff options
| author | Qiuwen Lu <[email protected]> | 2019-07-23 12:20:37 +0600 |
|---|---|---|
| committer | Qiuwen Lu <[email protected]> | 2019-07-23 12:20:37 +0600 |
| commit | 7325142bcd79fcfe30e262d4f55dab485bc2995e (patch) | |
| tree | d94de468cd8853cdfb27e174c1c5f16af8adb5cc /tunnat/include | |
| parent | c3e1f674d289754e14bab9f72c71d22a09fd911f (diff) | |
增加表项超时的单元测试用例
Diffstat (limited to 'tunnat/include')
| -rw-r--r-- | tunnat/include/tunnel.h | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/tunnat/include/tunnel.h b/tunnat/include/tunnel.h index fcd7aba..80a9610 100644 --- a/tunnat/include/tunnel.h +++ b/tunnat/include/tunnel.h @@ -417,6 +417,8 @@ struct TunnelContainerArray unsigned int sz_total_len; tunnat_link_id_t v_link_id; + TunnelContainerArray() : sz_array(0), sz_total_len(0) {} + TunnelContainer & GetInnerTunContainer() { return tun_array[sz_array == 0 ? 0 : sz_array - 1]; @@ -427,9 +429,49 @@ struct TunnelContainerArray return tun_array[0]; } - TunnelContainerArray() : sz_array(0), sz_total_len(0) {} + void ConstructFromMbuf(marsio_buff_t * mbuf) + { + assert(sz_total_len == 0); + assert(sz_array == 0); + + for (auto & tun_container : tun_array) + { + tun_container.MbufMetaPreParse(mbuf); + } + + const char * pkt_ptr = marsio_buff_mtod(mbuf); + unsigned int pkt_len = marsio_buff_datalen(mbuf); + + ConstructFromPktPtr(pkt_ptr, pkt_len); + } + + void ConstructFromPktPtr(const char * pkt_ptr, unsigned int pkt_len) + { + assert(sz_total_len == 0); + assert(sz_array == 0); + + tunnel_type pkt_tun_type = TUNNEL_TYPE_UNKNOWN; + for (auto & tun_container : tun_array) + { + int ret = tun_container.PacketParse(pkt_ptr, pkt_len, pkt_tun_type); + if (ret < 0) break; + + pkt_ptr += tun_container.ThisTunLength(); + pkt_len -= tun_container.ThisTunLength(); + pkt_tun_type = tun_container.NextTunType(); + + sz_array++; + sz_total_len += tun_container.ThisTunLength(); + + if (pkt_tun_type == TUNNEL_TYPE_END) break; + } + } + + void Reset() + { + sz_array = 0, sz_total_len = 0; + } - void Reset() { sz_array = 0, sz_total_len = 0; } void ReverseAddress() { for (unsigned i = 0; i < sz_array; i++) tun_array[i].ReverseAddress(); |
