VOL-174: Support configuration of GEMs as per WT-385 and auto-allocation of gemport-ids

 * As an operator, I should be able to provision a GEMPORT object for the ONU and assign to a UNI
 * As an operator, I should be able to retrieve the provisioned GEMPORT

Additional Notes:

 * gemport-ids should be auto-allocated for the GEMPORT object
 * generic IAdapter interface to be provided that will be used by OLT and ONU adapters for GEM port configuration
 * In the best interest of schedules/timing, in the first step(e.g. POC-3 & trial), assume the queueing model to be supported (to be detailed) (i.e. no configuration of queueing model)
 * The concerned OLT and ONU should be configured with the allocated gemport-ids

VOL-173: Support configuration of TCONTs as per WT-385 and auto-allocation of alloc-ids

 * As an operator, I should be able to provision a TCONT for the ONU with an existing traffic descriptor profile
 * As an operator, I should be able to retrieve the provisioned TCONT
 * As an operator, I should be able to change the traffic descriptor profile for a TCONT

Additional Notes:

 * alloc-ids should be allocated for the TCONT
 * generic IAdapter interface to be provided that will be used by OLT and ONU adapters for TCONT/alloc-id/BW configuration
 * In the best interest of schedules/timing, in the first step(e.g. POC-3 & trial), assume the queueing model to be supported (to be detailed) (i.e. no configuration of queueing model)
 * The concerned ONU should receive upstream grants upon provisioning of TCONT for the ONU

Change-Id: If9fa02accaa306409ddb3872c8e46566c74927b0
diff --git a/voltha/protos/bbf_fiber_base.proto b/voltha/protos/bbf_fiber_base.proto
index c8cc400..0534e12 100644
--- a/voltha/protos/bbf_fiber_base.proto
+++ b/voltha/protos/bbf_fiber_base.proto
@@ -10,107 +10,143 @@
 import "bbf_fiber_ontani_body.proto";
 import "bbf_fiber_v_ontani_body.proto";
 import "bbf_fiber_v_enet_body.proto";
+import "bbf_fiber_gemport_body.proto";
+import "bbf_fiber_multicast_distribution_set_body.proto";
+import "bbf_fiber_multicast_gemport_body.proto";
+import "bbf_fiber_tcont_body.proto";
+import "bbf_fiber_traffic_descriptor_profile_body.proto";
 
 message ChannelgroupConfig
 {
-	string id = 1 [(voltha.access) = READ_ONLY];
-	ietf_interfaces.Interface interface = 2;
-	ChannelgroupConfigData data = 3;
-	string name = 4;
+    string id = 1 [(voltha.access) = READ_ONLY];
+    ietf_interfaces.Interface interface = 2;
+    ChannelgroupConfigData data = 3;
+    string name = 4;
 }
 
 message ChannelpartitionConfig
 {
-	string id = 1 [(voltha.access) = READ_ONLY];
-	ietf_interfaces.Interface interface = 2;
-	ChannelpartitionConfigData data = 3;
-	string name = 4;
+    string id = 1 [(voltha.access) = READ_ONLY];
+    ietf_interfaces.Interface interface = 2;
+    ChannelpartitionConfigData data = 3;
+    string name = 4;
 }
 
 message ChannelpairConfig
 {
-	string id = 1 [(voltha.access) = READ_ONLY];
-	ietf_interfaces.Interface interface = 2;
-	ChannelpairConfigData data = 3;
-	string name = 4;
+    string id = 1 [(voltha.access) = READ_ONLY];
+    ietf_interfaces.Interface interface = 2;
+    ChannelpairConfigData data = 3;
+    string name = 4;
 }
 message ChannelpairOper
 {
-	ietf_interfaces.Interface interface = 1;
-	ChannelpairOperData operdata = 2;
-	string name = 3;
+    ietf_interfaces.Interface interface = 1;
+    ChannelpairOperData operdata = 2;
+    string name = 3;
 }
 
 message ChannelterminationConfig
 {
-	string id = 1; // To work around a chameleon POST bug
-	ietf_interfaces.Interface interface = 2;
-	ChannelterminationConfigData data = 3;
-	string name = 4;
+    string id = 1; // To work around a chameleon POST bug
+    ietf_interfaces.Interface interface = 2;
+    ChannelterminationConfigData data = 3;
+    string name = 4;
 }
 message ChannelterminationOper
 {
-	ietf_interfaces.Interface interface = 1;
-	ChannelterminationOperData data = 2;
-	string name = 3;
+    ietf_interfaces.Interface interface = 1;
+    ChannelterminationOperData data = 2;
+    string name = 3;
 }
 
