2 * Copyright © 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.testutils.interfacemanager;
10 import java.util.Collections;
11 import java.util.concurrent.ExecutionException;
12 import org.opendaylight.genius.datastoreutils.ExpectedDataObjectNotFoundException;
13 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
14 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
15 import org.opendaylight.mdsal.binding.api.DataBroker;
16 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.L2vlan;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.Tunnel;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
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.TunnelTypeVxlan;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
32 public final class InterfaceHelper {
34 private static final String DEFAULT_GW = "0.0.0.0";
36 private InterfaceHelper() {
39 public static InstanceIdentifier<Interface> buildIId(String interfaceName) {
40 return InstanceIdentifier
41 .builder(Interfaces.class)
42 .child(Interface.class, new InterfaceKey(interfaceName))
46 public static Interface readInterfaceFromConfigDs(String interfaceName,
47 DataBroker dataBroker) throws
48 ExecutionException, InterruptedException, ExpectedDataObjectNotFoundException {
49 return SingleTransactionDataBroker.syncRead(
51 LogicalDatastoreType.CONFIGURATION,
52 buildIId(interfaceName));
55 public static Interface buildVlanInterfaceFromInfo(InterfaceInfo interfaceInfo) {
56 ParentRefs parentRefs = new ParentRefsBuilder()
57 .setDatapathNodeIdentifier(interfaceInfo.getDpId())
58 .setParentInterface(interfaceInfo.getInterfaceName())
61 return new InterfaceBuilder()
62 .withKey(new InterfaceKey(interfaceInfo.getInterfaceName()))
63 .setName(interfaceInfo.getInterfaceName())
64 .setDescription("Vlan interface")
66 .setType(L2vlan.class)
67 .addAugmentation(ParentRefs.class, parentRefs)
71 public static Interface buildVxlanTunnelInterfaceFromInfo(TunnelInterfaceDetails tunnelInterfaceDetails) {
72 InterfaceInfo interfaceInfo = tunnelInterfaceDetails.getInterfaceInfo();
73 ParentRefs parentRefs = new ParentRefsBuilder()
74 .setDatapathNodeIdentifier(interfaceInfo.getDpId())
75 .setParentInterface(interfaceInfo.getInterfaceName())
78 IfTunnel tunnel = new IfTunnelBuilder()
79 .setTunnelDestination(new IpAddress(new Ipv4Address(tunnelInterfaceDetails.getDstIp())))
80 .setTunnelGateway(new IpAddress(new Ipv4Address(DEFAULT_GW)))
81 .setTunnelSource(new IpAddress(new Ipv4Address(tunnelInterfaceDetails.getSrcIp())))
82 .setTunnelInterfaceType(TunnelTypeVxlan.class)
83 .setInternal(!tunnelInterfaceDetails.isExternal())
84 .setTunnelRemoteIpFlow(false)
85 .setTunnelOptions(Collections.emptyList())
88 return new InterfaceBuilder()
89 .withKey(new InterfaceKey(interfaceInfo.getInterfaceName()))
90 .setName(interfaceInfo.getInterfaceName())
91 .setDescription("Tunnel interface")
93 .setType(Tunnel.class)
94 .addAugmentation(ParentRefs.class, parentRefs)
95 .addAugmentation(IfTunnel.class, tunnel)