summaryrefslogtreecommitdiff
path: root/tunnat/include
diff options
context:
space:
mode:
authorQiuwen Lu <[email protected]>2019-07-23 12:20:37 +0600
committerQiuwen Lu <[email protected]>2019-07-23 12:20:37 +0600
commit7325142bcd79fcfe30e262d4f55dab485bc2995e (patch)
treed94de468cd8853cdfb27e174c1c5f16af8adb5cc /tunnat/include
parentc3e1f674d289754e14bab9f72c71d22a09fd911f (diff)
增加表项超时的单元测试用例
Diffstat (limited to 'tunnat/include')
-rw-r--r--tunnat/include/tunnel.h46
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();