-
 message OntaniConfig
 {
-	string id = 1 [(voltha.access) = READ_ONLY];
-	ietf_interfaces.Interface interface = 2;
-	OntaniConfigData data = 3;
-	string name = 4;
+    string id = 1 [(voltha.access) = READ_ONLY];
+    ietf_interfaces.Interface interface = 2;
+    OntaniConfigData data = 3;
+    string name = 4;
 }
 message OntaniOper
 {
-	ietf_interfaces.Interface interface = 1;
-	OntaniOperData data = 2;
-	string name = 3;
+    ietf_interfaces.Interface interface = 1;
+    OntaniOperData data = 2;
+    string name = 3;
 }
 
 message VOntaniConfig
 {
-	string id = 1 [(voltha.access) = READ_ONLY];
-	ietf_interfaces.Interface interface = 2;
-	VOntaniConfigData data = 3;
-	string name = 4;
+    string id = 1 [(voltha.access) = READ_ONLY];
+    ietf_interfaces.Interface interface = 2;
+    VOntaniConfigData data = 3;
+    string name = 4;
 }
 
 message VEnetConfig
 {
-	string id = 1 [(voltha.access) = READ_ONLY];
-	ietf_interfaces.Interface interface = 2;
-	VEnetConfigData data = 3;
-	string name = 4;
+    string id = 1 [(voltha.access) = READ_ONLY];
+    ietf_interfaces.Interface interface = 2;
+    VEnetConfigData data = 3;
+    string name = 4;
 }
 
 message AllChannelgroupConfig
 {
-	repeated ChannelgroupConfig channelgroup_config = 1 [(voltha.child_node) = {key: "name"}];
+    repeated ChannelgroupConfig channelgroup_config = 1
+        [(voltha.child_node) = {key: "name"}];
 }
 message AllChannelpartitionConfig
 {
-	repeated ChannelpartitionConfig channelpartition_config = 1 [(voltha.child_node) = {key: "name"}];
+    repeated ChannelpartitionConfig channelpartition_config = 1
+        [(voltha.child_node) = {key: "name"}];
 }
 message AllChannelpairConfig
 {
-	repeated ChannelpairConfig channelpair_config = 1 [(voltha.child_node) = {key: "name"}];
+    repeated ChannelpairConfig channelpair_config = 1
+        [(voltha.child_node) = {key: "name"}];
 }
 message AllChannelterminationConfig
 {
-	repeated ChannelterminationConfig channeltermination_config = 1 [(voltha.child_node) = {key: "name"}];
+    repeated ChannelterminationConfig channeltermination_config = 1
+        [(voltha.child_node) = {key: "name"}];
 }
 message AllOntaniConfig
 {
-	repeated OntaniConfig ontani_config = 1 [(voltha.child_node) = {key: "name"}];
+    repeated OntaniConfig ontani_config = 1
+        [(voltha.child_node) = {key: "name"}];
 }
 message AllVOntaniConfig
 {
-	repeated VOntaniConfig v_ontani_config = 1 [(voltha.child_node) = {key: "name"}];
+    repeated VOntaniConfig v_ontani_config = 1
+        [(voltha.child_node) = {key: "name"}];
 }
 message AllVEnetConfig
 {
-	repeated VEnetConfig v_enet_config = 1 [(voltha.child_node) = {key: "name"}];
+    repeated VEnetConfig v_enet_config = 1
+        [(voltha.child_node) = {key: "name"}];
+}
+message AllTrafficDescriptorProfileData
+{
+    repeated TrafficDescriptorProfileData traffic_descriptor_profiles = 1
+        [(voltha.child_node) = {key: "name"}];
+}
+message AllTcontsConfigData
+{
+    repeated TcontsConfigData tconts_config = 1
+        [(voltha.child_node) = {key: "name"}];
+}
+message AllGemportsConfigData
+{
+    repeated GemportsConfigData gemports_config = 1
+        [(voltha.child_node) = {key: "name"}];
+}
+message AllMulticastGemportsConfigData
+{
+    repeated MulticastGemportsConfigData multicast_gemports_config = 1
+        [(voltha.child_node) = {key: "name"}];
+}
+message AllMulticastDistributionSetData
+{
+    repeated MulticastDistributionSetData multicast_distribution_sets = 1
+        [(voltha.child_node) = {key: "name"}];
 }
diff --git a/voltha/protos/bbf_fiber_channelgroup_body.proto b/voltha/protos/bbf_fiber_channelgroup_body.proto
index 2eecc24..400c2f2 100644
--- a/voltha/protos/bbf_fiber_channelgroup_body.proto
+++ b/voltha/protos/bbf_fiber_channelgroup_body.proto
@@ -4,7 +4,7 @@
 import "bbf_fiber_types.proto";
 
 message ChannelgroupConfigData {
-	uint32 polling_period = 1;
-	bbf_fiber_types.RamanMitigationType raman_mitigation = 2;
-	string system_id = 3 ;
+    uint32 polling_period = 1;
+    bbf_fiber_types.RamanMitigationType raman_mitigation = 2;
+    string system_id = 3;
 }
diff --git a/voltha/protos/bbf_fiber_channelpair_body.proto b/voltha/protos/bbf_fiber_channelpair_body.proto
index a66996b..231cd85 100644
--- a/voltha/protos/bbf_fiber_channelpair_body.proto
+++ b/voltha/protos/bbf_fiber_channelpair_body.proto
@@ -3,16 +3,15 @@
 import "bbf_fiber_types.proto";
 
 message ChannelpairConfigData {
-    string channelgroup_ref = 1 ;
-    string channelpartition_ref = 2 ;
-    string channelpair_type = 3 ;
-    string channelpair_linerate = 4 ;
-    uint32 gpon_ponid_interval = 5 ;
+    string channelgroup_ref = 1;
+    string channelpartition_ref = 2;
+    string channelpair_type = 3;
+    string channelpair_linerate = 4;
+    uint32 gpon_ponid_interval = 5;
     bbf_fiber_types.PonIdOdnClassType gpon_ponid_odn_class = 6;
 }
 message ChannelpairOperData {
-    uint32 actual_downstream_lambda = 1 ;
-    bool primary_ct_assigned = 2 ;
-    bool secondary_ct_assigned = 3 ;
+    uint32 actual_downstream_lambda = 1;
+    bool primary_ct_assigned = 2;
+    bool secondary_ct_assigned = 3;
 }
