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
8 package org.opendaylight.genius.interfacemanager.test;
10 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
11 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
12 import org.opendaylight.genius.interfacemanager.IfmUtil;
13 import org.opendaylight.genius.interfacemanager.renderer.ovs.utilities.SouthboundUtils;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.Tunnel;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlanBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnelBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefsBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeBase;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
36 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
37 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
38 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
40 import java.math.BigInteger;
41 import java.util.Arrays;
43 import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.CONFIGURATION;
44 import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.OPERATIONAL;
46 public class InterfaceManagerTestUtil {
47 public static final String parentInterface = "tap23701c04-7e";
48 public static final String interfaceName = "23701c04-7e58-4c65-9425-78a80d49a218";
49 public static final String tunnelInterfaceName = "tun414a856a7a4";
50 public static final TopologyId OVSDB_TOPOLOGY_ID = new TopologyId(new Uri("ovsdb:1"));
51 public static final NodeKey nodeKey = new NodeKey(new NodeId("openflow:1"));
53 public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface buildStateInterface(
54 String ifName, String dpnId, String portNo, String phyAddress, Class<? extends InterfaceType> ifType) {
55 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder ifaceBuilder =
56 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder();
58 ifaceBuilder.setType(ifType);
60 ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(ifName));
61 ifaceBuilder.setOperStatus(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus.Up);
62 ifaceBuilder.setLowerLayerIf(Arrays.asList("openflow:"+dpnId+":"+portNo));
63 if(phyAddress != null) {
64 ifaceBuilder.setPhysAddress(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress.getDefaultInstance(phyAddress));
66 return ifaceBuilder.build();
70 public static Node buildInventoryDpnNode(BigInteger dpnId) {
71 NodeId nodeId = new NodeId("openflow:" + dpnId);
72 Node nodeDpn = new NodeBuilder().setId(nodeId).setKey(new NodeKey(nodeId)).build();
77 public static Interface buildInterface(String ifName, String desc, boolean enabled, Object ifType,
78 String parentInterface) {
79 InterfaceBuilder builder = new InterfaceBuilder().setKey(new InterfaceKey(ifName)).setName(ifName)
80 .setDescription(desc).setEnabled(enabled).setType((Class<? extends InterfaceType>) ifType);
81 ParentRefs parentRefs = new ParentRefsBuilder().setParentInterface(parentInterface).build();
82 builder.addAugmentation(ParentRefs.class, parentRefs);
83 if(ifType.equals(L2vlan.class)){
84 IfL2vlan l2vlan = new IfL2vlanBuilder().setVlanId(VlanId.getDefaultInstance("0"))
85 .setL2vlanMode(IfL2vlan.L2vlanMode.Trunk).build();
86 builder.addAugmentation(IfL2vlan.class, l2vlan);
87 }else if(ifType.equals(IfTunnel.class)){
88 IfTunnel tunnel = new IfTunnelBuilder().setTunnelDestination(null).setTunnelGateway(null).setTunnelSource(null)
89 .setTunnelInterfaceType(null).build();
90 builder.addAugmentation(IfTunnel.class, tunnel);
92 return builder.build();
95 public static Interface buildTunnelInterface(BigInteger dpn, String ifName, String desc, boolean enabled, Class<? extends TunnelTypeBase> tunType,
96 String remoteIpStr, String localIpStr) {
97 InterfaceBuilder builder = new InterfaceBuilder().setKey(new InterfaceKey(ifName)).setName(ifName)
98 .setDescription(desc).setEnabled(enabled).setType(Tunnel.class);
99 ParentRefs parentRefs = new ParentRefsBuilder().setDatapathNodeIdentifier(dpn).build();
100 builder.addAugmentation(ParentRefs.class, parentRefs);
101 IpAddress remoteIp = new IpAddress(Ipv4Address.getDefaultInstance(remoteIpStr));
102 IpAddress localIp = new IpAddress(Ipv4Address.getDefaultInstance(localIpStr));
103 IfTunnel tunnel = new IfTunnelBuilder().setTunnelDestination(remoteIp).setTunnelGateway(localIp).setTunnelSource(localIp)
104 .setTunnelInterfaceType( tunType).setInternal(true).setMonitorEnabled(false).build();
105 builder.addAugmentation(IfTunnel.class, tunnel);
106 return builder.build();
109 public static InstanceIdentifier<TerminationPoint> getTerminationPointId(InstanceIdentifier<?> bridgeIid, String portName){
110 InstanceIdentifier<TerminationPoint> tpIid = SouthboundUtils.createTerminationPointInstanceIdentifier(
111 InstanceIdentifier.keyOf(bridgeIid.firstIdentifierOf(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.class)), portName);
115 public static void deleteInterfaceConfig(DataBroker dataBroker, String ifaceName){
116 InstanceIdentifier<Interface> vlanInterfaceEnabledInterfaceInstanceIdentifier = IfmUtil.buildId(
118 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
119 tx.delete(CONFIGURATION, vlanInterfaceEnabledInterfaceInstanceIdentifier);
123 public static void putInterfaceConfig(DataBroker dataBroker, String ifaceName, ParentRefs parentRefs,
124 Class<? extends InterfaceType> ifType){
125 Interface interfaceInfo;
126 if(!Tunnel.class.equals(ifType)) {
127 interfaceInfo = InterfaceManagerTestUtil.buildInterface(
128 ifaceName, ifaceName, true, ifType, parentRefs.getParentInterface());
130 interfaceInfo = buildTunnelInterface(parentRefs.getDatapathNodeIdentifier(),ifaceName, ifaceName, true, TunnelTypeVxlan.class,
131 "1.1.1.1", "2.2.2.2");
133 InstanceIdentifier<Interface> interfaceInstanceIdentifier = IfmUtil.buildId(
135 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
136 tx.put(CONFIGURATION, interfaceInstanceIdentifier, interfaceInfo, true);
140 public static void putInterfaceState(DataBroker dataBroker, String interfaceName, Class<? extends InterfaceType> ifType){
141 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifaceState =
142 InterfaceManagerTestUtil.buildStateInterface(interfaceName, "1", "2", "AA:AA:AA:AA:AA:AA", ifType);
143 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
144 tx.put(OPERATIONAL, IfmUtil.buildStateInterfaceId(interfaceName), ifaceState, true);