ACL: Support for non-conntrack supported traffic.
[netvirt.git] / vpnservice / aclservice / impl / src / test / java / org / opendaylight / netvirt / aclservice / stats / TestOdlDirectStatisticsService.java
1 /*
2  * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.netvirt.aclservice.stats;
10
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;
39
40 public abstract class TestOdlDirectStatisticsService implements OpendaylightDirectStatisticsService {
41
42     private static final Logger LOG = LoggerFactory.getLogger(TestOdlDirectStatisticsService.class);
43
44     protected FlowCookie aclDropFlowCookie = new FlowCookie(AclConstants.COOKIE_ACL_DROP_FLOW);
45     protected FlowCookie aclDropFlowCookieMask = new FlowCookie(AclLiveStatisticsHelper.COOKIE_ACL_DROP_FLOW_MASK);
46
47     @Override
48     public Future<RpcResult<GetNodeConnectorStatisticsOutput>> getNodeConnectorStatistics(
49             GetNodeConnectorStatisticsInput input) {
50         return Futures.immediateFuture(RpcResultBuilder.<GetNodeConnectorStatisticsOutput>success().build());
51     }
52
53     @Override
54     public Future<RpcResult<GetQueueStatisticsOutput>> getQueueStatistics(GetQueueStatisticsInput input) {
55         return Futures.immediateFuture(RpcResultBuilder.<GetQueueStatisticsOutput>success().build());
56     }
57
58     @Override
59     public Future<RpcResult<GetGroupStatisticsOutput>> getGroupStatistics(GetGroupStatisticsInput input) {
60         return Futures.immediateFuture(RpcResultBuilder.<GetGroupStatisticsOutput>success().build());
61     }
62
63     @Override
64     public Future<RpcResult<GetFlowStatisticsOutput>> getFlowStatistics(GetFlowStatisticsInput input) {
65         LOG.info("getFlowStatistics rpc input = {}", input);
66
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);
74
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);
81
82         if (input.getTableId() == null || input.getTableId() == NwConstants.EGRESS_ACL_FILTER_CUM_DISPATCHER_TABLE) {
83             flowStatsList.add(portIngressFlowStats1);
84             flowStatsList.add(portIngressFlowStats2);
85         }
86         if (input.getTableId() == null || input.getTableId() == NwConstants.INGRESS_ACL_FILTER_CUM_DISPATCHER_TABLE) {
87             flowStatsList.add(portEgressFlowStats1);
88             flowStatsList.add(portEgressFlowStats2);
89         }
90
91         GetFlowStatisticsOutput output =
92                 new GetFlowStatisticsOutputBuilder().setFlowAndStatisticsMapList(flowStatsList).build();
93
94         RpcResultBuilder<GetFlowStatisticsOutput> rpcResultBuilder = RpcResultBuilder.success();
95         rpcResultBuilder.withResult(output);
96         return Futures.immediateFuture(rpcResultBuilder.build());
97     }
98
99     private FlowAndStatisticsMapList buildFlowStats(short tableId, Integer priority, Integer lportTag, long byteCount,
100             long packetCount) {
101         Match metadataMatch = AclLiveStatisticsHelper.buildMetadataMatch(lportTag);
102
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();
107     }
108
109     @Override
110     public Future<RpcResult<GetMeterStatisticsOutput>> getMeterStatistics(GetMeterStatisticsInput input) {
111         return Futures.immediateFuture(RpcResultBuilder.<GetMeterStatisticsOutput>success().build());
112     }
113
114 }