-
diff --git a/voltha/protos/bbf_fiber_channelpartition_body.proto b/voltha/protos/bbf_fiber_channelpartition_body.proto
index 0134b35..58e8d93 100644
--- a/voltha/protos/bbf_fiber_channelpartition_body.proto
+++ b/voltha/protos/bbf_fiber_channelpartition_body.proto
@@ -3,7 +3,7 @@
 import "bbf_fiber_types.proto";
 
 message ChannelpartitionConfigData {
-    string channelgroup_ref = 1 ;
+    string channelgroup_ref = 1;
     bool fec_downstream = 2;
     uint32 closest_ont_distance = 3;
     uint32 differential_fiber_distance = 4;
diff --git a/voltha/protos/bbf_fiber_channeltermination_body.proto b/voltha/protos/bbf_fiber_channeltermination_body.proto
index 2f921d5..892a612 100644
--- a/voltha/protos/bbf_fiber_channeltermination_body.proto
+++ b/voltha/protos/bbf_fiber_channeltermination_body.proto
@@ -2,20 +2,19 @@
 package bbf_fiber;
 
 message ChannelterminationConfigData {
-    string channelpair_ref = 1 ;
-    bool meant_for_type_b_primary_role = 2 ;
-    uint32 ngpon2_twdm_admin_label = 3 ;
-    uint32 ngpon2_ptp_admin_label = 4 ;
-    uint32 xgs_ponid = 5 ;
-    uint32 xgpon_ponid = 6 ;
-    string gpon_ponid = 7 ;
-    string pon_tag = 8 ;
-    uint32 ber_calc_period = 9 ;
-    string location = 10 ;
-    string url_to_reach = 11 ;
+    string channelpair_ref = 1;
+    bool meant_for_type_b_primary_role = 2;
+    uint32 ngpon2_twdm_admin_label = 3;
+    uint32 ngpon2_ptp_admin_label = 4;
+    uint32 xgs_ponid = 5;
+    uint32 xgpon_ponid = 6;
+    string gpon_ponid = 7;
+    string pon_tag = 8;
+    uint32 ber_calc_period = 9;
+    string location = 10;
+    string url_to_reach = 11;
 }
 message ChannelterminationOperData {
-    string ponid_display = 1 ;
-    string type_b_state = 2 ;
+    string ponid_display = 1;
+    string type_b_state = 2;
 }
-
diff --git a/voltha/protos/bbf_fiber_gemport_body.proto b/voltha/protos/bbf_fiber_gemport_body.proto
new file mode 100644
index 0000000..b78d84d
--- /dev/null
+++ b/voltha/protos/bbf_fiber_gemport_body.proto
@@ -0,0 +1,19 @@
+syntax = "proto3";
+package bbf_fiber;
+import "meta.proto";
+import "bbf_fiber_tcont_body.proto";
+
+message GemportsConfigData {
+    string id = 1 [(voltha.access) = READ_ONLY];
+    string name = 2;
+    string itf_ref = 3;
+    uint32 traffic_class = 4;
+    bool aes_indicator = 5;
+    string tcont_ref = 6;
+    uint32 gemport_id = 7 [(voltha.access) = READ_ONLY];
+}
+message GemportsOperData {
+    string id = 1 [(voltha.access) = READ_ONLY];
+    string name = 2;
+    uint32 gemport_id = 3;
+}
diff --git a/voltha/protos/bbf_fiber_multicast_distribution_set_body.proto b/voltha/protos/bbf_fiber_multicast_distribution_set_body.proto
new file mode 100644
index 0000000..525ce11
--- /dev/null
+++ b/voltha/protos/bbf_fiber_multicast_distribution_set_body.proto
@@ -0,0 +1,24 @@
+syntax = "proto3";
+package bbf_fiber;
+import "meta.proto";
+import "bbf_fiber_multicast_gemport_body.proto";
+
+enum AllMulticastVlans
+{
+    ALL_MULTICAST_VLANS = 0;
+}
+
+message VlanList {
+    repeated uint32 multicast_vlan_id = 1;
+}
+
+message MulticastDistributionSetData {
+    string id = 1 [(voltha.access) = READ_ONLY];
+    string name = 2;
+    string multicast_gemport_ref = 3;
+    oneof multicast_vlans
+    {
+        AllMulticastVlans all_multicast_vlans = 4;
+        VlanList vlan_list = 5;
+    };
+}
diff --git a/voltha/protos/bbf_fiber_multicast_gemport_body.proto b/voltha/protos/bbf_fiber_multicast_gemport_body.proto
new file mode 100644
index 0000000..d8d01bc
--- /dev/null
+++ b/voltha/protos/bbf_fiber_multicast_gemport_body.proto
@@ -0,0 +1,12 @@
+syntax = "proto3";
+package bbf_fiber;
+import "meta.proto";
+
+message MulticastGemportsConfigData {
+    string id = 1 [(voltha.access) = READ_ONLY];
+    string name = 2;
+    uint32 gemport_id = 3;
+    string itf_ref = 4;
+    uint32 traffic_class = 5;
+    bool is_broadcast = 6;
+}
diff --git a/voltha/protos/bbf_fiber_ontani_body.proto b/voltha/protos/bbf_fiber_ontani_body.proto
index 35d1d69..b6025ea 100644
--- a/voltha/protos/bbf_fiber_ontani_body.proto
+++ b/voltha/protos/bbf_fiber_ontani_body.proto
@@ -2,10 +2,10 @@
 package bbf_fiber;
 
 message OntaniConfigData {
-        bool upstream_fec_indicator = 1 ;
-        bool mgnt_gemport_aes_indicator = 2 ;
+    bool upstream_fec_indicator = 1;
+    bool mgnt_gemport_aes_indicator = 2;
 }
 message OntaniOperData {
-        uint32 onu_id = 1 ;
-        uint32 channel_partition_id = 2 ;
+    uint32 onu_id = 1;
+    uint32 channel_partition_id = 2;
 }
diff --git a/voltha/protos/bbf_fiber_tcont_body.proto b/voltha/protos/bbf_fiber_tcont_body.proto
new file mode 100644
index 0000000..03f42b0
--- /dev/null
+++ b/voltha/protos/bbf_fiber_tcont_body.proto
@@ -0,0 +1,17 @@
+syntax = "proto3";
+package bbf_fiber;
+import "meta.proto";
+import "bbf_fiber_traffic_descriptor_profile_body.proto";
+
+message TcontsConfigData {
+    string id = 1 [(voltha.access) = READ_ONLY];
+    string name = 2;
+    string interface_reference = 3;
+    string traffic_descriptor_profile_ref = 4;
+    uint32 alloc_id = 5 [(voltha.access) = READ_ONLY];
+}
+message TcontsOperData {
+    string id = 1 [(voltha.access) = READ_ONLY];
+    string name = 2;
+    uint32 alloc_id = 3;
+}
diff --git a/voltha/protos/bbf_fiber_traffic_descriptor_profile_body.proto b/voltha/protos/bbf_fiber_traffic_descriptor_profile_body.proto
new file mode 100644
index 0000000..aa51843
--- /dev/null
+++ b/voltha/protos/bbf_fiber_traffic_descriptor_profile_body.proto
@@ -0,0 +1,21 @@
+syntax = "proto3";
+package bbf_fiber;
+import "meta.proto";
+
+enum AdditionalBwEligibilityIndicatorType
+{
+    ADDITIONAL_BW_ELIGIBILITY_INDICATOR_NONE = 0;
+    ADDITIONAL_BW_ELIGIBILITY_INDICATOR_BEST_EFFORT_SHARING = 1;
+    ADDITIONAL_BW_ELIGIBILITY_INDICATOR_NON_ASSURED_SHARING = 2;
+}
+
+message TrafficDescriptorProfileData {
+    string id = 1 [(voltha.access) = READ_ONLY];
+    string name = 2;
+    uint64 fixed_bandwidth = 3;
+    uint64 assured_bandwidth = 4;
+    uint64 maximum_bandwidth = 5;
+    uint32 priority = 6;
+    uint32 weight = 7;
+    AdditionalBwEligibilityIndicatorType additional_bw_eligibility_indicator = 8;
+}
diff --git a/voltha/protos/bbf_fiber_v_enet_body.proto b/voltha/protos/bbf_fiber_v_enet_body.proto
index 603668c..4817b36 100644
--- a/voltha/protos/bbf_fiber_v_enet_body.proto
+++ b/voltha/protos/bbf_fiber_v_enet_body.proto
@@ -2,5 +2,5 @@
 package bbf_fiber;
 
 message VEnetConfigData {
-	string v_ontani_ref = 1 ;
+    string v_ontani_ref = 1;
 }
diff --git a/voltha/protos/bbf_fiber_v_ontani_body.proto b/voltha/protos/bbf_fiber_v_ontani_body.proto
index 665caf6..ab13163 100644
--- a/voltha/protos/bbf_fiber_v_ontani_body.proto
+++ b/voltha/protos/bbf_fiber_v_ontani_body.proto
@@ -2,11 +2,11 @@
 package bbf_fiber;
 
 message VOntaniConfigData {
-        string parent_ref = 1 ;
-        string expected_serial_number = 2 ;
-        string expected_registration_id = 3 ;
-        string preferred_chanpair = 4 ;
-        string protection_chanpair = 5 ;
-        uint32 upstream_channel_speed = 6 ;
-        uint32 onu_id = 7 ;
+    string parent_ref = 1;
+    string expected_serial_number = 2;
+    string expected_registration_id = 3;
+    string preferred_chanpair = 4;
+    string protection_chanpair = 5;
+    uint32 upstream_channel_speed = 6;
+    uint32 onu_id = 7;
 }
diff --git a/voltha/protos/bbf_fiber_wavelength_profile_body.proto b/voltha/protos/bbf_fiber_wavelength_profile_body.proto
index 5f25f85..30763b6 100644
--- a/voltha/protos/bbf_fiber_wavelength_profile_body.proto
+++ b/voltha/protos/bbf_fiber_wavelength_profile_body.proto
@@ -3,12 +3,14 @@
 import public "meta.proto";
 
 message WavelengthProfileData {
-    string name = 1 ;
-    uint32 upstream_channelid = 2 ;
-    uint32 downstream_channelid = 3 ;
-    uint32 downstream_wavelength = 4 ;
+    string name = 1;
+    uint32 upstream_channelid = 2;
+    uint32 downstream_channelid = 3;
+    uint32 downstream_wavelength = 4;
 }
 
 message WavelengthProfile {
-    repeated WavelengthProfileData wavelength_profile_data = 1 [(voltha.child_node) = {key: "name"}];
+    repeated WavelengthProfileData wavelength_profile_data = 1
+        [(voltha.child_node) = {key: "name"}];
 }
+
diff --git a/voltha/protos/voltha.proto b/voltha/protos/voltha.proto
index ee8c9bd..a79a151 100644
--- a/voltha/protos/voltha.proto
+++ b/voltha/protos/voltha.proto
@@ -23,6 +23,12 @@
 import public "openflow_13.proto";
 import "bbf_fiber.proto";
 import "bbf_fiber_base.proto";
+import "bbf_fiber_gemport_body.proto";
+import "bbf_fiber_multicast_distribution_set_body.proto";
+import "bbf_fiber_multicast_gemport_body.proto";
+import "bbf_fiber_tcont_body.proto";
+import "bbf_fiber_traffic_descriptor_profile_body.proto";
+
 
 option java_package = "org.opencord.voltha";
 option java_outer_classname = "VolthaProtos";
@@ -93,17 +99,40 @@
 
     repeated AlarmFilter alarm_filters = 16 [(child_node) = {key: "id"}];
 
-    repeated bbf_fiber.ChannelgroupConfig channel_groups = 17 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.ChannelgroupConfig channel_groups = 17
+        [(child_node) = {key: "name"}];
 
-    repeated bbf_fiber.ChannelpartitionConfig channel_partitions = 18 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.ChannelpartitionConfig channel_partitions = 18
+        [(child_node) = {key: "name"}];
 
-    repeated bbf_fiber.ChannelpairConfig channel_pairs = 19 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.ChannelpairConfig channel_pairs = 19
+        [(child_node) = {key: "name"}];
 
-    repeated bbf_fiber.OntaniConfig ont_anis = 20 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.OntaniConfig ont_anis = 20
+        [(child_node) = {key: "name"}];
 
-    repeated bbf_fiber.VOntaniConfig v_ont_anis = 21 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.VOntaniConfig v_ont_anis = 21
+        [(child_node) = {key: "name"}];
 
-    repeated bbf_fiber.VEnetConfig v_enets = 22 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.VEnetConfig v_enets = 22
+        [(child_node) = {key: "name"}];
+
+    repeated
+        bbf_fiber.TrafficDescriptorProfileData traffic_descriptor_profiles = 23
+        [(child_node) = {key: "name"}];
+
+    repeated bbf_fiber.TcontsConfigData tconts = 24
+        [(child_node) = {key: "name"}];
+
+    repeated bbf_fiber.GemportsConfigData gemports = 25
+        [(child_node) = {key: "name"}];
+
+    repeated bbf_fiber.MulticastGemportsConfigData multicast_gemports = 26
+        [(child_node) = {key: "name"}];
+
+    repeated
+        bbf_fiber.MulticastDistributionSetData multicast_distibution_sets = 27
+        [(child_node) = {key: "name"}];
 }
 
 message VolthaInstances {
@@ -129,17 +158,40 @@
 
     repeated DeviceGroup device_groups = 15 [(child_node) = {key: "id"}];
 
-    repeated bbf_fiber.ChannelgroupConfig channel_groups = 16 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.ChannelgroupConfig channel_groups = 16
+        [(child_node) = {key: "name"}];
 
-    repeated bbf_fiber.ChannelpartitionConfig channel_partitions = 17 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.ChannelpartitionConfig channel_partitions = 17
+        [(child_node) = {key: "name"}];
 
-    repeated bbf_fiber.ChannelpairConfig channel_pairs = 18 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.ChannelpairConfig channel_pairs = 18
+        [(child_node) = {key: "name"}];
 
-    repeated bbf_fiber.OntaniConfig ont_anis = 19 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.OntaniConfig ont_anis = 19
+        [(child_node) = {key: "name"}];
 
-    repeated bbf_fiber.VOntaniConfig v_ont_anis = 20 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.VOntaniConfig v_ont_anis = 20
+        [(child_node) = {key: "name"}];
 
-    repeated bbf_fiber.VEnetConfig v_enets = 21 [(child_node) = {key: "name"}];
+    repeated bbf_fiber.VEnetConfig v_enets = 21
+        [(child_node) = {key: "name"}];
+
+    repeated
+        bbf_fiber.TrafficDescriptorProfileData traffic_descriptor_profiles = 23
+        [(child_node) = {key: "name"}];
+
+    repeated bbf_fiber.TcontsConfigData tconts = 24
+        [(child_node) = {key: "name"}];
+
+    repeated bbf_fiber.GemportsConfigData gemports = 25
+        [(child_node) = {key: "name"}];
+
+    repeated bbf_fiber.MulticastGemportsConfigData multicast_gemports = 26
+        [(child_node) = {key: "name"}];
+
+    repeated
+        bbf_fiber.MulticastDistributionSetData multicast_distibution_sets = 27
+        [(child_node) = {key: "name"}];
 }
 
 // Device Self Test Response
