blob: 6c8e71efacb2667b3bde759e12fecb55af60cae2 [file] [log] [blame]
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -08001package net.floodlightcontroller.util;
2
3import net.floodlightcontroller.util.MACAddress;
4import net.floodlightcontroller.util.IPv4Net;
Pavlin Radoslavovad008e02013-02-21 18:42:42 -08005
6import org.codehaus.jackson.annotate.JsonProperty;
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -08007
8/**
9 * The class representing the Flow Entry Matching filter.
10 *
11 * The Flow Entry matching filter that is used to specify
12 * the network data that would be forwarded on the data path from
Pavlin Radoslavovede97582013-03-08 18:57:28 -080013 * the source to the destination. Examples: source or destination MAC address,
14 * IP prefix that includes the destination's IP address, etc.
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -080015 */
16public class FlowEntryMatch {
Pavlin Radoslavovede97582013-03-08 18:57:28 -080017 /**
18 * A class for storing a value to match.
19 */
20 class Field<T> {
21 /**
22 * Default constructor.
23 */
24 public Field() {
25 this.enabled = false;
26 }
27
28 /**
29 * Constructor for a given value to match.
Pavlin Radoslavovb9fe6b42013-03-27 16:25:05 -070030 *
31 * @param value the value to match.
Pavlin Radoslavovede97582013-03-08 18:57:28 -080032 */
33 public Field(T value) {
34 this.value = value;
35 this.enabled = true;
36 }
37
38 /**
39 * Get the value.
40 *
41 * @return the value.
42 */
43 public T value() { return this.value; }
44
45 /**
46 * Enable the matching for a given value.
47 *
48 * @param value the value to set.
49 */
50 public void enableMatch(T value) {
51 this.value = value;
52 this.enabled = true;
53 }
54
55 /**
56 * Disable the matching.
57 */
58 public void disableMatch() {
59 this.enabled = false;
60 }
61
62 /**
63 * Test whether matching is enabled.
64 *
65 * @return true if matching is enabled, otherwise false.
66 */
67 public boolean enabled() { return this.enabled; }
68
69 private T value; // The value to match
70 private boolean enabled; // Set to true, if matching is enabled
71 }
72
73 private Field<Port> inPort; // Matching input switch port
74 private Field<MACAddress> srcMac; // Matching source MAC address
75 private Field<MACAddress> dstMac; // Matching destination MAC address
76 private Field<Short> vlanId; // Matching VLAN ID
77 private Field<Byte> vlanPriority; // Matching VLAN priority
78 private Field<Short> ethernetFrameType; // Matching Ethernet frame type
79 private Field<Byte> ipToS; // Matching IP ToS (DSCP field, 6 bits)
80 private Field<Byte> ipProto; // Matching IP protocol
81 private Field<IPv4Net> srcIPv4Net; // Matching source IPv4 prefix
82 private Field<IPv4Net> dstIPv4Net; // Matching destination IPv4 prefix
83 private Field<Short> srcTcpUdpPort; // Matching source TCP/UDP port
84 private Field<Short> dstTcpUdpPort; // Matching destination TCP/UDP port
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -080085
86 /**
87 * Default constructor.
88 */
89 public FlowEntryMatch() {
90 }
91
92 /**
Pavlin Radoslavovb9fe6b42013-03-27 16:25:05 -070093 * Copy constructor.
94 *
95 * @param other the object to copy from.
96 */
97 public FlowEntryMatch(FlowEntryMatch other) {
98 if ((other.inPort != null) && other.inPort.enabled())
99 this.enableInPort(other.inPort.value());
100 if ((other.srcMac != null) && other.srcMac.enabled())
101 this.enableSrcMac(other.srcMac.value());
102 if ((other.dstMac != null) && other.dstMac.enabled())
103 this.enableDstMac(other.dstMac.value());
104 if ((other.vlanId != null) && other.vlanId.enabled())
105 this.enableVlanId(other.vlanId.value());
106 if ((other.vlanPriority != null) && other.vlanPriority.enabled())
107 this.enableVlanPriority(other.vlanPriority.value());
108 if ((other.ethernetFrameType != null) && other.ethernetFrameType.enabled())
109 this.enableEthernetFrameType(other.ethernetFrameType.value());
110 if ((other.ipToS != null) && other.ipToS.enabled())
111 this.enableIpToS(other.ipToS.value());
112 if ((other.ipProto != null) && other.ipProto.enabled())
113 this.enableIpProto(other.ipProto.value());
114 if ((other.srcIPv4Net != null) && other.srcIPv4Net.enabled())
115 this.enableSrcIPv4Net(other.srcIPv4Net.value());
116 if ((other.dstIPv4Net != null) && other.dstIPv4Net.enabled())
117 this.enableDstIPv4Net(other.dstIPv4Net.value());
118 if ((other.srcTcpUdpPort != null) && other.srcTcpUdpPort.enabled())
119 this.enableSrcTcpUdpPort(other.srcTcpUdpPort.value());
120 if ((other.dstTcpUdpPort != null) && other.dstTcpUdpPort.enabled())
121 this.enableDstTcpUdpPort(other.dstTcpUdpPort.value());
122 }
123
124 /**
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800125 * Get the matching input switch port.
126 *
127 * @return the matching input switch port.
128 */
129 @JsonProperty("inPort")
130 public Port inPort() {
131 if (inPort != null)
132 return inPort.value();
133 return null;
134 }
135
136 /**
137 * Enable the matching on input switch port.
138 *
139 * @param inPort the input switch port value to enable for matching.
140 */
141 @JsonProperty("inPort")
142 public void enableInPort(Port inPort) {
143 this.inPort = new Field<Port>(inPort);
144 }
145
146 /**
147 * Disable the matching on input switch port.
148 */
149 public void disableInPort() {
150 this.inPort = null;
151 }
152
153 /**
154 * Test if matching on input switch port is enabled.
155 *
156 * @return true if matching on input switch port is enabled.
157 */
158 @JsonProperty("matchInPort")
159 public boolean matchInPort() {
160 if (inPort != null)
161 return inPort.enabled();
162 return false;
163 }
164
165 /**
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800166 * Get the matching source MAC address.
167 *
168 * @return the matching source MAC address.
169 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -0800170 @JsonProperty("srcMac")
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800171 public MACAddress srcMac() {
172 if (srcMac != null)
173 return srcMac.value();
174 return null;
175 }
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800176
177 /**
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800178 * Enable the matching on source MAC address.
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800179 *
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800180 * @param srcMac the source MAC address value to enable for matching.
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800181 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -0800182 @JsonProperty("srcMac")
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800183 public void enableSrcMac(MACAddress srcMac) {
184 this.srcMac = new Field<MACAddress>(srcMac);
185 }
186
187 /**
188 * Disable the matching on source MAC address.
189 */
190 public void disableSrcMac() {
191 this.srcMac = null;
192 }
193
194 /**
195 * Test if matching on source MAC address is enabled.
196 *
197 * @return true if matching on source MAC address is enabled.
198 */
199 @JsonProperty("matchSrcMac")
200 public boolean matchSrcMac() {
201 if (srcMac != null)
202 return srcMac.enabled();
203 return false;
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800204 }
205
206 /**
207 * Get the matching destination MAC address.
208 *
209 * @return the matching destination MAC address.
210 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -0800211 @JsonProperty("dstMac")
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800212 public MACAddress dstMac() {
213 if (dstMac != null)
214 return dstMac.value();
215 return null;
216 }
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800217
218 /**
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800219 * Enable the matching on destination MAC address.
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800220 *
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800221 * @param dstMac the destination MAC address value to enable for matching.
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800222 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -0800223 @JsonProperty("dstMac")
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800224 public void enableDstMac(MACAddress dstMac) {
225 this.dstMac = new Field<MACAddress>(dstMac);
226 }
227
228 /**
229 * Disable the matching on destination MAC address.
230 */
231 public void disableDstMac() {
232 this.dstMac = null;
233 }
234
235 /**
236 * Test if matching on destination MAC address is enabled.
237 *
238 * @return true if matching on destination MAC address is enabled.
239 */
240 @JsonProperty("matchDstMac")
241 public boolean matchDstMac() {
242 if (dstMac != null)
243 return dstMac.enabled();
244 return false;
245 }
246
247 /**
248 * Get the matching VLAN ID.
249 *
250 * @return the matching VLAN ID.
251 */
252 @JsonProperty("vlanId")
253 public Short vlanId() {
254 if (vlanId != null)
255 return vlanId.value();
256 return null;
257 }
258
259 /**
260 * Enable the matching on VLAN ID.
261 *
262 * @param vlanId the VLAN ID value to enable for matching.
263 */
264 @JsonProperty("vlanId")
265 public void enableVlanId(Short vlanId) {
266 this.vlanId = new Field<Short>(vlanId);
267 }
268
269 /**
270 * Disable the matching on VLAN ID.
271 */
272 public void disableVlanId() {
273 this.vlanId = null;
274 }
275
276 /**
277 * Test if matching on VLAN ID is enabled.
278 *
279 * @return true if matching on VLAN ID is enabled.
280 */
281 @JsonProperty("matchVlanId")
282 public boolean matchVlanId() {
283 if (vlanId != null)
284 return vlanId.enabled();
285 return false;
286 }
287
288 /**
289 * Get the matching VLAN priority.
290 *
291 * @return the matching VLAN priority.
292 */
293 @JsonProperty("vlanPriority")
294 public Byte vlanPriority() {
295 if (vlanPriority != null)
296 return vlanPriority.value();
297 return null;
298 }
299
300 /**
301 * Enable the matching on VLAN priority.
302 *
303 * @param vlanPriority the VLAN priority value to enable for matching.
304 */
305 @JsonProperty("vlanPriority")
306 public void enableVlanPriority(Byte vlanPriority) {
307 this.vlanPriority = new Field<Byte>(vlanPriority);
308 }
309
310 /**
311 * Disable the matching on VLAN priority.
312 */
313 public void disableVlanPriority() {
314 this.vlanPriority = null;
315 }
316
317 /**
318 * Test if matching on VLAN priority is enabled.
319 *
320 * @return true if matching on VLAN priority is enabled.
321 */
322 @JsonProperty("matchVlanPriority")
323 public boolean matchVlanPriority() {
324 if (vlanPriority != null)
325 return vlanPriority.enabled();
326 return false;
327 }
328
329 /**
330 * Get the matching Ethernet frame type.
331 *
332 * @return the matching Ethernet frame type.
333 */
334 @JsonProperty("ethernetFrameType")
335 public Short ethernetFrameType() {
336 if (ethernetFrameType != null)
337 return ethernetFrameType.value();
338 return null;
339 }
340
341 /**
342 * Enable the matching on Ethernet frame type.
343 *
344 * @param ethernetFrameType the Ethernet frame type value to enable for
345 * matching.
346 */
347 @JsonProperty("ethernetFrameType")
348 public void enableEthernetFrameType(Short ethernetFrameType) {
349 this.ethernetFrameType = new Field<Short>(ethernetFrameType);
350 }
351
352 /**
353 * Disable the matching on Ethernet frame type.
354 */
355 public void disableEthernetFrameType() {
356 this.ethernetFrameType = null;
357 }
358
359 /**
360 * Test if matching on Ethernet frame type is enabled.
361 *
362 * @return true if matching on Ethernet frame type is enabled.
363 */
364 @JsonProperty("matchEthernetFrameType")
365 public boolean matchEthernetFrameType() {
366 if (ethernetFrameType != null)
367 return ethernetFrameType.enabled();
368 return false;
369 }
370
371 /**
372 * Get the matching IP ToS (DSCP field, 6 bits)
373 *
374 * @return the matching IP ToS.
375 */
376 @JsonProperty("ipToS")
377 public Byte ipToS() {
378 if (ipToS != null)
379 return ipToS.value();
380 return null;
381 }
382
383 /**
384 * Enable the matching on IP ToS (DSCP field, 6 bits).
385 *
386 * @param ipToS the IP ToS value to enable for matching.
387 */
388 @JsonProperty("ipToS")
389 public void enableIpToS(Byte ipToS) {
390 this.ipToS = new Field<Byte>(ipToS);
391 }
392
393 /**
394 * Disable the matching on IP ToS (DSCP field, 6 bits).
395 */
396 public void disableIpToS() {
397 this.ipToS = null;
398 }
399
400 /**
401 * Test if matching on IP ToS (DSCP field, 6 bits) is enabled.
402 *
403 * @return true if matching on IP ToS is enabled.
404 */
405 @JsonProperty("matchIpToS")
406 public boolean matchIpToS() {
407 if (ipToS != null)
408 return ipToS.enabled();
409 return false;
410 }
411
412 /**
413 * Get the matching IP protocol.
414 *
415 * @return the matching IP protocol.
416 */
417 @JsonProperty("ipProto")
418 public Byte ipProto() {
419 if (ipProto != null)
420 return ipProto.value();
421 return null;
422 }
423
424 /**
425 * Enable the matching on IP protocol.
426 *
427 * @param ipProto the IP protocol value to enable for matching.
428 */
429 @JsonProperty("ipProto")
430 public void enableIpProto(Byte ipProto) {
431 this.ipProto = new Field<Byte>(ipProto);
432 }
433
434 /**
435 * Disable the matching on IP protocol.
436 */
437 public void disableIpProto() {
438 this.ipProto = null;
439 }
440
441 /**
442 * Test if matching on IP protocol is enabled.
443 *
444 * @return true if matching on IP protocol is enabled.
445 */
446 @JsonProperty("matchIpProto")
447 public boolean matchIpProto() {
448 if (ipProto != null)
449 return ipProto.enabled();
450 return false;
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800451 }
452
453 /**
454 * Get the matching source IPv4 prefix.
455 *
456 * @return the matching source IPv4 prefix.
457 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -0800458 @JsonProperty("srcIPv4Net")
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800459 public IPv4Net srcIPv4Net() {
460 if (srcIPv4Net != null)
461 return srcIPv4Net.value();
462 return null;
463 }
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800464
465 /**
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800466 * Enable the matching on source IPv4 prefix.
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800467 *
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800468 * @param srcIPv4Net the source IPv4 prefix value to enable for matching.
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800469 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -0800470 @JsonProperty("srcIPv4Net")
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800471 public void enableSrcIPv4Net(IPv4Net srcIPv4Net) {
472 this.srcIPv4Net = new Field<IPv4Net>(srcIPv4Net);
473 }
474
475 /**
476 * Disable the matching on source IPv4 prefix.
477 */
478 public void disableSrcIPv4Net() {
479 this.srcIPv4Net = null;
480 }
481
482 /**
483 * Test if matching on source IPv4 prefix is enabled.
484 *
485 * @return true if matching on source IPv4 prefix is enabled.
486 */
487 @JsonProperty("matchSrcIPv4Net")
488 public boolean matchSrcIPv4Net() {
489 if (srcIPv4Net != null)
490 return srcIPv4Net.enabled();
491 return false;
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800492 }
493
494 /**
495 * Get the matching destination IPv4 prefix.
496 *
497 * @return the matching destination IPv4 prefix.
498 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -0800499 @JsonProperty("dstIPv4Net")
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800500 public IPv4Net dstIPv4Net() {
501 if (dstIPv4Net != null)
502 return dstIPv4Net.value();
503 return null;
504 }
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800505
506 /**
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800507 * Enable the matching on destination IPv4 prefix.
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800508 *
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800509 * @param dstIPv4Net the destination IPv4 prefix value to enable for
510 * matching.
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800511 */
Pavlin Radoslavov2013cbb2013-02-26 10:15:18 -0800512 @JsonProperty("dstIPv4Net")
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800513 public void enableDstIPv4Net(IPv4Net dstIPv4Net) {
514 this.dstIPv4Net = new Field<IPv4Net>(dstIPv4Net);
515 }
516
517 /**
518 * Disable the matching on destination IPv4 prefix.
519 */
520 public void disableDstIPv4Net() {
521 this.dstIPv4Net = null;
522 }
523
524 /**
525 * Test if matching on destination IPv4 prefix is enabled.
526 *
527 * @return true if matching on destination IPv4 prefix is enabled.
528 */
529 @JsonProperty("matchDstIPv4Net")
530 public boolean matchDstIPv4Net() {
531 if (dstIPv4Net != null)
532 return dstIPv4Net.enabled();
533 return false;
534 }
535
536 /**
537 * Get the matching source TCP/UDP port.
538 *
539 * @return the matching source TCP/UDP port.
540 */
541 @JsonProperty("srcTcpUdpPort")
542 public Short srcTcpUdpPort() {
543 if (srcTcpUdpPort != null)
544 return srcTcpUdpPort.value();
545 return null;
546 }
547
548 /**
549 * Enable the matching on source TCP/UDP port.
550 *
551 * @param srcTcpUdpPort the source TCP/UDP port to enable for matching.
552 */
553 @JsonProperty("srcTcpUdpPort")
554 public void enableSrcTcpUdpPort(Short srcTcpUdpPort) {
555 this.srcTcpUdpPort = new Field<Short>(srcTcpUdpPort);
556 }
557
558 /**
559 * Disable the matching on source TCP/UDP port.
560 */
561 public void disableSrcTcpUdpPort() {
562 this.srcTcpUdpPort = null;
563 }
564
565 /**
566 * Test if matching on source TCP/UDP port is enabled.
567 *
568 * @return true if matching on source TCP/UDP port is enabled.
569 */
570 @JsonProperty("matchSrcTcpUdpPort")
571 public boolean matchSrcTcpUdpPort() {
572 if (srcTcpUdpPort != null)
573 return srcTcpUdpPort.enabled();
574 return false;
575 }
576
577 /**
578 * Get the matching destination TCP/UDP port.
579 *
580 * @return the matching destination TCP/UDP port.
581 */
582 @JsonProperty("dstTcpUdpPort")
583 public Short dstTcpUdpPort() {
584 if (dstTcpUdpPort != null)
585 return dstTcpUdpPort.value();
586 return null;
587 }
588
589 /**
590 * Enable the matching on destination TCP/UDP port.
591 *
592 * @param dstTcpUdpPort the destination TCP/UDP port to enable for
593 * matching.
594 */
595 @JsonProperty("dstTcpUdpPort")
596 public void enableDstTcpUdpPort(Short dstTcpUdpPort) {
597 this.dstTcpUdpPort = new Field<Short>(dstTcpUdpPort);
598 }
599
600 /**
601 * Disable the matching on destination TCP/UDP port.
602 */
603 public void disableDstTcpUdpPort() {
604 this.dstTcpUdpPort = null;
605 }
606
607 /**
608 * Test if matching on destination TCP/UDP port is enabled.
609 *
610 * @return true if matching on destination TCP/UDP port is enabled.
611 */
612 @JsonProperty("matchDstTcpUdpPort")
613 public boolean matchDstTcpUdpPort() {
614 if (dstTcpUdpPort != null)
615 return dstTcpUdpPort.enabled();
616 return false;
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800617 }
618
619 /**
620 * Convert the matching filter to a string.
621 *
Pavlin Radoslavovad008e02013-02-21 18:42:42 -0800622 * The string has the following form:
Pavlin Radoslavova10a9a82013-02-22 11:47:54 -0800623 * [srcMac=XXX dstMac=XXX srcIPv4Net=XXX dstIPv4Net=XXX]
Pavlin Radoslavovad008e02013-02-21 18:42:42 -0800624 *
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800625 * @return the matching filter as a string.
626 */
627 @Override
628 public String toString() {
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800629 String ret = "[";
630 boolean addSpace = false;
631
632 //
633 // Conditionally add only those matching fields that are enabled
634 //
635 if (matchInPort()) {
636 if (addSpace)
637 ret += " ";
638 addSpace = true;
639 ret += "inPort=" + this.inPort().toString();
640 }
641 if (matchSrcMac()) {
642 if (addSpace)
643 ret += " ";
644 addSpace = true;
645 ret += "srcMac=" + this.srcMac().toString();
646 }
647 if (matchDstMac()) {
648 if (addSpace)
649 ret += " ";
650 addSpace = true;
651 ret += "dstMac=" + this.dstMac().toString();
652 }
653 if (matchVlanId()) {
654 if (addSpace)
655 ret += " ";
656 addSpace = true;
657 ret += "vlanId=" + this.vlanId().toString();
658 }
659 if (matchVlanPriority()) {
660 if (addSpace)
661 ret += " ";
662 addSpace = true;
663 ret += "vlanPriority=" + this.vlanPriority().toString();
664 }
665 if (matchEthernetFrameType()) {
666 if (addSpace)
667 ret += " ";
668 addSpace = true;
669 ret += "ethernetFrameType=" + this.ethernetFrameType().toString();
670 }
671 if (matchIpToS()) {
672 if (addSpace)
673 ret += " ";
674 addSpace = true;
675 ret += "ipToS=" + this.ipToS().toString();
676 }
677 if (matchIpProto()) {
678 if (addSpace)
679 ret += " ";
680 addSpace = true;
681 ret += "ipProto=" + this.ipProto().toString();
682 }
683 if (matchSrcIPv4Net()) {
684 if (addSpace)
685 ret += " ";
686 addSpace = true;
687 ret += "srcIPv4Net=" + this.srcIPv4Net().toString();
688 }
689 if (matchDstIPv4Net()) {
690 if (addSpace)
691 ret += " ";
692 addSpace = true;
693 ret += "dstIPv4Net=" + this.dstIPv4Net().toString();
694 }
695 if (matchSrcTcpUdpPort()) {
696 if (addSpace)
697 ret += " ";
698 addSpace = true;
699 ret += "srcTcpUdpPort=" + this.srcTcpUdpPort().toString();
700 }
701 if (matchDstTcpUdpPort()) {
702 if (addSpace)
703 ret += " ";
704 addSpace = true;
705 ret += "dstTcpUdpPort=" + this.dstTcpUdpPort().toString();
706 }
707
Pavlin Radoslavovad008e02013-02-21 18:42:42 -0800708 ret += "]";
Pavlin Radoslavovede97582013-03-08 18:57:28 -0800709
Pavlin Radoslavov5363c2a2013-02-18 09:55:42 -0800710 return ret;
711 }
712}