summaryrefslogtreecommitdiff
path: root/tunnat/src/tunnel.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tunnat/src/tunnel.cc')
-rw-r--r--tunnat/src/tunnel.cc29
1 files changed, 16 insertions, 13 deletions
diff --git a/tunnat/src/tunnel.cc b/tunnat/src/tunnel.cc
index f78136e..f7038c9 100644
--- a/tunnat/src/tunnel.cc
+++ b/tunnat/src/tunnel.cc
@@ -1,4 +1,4 @@
-
+
extern "C"
{
#include <rte_ether.h>
@@ -65,8 +65,8 @@ int TunVxlan::PacketParse(const char * pkt, unsigned int pkt_len)
vxlan_hdr_ = *vxlan_hdr;
udp_hdr_ = *udp_hdr;
- src_in_addr_.s_addr = ipv4_hdr->src_addr;
- dst_in_addr_.s_addr = ipv4_hdr->dst_addr;
+ ipv4_addr_.src_in_addr.s_addr = ipv4_hdr->src_addr;
+ ipv4_addr_.dst_in_addr.s_addr = ipv4_hdr->dst_addr;
this_layer_length = offset;
this_layer_type = TUNNEL_TYPE_G_VXLAN;
@@ -243,7 +243,7 @@ int TunInnerEther::PacketParse(const char * pkt, unsigned int len)
l3:
if (proto == ntohs(ETHER_TYPE_IPv4)) next_layer_type = TUNNEL_TYPE_IPV4;
- else if (proto == ntohs(ETHER_TYPE_IPv4)) next_layer_type = TUNNEL_TYPE_IPV6;
+ else if (proto == ntohs(ETHER_TYPE_IPv6)) next_layer_type = TUNNEL_TYPE_IPV6;
this_layer_type = TUNNEL_TYPE_ETHER;
this_layer_length = offset;
@@ -296,8 +296,8 @@ int TunInnerPPP::PacketParse(const char * pkt, unsigned int pkt_len)
this_layer_length = PPP_HDRLEN;
TUNNAT_THREAD_STAT_ADD(TUNNAT_STAT_INNER_PPP_INPUT, 1);
return 0;
-}
-
+}
+
int TunnelContainer::PacketParse(const char * pkt, unsigned int pkt_len,
tunnel_type tunnel_type)
{
@@ -454,8 +454,8 @@ void TunnelContainer::ReverseAddress()
int TunInnerIPv4::PacketParse(const char * pkt, unsigned int pkt_len)
{
struct ipv4_hdr * ipv4_hdr = (struct ipv4_hdr *)pkt;
- src_in_addr_.s_addr = ipv4_hdr->src_addr;
- dst_in_addr_.s_addr = ipv4_hdr->dst_addr;
+ ipv4_addr.src_in_addr.s_addr = ipv4_hdr->src_addr;
+ ipv4_addr.dst_in_addr.s_addr = ipv4_hdr->dst_addr;
this_layer_type = TUNNEL_TYPE_IPV4;
next_layer_type = TUNNEL_TYPE_UNKNOWN;
@@ -465,14 +465,17 @@ int TunInnerIPv4::PacketParse(const char * pkt, unsigned int pkt_len)
int TunInnerIPv6::PacketParse(const char * pkt, unsigned int pkt_len)
{
- return 0;
-}
+ struct ipv6_hdr * ipv6_hdr = (struct ipv6_hdr *)pkt;
+ memcpy(&ipv6_addr.src_in6_addr, ipv6_hdr->src_addr, sizeof(struct in6_addr));
+ memcpy(&ipv6_addr.dst_in6_addr, ipv6_hdr->dst_addr, sizeof(struct in6_addr));
-int TunInnerIPv6::GetAddressInfo(AddressInfo & addr_info)
-{
+ this_layer_type = TUNNEL_TYPE_IPV6;
+ next_layer_type = TUNNEL_TYPE_UNKNOWN;
+ this_layer_length = sizeof(struct ipv6_hdr);
return 0;
}
+
int TunInnerHDLC::PacketParse(const char * pkt, unsigned int pkt_len)
{
uint16_t hdlc_proto = *(const uint16_t *)(pkt + 2);
@@ -498,4 +501,4 @@ int TunInnerHDLC::PacketParse(const char * pkt, unsigned int pkt_len)
TUNNAT_THREAD_STAT_ADD(TUNNAT_STAT_INNER_HDLC_INPUT, 1);
return 0;
-} \ No newline at end of file
+}