@@ -412,112 +464,129 @@
     }
 
     // List all Channel Groups
-    rpc GetAllChannelgroupConfig(google.protobuf.Empty) returns(bbf_fiber.AllChannelgroupConfig) {
+    rpc GetAllChannelgroupConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllChannelgroupConfig) {
         option (google.api.http) = {
             get: "/api/v1/channel_groups"
         };
     }
     // Create Channel Group
-    rpc CreateChannelgroup(bbf_fiber.ChannelgroupConfig) returns(google.protobuf.Empty) {
+    rpc CreateChannelgroup(bbf_fiber.ChannelgroupConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/channel_groups/{name}"
             body: "*"
         };
     }
     // Update Channel Group
-    rpc UpdateChannelgroup(bbf_fiber.ChannelgroupConfig) returns(google.protobuf.Empty) {
+    rpc UpdateChannelgroup(bbf_fiber.ChannelgroupConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/channel_groups/{name}/modify"
             body: "*"
         };
     }
     // Delete Channel Group
-    rpc DeleteChannelgroup(bbf_fiber.ChannelgroupConfig) returns(google.protobuf.Empty) {
+    rpc DeleteChannelgroup(bbf_fiber.ChannelgroupConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/channel_groups/{name}/delete"
         };
     }
     // List all channel partitions
