diff --git a/src/vnsw/agent/pkt/flow_table.cc b/src/vnsw/agent/pkt/flow_table.cc index 5adeeda72df..e1b1dc71933 100644 --- a/src/vnsw/agent/pkt/flow_table.cc +++ b/src/vnsw/agent/pkt/flow_table.cc @@ -411,6 +411,8 @@ bool FlowTable::ValidFlowMove(const FlowEntry *new_flow, void FlowTable::UpdateReverseFlow(FlowEntry *flow, FlowEntry *rflow) { FlowEntry *flow_rev = flow->reverse_flow_entry(); FlowEntry *rflow_rev = NULL; + bool flow_rev_notify = false; + bool rflow_rev_notify = false; if (rflow) { rflow_rev = rflow->reverse_flow_entry(); @@ -435,6 +437,7 @@ void FlowTable::UpdateReverseFlow(FlowEntry *flow, FlowEntry *rflow) { if (ValidFlowMove(rflow, flow_rev)== false) { flow->MakeShortFlow(FlowEntry::SHORT_REVERSE_FLOW_CHANGE); } + flow_rev_notify = true; } if (rflow && rflow->is_flags_set(FlowEntry::BgpRouterService)) { @@ -455,6 +458,7 @@ void FlowTable::UpdateReverseFlow(FlowEntry *flow, FlowEntry *rflow) { if (ValidFlowMove(flow, rflow_rev) == false) { flow->MakeShortFlow(FlowEntry::SHORT_REVERSE_FLOW_CHANGE); } + rflow_rev_notify = true; } if (flow->reverse_flow_entry() == NULL) { @@ -474,6 +478,15 @@ void FlowTable::UpdateReverseFlow(FlowEntry *flow, FlowEntry *rflow) { rflow->set_flags(FlowEntry::Multicast); } } + //Has been marked for short flow, notify stats collector + if (flow_rev_notify) { + FlowEntryPtr flow_rev_ptr(flow_rev); + agent()->flow_stats_manager()->AddEvent(flow_rev_ptr); + } + if (rflow_rev_notify) { + FlowEntryPtr rflow_rev_ptr(rflow_rev); + agent()->flow_stats_manager()->AddEvent(rflow_rev_ptr); + } } //////////////////////////////////////////////////////////////////////////// @@ -764,6 +777,8 @@ void FlowTable::EvictFlow(FlowEntry *flow, FlowEntry *reverse_flow) { // Reverse flow unlinked with forward flow. Make it short-flow if (reverse_flow && reverse_flow->deleted() == false) { reverse_flow->MakeShortFlow(FlowEntry::SHORT_NO_REVERSE_FLOW); + FlowEntryPtr reverse_flow_ptr(reverse_flow); + agent()->flow_stats_manager()->AddEvent(reverse_flow_ptr); UpdateKSync(reverse_flow, true); } }