projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
odp-util: Use PRIu8 instead of PRId8 when printing ip_proto.
[openvswitch]
/
datapath
/
actions.c
diff --git
a/datapath/actions.c
b/datapath/actions.c
index 8ca243dfe6932a81f62a9c5defe4337f9c6953ba..61b903f683fe24d1158dad6ea9acbf6882eeb626 100644
(file)
--- a/
datapath/actions.c
+++ b/
datapath/actions.c
@@
-19,9
+19,9
@@
#include <linux/in6.h>
#include <linux/if_arp.h>
#include <linux/if_vlan.h>
#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/ip.h>
#include <net/checksum.h>
+#include <net/dsfield.h>
#include "actions.h"
#include "checksum.h"
#include "actions.h"
#include "checksum.h"
@@
-77,7
+77,7
@@
static int pop_vlan(struct sk_buff *skb)
vlan_set_tci(skb, 0);
} else {
if (unlikely(skb->protocol != htons(ETH_P_8021Q) ||
vlan_set_tci(skb, 0);
} else {
if (unlikely(skb->protocol != htons(ETH_P_8021Q) ||
- skb->len < VLAN_ETH_HLEN))
+
skb->len < VLAN_ETH_HLEN))
return 0;
err = __pop_vlan_tci(skb, &tci);
return 0;
err = __pop_vlan_tci(skb, &tci);
@@
-86,7
+86,7
@@
static int pop_vlan(struct sk_buff *skb)
}
/* move next vlan tag to hw accel tag */
if (likely(skb->protocol != htons(ETH_P_8021Q) ||
}
/* move next vlan tag to hw accel tag */
if (likely(skb->protocol != htons(ETH_P_8021Q) ||
- skb->len < VLAN_ETH_HLEN))
+
skb->len < VLAN_ETH_HLEN))
return 0;
err = __pop_vlan_tci(skb, &tci);
return 0;
err = __pop_vlan_tci(skb, &tci);
@@
-151,16
+151,10
@@
static void set_ip_addr(struct sk_buff *skb, struct iphdr *nh,
*addr = new_addr;
}
*addr = new_addr;
}
-static void set_ip_t
os(struct sk_buff *skb, struct iphdr *nh, u8 new_tos
)
+static void set_ip_t
tl(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)
}
static int set_ipv4(struct sk_buff *skb, const struct ovs_key_ipv4 *ipv4_key)
@@
-182,7
+176,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_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;
}
return 0;
}
@@
-314,6
+311,10
@@
static int execute_set_action(struct sk_buff *skb,
int err = 0;
switch (nla_type(nested_attr)) {
int err = 0;
switch (nla_type(nested_attr)) {
+ case OVS_KEY_ATTR_PRIORITY:
+ skb->priority = nla_get_u32(nested_attr);
+ break;
+
case OVS_KEY_ATTR_TUN_ID:
OVS_CB(skb)->tun_id = nla_get_be64(nested_attr);
break;
case OVS_KEY_ATTR_TUN_ID:
OVS_CB(skb)->tun_id = nla_get_be64(nested_attr);
break;
@@
-347,7
+348,6
@@
static int do_execute_actions(struct datapath *dp, struct sk_buff *skb,
* then freeing the original skbuff is wasteful. So the following code
* is slightly obscure just to avoid that. */
int prev_port = -1;
* then freeing the original skbuff is wasteful. So the following code
* is slightly obscure just to avoid that. */
int prev_port = -1;
- u32 priority = skb->priority;
const struct nlattr *a;
int rem;
const struct nlattr *a;
int rem;
@@
-385,14
+385,6
@@
static int do_execute_actions(struct datapath *dp, struct sk_buff *skb,
err = execute_set_action(skb, nla_data(a));
break;
err = execute_set_action(skb, nla_data(a));
break;
- case OVS_ACTION_ATTR_SET_PRIORITY:
- skb->priority = nla_get_u32(a);
- break;
-
- case OVS_ACTION_ATTR_POP_PRIORITY:
- skb->priority = priority;
- break;
-
case OVS_ACTION_ATTR_SAMPLE:
err = sample(dp, skb, a);
break;
case OVS_ACTION_ATTR_SAMPLE:
err = sample(dp, skb, a);
break;