-    rpc GetAllChannelpartitionConfig(google.protobuf.Empty) returns(bbf_fiber.AllChannelpartitionConfig) {
+    rpc GetAllChannelpartitionConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllChannelpartitionConfig) {
         option (google.api.http) = {
             get: "/api/v1/channel_partitions"
         };
     }
     // Create a channel partition
-    rpc CreateChannelpartition(bbf_fiber.ChannelpartitionConfig) returns(google.protobuf.Empty) {
+    rpc CreateChannelpartition(bbf_fiber.ChannelpartitionConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/channel_partitions/{name}"
             body: "*"
         };
     }
     // Update a channel partition
-    rpc UpdateChannelpartition(bbf_fiber.ChannelpartitionConfig) returns(google.protobuf.Empty) {
+    rpc UpdateChannelpartition(bbf_fiber.ChannelpartitionConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/channel_partitions/{name}/modify"
             body: "*"
         };
     }
     // Delete a channel partition
-    rpc DeleteChannelpartition(bbf_fiber.ChannelpartitionConfig) returns(google.protobuf.Empty) {
+    rpc DeleteChannelpartition(bbf_fiber.ChannelpartitionConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/channel_partitions/{name}/delete"
         };
     }
 
     // List all channel pairs managed by this Voltha instance
-    rpc GetAllChannelpairConfig(google.protobuf.Empty) returns(bbf_fiber.AllChannelpairConfig) {
+    rpc GetAllChannelpairConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllChannelpairConfig) {
         option (google.api.http) = {
             get: "/api/v1/channel_pairs"
         };
     }
     // Create a channel pair
-    rpc CreateChannelpair(bbf_fiber.ChannelpairConfig) returns(google.protobuf.Empty) {
+    rpc CreateChannelpair(bbf_fiber.ChannelpairConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/channel_pairs/{name}"
             body: "*"
         };
     }
     // Update a channel pair
-    rpc UpdateChannelpair(bbf_fiber.ChannelpairConfig) returns(google.protobuf.Empty) {
+    rpc UpdateChannelpair(bbf_fiber.ChannelpairConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/channel_pairs/{name}/modify"
             body: "*"
         };
     }
     // Delete a channel pair
-    rpc DeleteChannelpair(bbf_fiber.ChannelpairConfig) returns(google.protobuf.Empty) {
+    rpc DeleteChannelpair(bbf_fiber.ChannelpairConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/channel_pairs/{name}/delete"
         };
     }
     // List all channel terminations managed by this Voltha instance
-    rpc GetAllChannelterminationConfig(ID) returns(bbf_fiber.AllChannelterminationConfig) {
+    rpc GetAllChannelterminationConfig(ID)
+            returns(bbf_fiber.AllChannelterminationConfig) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/channel_terminations"
         };
     }
     // Create a channel termination
-    rpc CreateChanneltermination(bbf_fiber.ChannelterminationConfig) returns(google.protobuf.Empty) {
+    rpc CreateChanneltermination(bbf_fiber.ChannelterminationConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/devices/{id}/channel_terminations/{name}"
             body: "*"
         };
     }
     // Update a channel termination
-    rpc UpdateChanneltermination(bbf_fiber.ChannelterminationConfig) returns(google.protobuf.Empty) {
+    rpc UpdateChanneltermination(bbf_fiber.ChannelterminationConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/devices/{id}/channel_terminations/{name}/modify"
             body: "*"
         };
     }
     // Delete a channel termination
