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