Upgrade to the Neon base platform
[netvirt.git] / elanmanager / impl / src / test / java / org / opendaylight / netvirt / elanmanager / tests / ExpectedObjects.xtend
1 /*
2  * Copyright (c) 2016, 2017 Red Hat, Inc. 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 package org.opendaylight.netvirt.elanmanager.tests
9
10 import org.opendaylight.mdsal.binding.testutils.AssertDataObjects
11 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanInstancesBuilder
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstanceBuilder
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.elan._interface.StaticMacEntriesBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.forwarding.entries.MacEntry;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.forwarding.entries.MacEntryBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.forwarding.entries.MacEntryKey;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanDpnInterfaces;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanForwardingTables;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanInstances;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.L2vlan;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
24
25 import java.math.BigInteger
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.SegmentTypeVxlan;
27 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
28 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
29 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
31 import static extension org.opendaylight.mdsal.binding.testutils.XtendBuilderExtensions.operator_doubleGreaterThan
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupBuilder
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg6
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxRegCaseBuilder
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoadBuilder
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder
42 import com.google.common.base.Optional;
43 import com.google.common.util.concurrent.CheckedFuture;
44 import com.google.common.util.concurrent.FutureCallback;
45 import com.google.common.util.concurrent.Futures;
46
47 import java.math.BigInteger;
48 import java.util.ArrayList;
49 import java.util.List;
50 import java.util.concurrent.ConcurrentHashMap;
51 import java.util.concurrent.ConcurrentMap;
52 import java.util.concurrent.ExecutorService;
53 import java.util.concurrent.Executors;
54
55 import javax.inject.Inject;
56 import javax.inject.Singleton;
57
58 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
59 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
60 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
61 import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException;
62 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
63 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
64 import org.opendaylight.genius.datastoreutils.AsyncClusteredDataTreeChangeListenerBase;
65 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
66 import org.opendaylight.genius.mdsalutil.ActionInfo;
67 import org.opendaylight.genius.mdsalutil.FlowEntity;
68 import org.opendaylight.genius.mdsalutil.FlowInfoKey;
69 import org.opendaylight.genius.mdsalutil.GroupEntity;
70 import org.opendaylight.genius.mdsalutil.GroupInfoKey;
71 import org.opendaylight.genius.mdsalutil.MDSALUtil;
72 import org.opendaylight.genius.mdsalutil.actions.ActionGroup;
73 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
74 import org.opendaylight.infrautils.inject.AbstractLifecycle;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
95 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
96 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
97 import org.slf4j.Logger;
98 import org.slf4j.LoggerFactory;
99 import org.opendaylight.genius.mdsalutil.ActionInfo;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg6
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxRegCaseBuilder
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoadBuilder
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nx.action.resubmit.grouping.NxResubmitBuilder
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionResubmitNodesNodeGroupBucketsBucketActionsCaseBuilder
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
114 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.Tunnel;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.MetadataBuilder;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase;
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCaseBuilder;
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCase;
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCaseBuilder;
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCaseBuilder;
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxRegCaseBuilder;
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder;
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoadBuilder;
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.Dst;
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder;
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.go.to.table._case.GoToTableBuilder;
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.actions._case.WriteActions;
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.actions._case.WriteActionsBuilder;
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.metadata._case.WriteMetadataBuilder;
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableBuilder
138 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.^extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionResubmitNodesNodeTableFlowApplyActionsCaseBuilder;
139 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
140 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
141 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
142 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
143 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder;
144 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
145 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
146 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
147 import org.opendaylight.genius.mdsalutil.MDSALUtil;
148 import org.opendaylight.genius.mdsalutil.MatchInfo;
149 import org.opendaylight.genius.mdsalutil.instructions.InstructionApplyActions;
150 import org.opendaylight.genius.mdsalutil.instructions.InstructionGotoTable;
151 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
152 import org.opendaylight.genius.mdsalutil.matches.MatchEthernetDestination;
153 import org.opendaylight.genius.mdsalutil.matches.MatchEthernetSource;
154 import org.opendaylight.genius.mdsalutil.matches.MatchMetadata;
155 import org.opendaylight.genius.mdsalutil.matches.MatchTunnelId;
156 import org.opendaylight.netvirt.elan.utils.ElanUtils;
157 import org.opendaylight.genius.mdsalutil.MetaDataUtil;
158 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfExternalBuilder;
159 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfExternal;
160 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
161 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefsBuilder;
162 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
163 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan.L2vlanMode;
164 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlanBuilder;
165 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.L2vlan;
166 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
167 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;
168 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
169 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfExternalBuilder;
170 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfExternal;
171 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
172 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefsBuilder;
173 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
174 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan.L2vlanMode;
175 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlanBuilder;
176 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.L2vlan;
177 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
178 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;
179 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
180 import org.opendaylight.genius.mdsalutil.MetaDataUtil;
181 import org.opendaylight.genius.mdsalutil.NwConstants;
182 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstance;
183 import org.opendaylight.netvirt.elanmanager.api.ElanHelper;
184 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.Networks;
185 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.NetworksKey;
186 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.NetworksBuilder;
187 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.BgpControlPlaneType;
188 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.EncapType;
189 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
190 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
191 import org.opendaylight.genius.testutils.interfacemanager.TunnelInterfaceDetails;
192
193
194 /**
195  * Definitions of complex objects expected in tests.
196  *
197  * These were originally generated {@link AssertDataObjects#assertEqualBeans}.
198  */
199 class ExpectedObjects {
200
201     public static String ELAN1 = "34701c04-1118-4c65-9425-78a80d49a211"
202     public static Long ELAN1_SEGMENT_ID = 100L
203
204
205     static def newInterfaceConfig(String interfaceName, String parentName) {
206         new InterfaceBuilder >> [
207             description = interfaceName
208             name = interfaceName
209             type = L2vlan
210             addAugmentation(ParentRefs, new ParentRefsBuilder >> [
211                 parentInterface = parentName
212             ])addAugmentation(IfL2vlan, new IfL2vlanBuilder >> [
213                 l2vlanMode = L2vlanMode.Trunk
214                 vlanId = new VlanId(0)
215             ])
216         ]
217     }
218
219     def static createElanInstance() {
220         new ElanInstancesBuilder >> [
221             elanInstance = #[
222                 new ElanInstanceBuilder >> [
223                     description = "TestElan description"
224                     elanInstanceName = "TestElanName"
225                     elanTag = 5000L
226                     macTimeout = 12345L
227                 ]
228             ]
229         ]
230     }
231
232     def static createElanInstance(String elan, Long segmentId) {
233         new ElanInstanceBuilder >> [
234                     elanInstanceName = elan
235                     description = ELAN1
236                     segmentType = SegmentTypeVxlan
237                     segmentationId = segmentId
238                     macTimeout = 12345L
239         ]
240     }
241
242     def static createElanInstance(String elan, Long segmentId, Long tag) {
243         new ElanInstanceBuilder >> [
244                     elanInstanceName = elan
245                     description = ELAN1
246                     elanTag = tag
247                     segmentationId = segmentId
248                     segmentType = SegmentTypeVxlan
249                     macTimeout = 12345L
250         ]
251     }
252
253     def static Flow checkSmac(String flowId, InterfaceInfo interfaceInfo, ElanInstance elanInstance) {
254         new FlowBuilder >> [
255             flowName = ELAN1
256             hardTimeout = 0
257             id = new FlowId(flowId)
258             idleTimeout = 0
259             instructions = new InstructionsBuilder >> [
260                 instruction = #[
261                     new InstructionBuilder >> [
262                         instruction = new GoToTableCaseBuilder >> [
263                             goToTable = new GoToTableBuilder >> [
264                                 tableId = 51 as short
265                             ]
266                         ]
267                         order = 0
268                     ]
269                 ]
270             ]
271             match = new MatchBuilder >> [
272                 ethernetMatch = new EthernetMatchBuilder >> [
273                     ethernetSource = new EthernetSourceBuilder >> [
274                         address = new MacAddress(interfaceInfo.macAddress)
275                     ]
276                 ]
277                 metadata = new MetadataBuilder >> [
278                     metadata = ElanHelper.getElanMetadataLabel(elanInstance.getElanTag(), interfaceInfo.interfaceTag)
279                     metadataMask = ElanHelper.getElanMetadataMask()
280                 ]
281             ]
282             priority = 20
283             tableId = 50 as short
284         ]
285     }
286
287     def static Flow checkDmacOfSameDpn(String flowId, InterfaceInfo interfaceInfo, ElanInstance elanInstance) {
288     val regvalue = MetaDataUtil.getReg6ValueForLPortDispatcher(interfaceInfo.getInterfaceTag(), NwConstants.DEFAULT_SERVICE_INDEX);
289         new FlowBuilder >> [
290             flowName = ELAN1
291             hardTimeout = 0
292             id = new FlowId(flowId)
293             idleTimeout = 0
294             instructions = new InstructionsBuilder >> [
295                 instruction = #[
296                     new InstructionBuilder >> [
297                         instruction = new ApplyActionsCaseBuilder >> [
298                             applyActions = new ApplyActionsBuilder >> [
299                                 action = #[
300                                     new ActionBuilder >> [
301                                         action = new NxActionResubmitNodesNodeTableFlowApplyActionsCaseBuilder >> [
302                                             nxResubmit = new NxResubmitBuilder >> [
303                                                 inPort = 65528
304                                                 table = 220 as short
305                                             ]
306                                         ]
307                                         order = 1
308                                     ],
309                                     new ActionBuilder >> [
310                                         action = new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder >> [
311                                             nxRegLoad = new NxRegLoadBuilder >> [
312                                                 dst = new DstBuilder >> [
313                                                     dstChoice = new DstNxRegCaseBuilder >> [
314                                                         nxReg = NxmNxReg6
315                                                     ]
316                                                     end = 31
317                                                     start = 0
318                                                 ]
319                                                 value = new BigInteger(""+regvalue)
320                                             ]
321                                         ]
322                                         order = 0
323                                     ]
324                                 ]
325                             ]
326                         ]
327                         order = 0
328                     ]
329                 ]
330             ]
331             match = new MatchBuilder >> [
332                 ethernetMatch = new EthernetMatchBuilder >> [
333                     ethernetDestination = new EthernetDestinationBuilder >> [
334                         address = new MacAddress(interfaceInfo.getMacAddress())
335                     ]
336                 ]
337                 metadata = new MetadataBuilder >> [
338                     metadata = ElanHelper.getElanMetadataLabel(elanInstance.getElanTag())
339                     metadataMask = MetaDataUtil.METADATA_MASK_SERVICE
340                 ]
341             ]
342             priority = 20
343             tableId = 51 as short
344         ]
345     }
346
347     def static Flow checkDmacOfOtherDPN(String flowId, InterfaceInfo interfaceInfo, TunnelInterfaceDetails tepDetails, ElanInstance elanInstance) {
348         val regvalue = MetaDataUtil.getReg6ValueForLPortDispatcher(tepDetails.getInterfaceInfo().getInterfaceTag(), NwConstants.DEFAULT_SERVICE_INDEX);
349         val tnlId = new BigInteger(""+interfaceInfo.getInterfaceTag())
350         new FlowBuilder >> [
351             flowName = ELAN1
352             hardTimeout = 0
353             id = new FlowId(flowId)
354             idleTimeout = 0
355             instructions = new InstructionsBuilder >> [
356                 instruction = #[
357                     new InstructionBuilder >> [
358                         instruction = new ApplyActionsCaseBuilder >> [
359                             applyActions = new ApplyActionsBuilder >> [
360                                 action = #[
361                                     new ActionBuilder >> [
362                                         action = new SetFieldCaseBuilder >> [
363                                             setField = new SetFieldBuilder >> [
364                                                 tunnel = new TunnelBuilder >> [
365                                                     tunnelId = tnlId
366                                                 ]
367                                             ]
368                                         ]
369                                         order = 0
370                                     ],
371                                     new ActionBuilder >> [
372                                         action = new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder >> [
373                                             nxRegLoad = new NxRegLoadBuilder >> [
374                                                 dst = new DstBuilder >> [
375                                                     dstChoice = new DstNxRegCaseBuilder >> [
376                                                         nxReg = NxmNxReg6
377                                                     ]
378                                                     end = 31
379                                                     start = 0
380                                                 ]
381                                                 value = new BigInteger(""+regvalue)
382                                             ]
383                                         ]
384                                         order = 1
385                                     ],
386                                     new ActionBuilder >> [
387                                         action = new NxActionResubmitNodesNodeTableFlowApplyActionsCaseBuilder >> [
388                                             nxResubmit = new NxResubmitBuilder >> [
389                                                 inPort = 65528
390                                                 table = 220 as short
391                                             ]
392                                         ]
393                                         order = 2
394                                     ]
395                                 ]
396                             ]
397                         ]
398                         order = 0
399                     ]
400                 ]
401             ]
402             match = new MatchBuilder >> [
403                 ethernetMatch = new EthernetMatchBuilder >> [
404                     ethernetDestination = new EthernetDestinationBuilder >> [
405                         address = new MacAddress(interfaceInfo.getMacAddress())
406                     ]
407                 ]
408                 metadata = new MetadataBuilder >> [
409                          metadata = ElanHelper.getElanMetadataLabel(elanInstance.getElanTag())
410                          metadataMask = MetaDataUtil.METADATA_MASK_SERVICE
411                 ]
412             ]
413             priority = 20
414             tableId = 51 as short
415         ]
416     }
417
418     def static checkEvpnAdvertiseRoute(Long vni, String mac, String tepip, String prefix, String rd1) {
419        new NetworksBuilder >> [
420            bgpControlPlaneType = BgpControlPlaneType.PROTOCOLEVPN
421            encapType = EncapType.VXLAN
422            ethtag = 0L
423            l2vni = vni
424            l3vni = 0L
425            label = 0L
426            macaddress = mac
427            nexthop = new Ipv4Address(tepip)
428            prefixLen = prefix
429            rd = rd1
430        ]
431     }
432
433     def static Networks checkEvpnWithdrawRT2DelIntf() {
434         return null
435     }
436 }
437