-    rpc DeleteChanneltermination(bbf_fiber.ChannelterminationConfig) returns(google.protobuf.Empty) {
+    rpc DeleteChanneltermination(bbf_fiber.ChannelterminationConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/devices/{id}/channel_terminations/{name}/delete"
         };
     }
     // List all ont configs managed by this Voltha instance
-    rpc GetAllOntaniConfig(google.protobuf.Empty) returns(bbf_fiber.AllOntaniConfig) {
+    rpc GetAllOntaniConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllOntaniConfig) {
         option (google.api.http) = {
             get: "/api/v1/ont_anis"
         };
@@ -542,34 +611,36 @@
             delete: "/api/v1/ont_anis/{name}/delete"
         };
     }
-    // List all V ont configs managed by this Voltha instance
-    rpc GetAllVOntaniConfig(google.protobuf.Empty) returns(bbf_fiber.AllVOntaniConfig) {
+    // List all vont configs managed by this Voltha instance
+    rpc GetAllVOntaniConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllVOntaniConfig) {
         option (google.api.http) = {
             get: "/api/v1/v_ont_anis"
         };
     }
-    // Create a v ont configs
+    // Create a vont configs
     rpc CreateVOntani(bbf_fiber.VOntaniConfig) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/v_ont_anis/{name}"
             body: "*"
         };
     }
-    // Update a v ont configs
+    // Update a vont configs
     rpc UpdateVOntani(bbf_fiber.VOntaniConfig) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/v_ont_anis/{name}/modify"
             body: "*"
         };
     }
-    // Delete a v ont configs
+    // Delete a vont configs
     rpc DeleteVOntani(bbf_fiber.VOntaniConfig) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/v_ont_anis/{name}/delete"
         };
     }
     // List all venet configs managed by this Voltha instance
-    rpc GetAllVEnetConfig(google.protobuf.Empty) returns(bbf_fiber.AllVEnetConfig) {
+    rpc GetAllVEnetConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllVEnetConfig) {
         option (google.api.http) = {
             get: "/api/v1/v_enets"
         };
@@ -595,6 +666,170 @@
         };
     }
 
+    // List all Traffic Descriptors Profiles
+    rpc GetAllTrafficDescriptorProfileData(google.protobuf.Empty)
+            returns(bbf_fiber.AllTrafficDescriptorProfileData) {
+        option (google.api.http) = {
+            get: "/api/v1/traffic_descriptor_profiles"
+        };
+    }
+    // Create Traffic Descriptor Profile
+    rpc CreateTrafficDescriptorProfileData(
+            bbf_fiber.TrafficDescriptorProfileData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/traffic_descriptor_profiles/{name}"
+            body: "*"
+        };
+    }
+    // Update Traffic Descriptor Profile
+    rpc UpdateTrafficDescriptorProfileData(
+            bbf_fiber.TrafficDescriptorProfileData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/traffic_descriptor_profiles/{name}/modify"
+            body: "*"
+        };
+    }
+    // Delete Traffic Descriptor Profile
+    rpc DeleteTrafficDescriptorProfileData(
+            bbf_fiber.TrafficDescriptorProfileData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/traffic_descriptor_profiles/{name}/delete"
+        };
+    }
+
+    // List all Tconts
+    rpc GetAllTcontsConfigData(google.protobuf.Empty)
+            returns(bbf_fiber.AllTcontsConfigData) {
+        option (google.api.http) = {
+            get: "/api/v1/tconts"
+        };
+    }
+    // Create Tcont
+    rpc CreateTcontsConfigData(bbf_fiber.TcontsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/tconts/{name}"
+            body: "*"
+        };
+    }
+    // Update Tcont
+    rpc UpdateTcontsConfigData(bbf_fiber.TcontsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/tconts/{name}/modify"
+            body: "*"
+        };
+    }
+    // Delete Tcont
+    rpc DeleteTcontsConfigData(bbf_fiber.TcontsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/tconts/{name}/delete"
+        };
+    }
+
+    // List all Gemports
+    rpc GetAllGemportsConfigData(google.protobuf.Empty)
+            returns(bbf_fiber.AllGemportsConfigData) {
+        option (google.api.http) = {
+            get: "/api/v1/gemports"
+        };
+    }
+    // Create Gemport
+    rpc CreateGemportsConfigData(bbf_fiber.GemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/gemports/{name}"
+            body: "*"
+        };
+    }
+    // Update Gemport
+    rpc UpdateGemportsConfigData(bbf_fiber.GemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/gemports/{name}/modify"
+            body: "*"
+        };
+    }
+    // Delete Gemport
+    rpc DeleteGemportsConfigData(bbf_fiber.GemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/gemports/{name}/delete"
+        };
+    }
+
+    // List all Multicast Gemports
+    rpc GetAllMulticastGemportsConfigData(google.protobuf.Empty)
+            returns(bbf_fiber.AllMulticastGemportsConfigData) {
+        option (google.api.http) = {
+            get: "/api/v1/multicast_gemports"
+        };
+    }
+    // Create Multicast Gemport
+    rpc CreateMulticastGemportsConfigData(
+            bbf_fiber.MulticastGemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/multicast_gemports/{name}"
+            body: "*"
+        };
+    }
+    // Update Multicast Gemport
+    rpc UpdateMulticastGemportsConfigData(
+            bbf_fiber.MulticastGemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/multicast_gemports/{name}/modify"
+            body: "*"
+        };
+    }
+    // Delete Multicast Gemport
+    rpc DeleteMulticastGemportsConfigData(
+            bbf_fiber.MulticastGemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/multicast_gemports/{name}/delete"
+        };
+    }
+
+    // List all Multicast Distribution Sets
+    rpc GetAllMulticastDistributionSetData(google.protobuf.Empty)
+            returns(bbf_fiber.AllMulticastDistributionSetData) {
+        option (google.api.http) = {
+            get: "/api/v1/multicast_distibution_sets"
+        };
+    }
+    // Create Multicast Distribution Set
+    rpc CreateMulticastDistributionSetData(
+            bbf_fiber.MulticastDistributionSetData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/multicast_distribution_sets/{name}"
+            body: "*"
+        };
+    }
+    // Update Multicast Distribution Set
+    rpc UpdateMulticastDistributionSetData(
+            bbf_fiber.MulticastDistributionSetData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/multicast_distribution_sets/{name}/modify"
+            body: "*"
+        };
+    }
+    // Delete Multicast Distribution Set
+    rpc DeleteMulticastDistributionSetData(
+            bbf_fiber.MulticastDistributionSetData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/multicast_distribution_sets/{name}/delete"
+        };
+    }
+
     rpc GetImages(ID) returns(Images) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/images"
