X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Fflow.c;h=fb339e73e581a6379a726c14fc0ca592b45ab92b;hb=7867b760c2924c36521cb5a8c287dc5fe725529a;hp=8a6ee23d3e833ce0a5761a321f291c670df116be;hpb=cdee00fd635d1e0f1eeb5d9c009daeb59abd4777;p=openvswitch diff --git a/datapath/flow.c b/datapath/flow.c index 8a6ee23d..fb339e73 100644 --- a/datapath/flow.c +++ b/datapath/flow.c @@ -175,7 +175,7 @@ void flow_put(struct sw_flow *flow) return; if (atomic_dec_and_test(&flow->refcnt)) { - kfree(flow->sf_acts); + kfree((struct sf_flow_acts __force *)flow->sf_acts); kmem_cache_free(flow_cache, flow); } } @@ -218,7 +218,7 @@ static __be16 parse_ethertype(struct sk_buff *skb) u8 ssap; /* Always 0xAA */ u8 ctrl; u8 oui[3]; - u16 ethertype; + __be16 ethertype; }; struct llc_snap_hdr *llc; __be16 proto; @@ -333,7 +333,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);