diff options
| author | Lu Qiuwen <[email protected]> | 2018-10-30 11:21:23 +0800 |
|---|---|---|
| committer | Lu Qiuwen <[email protected]> | 2018-10-30 11:21:23 +0800 |
| commit | ebf729c0622a2e65f3a7d355748163ee3ef57dae (patch) | |
| tree | 268d504caca7c822fe15a9cfd73abe4fbbdada4c /tunnat | |
| parent | b71c010ebe2f6a60bc5a9f6e4762db45ab4ce7c8 (diff) | |
增加从ctrlzone中读取专用设备MAC地址的功能
Diffstat (limited to 'tunnat')
| -rw-r--r-- | tunnat/include/tunnel.h | 16 | ||||
| -rw-r--r-- | tunnat/src/runtime.cc | 3 |
2 files changed, 13 insertions, 6 deletions
diff --git a/tunnat/include/tunnel.h b/tunnat/include/tunnel.h index c0b31fa..1d83af0 100644 --- a/tunnat/include/tunnel.h +++ b/tunnat/include/tunnel.h @@ -16,13 +16,16 @@ extern "C" struct AddressInfo { + uint8_t src_mac_addr[6]; + uint8_t dst_mac_addr[6]; + struct in_addr src_in_addr; 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; + uint16_t s_port; + uint16_t d_port; uint32_t vpn_id; }; @@ -118,13 +121,14 @@ public: int GetAddressInfo(struct AddressInfo & addr_info) { + memcpy(addr_info.src_mac_addr, ðer_hdr_.s_addr, sizeof(ether_hdr_.s_addr)); + memcpy(addr_info.dst_mac_addr, ðer_hdr_.d_addr, sizeof(ether_hdr_.d_addr)); + 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; - + addr_info.vpn_id = (vxlan_hdr_.vlan_id_half_low & 0xf) | (vxlan_hdr_.vlan_id_half_high & 0xff) << 4; return 0; } @@ -329,4 +333,4 @@ struct TunnelContainerArray for (unsigned i = 0; i < sz_array; i++) tun_array[i].ReverseAddress(); } -};
\ No newline at end of file +}; diff --git a/tunnat/src/runtime.cc b/tunnat/src/runtime.cc index 43dbe0a..8d8d329 100644 --- a/tunnat/src/runtime.cc +++ b/tunnat/src/runtime.cc @@ -9,6 +9,7 @@ extern "C" { #include <marsio.h> #include <rte_cycles.h> +#include <rte_ether.h> } #ifndef MR_TUNNAT_USE_PHONY_ETHER_HEADER @@ -108,6 +109,8 @@ static int __phy_to_virt_pkt_modify(TunnatInstance * instance, TunnatThreadInsta AddressInfo outer_tunnel_addrinfo; if (outer_tunnel.GetAddressInfo(outer_tunnel_addrinfo) == RT_SUCCESS) { + memcpy(ctrlzone->g_device_mac, outer_tunnel_addrinfo.src_mac_addr, sizeof(ctrlzone->g_device_mac)); + memcpy(ctrlzone->l_device_mac, outer_tunnel_addrinfo.dst_mac_addr, sizeof(ctrlzone->l_device_mac)); ctrlzone->g_device_in_addr = outer_tunnel_addrinfo.src_in_addr.s_addr; ctrlzone->l4_src_port = outer_tunnel_addrinfo.s_port; ctrlzone->g_device_vpn_id = outer_tunnel_addrinfo.vpn_id; |
