diff options
Diffstat (limited to 'tunnat/src/tunnel.cc')
| -rw-r--r-- | tunnat/src/tunnel.cc | 29 |
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 +} |
