2 * Copyright (c) 2014 Cisco Systems, Inc. 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
9 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils;
11 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
12 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
14 import com.google.common.net.InetAddresses;
17 public class SfcNshHeader {
18 private final Ipv4Address nshTunIpDst;
19 private final PortNumber nshTunUdpPort;
20 private final Long nshNspToChain;
21 private final Short nshNsiToChain;
22 private final Long nshNspFromChain;
23 private final Short nshNsiFromChain;
24 private final Long nshMetaC1;
25 private final Long nshMetaC2;
27 private static final int TYPE = 1;
29 private SfcNshHeader(SfcNshHeaderBuilder builder) {
30 this.nshMetaC1 = builder.nshMetaC1;
31 this.nshMetaC2 = builder.nshMetaC2;
32 this.nshTunIpDst = builder.nshTunIpDst;
33 this.nshTunUdpPort = builder.nshTunUdpPort;
34 this.nshNspToChain = builder.nshNspToChain;
35 this.nshNspFromChain = builder.nshNspFromChain;
36 this.nshNsiToChain = builder.nshNsiToChain;
37 this.nshNsiFromChain = builder.nshNsiFromChain;
41 public boolean isValid(SfcNshHeader sfcNshHeader) {
42 if (sfcNshHeader.nshTunIpDst == null) return false;
43 if (sfcNshHeader.nshNspToChain == null) return false;
44 if (sfcNshHeader.nshNspFromChain == null) return false;
45 if (sfcNshHeader.nshNsiToChain == null) return false;
46 if (sfcNshHeader.nshNsiFromChain == null) return false;
47 if (sfcNshHeader.nshMetaC1 == null) return false;
48 if (sfcNshHeader.nshMetaC2 == null) return false;
52 public Ipv4Address getNshTunIpDst() {
57 public PortNumber getNshTunUdpPort() {
62 public Long getNshNspToChain() {
66 public Short getNshNsiToChain() {
70 public Long getNshNspFromChain() {
71 return nshNspFromChain;
76 public Short getNshNsiFromChain() {
77 return nshNsiFromChain;
81 public Long getNshMetaC1() {
85 public Long getNshMetaC2() {
89 public static Long convertIpAddressToLong(Ipv4Address ipv4Address) {
90 return (InetAddresses.coerceToInteger(InetAddresses.forString(ipv4Address.getValue()))) & 0xFFFFFFFFL;
93 public static int getType() {
97 public static class SfcNshHeaderBuilder {
98 private Ipv4Address nshTunIpDst;
99 private PortNumber nshTunUdpPort;
100 private Long nshNspToChain;
101 private Short nshNsiToChain;
102 private Long nshNspFromChain;
103 private Short nshNsiFromChain;
104 private Long nshMetaC1;
105 private Long nshMetaC2;
107 public SfcNshHeader build() {
108 SfcNshHeader sfcNshHeader = new SfcNshHeader(this);
113 * SfcNshHeaderBuilder requires following in constructor:
115 public SfcNshHeaderBuilder() {
119 public SfcNshHeaderBuilder(SfcNshHeader sfcNshHeader) {
121 this.nshTunIpDst = sfcNshHeader.nshTunIpDst;
122 this.nshTunUdpPort = sfcNshHeader.nshTunUdpPort;
123 this.nshNspToChain = sfcNshHeader.nshNspToChain;
124 this.nshNsiToChain = sfcNshHeader.nshNsiToChain;
125 this.nshNspFromChain = sfcNshHeader.nshNspFromChain;
126 this.nshNsiFromChain = sfcNshHeader.nshNsiFromChain;
127 this.nshMetaC1 = sfcNshHeader.nshMetaC1;
128 this.nshMetaC2 = sfcNshHeader.nshMetaC2;
131 public SfcNshHeaderBuilder setNshTunIpDst(Ipv4Address nshTunIpDst) {
132 this.nshTunIpDst = nshTunIpDst;
136 public SfcNshHeaderBuilder setNshTunUdpPort(PortNumber nshTunUdpPort) {
137 this.nshTunUdpPort = nshTunUdpPort;
141 public SfcNshHeaderBuilder setNshNspToChain(Long nshNspToChain) {
142 this.nshNspToChain = nshNspToChain;
146 public SfcNshHeaderBuilder setNshNsiToChain(Short nshNsiToChain) {
147 this.nshNsiToChain = nshNsiToChain;
151 public SfcNshHeaderBuilder setNshNspFromChain(Long nshNspFromChain) {
152 this.nshNspFromChain = nshNspFromChain;
156 public SfcNshHeaderBuilder setNshNsiFromChain(Short nshNsiFromChain) {
157 this.nshNsiFromChain = nshNsiFromChain;
161 public SfcNshHeaderBuilder setNshMetaC1(Long nshMetaC1) {
162 this.nshMetaC1 = nshMetaC1;
166 public SfcNshHeaderBuilder setNshMetaC2(Long nshMetaC2) {
167 this.nshMetaC2 = nshMetaC2;