summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLu Qiuwen <[email protected]>2018-10-30 11:21:23 +0800
committerLu Qiuwen <[email protected]>2018-10-30 11:21:23 +0800
commitebf729c0622a2e65f3a7d355748163ee3ef57dae (patch)
tree268d504caca7c822fe15a9cfd73abe4fbbdada4c
parentb71c010ebe2f6a60bc5a9f6e4762db45ab4ce7c8 (diff)
增加从ctrlzone中读取专用设备MAC地址的功能
-rw-r--r--tunnat/include/tunnel.h16
-rw-r--r--tunnat/src/runtime.cc3
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, &ether_hdr_.s_addr, sizeof(ether_hdr_.s_addr));
+ memcpy(addr_info.dst_mac_addr, &ether_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;