[ONOS-3857] BGP Update message builder.

Change-Id: I02d750f662602fc51b090e6beb89d73d5eb36436
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BgpOpenMsgVer4.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BgpOpenMsgVer4.java
index 359eec2..2cc9f7a 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BgpOpenMsgVer4.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BgpOpenMsgVer4.java
@@ -31,6 +31,7 @@
 import org.onosproject.bgpio.types.FourOctetAsNumCapabilityTlv;
 import org.onosproject.bgpio.types.MultiProtocolExtnCapabilityTlv;
 import org.onosproject.bgpio.util.Validation;
+import org.onosproject.bgpio.util.Constants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -293,6 +294,8 @@
         private int bgpId;
         private boolean isLargeAsCapabilityTlvSet = false;
         private boolean isLsCapabilityTlvSet = false;
+        private boolean isFlowSpecCapabilityTlvSet = false;
+        private boolean isVpnFlowSpecCapabilityTlvSet = false;
 
         LinkedList<BgpValueType> capabilityTlv = new LinkedList<>();
 
@@ -322,6 +325,20 @@
                 this.capabilityTlv.add(tlv);
             }
 
+            if (this.isFlowSpecCapabilityTlvSet) {
+                BgpValueType tlv;
+                tlv = new MultiProtocolExtnCapabilityTlv(Constants.AFI_FLOWSPEC_VALUE,
+                                                         RES, Constants.SAFI_FLOWSPEC_VALUE);
+                this.capabilityTlv.add(tlv);
+            }
+
+            if (this.isVpnFlowSpecCapabilityTlvSet) {
+                BgpValueType tlv;
+                tlv = new MultiProtocolExtnCapabilityTlv(Constants.AFI_FLOWSPEC_VALUE,
+                                                         RES, Constants.VPN_SAFI_FLOWSPEC_VALUE);
+                this.capabilityTlv.add(tlv);
+            }
+
             return new BgpOpenMsgVer4(bgpMsgHeader, PACKET_VERSION, this.asNumber, holdTime, this.bgpId,
                        this.capabilityTlv);
         }
@@ -370,6 +387,18 @@
             this.isLsCapabilityTlvSet = isLsCapabilitySet;
             return this;
         }
+
+        @Override
+        public Builder setFlowSpecCapabilityTlv(boolean isFlowSpecCapabilitySet) {
+            this.isFlowSpecCapabilityTlvSet = isFlowSpecCapabilitySet;
+            return this;
+        }
+
+        @Override
+        public Builder setVpnFlowSpecCapabilityTlv(boolean isVpnFlowSpecCapabilitySet) {
+            this.isVpnFlowSpecCapabilityTlvSet = isVpnFlowSpecCapabilitySet;
+            return this;
+        }
     }
 
     @Override