@@ -822,112 +1057,129 @@
         };
     }
     // List all channel groups managed by this Voltha instance
-    rpc GetAllChannelgroupConfig(google.protobuf.Empty) returns(bbf_fiber.AllChannelgroupConfig) {
+    rpc GetAllChannelgroupConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllChannelgroupConfig) {
         option (google.api.http) = {
             get: "/api/v1/local/channel_groups"
         };
     }
     // Create a channel group
-    rpc CreateChannelgroup(bbf_fiber.ChannelgroupConfig) returns(google.protobuf.Empty) {
+    rpc CreateChannelgroup(bbf_fiber.ChannelgroupConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/local/channel_groups/{name}"
             body: "*"
         };
     }
     // Update a channel group
-    rpc UpdateChannelgroup(bbf_fiber.ChannelgroupConfig) returns(google.protobuf.Empty) {
+    rpc UpdateChannelgroup(bbf_fiber.ChannelgroupConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/local/channel_groups/{name}/modify"
             body: "*"
         };
     }
     // Delate a channel group
-    rpc DeleteChannelgroup(bbf_fiber.ChannelgroupConfig) returns(google.protobuf.Empty) {
+    rpc DeleteChannelgroup(bbf_fiber.ChannelgroupConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/local/channel_groups/{name}/delete"
         };
     }
     // List all channel partitions managed by this Voltha instance
-    rpc GetAllChannelpartitionConfig(google.protobuf.Empty) returns(bbf_fiber.AllChannelpartitionConfig) {
+    rpc GetAllChannelpartitionConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllChannelpartitionConfig) {
         option (google.api.http) = {
             get: "/api/v1/local/channel_partitions"
         };
     }
     // Create a channel partition
-    rpc CreateChannelpartition(bbf_fiber.ChannelpartitionConfig) returns(google.protobuf.Empty) {
+    rpc CreateChannelpartition(bbf_fiber.ChannelpartitionConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/local/channel_partitions/{name}"
             body: "*"
         };
     }
     // Update a channel partition
-    rpc UpdateChannelpartition(bbf_fiber.ChannelpartitionConfig) returns(google.protobuf.Empty) {
+    rpc UpdateChannelpartition(bbf_fiber.ChannelpartitionConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/local/channel_partitions/{name}/modify"
             body: "*"
         };
     }
     // Delete a channel partition
-    rpc DeleteChannelpartition(bbf_fiber.ChannelpartitionConfig) returns(google.protobuf.Empty) {
+    rpc DeleteChannelpartition(bbf_fiber.ChannelpartitionConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/local/channel_partitions/{name}/delete"
         };
     }
     // List all channel pairs managed by this Voltha instance
-    rpc GetAllChannelpairConfig(google.protobuf.Empty) returns(bbf_fiber.AllChannelpairConfig) {
+    rpc GetAllChannelpairConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllChannelpairConfig) {
         option (google.api.http) = {
             get: "/api/v1/local/channel_pairs"
         };
     }
     // Create a channel pair
-    rpc CreateChannelpair(bbf_fiber.ChannelpairConfig) returns(google.protobuf.Empty) {
+    rpc CreateChannelpair(bbf_fiber.ChannelpairConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/local/channel_pairs/{name}"
             body: "*"
         };
     }
     // Update a channel pair
-    rpc UpdateChannelpair(bbf_fiber.ChannelpairConfig) returns(google.protobuf.Empty) {
+    rpc UpdateChannelpair(bbf_fiber.ChannelpairConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/local/channel_pairs/{name}/modify"
             body: "*"
         };
     }
     // Delete a channel pair
-    rpc DeleteChannelpair(bbf_fiber.ChannelpairConfig) returns(google.protobuf.Empty) {
+    rpc DeleteChannelpair(bbf_fiber.ChannelpairConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/local/channel_pairs/{name}/delete"
         };
     }
 
     // List all channel terminations managed by this Voltha instance
-    rpc GetAllChannelterminationConfig(ID) returns(bbf_fiber.AllChannelterminationConfig) {
+    rpc GetAllChannelterminationConfig(ID)
+            returns(bbf_fiber.AllChannelterminationConfig) {
         option (google.api.http) = {
             get: "/api/v1/local/devices/{id}/channel_terminations"
         };
     }
     // Create a channel termination
-    rpc CreateChanneltermination(bbf_fiber.ChannelterminationConfig) returns(google.protobuf.Empty) {
+    rpc CreateChanneltermination(bbf_fiber.ChannelterminationConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/local/devices/{id}/channel_terminations/{name}"
             body: "*"
         };
     }
     // Update a channel termination
-    rpc UpdateChanneltermination(bbf_fiber.ChannelterminationConfig) returns(google.protobuf.Empty) {
+    rpc UpdateChanneltermination(bbf_fiber.ChannelterminationConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/local/devices/{id}/channel_terminations/{name}/modify"
             body: "*"
         };
     }
     // Delete a channel termination
-    rpc DeleteChanneltermination(bbf_fiber.ChannelterminationConfig) returns(google.protobuf.Empty) {
+    rpc DeleteChanneltermination(bbf_fiber.ChannelterminationConfig)
+            returns(google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/local/devices/{id}/channel_terminations/{name}/delete"
         };
     }
     // List all ont configs managed by this Voltha instance
-    rpc GetAllOntaniConfig(google.protobuf.Empty) returns(bbf_fiber.AllOntaniConfig) {
+    rpc GetAllOntaniConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllOntaniConfig) {
         option (google.api.http) = {
             get: "/api/v1/local/ont_anis"
         };
@@ -952,34 +1204,36 @@
             delete: "/api/v1/local/ont_anis/{name}/delete"
         };
     }
