5bc908b00b8a1fc506ecac92297aaed8e55b7109
[genius.git] / commons / testutils / src / main / java / org / opendaylight / genius / testutils / interfacemanager / InterfaceHelper.java
1 /*
2  * Copyright © 2017 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 package org.opendaylight.genius.testutils.interfacemanager;
9
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;
31
32 public final class InterfaceHelper {
33
34     private static final String DEFAULT_GW = "0.0.0.0";
35
36     private InterfaceHelper() {
37     }
38
39     public static InstanceIdentifier<Interface> buildIId(String interfaceName) {
40         return InstanceIdentifier
41                 .builder(Interfaces.class)
42                 .child(Interface.class, new InterfaceKey(interfaceName))
43                 .build();
44     }
45
46     public static Interface readInterfaceFromConfigDs(String interfaceName,
47                                                       DataBroker dataBroker) throws
48             ExecutionException, InterruptedException, ExpectedDataObjectNotFoundException {
49         return SingleTransactionDataBroker.syncRead(
50                 dataBroker,
51                 LogicalDatastoreType.CONFIGURATION,
52                 buildIId(interfaceName));
53     }
54
55     public static Interface buildVlanInterfaceFromInfo(InterfaceInfo interfaceInfo) {
56         ParentRefs parentRefs = new ParentRefsBuilder()
57                 .setDatapathNodeIdentifier(interfaceInfo.getDpId())
58                 .setParentInterface(interfaceInfo.getInterfaceName())
59                 .build();
60
61         return new InterfaceBuilder()
62                 .withKey(new InterfaceKey(interfaceInfo.getInterfaceName()))
63                 .setName(interfaceInfo.getInterfaceName())
64                 .setDescription("Vlan interface")
65                 .setEnabled(true)
66                 .setType(L2vlan.class)
67                 .addAugmentation(ParentRefs.class, parentRefs)
68                 .build();
69     }
70
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())
76                 .build();
77
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())
86                 .build();
87
88         return new InterfaceBuilder()
89                 .withKey(new InterfaceKey(interfaceInfo.getInterfaceName()))
90                 .setName(interfaceInfo.getInterfaceName())
91                 .setDescription("Tunnel interface")
92                 .setEnabled(true)
93                 .setType(Tunnel.class)
94                 .addAugmentation(ParentRefs.class, parentRefs)
95                 .addAugmentation(IfTunnel.class, tunnel)
96                 .build();
97     }
98 }