5ab7e1b2e3cf04aa390ef26b754689376e013db2
[groupbasedpolicy.git] / neutron-ovsdb / src / main / java / org / opendaylight / groupbasedpolicy / neutron / ovsdb / VxlanTunnelType.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, 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
9 package org.opendaylight.groupbasedpolicy.neutron.ovsdb;
10
11 import java.util.Collections;
12 import java.util.HashMap;
13 import java.util.List;
14 import java.util.Map;
15
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeBase;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeVxlan;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Options;
22
23 public class VxlanTunnelType extends AbstractTunnelType {
24
25     private static final Map<String, String> optsMap;
26     private static final Class<? extends TunnelTypeBase> tunnelType = TunnelTypeVxlan.class;
27     private static final Integer VXLAN_PORT_NUMBER = 4789;
28     private static final String VXLAN_TUNNEL_PREFIX = "vxlan-";
29     private final PortNumber udpTunnelPort;
30     private final List<Options> optionsList;
31
32     static {
33         Map<String, String> opts = new HashMap<String, String>();
34         opts.put(VNID_KEY, VNID_VALUE);
35         opts.put(REMOTE_IP_KEY, REMOTE_IP_VALUE);
36         optsMap = Collections.unmodifiableMap(opts);
37     }
38
39     public VxlanTunnelType() {
40         optionsList = createOptionsList(optsMap);
41         udpTunnelPort = new PortNumber(VXLAN_PORT_NUMBER);
42     }
43
44     @Override
45     public List<Options> getOptions() {
46         return optionsList;
47     }
48
49     @Override
50     public Class<? extends TunnelTypeBase> getTunnelType() {
51         return tunnelType;
52     }
53
54     @Override
55     public PortNumber getPortNumber() {
56         return udpTunnelPort;
57     }
58
59     @Override
60     public String getTunnelPrefix() {
61         return VXLAN_TUNNEL_PREFIX;
62     }
63
64     /**
65      * Check if a TerminationPoint is a tunnel port that meets
66      * requirements for OfOverlay. The tunnel port must support
67      * setting the VNID and destination Tunnel IP address, and
68      * use VXLAN encapsulation.
69      *
70      * @param tpAugmentation the {@link OvsdbTerminationPointAugmentation}
71      * @return true if it can be the OfOverlay tunnel port, false if not
72      */
73     @Override
74     public boolean isValidTunnelPort(OvsdbTerminationPointAugmentation tpAugmentation) {
75         if (hasTunnelOptions(tpAugmentation, optsMap)
76                 && InterfaceTypeVxlan.class.equals(tpAugmentation.getInterfaceType())
77                 && (getDestPort(tpAugmentation) == null || getDestPort(tpAugmentation).equals(
78                         VXLAN_PORT_NUMBER.toString()))) {
79             return true;
80         }
81         return false;
82     }
83 }