[ovs-dev] [PATCH v4 2/2] dpif-netdev: Exact match cache

Jarno Rajahalme jrajahalme at nicira.com
Wed Aug 20 14:19:59 UTC 2014



> On Aug 19, 2014, at 5:11 PM, Daniele Di Proietto <ddiproietto at vmware.com> wrote:


(Snip)

> +static inline size_t
> +emc_processing(struct dp_netdev *dp, struct emc_cache *flow_cache,
> +               struct dpif_packet **packets, size_t cnt,
> +               struct pkt_metadata *md, struct netdev_flow_key *keys)
> +{
> +    struct packet_batch batches[4];
>     size_t n_batches, i;
> -    bool any_miss;
> +    size_t notfound_cnt = 0;
> 
> +    n_batches = 0;
>     for (i = 0; i < cnt; i++) {
> +        struct netdev_flow_key key;
> +        struct dp_netdev_flow *flow;
> +        uint32_t hash;
> +
>         if (OVS_UNLIKELY(ofpbuf_size(&packets[i]->ofpbuf) < ETH_HEADER_LEN)) {
>             dpif_packet_delete(packets[i]);
> -            mfs[i] = NULL;
>             continue;
>         }
> 
> -        miniflow_initialize(&keys[i].flow, keys[i].buf);
> -        miniflow_extract(&packets[i]->ofpbuf, md, &keys[i].flow);
> -        mfs[i] = &keys[i].flow;
> +        miniflow_initialize(&key.flow, key.buf);
> +        miniflow_extract(&packets[i]->ofpbuf, md, &key.flow);
> +
> +        hash = dpif_packet_get_dp_hash(packets[i]);
> +        if (OVS_UNLIKELY(!hash)) {
> +            hash = miniflow_hash_5tuple(&key.flow, 0);
> +            dpif_packet_set_dp_hash(packets[i], hash);
> +        }
> +
> +        flow = emc_lookup(flow_cache, &key.flow, hash);
> +        if (!flow || !dp_netdev_queue_batches(packets[i], md, flow,  &key.flow,
> +                                  batches, &n_batches, ARRAY_SIZE(batches))) {
> +            if (i != notfound_cnt)
> +                dpif_packet_swap(&packets[i], &packets[notfound_cnt]);
> +

Missing braces here.




More information about the dev mailing list