Skip to content

Commit

Permalink
netdev-native-tnl: Fix IPv6 tos bits handling.
Browse files Browse the repository at this point in the history
IPv6 tunnels ignores outer tos bits on recieve and does not
set it on xmit. Following patch fixes it.

Signed-off-by: Pravin B Shelar <[email protected]>
Acked-by: Jesse Gross <[email protected]>
  • Loading branch information
pshelar committed May 24, 2016
1 parent 4975aa3 commit 98c086d
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions lib/netdev-native-tnl.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,10 +126,12 @@ netdev_tnl_ip_extract_tnl_md(struct dp_packet *packet, struct flow_tnl *tnl,
*hlen += IP_HEADER_LEN;

} else if (IP_VER(ip->ip_ihl_ver) == 6) {
ovs_be32 tc_flow = get_16aligned_be32(&ip6->ip6_flow);

memcpy(tnl->ipv6_src.s6_addr, ip6->ip6_src.be16, sizeof ip6->ip6_src);
memcpy(tnl->ipv6_dst.s6_addr, ip6->ip6_dst.be16, sizeof ip6->ip6_dst);
tnl->ip_tos = 0;

tnl->ip_tos = ntohl(tc_flow) >> 20;
tnl->ip_ttl = ip6->ip6_hlim;

*hlen += IPV6_HEADER_LEN;
Expand Down Expand Up @@ -294,7 +296,8 @@ netdev_tnl_ip_build_header(struct ovs_action_push_tnl *data,

ip6 = (struct ovs_16aligned_ip6_hdr *) l3;

ip6->ip6_vfc = 0x60;
put_16aligned_be32(&ip6->ip6_flow, htonl(6 << 28) |
htonl(params->flow->tunnel.ip_tos << 20));
ip6->ip6_hlim = params->flow->tunnel.ip_ttl;
ip6->ip6_nxt = next_proto;
memcpy(&ip6->ip6_src, params->s_ip, sizeof(ovs_be32[4]));
Expand Down

0 comments on commit 98c086d

Please sign in to comment.