-    // List all V ont configs managed by this Voltha instance
-    rpc GetAllVOntaniConfig(google.protobuf.Empty) returns(bbf_fiber.AllVOntaniConfig) {
+    // List all vont configs managed by this Voltha instance
+    rpc GetAllVOntaniConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllVOntaniConfig) {
         option (google.api.http) = {
             get: "/api/v1/local/v_ont_anis"
         };
     }
-    // Create a v ont configs
+    // Create a vont configs
     rpc CreateVOntani(bbf_fiber.VOntaniConfig) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/local/v_ont_anis/{name}"
             body: "*"
         };
     }
-    // Update a v ont configs
+    // Update a vont configs
     rpc UpdateVOntani(bbf_fiber.VOntaniConfig) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/local/v_ont_anis/{name}/modify"
             body: "*"
         };
     }
-    // Delete a v ont configs
+    // Delete a vont configs
     rpc DeleteVOntani(bbf_fiber.VOntaniConfig) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/local/v_ont_anis/{name}/delete"
         };
     }
     // List all venet configs managed by this Voltha instance
-    rpc GetAllVEnetConfig(google.protobuf.Empty) returns(bbf_fiber.AllVEnetConfig) {
+    rpc GetAllVEnetConfig(google.protobuf.Empty)
+            returns(bbf_fiber.AllVEnetConfig) {
         option (google.api.http) = {
             get: "/api/v1/local/v_enets"
         };
@@ -1004,6 +1258,170 @@
             delete: "/api/v1/local/v_enets/{name}/delete"
         };
     }
+
+    // List all Traffic Descriptor Profiles
+    rpc GetAllTrafficDescriptorProfileData(google.protobuf.Empty)
+            returns(bbf_fiber.AllTrafficDescriptorProfileData) {
+        option (google.api.http) = {
+            get: "/api/v1/local/traffic_descriptor_profiles"
+        };
+    }
+    // Create Traffic Descriptor Profile
+    rpc CreateTrafficDescriptorProfileData(
+            bbf_fiber.TrafficDescriptorProfileData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/local/traffic_descriptor_profiles/{name}"
+            body: "*"
+        };
+    }
+    // Update Traffic Descriptor Profile
+    rpc UpdateTrafficDescriptorProfileData(
+            bbf_fiber.TrafficDescriptorProfileData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/local/traffic_descriptor_profiles/{name}/modify"
+            body: "*"
+        };
+    }
+    // Delete Traffic Descriptor Profile
+    rpc DeleteTrafficDescriptorProfileData(
+            bbf_fiber.TrafficDescriptorProfileData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/local/traffic_descriptor_profiles/{name}/delete"
+        };
+    }
+
+    // List all Tconts
+    rpc GetAllTcontsConfigData(google.protobuf.Empty)
+            returns(bbf_fiber.AllTcontsConfigData) {
+        option (google.api.http) = {
+            get: "/api/v1/local/tconts"
+        };
+    }
+    // Create Tcont
+    rpc CreateTcontsConfigData(bbf_fiber.TcontsConfigData)
+        returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/local/tconts/{name}"
+            body: "*"
+        };
+    }
+    // Update Tcont
+    rpc UpdateTcontsConfigData(bbf_fiber.TcontsConfigData)
+        returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/local/tconts/{name}/modify"
+            body: "*"
+        };
+    }
+    // Delete Tcont
+    rpc DeleteTcontsConfigData(bbf_fiber.TcontsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/local/tconts/{name}/delete"
+        };
+    }
+
+    // List all Gemports
+    rpc GetAllGemportsConfigData(google.protobuf.Empty)
+            returns(bbf_fiber.AllGemportsConfigData) {
+        option (google.api.http) = {
+            get: "/api/v1/local/gemports"
+        };
+    }
+    // Create Gemport
+    rpc CreateGemportsConfigData(bbf_fiber.GemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/local/gemports/{name}"
+            body: "*"
+        };
+    }
+    // Update Gemport
+    rpc UpdateGemportsConfigData(bbf_fiber.GemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/local/gemports/{name}/modify"
+            body: "*"
+        };
+    }
+    // Delete Gemport
+    rpc DeleteGemportsConfigData(bbf_fiber.GemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/local/gemports/{name}/delete"
+        };
+    }
+
+    // List all Multicast Gemports
+    rpc GetAllMulticastGemportsConfigData(google.protobuf.Empty)
+            returns(bbf_fiber.AllMulticastGemportsConfigData) {
+        option (google.api.http) = {
+            get: "/api/v1/local/multicast_gemports"
+        };
+    }
+    // Create Multicast Gemport
+    rpc CreateMulticastGemportsConfigData(
+            bbf_fiber.MulticastGemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/local/multicast_gemports/{name}"
+            body: "*"
+        };
+    }
+    // Update Multicast Gemport
+    rpc UpdateMulticastGemportsConfigData(
+            bbf_fiber.MulticastGemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/local/multicast_gemports/{name}/modify"
+            body: "*"
+        };
+    }
+    // Delete Multicast Gemport
+    rpc DeleteMulticastGemportsConfigData(
+            bbf_fiber.MulticastGemportsConfigData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/local/multicast_gemports/{name}/delete"
+        };
+    }
+
+    // List all Multicast Distribution Sets
+    rpc GetAllMulticastDistributionSetData(google.protobuf.Empty)
+            returns(bbf_fiber.AllMulticastDistributionSetData) {
+        option (google.api.http) = {
+            get: "/api/v1/local/multicast_distibution_sets"
+        };
+    }
+    // Create Multicast Distribution Set
+    rpc CreateMulticastDistributionSetData(
+            bbf_fiber.MulticastDistributionSetData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/local/multicast_distribution_sets/{name}"
+            body: "*"
+        };
+    }
+    // Update Multicast Distribution Set
+    rpc UpdateMulticastDistributionSetData(
+            bbf_fiber.MulticastDistributionSetData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/local/multicast_distribution_sets/{name}/modify"
+            body: "*"
+        };
+    }
+    // Delete Multicast Distribution Set
+    rpc DeleteMulticastDistributionSetData(
+            bbf_fiber.MulticastDistributionSetData)
+            returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/local/multicast_distribution_sets/{name}/delete"
+        };
+    }
     // Stream control packets to the dataplane
     rpc StreamPacketsOut(stream openflow_13.PacketOut)
         returns(google.protobuf.Empty) {