2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.netvirt.aclservice.stats;
11 import com.google.common.util.concurrent.Futures;
12 import java.math.BigInteger;
13 import java.util.ArrayList;
14 import java.util.List;
15 import java.util.concurrent.Future;
16 import org.opendaylight.genius.mdsalutil.NwConstants;
17 import org.opendaylight.netvirt.aclservice.utils.AclConstants;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsInput;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutput;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutputBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsInput;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsInput;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutput;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsInput;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutput;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsInput;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsOutput;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.OpendaylightDirectStatisticsService;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapList;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
35 import org.opendaylight.yangtools.yang.common.RpcResult;
36 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
37 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory;
40 public abstract class TestOdlDirectStatisticsService implements OpendaylightDirectStatisticsService {
42 private static final Logger LOG = LoggerFactory.getLogger(TestOdlDirectStatisticsService.class);
44 protected FlowCookie aclDropFlowCookie = new FlowCookie(AclConstants.COOKIE_ACL_DROP_FLOW);
45 protected FlowCookie aclDropFlowCookieMask = new FlowCookie(AclLiveStatisticsHelper.COOKIE_ACL_DROP_FLOW_MASK);
48 public Future<RpcResult<GetNodeConnectorStatisticsOutput>> getNodeConnectorStatistics(
49 GetNodeConnectorStatisticsInput input) {
50 return Futures.immediateFuture(RpcResultBuilder.<GetNodeConnectorStatisticsOutput>success().build());
54 public Future<RpcResult<GetQueueStatisticsOutput>> getQueueStatistics(GetQueueStatisticsInput input) {
55 return Futures.immediateFuture(RpcResultBuilder.<GetQueueStatisticsOutput>success().build());
59 public Future<RpcResult<GetGroupStatisticsOutput>> getGroupStatistics(GetGroupStatisticsInput input) {
60 return Futures.immediateFuture(RpcResultBuilder.<GetGroupStatisticsOutput>success().build());
64 public Future<RpcResult<GetFlowStatisticsOutput>> getFlowStatistics(GetFlowStatisticsInput input) {
65 LOG.info("getFlowStatistics rpc input = {}", input);
67 List<FlowAndStatisticsMapList> flowStatsList = new ArrayList<>();
68 FlowAndStatisticsMapList portIngressFlowStats1 =
69 buildFlowStats(NwConstants.EGRESS_ACL_FILTER_CUM_DISPATCHER_TABLE,
70 AclConstants.CT_STATE_TRACKED_NEW_DROP_PRIORITY, 1, 5, 5);
71 FlowAndStatisticsMapList portIngressFlowStats2 =
72 buildFlowStats(NwConstants.EGRESS_ACL_FILTER_CUM_DISPATCHER_TABLE,
73 AclConstants.CT_STATE_TRACKED_INVALID_PRIORITY, 1, 10, 10);
75 FlowAndStatisticsMapList portEgressFlowStats1 =
76 buildFlowStats(NwConstants.INGRESS_ACL_FILTER_CUM_DISPATCHER_TABLE,
77 AclConstants.CT_STATE_TRACKED_NEW_DROP_PRIORITY, 1, 15, 15);
78 FlowAndStatisticsMapList portEgressFlowStats2 =
79 buildFlowStats(NwConstants.INGRESS_ACL_FILTER_CUM_DISPATCHER_TABLE,
80 AclConstants.CT_STATE_TRACKED_INVALID_PRIORITY, 1, 20, 20);
82 if (input.getTableId() == null || input.getTableId() == NwConstants.EGRESS_ACL_FILTER_CUM_DISPATCHER_TABLE) {
83 flowStatsList.add(portIngressFlowStats1);
84 flowStatsList.add(portIngressFlowStats2);
86 if (input.getTableId() == null || input.getTableId() == NwConstants.INGRESS_ACL_FILTER_CUM_DISPATCHER_TABLE) {
87 flowStatsList.add(portEgressFlowStats1);
88 flowStatsList.add(portEgressFlowStats2);
91 GetFlowStatisticsOutput output =
92 new GetFlowStatisticsOutputBuilder().setFlowAndStatisticsMapList(flowStatsList).build();
94 RpcResultBuilder<GetFlowStatisticsOutput> rpcResultBuilder = RpcResultBuilder.success();
95 rpcResultBuilder.withResult(output);
96 return Futures.immediateFuture(rpcResultBuilder.build());
99 private FlowAndStatisticsMapList buildFlowStats(short tableId, Integer priority, Integer lportTag, long byteCount,
101 Match metadataMatch = AclLiveStatisticsHelper.buildMetadataMatch(lportTag);
103 return new FlowAndStatisticsMapListBuilder().setTableId(tableId).setCookie(aclDropFlowCookie)
104 .setCookieMask(aclDropFlowCookieMask).setMatch(metadataMatch).setPriority(priority)
105 .setByteCount(new Counter64(BigInteger.valueOf(byteCount)))
106 .setPacketCount(new Counter64(BigInteger.valueOf(packetCount))).build();
110 public Future<RpcResult<GetMeterStatisticsOutput>> getMeterStatistics(GetMeterStatisticsInput input) {
111 return Futures.immediateFuture(RpcResultBuilder.<GetMeterStatisticsOutput>success().build());