forked from openvswitch/ovs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
dpif-netdev: Move dpcls lookup structures to .h
This commit moves some data-structures to be available in the dpif-netdev-private.h header. This allows specific implementations of the subtable lookup function to include just that header file, and not require that the code exists in dpif-netdev.c Signed-off-by: Harry van Haaren <[email protected]> Tested-by: Malvika Gupta <[email protected]> Acked-by: Ilya Maximets <[email protected]> Signed-off-by: Ian Stokes <[email protected]>
- Loading branch information
1 parent
aadede3
commit f5ace7c
Showing
3 changed files
with
113 additions
and
65 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
/* | ||
* Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2015 Nicira, Inc. | ||
* Copyright (c) 2019 Intel Corperation. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at: | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
#ifndef DPIF_NETDEV_PRIVATE_H | ||
#define DPIF_NETDEV_PRIVATE_H 1 | ||
|
||
#include <stdbool.h> | ||
#include <stdint.h> | ||
|
||
#include "dpif.h" | ||
#include "cmap.h" | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
/* Forward declaration for lookup_func typedef. */ | ||
struct dpcls_subtable; | ||
struct dpcls_rule; | ||
|
||
/* Must be public as it is instantiated in subtable struct below. */ | ||
struct netdev_flow_key { | ||
uint32_t hash; /* Hash function differs for different users. */ | ||
uint32_t len; /* Length of the following miniflow (incl. map). */ | ||
struct miniflow mf; | ||
uint64_t buf[FLOW_MAX_PACKET_U64S]; | ||
}; | ||
|
||
/* A rule to be inserted to the classifier. */ | ||
struct dpcls_rule { | ||
struct cmap_node cmap_node; /* Within struct dpcls_subtable 'rules'. */ | ||
struct netdev_flow_key *mask; /* Subtable's mask. */ | ||
struct netdev_flow_key flow; /* Matching key. */ | ||
/* 'flow' must be the last field, additional space is allocated here. */ | ||
}; | ||
|
||
/* Lookup function for a subtable in the dpcls. This function is called | ||
* by each subtable with an array of packets, and a bitmask of packets to | ||
* perform the lookup on. Using a function pointer gives flexibility to | ||
* optimize the lookup function based on subtable properties and the | ||
* CPU instruction set available at runtime. | ||
*/ | ||
typedef | ||
uint32_t (*dpcls_subtable_lookup_func)(struct dpcls_subtable *subtable, | ||
uint32_t keys_map, | ||
const struct netdev_flow_key *keys[], | ||
struct dpcls_rule **rules); | ||
|
||
/* Prototype for generic lookup func, using same code path as before. */ | ||
uint32_t | ||
dpcls_subtable_lookup_generic(struct dpcls_subtable *subtable, | ||
uint32_t keys_map, | ||
const struct netdev_flow_key *keys[], | ||
struct dpcls_rule **rules); | ||
|
||
/* A set of rules that all have the same fields wildcarded. */ | ||
struct dpcls_subtable { | ||
/* The fields are only used by writers. */ | ||
struct cmap_node cmap_node OVS_GUARDED; /* Within dpcls 'subtables_map'. */ | ||
|
||
/* These fields are accessed by readers. */ | ||
struct cmap rules; /* Contains "struct dpcls_rule"s. */ | ||
uint32_t hit_cnt; /* Number of match hits in subtable in current | ||
optimization interval. */ | ||
|
||
/* The lookup function to use for this subtable. If there is a known | ||
* property of the subtable (eg: only 3 bits of miniflow metadata is | ||
* used for the lookup) then this can point at an optimized version of | ||
* the lookup function for this particular subtable. */ | ||
dpcls_subtable_lookup_func lookup_func; | ||
|
||
struct netdev_flow_key mask; /* Wildcards for fields (const). */ | ||
/* 'mask' must be the last field, additional space is allocated here. */ | ||
}; | ||
|
||
/* Iterate through netdev_flow_key TNL u64 values specified by 'FLOWMAP'. */ | ||
#define NETDEV_FLOW_KEY_FOR_EACH_IN_FLOWMAP(VALUE, KEY, FLOWMAP) \ | ||
MINIFLOW_FOR_EACH_IN_FLOWMAP (VALUE, &(KEY)->mf, FLOWMAP) | ||
|
||
/* Generates a mask for each bit set in the subtable's miniflow. */ | ||
void | ||
netdev_flow_key_gen_masks(const struct netdev_flow_key *tbl, | ||
uint64_t *mf_masks, | ||
const uint32_t mf_bits_u0, | ||
const uint32_t mf_bits_u1); | ||
|
||
/* Matches a dpcls rule against the incoming packet in 'target' */ | ||
bool dpcls_rule_matches_key(const struct dpcls_rule *rule, | ||
const struct netdev_flow_key *target); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#endif /* netdev-private.h */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters