[ovs-dev] [#8024v2 3/5] Support matching and modifying IP ECN bits.

Justin Pettit jpettit at nicira.com
Wed Nov 9 08:43:36 UTC 2011


On Nov 8, 2011, at 10:56 PM, Jesse Gross wrote:

> I think after this patch we actually do need to update the comment in
> datapath/flow.h on tos (it talks about DSCP).  Also that block of
> comments in misaligned.

Okay.  Updated.

> I also discovered that there is ipv4_change_dsfield() function that
> you could use instead of set_ip_tos() and also does the checksum a
> little more efficiently.

Cool.  I've attached a new incremental for these cleanups to the end of this message.

> I just realized that I've been reading code for almost 16 hours today.
> I have no idea if any of these comments still make sense.


Yuck.  Yeah, I think I'm going to leave the last patch until the morning.  Thanks for the reviews.

--Justin


diff --git a/datapath/actions.c b/datapath/actions.c
index e8b0ce3..3296dee 100644
--- a/datapath/actions.c
+++ b/datapath/actions.c
@@ -21,6 +21,7 @@
 #include <linux/if_vlan.h>
 #include <net/ip.h>
 #include <net/checksum.h>
+#include <net/dsfield.h>
 
 #include "actions.h"
 #include "checksum.h"
@@ -150,12 +151,6 @@ static void set_ip_addr(struct sk_buff *skb, struct iphdr *
        *addr = new_addr;
 }
 
-static void set_ip_tos(struct sk_buff *skb, struct iphdr *nh, u8 new_tos)
-{
-       csum_replace2(&nh->check, htons(nh->tos), htons(new_tos));
-       nh->tos = new_tos;
-}
-
 static int set_ipv4(struct sk_buff *skb, const struct ovs_key_ipv4 *ipv4_key)
 {
        struct iphdr *nh;
@@ -175,7 +170,7 @@ static int set_ipv4(struct sk_buff *skb, const struct ovs_ke
                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);
 
        return 0;
 }
diff --git a/datapath/flow.h b/datapath/flow.h
index 77a955f..1a3ba6a 100644
--- a/datapath/flow.h
+++ b/datapath/flow.h
@@ -44,8 +44,8 @@ struct sw_flow_key {
        } eth;
        struct {
                u8     proto;           /* IP protocol or lower 8 bits of ARP op
-               u8     tos;         /* IP ToS DSCP in high 6 bits. */
-               u8     frag;        /* OVS_FRAG_TYPE_* flags. */
+               u8     tos;             /* IP ToS. */
+               u8     frag;            /* OVS_FRAG_TYPE_* flags. */
        } ip;
        union {
                struct {




More information about the dev mailing list