X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=datapath%2Fflow.c;h=0f73c66c168ac07fadc22019fd776709f8ad887f;hb=31ac1e590b9bb2a2ce7c70cd7c8fd2db0fb8e481;hp=b33b31559f77995a738e821bfb4b447a7b009c48;hpb=39872c70e2feefb85e3d7aa577d281d20c8decf6;p=openvswitch diff --git a/datapath/flow.c b/datapath/flow.c index b33b3155..0f73c66c 100644 --- a/datapath/flow.c +++ b/datapath/flow.c @@ -1,6 +1,6 @@ /* * Distributed under the terms of the GNU GPL version 2. - * Copyright (c) 2007, 2008, 2009, 2010 Nicira Networks. + * Copyright (c) 2007, 2008, 2009, 2010, 2011 Nicira Networks. * * Significant portions of this file may be copied from parts of the Linux * kernel, by Linus Torvalds and others. @@ -29,8 +29,6 @@ #include #include -#include "compat.h" - static struct kmem_cache *flow_cache; static unsigned int hash_seed __read_mostly; @@ -117,7 +115,7 @@ struct sw_flow_actions *flow_actions_alloc(u32 actions_len) if (actions_len > 2 * DP_MAX_PORTS * nla_total_size(4)) return ERR_PTR(-EINVAL); - sfa = kmalloc(sizeof *sfa + actions_len, GFP_KERNEL); + sfa = kmalloc(sizeof(*sfa) + actions_len, GFP_KERNEL); if (!sfa) return ERR_PTR(-ENOMEM); @@ -272,7 +270,7 @@ int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key, { struct ethhdr *eth; - memset(key, 0, sizeof *key); + memset(key, 0, sizeof(*key)); key->tun_id = OVS_CB(skb)->tun_id; key->in_port = in_port; *is_frag = false; @@ -333,7 +331,8 @@ int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key, key->nw_proto = nh->protocol; /* Transport layer. */ - if (!(nh->frag_off & htons(IP_MF | IP_OFFSET))) { + if (!(nh->frag_off & htons(IP_MF | IP_OFFSET)) && + !(skb_shinfo(skb)->gso_type & SKB_GSO_UDP)) { if (key->nw_proto == IPPROTO_TCP) { if (tcphdr_ok(skb)) { struct tcphdr *tcp = tcp_hdr(skb); @@ -385,7 +384,7 @@ int flow_extract(struct sk_buff *skb, u16 in_port, struct odp_flow_key *key, u32 flow_hash(const struct odp_flow_key *key) { - return jhash2((u32*)key, sizeof *key / sizeof(u32), hash_seed); + return jhash2((u32*)key, sizeof(*key) / sizeof(u32), hash_seed); } int flow_cmp(const struct tbl_node *node, void *key2_) @@ -405,7 +404,7 @@ int flow_init(void) if (flow_cache == NULL) return -ENOMEM; - get_random_bytes(&hash_seed, sizeof hash_seed); + get_random_bytes(&hash_seed, sizeof(hash_seed)); return 0; }