Shashikanth VH
Committed by Gerrit Code Review

[ONOS-3857] BGP flow spec encoding for mandatory attributes

Change-Id: I58f19deca56464557214d02717a1562ac64d0407
...@@ -34,6 +34,7 @@ public class As4Path implements BgpValueType { ...@@ -34,6 +34,7 @@ public class As4Path implements BgpValueType {
34 private static final Logger log = LoggerFactory.getLogger(AsPath.class); 34 private static final Logger log = LoggerFactory.getLogger(AsPath.class);
35 public static final byte AS4PATH_TYPE = 17; 35 public static final byte AS4PATH_TYPE = 17;
36 public static final byte ASNUM_SIZE = 4; 36 public static final byte ASNUM_SIZE = 4;
37 + public static final byte FLAGS = (byte) 0x40;
37 38
38 private List<Integer> as4pathSet; 39 private List<Integer> as4pathSet;
39 private List<Integer> as4pathSeq; 40 private List<Integer> as4pathSeq;
...@@ -162,8 +163,27 @@ public class As4Path implements BgpValueType { ...@@ -162,8 +163,27 @@ public class As4Path implements BgpValueType {
162 163
163 @Override 164 @Override
164 public int write(ChannelBuffer cb) { 165 public int write(ChannelBuffer cb) {
165 - //Not required to Implement as of now 166 +
166 - return 0; 167 + int iLenStartIndex = cb.writerIndex();
168 +
169 + cb.writeByte(FLAGS);
170 + cb.writeByte(getType());
171 + if ((as4pathSet != null) && (as4pathSeq != null)) {
172 + int iAsLenIndex = cb.writerIndex();
173 + cb.writeByte(0);
174 + cb.writeByte(AsPath.ASPATH_SEQ_TYPE);
175 + cb.writeByte(as4pathSeq.size());
176 +
177 + for (int j = 0; j < as4pathSeq.size(); j++) {
178 + cb.writeInt(as4pathSeq.get(j));
179 + }
180 +
181 + int asLen = cb.writerIndex() - iAsLenIndex;
182 + cb.setByte(iAsLenIndex, (byte) (asLen - 1));
183 + } else {
184 + cb.writeByte(0);
185 + }
186 + return cb.writerIndex() - iLenStartIndex;
167 } 187 }
168 188
169 @Override 189 @Override
......
...@@ -63,6 +63,7 @@ public class AsPath implements BgpValueType { ...@@ -63,6 +63,7 @@ public class AsPath implements BgpValueType {
63 public static final byte ASPATH_SET_TYPE = 1; 63 public static final byte ASPATH_SET_TYPE = 1;
64 public static final byte ASPATH_SEQ_TYPE = 2; 64 public static final byte ASPATH_SEQ_TYPE = 2;
65 public static final byte ASNUM_SIZE = 2; 65 public static final byte ASNUM_SIZE = 2;
66 + public static final byte FLAGS = (byte) 0x40;
66 67
67 private boolean isAsPath = false; 68 private boolean isAsPath = false;
68 private List<Short> aspathSet; 69 private List<Short> aspathSet;
...@@ -201,8 +202,25 @@ public class AsPath implements BgpValueType { ...@@ -201,8 +202,25 @@ public class AsPath implements BgpValueType {
201 202
202 @Override 203 @Override
203 public int write(ChannelBuffer cb) { 204 public int write(ChannelBuffer cb) {
204 - //Not required to Implement as of now 205 + int iLenStartIndex = cb.writerIndex();
205 - return 0; 206 + cb.writeByte(FLAGS);
207 + cb.writeByte(getType());
208 + if (isaspathSet()) {
209 + int iAsLenIndex = cb.writerIndex();
210 + cb.writeByte(0);
211 + cb.writeByte(ASPATH_SEQ_TYPE);
212 + cb.writeByte(aspathSeq.size());
213 +
214 + for (int j = 0; j < aspathSeq.size(); j++) {
215 + cb.writeShort(aspathSeq.get(j));
216 + }
217 +
218 + int asLen = cb.writerIndex() - iAsLenIndex;
219 + cb.setByte(iAsLenIndex, (byte) (asLen - 1));
220 + } else {
221 + cb.writeByte(0);
222 + }
223 + return cb.writerIndex() - iLenStartIndex;
206 } 224 }
207 225
208 @Override 226 @Override
......
...@@ -30,6 +30,7 @@ import com.google.common.base.MoreObjects; ...@@ -30,6 +30,7 @@ import com.google.common.base.MoreObjects;
30 public class LocalPref implements BgpValueType { 30 public class LocalPref implements BgpValueType {
31 public static final byte LOCAL_PREF_TYPE = 5; 31 public static final byte LOCAL_PREF_TYPE = 5;
32 public static final byte LOCAL_PREF_MAX_LEN = 4; 32 public static final byte LOCAL_PREF_MAX_LEN = 4;
33 + public static final byte FLAGS = (byte) 0x40;
33 34
34 private int localPref; 35 private int localPref;
35 36
...@@ -109,8 +110,12 @@ public class LocalPref implements BgpValueType { ...@@ -109,8 +110,12 @@ public class LocalPref implements BgpValueType {
109 110
110 @Override 111 @Override
111 public int write(ChannelBuffer cb) { 112 public int write(ChannelBuffer cb) {
112 - //Not to implement as of now 113 + int iLenStartIndex = cb.writerIndex();
113 - return 0; 114 + cb.writeByte(FLAGS);
115 + cb.writeByte(getType());
116 + cb.writeByte(4);
117 + cb.writeInt(localPref());
118 + return cb.writerIndex() - iLenStartIndex;
114 } 119 }
115 120
116 @Override 121 @Override
......
...@@ -30,6 +30,7 @@ import com.google.common.base.MoreObjects; ...@@ -30,6 +30,7 @@ import com.google.common.base.MoreObjects;
30 public class Med implements BgpValueType { 30 public class Med implements BgpValueType {
31 public static final byte MED_TYPE = 4; 31 public static final byte MED_TYPE = 4;
32 public static final byte MED_MAX_LEN = 4; 32 public static final byte MED_MAX_LEN = 4;
33 + public static final byte FLAGS = (byte) 0x80;
33 34
34 private int med; 35 private int med;
35 36
...@@ -109,8 +110,12 @@ public class Med implements BgpValueType { ...@@ -109,8 +110,12 @@ public class Med implements BgpValueType {
109 110
110 @Override 111 @Override
111 public int write(ChannelBuffer cb) { 112 public int write(ChannelBuffer cb) {
112 - //Not to implement as of now 113 + int iLenStartIndex = cb.writerIndex();
113 - return 0; 114 + cb.writeByte(FLAGS);
115 + cb.writeByte(getType());
116 + cb.writeByte(4);
117 + cb.writeInt(med());
118 + return cb.writerIndex() - iLenStartIndex;
114 } 119 }
115 120
116 @Override 121 @Override
......
...@@ -55,6 +55,7 @@ public class Origin implements BgpValueType { ...@@ -55,6 +55,7 @@ public class Origin implements BgpValueType {
55 55
56 public static final byte ORIGIN_TYPE = 1; 56 public static final byte ORIGIN_TYPE = 1;
57 public static final byte ORIGIN_VALUE_LEN = 1; 57 public static final byte ORIGIN_VALUE_LEN = 1;
58 + public static final byte FLAGS = (byte) 0x40;
58 59
59 private boolean isOrigin = false; 60 private boolean isOrigin = false;
60 private byte origin; 61 private byte origin;
...@@ -131,8 +132,12 @@ public class Origin implements BgpValueType { ...@@ -131,8 +132,12 @@ public class Origin implements BgpValueType {
131 132
132 @Override 133 @Override
133 public int write(ChannelBuffer cb) { 134 public int write(ChannelBuffer cb) {
134 - //Not required to Implement as of now 135 + int iLenStartIndex = cb.writerIndex();
135 - return 0; 136 + cb.writeByte(FLAGS);
137 + cb.writeByte(ORIGIN_TYPE);
138 + cb.writeByte(1);
139 + cb.writeByte(origin().value);
140 + return cb.writerIndex() - iLenStartIndex;
136 } 141 }
137 142
138 @Override 143 @Override
......