datapath: remove actions.h
[sliver-openvswitch.git] / datapath / actions.c
index b5b92ba..dc74a37 100644 (file)
 #include <linux/in6.h>
 #include <linux/if_arp.h>
 #include <linux/if_vlan.h>
-#include <net/inet_ecn.h>
 #include <net/ip.h>
 #include <net/checksum.h>
+#include <net/dsfield.h>
 
-#include "actions.h"
 #include "checksum.h"
 #include "datapath.h"
 #include "vlan.h"
@@ -151,16 +150,10 @@ static void set_ip_addr(struct sk_buff *skb, struct iphdr *nh,
        *addr = new_addr;
 }
 
-static void set_ip_tos(struct sk_buff *skb, struct iphdr *nh, u8 new_tos)
+static void set_ip_ttl(struct sk_buff *skb, struct iphdr *nh, u8 new_ttl)
 {
-       u8 old, new;
-
-       /* Set the DSCP bits and preserve the ECN bits. */
-       old = nh->tos;
-       new = new_tos | (nh->tos & INET_ECN_MASK);
-       csum_replace4(&nh->check, (__force __be32)old,
-                                 (__force __be32)new);
-       nh->tos = new;
+       csum_replace2(&nh->check, htons(nh->ttl << 8), htons(new_ttl << 8));
+       nh->ttl = new_ttl;
 }
 
 static int set_ipv4(struct sk_buff *skb, const struct ovs_key_ipv4 *ipv4_key)
@@ -182,7 +175,10 @@ static int set_ipv4(struct sk_buff *skb, const struct ovs_key_ipv4 *ipv4_key)
                set_ip_addr(skb, nh, &nh->daddr, ipv4_key->ipv4_dst);
 
        if (ipv4_key->ipv4_tos != nh->tos)
-               set_ip_tos(skb, nh, ipv4_key->ipv4_tos);
+               ipv4_change_dsfield(nh, 0, ipv4_key->ipv4_tos);
+
+       if (ipv4_key->ipv4_ttl != nh->ttl)
+               set_ip_ttl(skb, nh, ipv4_key->ipv4_ttl);
 
        return 0;
 }