diff options
| author | Qiuwen Lu <[email protected]> | 2017-07-31 09:54:18 +0800 |
|---|---|---|
| committer | Qiuwen Lu <[email protected]> | 2017-07-31 09:54:18 +0800 |
| commit | b84ab1d6344878baab38a820af79e9af13dc53bc (patch) | |
| tree | d4cb8f40ce2b9254536d1dc2ffe876983688b36d /tunnat | |
| parent | 2759a867feccb603e480e339372cd58de18d9cb1 (diff) | |
增加VXLAN头部信息获取功能
- 将到达包的VXLAN头部信息写入控制域,便于上层获取并进行包活。
Diffstat (limited to 'tunnat')
| -rw-r--r-- | tunnat/include/tunnel.h | 11 | ||||
| -rw-r--r-- | tunnat/src/runtime.cc | 8 |
2 files changed, 19 insertions, 0 deletions
diff --git a/tunnat/include/tunnel.h b/tunnat/include/tunnel.h index 4994eff..1ccbdf4 100644 --- a/tunnat/include/tunnel.h +++ b/tunnat/include/tunnel.h @@ -20,6 +20,10 @@ struct AddressInfo struct in_addr dst_in_addr; struct in6_addr src_in6_addr; struct in6_addr dst_in6_addr; + + uint32_t s_port; + uint32_t d_port; + uint32_t vpn_id; }; /* 隧道格式类型 */ @@ -114,6 +118,13 @@ public: int GetAddressInfo(struct AddressInfo & addr_info) { + addr_info.src_in_addr = src_in_addr_; + addr_info.dst_in_addr = dst_in_addr_; + addr_info.s_port = udp_hdr_.src_port; + addr_info.d_port = udp_hdr_.dst_port; + addr_info.vpn_id = (vxlan_hdr_.vlan_id_half_low & 0xf) | + (vxlan_hdr_.vlan_id_half_high & 0xff) << 4; + return 0; } diff --git a/tunnat/src/runtime.cc b/tunnat/src/runtime.cc index ab4e6f7..f4d113f 100644 --- a/tunnat/src/runtime.cc +++ b/tunnat/src/runtime.cc @@ -105,6 +105,14 @@ static int __phy_to_virt_pkt_modify(TunnatInstance * instance, TunnatThreadInsta TunnelContainer & outer_tunnel = tun_array.GetOuterTunContainer(); TunnelContainer & inner_tunnel = tun_array.GetInnerTunContainer(); + AddressInfo outer_tunnel_addrinfo; + if (outer_tunnel.GetAddressInfo(outer_tunnel_addrinfo) == RT_SUCCESS) + { + ctrlzone->g_device_in_addr = outer_tunnel_addrinfo.dst_in_addr.s_addr; + ctrlzone->l_device_l4_port = outer_tunnel_addrinfo.s_port; + ctrlzone->g_device_vpn_id = outer_tunnel_addrinfo.vpn_id; + } + ctrlzone->__encap_type = outer_tunnel.ThisTunType(); ctrlzone->__encap_len = tun_array.sz_total_len - inner_tunnel.ThisTunLength(); ctrlzone->action = TUNNAT_CZ_ACTION_FORWARD; |
