Bug 3244 - SFC Improvements for distributed classifier, robustness
[groupbasedpolicy.git] / renderers / ofoverlay / src / main / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / sfcutils / SfcNshHeader.java
1 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils;
2
3 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
4 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
5
6 import com.google.common.net.InetAddresses;
7
8
9 public class SfcNshHeader {
10     private final Ipv4Address nshTunIpDst;
11     private final PortNumber nshTunUdpPort;
12     private final Long nshNspToChain;
13     private final Short nshNsiToChain;
14     private final Long nshNspFromChain;
15     private final Short nshNsiFromChain;
16     private final Long nshMetaC1;
17     private final Long nshMetaC2;
18     private final Long nshMetaC3;
19     private final Long nshMetaC4;
20
21     private static final int TYPE = 1;
22
23     private SfcNshHeader(SfcNshHeaderBuilder builder) {
24         this.nshMetaC1 = builder.nshMetaC1;
25         this.nshMetaC2 = builder.nshMetaC2;
26         this.nshMetaC3 = builder.nshMetaC3;
27         this.nshMetaC4 = builder.nshMetaC4;
28         this.nshTunIpDst = builder.nshTunIpDst;
29         this.nshTunUdpPort = builder.nshTunUdpPort;
30         this.nshNspToChain = builder.nshNspToChain;
31         this.nshNspFromChain = builder.nshNspFromChain;
32         this.nshNsiToChain = builder.nshNsiToChain;
33         this.nshNsiFromChain = builder.nshNsiFromChain;
34
35     }
36
37     public boolean isValid(SfcNshHeader sfcNshHeader) {
38         if (sfcNshHeader.nshTunIpDst == null) return false;
39         if (sfcNshHeader.nshNspToChain == null) return false;
40         if (sfcNshHeader.nshNspFromChain == null) return false;
41         if (sfcNshHeader.nshNsiToChain == null) return false;
42         if (sfcNshHeader.nshNsiFromChain == null) return false;
43         if (sfcNshHeader.nshMetaC1 == null) return false;
44         if (sfcNshHeader.nshMetaC2 == null) return false;
45         return true;
46     }
47
48     public Ipv4Address getNshTunIpDst() {
49         return nshTunIpDst;
50     }
51
52
53     public PortNumber getNshTunUdpPort() {
54         return nshTunUdpPort;
55     }
56
57
58     public Long getNshNspToChain() {
59         return nshNspToChain;
60     }
61
62     public Short getNshNsiToChain() {
63         return nshNsiToChain;
64     }
65
66     public Long getNshNspFromChain() {
67         return nshNspFromChain;
68     }
69
70
71
72     public Short getNshNsiFromChain() {
73         return nshNsiFromChain;
74     }
75
76
77     public Long getNshMetaC1() {
78         return nshMetaC1;
79     }
80
81     public Long getNshMetaC2() {
82         return nshMetaC2;
83     }
84
85     public static Long convertIpAddressToLong(Ipv4Address ipv4Address) {
86         return (InetAddresses.coerceToInteger(InetAddresses.forString(ipv4Address.getValue()))) & 0xFFFFFFFFL;
87     }
88
89     public static int getType() {
90         return TYPE;
91     }
92
93     public static class SfcNshHeaderBuilder {
94         private Ipv4Address nshTunIpDst;
95         private PortNumber nshTunUdpPort;
96         private Long nshNspToChain;
97         private  Short nshNsiToChain;
98         private Long nshNspFromChain;
99         private Short nshNsiFromChain;
100         private Long nshMetaC1;
101         private Long nshMetaC2;
102         private Long nshMetaC3;
103         private Long nshMetaC4;
104
105         public SfcNshHeader build() {
106             SfcNshHeader sfcNshHeader = new SfcNshHeader(this);
107             return sfcNshHeader;
108         }
109         /**
110          * SfcNshHeaderBuilder requires following in constructor:
111          *
112          * @param nshNspToChain
113          * @param nshNsiToChain
114          * @param nshTunIpDst
115          */
116         public SfcNshHeaderBuilder() {
117
118         }
119
120         public SfcNshHeaderBuilder(SfcNshHeader sfcNshHeader) {
121
122             this.nshTunIpDst = sfcNshHeader.nshTunIpDst;
123             this.nshTunUdpPort = sfcNshHeader.nshTunUdpPort;
124             this.nshNspToChain = sfcNshHeader.nshNspToChain;
125             this.nshNsiToChain = sfcNshHeader.nshNsiToChain;
126             this.nshNspFromChain = sfcNshHeader.nshNspFromChain;
127             this.nshNsiFromChain = sfcNshHeader.nshNsiFromChain;
128             this.nshMetaC1 = sfcNshHeader.nshMetaC1;
129             this.nshMetaC2 = sfcNshHeader.nshMetaC2;
130             this.nshMetaC3 = sfcNshHeader.nshMetaC3;
131             this.nshMetaC4 = sfcNshHeader.nshMetaC4;
132         }
133
134         public SfcNshHeaderBuilder setNshTunIpDst(Ipv4Address nshTunIpDst) {
135             this.nshTunIpDst = nshTunIpDst;
136             return this;
137         }
138
139         public SfcNshHeaderBuilder setNshTunUdpPort(PortNumber nshTunUdpPort) {
140             this.nshTunUdpPort = nshTunUdpPort;
141             return this;
142         }
143
144         public SfcNshHeaderBuilder setNshNspToChain(Long nshNspToChain) {
145             this.nshNspToChain = nshNspToChain;
146             return this;
147         }
148
149         public SfcNshHeaderBuilder setNshNsiToChain(Short nshNsiToChain) {
150             this.nshNsiToChain = nshNsiToChain;
151             return this;
152         }
153
154         public SfcNshHeaderBuilder setNshNspFromChain(Long nshNspFromChain) {
155             this.nshNspFromChain = nshNspFromChain;
156             return this;
157         }
158
159         public SfcNshHeaderBuilder setNshNsiFromChain(Short nshNsiFromChain) {
160             this.nshNsiFromChain = nshNsiFromChain;
161             return this;
162         }
163
164         public SfcNshHeaderBuilder setNshMetaC1(Long nshMetaC1) {
165             this.nshMetaC1 = nshMetaC1;
166             return this;
167         }
168
169         public SfcNshHeaderBuilder setNshMetaC2(Long nshMetaC2) {
170             this.nshMetaC2 = nshMetaC2;
171             return this;
172         }
173
174         public SfcNshHeaderBuilder setNshMetaC3(Long nshMetaC3) {
175             this.nshMetaC3 = nshMetaC3;
176             return this;
177         }
178
179         public SfcNshHeaderBuilder setNshMetaC4(Long nshMetaC4) {
180             this.nshMetaC4 = nshMetaC4;
181             return this;
182         }
183
184     }
185
186
187
188 }