1 #ifndef __OF1X_L2HASH_MATCH_PP_H__
2 #define __OF1X_L2HASH_MATCH_PP_H__
5 #include "../../of1x_pipeline.h"
6 #include "../../of1x_flow_table.h"
7 #include "../../of1x_flow_entry.h"
8 #include "../../of1x_match_pp.h"
9 #include "../../of1x_group_table.h"
10 #include "../../of1x_instruction_pp.h"
11 #include "../../../of1x_async_events_hooks.h"
12 #include "../../../../../platform/lock.h"
13 #include "../../../../../platform/likely.h"
14 #include "../../../../../platform/memory.h"
15 #include "of1x_l2hash_ma.h"
23 if(key->eth_dst == bucket->eth_dst){
24 *best_match = bucket->entry;
27 bucket = bucket->next;
34 if(key->eth_dst == bucket->eth_dst && key->vid == bucket->vid){
35 *best_match = bucket->entry;
38 bucket = bucket->next;
60 key_vlan.vid = *vid&OF1X_VLAN_ID_MASK;
63 if(state->no_vlan.num_of_entries > 0){
64 ht_entry = &state->no_vlan.table[l2hash_ht_hash64((
const char*)&key_novlan,
sizeof(key_novlan))];
66 l2_hash_check_all_buckets_no_vlan(ht_entry->bucket_list, &key_novlan, &best_match);
70 if(state->vlan.num_of_entries > 0){
71 ht_entry = &state->vlan.table[l2hash_ht_hash96((
const char*)&key_vlan,
sizeof(key_vlan))];
73 l2_hash_check_all_buckets_vlan(ht_entry->bucket_list, &key_vlan, &tmp);
74 if(tmp && (tmp->priority > best_match->priority))
77 l2_hash_check_all_buckets_vlan(ht_entry->bucket_list, &key_vlan, &best_match);
86 #endif //OF1X_L2HASH_MATCH_PP
OpenFlow v1.0, 1.2 and 1.3.2 flow entry structure.
OpenFlow v1.0, 1.2 and 1.3.2 flow table abstraction.
matching_auxiliary_t * matching_aux[2]
Place-holder to allow matching algorithms keep its own state.