OpenSDN source code
ksync_flow_index_manager.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2015 Juniper Networks, Inc. All rights reserved.
3
*/
4
#ifndef __VNSW_AGENT_VROUTER_KSYNC_KSYNC_FLOW_INDEX_MANAGER_H__
5
#define __VNSW_AGENT_VROUTER_KSYNC_KSYNC_FLOW_INDEX_MANAGER_H__
6
7
#include <mutex>
8
9
#include <
pkt/flow_entry.h
>
10
12
// The module is responsible to manage assignment of vrouter flow-table index
13
// to the flow.
14
//
15
// The module maintains following information,
16
//
17
// KSyncFlowIndexManager::IndexTree
18
// Common table containing information about which flow owns the index.
19
// Each entry in tree is of type KSyncFlowIndexManager::IndexEntry.
20
// It contains,
21
// owner_ : Flow owning the index
23
class
FlowEntry
;
24
class
FlowProto
;
25
class
KSyncFlowIndexManager
;
26
class
FlowTableKSyncObject
;
27
class
SandeshFlowIndexInfo;
28
29
class
KSyncFlowIndexManager
{
30
public
:
31
// use buffer of 127 (half of the gen-id range) to identify Active
32
// gen id while accounting for roll-over of gen-id
33
static
const
uint8_t
kActiveGenIdDiffMax
= 127;
34
35
struct
IndexEntry
{
36
IndexEntry
() :
owner_
(NULL) { }
37
virtual
~IndexEntry
() {
38
assert(
owner_
.get() == NULL);
39
}
40
// copy-contructor is needed by std::vector but should never be used
41
IndexEntry
(
const
IndexEntry
& i) {
42
assert(0);
43
}
44
45
std::mutex
mutex_
;
46
FlowEntryPtr
owner_
;
47
};
48
KSyncFlowIndexManager
(
KSync
*ksync);
49
virtual
~KSyncFlowIndexManager
();
50
void
InitDone
(uint32_t count);
51
52
FlowEntryPtr
FindByIndex
(uint32_t idx);
53
54
void
Update
(
FlowEntry
*flow);
55
void
Delete
(
FlowEntry
*flow);
56
void
DisableSend
(
FlowEntry
*flow, uint8_t evict_gen_id);
57
void
UpdateFlowHandle
(
FlowTableKSyncEntry
*kentry, uint32_t index,
58
uint8_t gen_id);
59
void
TriggerKSyncEvent
(
FlowTableKSyncEntry
*kentry,
60
KSyncEntry::KSyncEvent
event);
61
62
uint16_t
sm_log_count
()
const
{
return
sm_log_count_
; }
63
64
private
:
65
uint8_t
AcquireIndexUnLocked
(uint32_t index, uint8_t gen_id,
66
FlowEntry
*flow);
67
void
ReleaseIndexUnLocked
(
FlowEntry
*flow);
68
69
void
CreateInternal
(
FlowEntry
*flow);
70
71
KSync
*
ksync_
;
72
FlowProto
*
proto_
;
73
uint32_t
count_
;
74
struct
IndexEntry
*
index_list_
;
75
uint16_t
sm_log_count_
;
76
};
77
78
#endif
// __VNSW_AGENT_VROUTER_KSYNC_KSYNC_FLOW_INDEX_MANAGER_H__
FlowEntry
Definition:
flow_entry.h:460
FlowProto
Definition:
flow_proto.h:48
FlowTableKSyncEntry
Definition:
flowtable_ksync.h:51
FlowTableKSyncObject
Definition:
flowtable_ksync.h:214
KSyncEntry::KSyncEvent
KSyncEvent
Definition:
ksync_entry.h:51
KSyncFlowIndexManager
Definition:
ksync_flow_index_manager.h:29
KSyncFlowIndexManager::ReleaseIndexUnLocked
void ReleaseIndexUnLocked(FlowEntry *flow)
Definition:
ksync_flow_index_manager.cc:257
KSyncFlowIndexManager::KSyncFlowIndexManager
KSyncFlowIndexManager(KSync *ksync)
Definition:
ksync_flow_index_manager.cc:23
KSyncFlowIndexManager::TriggerKSyncEvent
void TriggerKSyncEvent(FlowTableKSyncEntry *kentry, KSyncEntry::KSyncEvent event)
Definition:
ksync_flow_index_manager.cc:199
KSyncFlowIndexManager::proto_
FlowProto * proto_
Definition:
ksync_flow_index_manager.h:72
KSyncFlowIndexManager::DisableSend
void DisableSend(FlowEntry *flow, uint8_t evict_gen_id)
Definition:
ksync_flow_index_manager.cc:110
KSyncFlowIndexManager::sm_log_count_
uint16_t sm_log_count_
Definition:
ksync_flow_index_manager.h:75
KSyncFlowIndexManager::Update
void Update(FlowEntry *flow)
Definition:
ksync_flow_index_manager.cc:56
KSyncFlowIndexManager::Delete
void Delete(FlowEntry *flow)
Definition:
ksync_flow_index_manager.cc:88
KSyncFlowIndexManager::index_list_
struct IndexEntry * index_list_
Definition:
ksync_flow_index_manager.h:74
KSyncFlowIndexManager::FindByIndex
FlowEntryPtr FindByIndex(uint32_t idx)
Definition:
ksync_flow_index_manager.cc:42
KSyncFlowIndexManager::CreateInternal
void CreateInternal(FlowEntry *flow)
Definition:
ksync_flow_index_manager.cc:267
KSyncFlowIndexManager::AcquireIndexUnLocked
uint8_t AcquireIndexUnLocked(uint32_t index, uint8_t gen_id, FlowEntry *flow)
Definition:
ksync_flow_index_manager.cc:212
KSyncFlowIndexManager::sm_log_count
uint16_t sm_log_count() const
Definition:
ksync_flow_index_manager.h:62
KSyncFlowIndexManager::InitDone
void InitDone(uint32_t count)
Definition:
ksync_flow_index_manager.cc:32
KSyncFlowIndexManager::count_
uint32_t count_
Definition:
ksync_flow_index_manager.h:73
KSyncFlowIndexManager::UpdateFlowHandle
void UpdateFlowHandle(FlowTableKSyncEntry *kentry, uint32_t index, uint8_t gen_id)
Definition:
ksync_flow_index_manager.cc:129
KSyncFlowIndexManager::~KSyncFlowIndexManager
virtual ~KSyncFlowIndexManager()
Definition:
ksync_flow_index_manager.cc:27
KSyncFlowIndexManager::ksync_
KSync * ksync_
Definition:
ksync_flow_index_manager.h:71
KSyncFlowIndexManager::kActiveGenIdDiffMax
static const uint8_t kActiveGenIdDiffMax
Definition:
ksync_flow_index_manager.h:33
KSync
Definition:
ksync_init.h:27
flow_entry.h
FlowEntryPtr
boost::intrusive_ptr< FlowEntry > FlowEntryPtr
Definition:
flow_entry.h:125
KSyncFlowIndexManager::IndexEntry
Definition:
ksync_flow_index_manager.h:35
KSyncFlowIndexManager::IndexEntry::~IndexEntry
virtual ~IndexEntry()
Definition:
ksync_flow_index_manager.h:37
KSyncFlowIndexManager::IndexEntry::mutex_
std::mutex mutex_
Definition:
ksync_flow_index_manager.h:45
KSyncFlowIndexManager::IndexEntry::IndexEntry
IndexEntry(const IndexEntry &i)
Definition:
ksync_flow_index_manager.h:41
KSyncFlowIndexManager::IndexEntry::owner_
FlowEntryPtr owner_
Definition:
ksync_flow_index_manager.h:46
KSyncFlowIndexManager::IndexEntry::IndexEntry
IndexEntry()
Definition:
ksync_flow_index_manager.h:36
contrail
controller
src
vnsw
agent
vrouter
ksync
ksync_flow_index_manager.h
Generated by
1.9.1