/*
* Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
import com.google.common.net.InetAddresses;
public class SfcNshHeader {
private final Ipv4Address nshTunIpDst;
private final PortNumber nshTunUdpPort;
private final Long nshNspToChain;
private final Short nshNsiToChain;
private final Long nshNspFromChain;
private final Short nshNsiFromChain;
private final Long nshMetaC1;
private final Long nshMetaC2;
private static final int TYPE = 1;
private SfcNshHeader(SfcNshHeaderBuilder builder) {
this.nshMetaC1 = builder.nshMetaC1;
this.nshMetaC2 = builder.nshMetaC2;
this.nshTunIpDst = builder.nshTunIpDst;
this.nshTunUdpPort = builder.nshTunUdpPort;
this.nshNspToChain = builder.nshNspToChain;
this.nshNspFromChain = builder.nshNspFromChain;
this.nshNsiToChain = builder.nshNsiToChain;
this.nshNsiFromChain = builder.nshNsiFromChain;
}
public boolean isValid(SfcNshHeader sfcNshHeader) {
if (sfcNshHeader.nshTunIpDst == null) return false;
if (sfcNshHeader.nshNspToChain == null) return false;
if (sfcNshHeader.nshNspFromChain == null) return false;
if (sfcNshHeader.nshNsiToChain == null) return false;
if (sfcNshHeader.nshNsiFromChain == null) return false;
if (sfcNshHeader.nshMetaC1 == null) return false;
if (sfcNshHeader.nshMetaC2 == null) return false;
return true;
}
public Ipv4Address getNshTunIpDst() {
return nshTunIpDst;
}
public PortNumber getNshTunUdpPort() {
return nshTunUdpPort;
}
public Long getNshNspToChain() {
return nshNspToChain;
}
public Short getNshNsiToChain() {
return nshNsiToChain;
}
public Long getNshNspFromChain() {
return nshNspFromChain;
}
public Short getNshNsiFromChain() {
return nshNsiFromChain;
}
public Long getNshMetaC1() {
return nshMetaC1;
}
public Long getNshMetaC2() {
return nshMetaC2;
}
public static Long convertIpAddressToLong(Ipv4Address ipv4Address) {
return (InetAddresses.coerceToInteger(InetAddresses.forString(ipv4Address.getValue()))) & 0xFFFFFFFFL;
}
public static int getType() {
return TYPE;
}
public static class SfcNshHeaderBuilder {
private Ipv4Address nshTunIpDst;
private PortNumber nshTunUdpPort;
private Long nshNspToChain;
private Short nshNsiToChain;
private Long nshNspFromChain;
private Short nshNsiFromChain;
private Long nshMetaC1;
private Long nshMetaC2;
public SfcNshHeader build() {
SfcNshHeader sfcNshHeader = new SfcNshHeader(this);
return sfcNshHeader;
}
/**
* SfcNshHeaderBuilder requires following in constructor:
*/
public SfcNshHeaderBuilder() {
}
public SfcNshHeaderBuilder(SfcNshHeader sfcNshHeader) {
this.nshTunIpDst = sfcNshHeader.nshTunIpDst;
this.nshTunUdpPort = sfcNshHeader.nshTunUdpPort;
this.nshNspToChain = sfcNshHeader.nshNspToChain;
this.nshNsiToChain = sfcNshHeader.nshNsiToChain;
this.nshNspFromChain = sfcNshHeader.nshNspFromChain;
this.nshNsiFromChain = sfcNshHeader.nshNsiFromChain;
this.nshMetaC1 = sfcNshHeader.nshMetaC1;
this.nshMetaC2 = sfcNshHeader.nshMetaC2;
}
public SfcNshHeaderBuilder setNshTunIpDst(Ipv4Address nshTunIpDst) {
this.nshTunIpDst = nshTunIpDst;
return this;
}
public SfcNshHeaderBuilder setNshTunUdpPort(PortNumber nshTunUdpPort) {
this.nshTunUdpPort = nshTunUdpPort;
return this;
}
public SfcNshHeaderBuilder setNshNspToChain(Long nshNspToChain) {
this.nshNspToChain = nshNspToChain;
return this;
}
public SfcNshHeaderBuilder setNshNsiToChain(Short nshNsiToChain) {
this.nshNsiToChain = nshNsiToChain;
return this;
}
public SfcNshHeaderBuilder setNshNspFromChain(Long nshNspFromChain) {
this.nshNspFromChain = nshNspFromChain;
return this;
}
public SfcNshHeaderBuilder setNshNsiFromChain(Short nshNsiFromChain) {
this.nshNsiFromChain = nshNsiFromChain;
return this;
}
public SfcNshHeaderBuilder setNshMetaC1(Long nshMetaC1) {
this.nshMetaC1 = nshMetaC1;
return this;
}
public SfcNshHeaderBuilder setNshMetaC2(Long nshMetaC2) {
this.nshMetaC2 = nshMetaC2;
return this;
}
}
}