diff --git a/proto/optical_device.proto b/proto/optical_device.proto
new file mode 100644
index 0000000000000000000000000000000000000000..81147ee97af472615cbc1139bb2fda13ef6b0ff2
--- /dev/null
+++ b/proto/optical_device.proto
@@ -0,0 +1,26 @@
+// Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+package optical_device;
+
+import "context.proto";
+
+service OpenConfigService {
+  rpc AddOpenConfigDevice   (context.OpticalConfig) returns (context.OpticalConfigId) {}
+  rpc ConfigureOpticalDevice(context.OpticalConfig) returns (context.Empty          ) {}
+  rpc DisableOpticalDevice(context.OpticalConfig) returns (context.Empty          ) {}
+  rpc GetDeviceConfiguration(context.OpticalConfigList) returns (context.Empty) {}
+  
+}
diff --git a/src/common/tools/object_factory/OpticalLink.py b/src/common/tools/object_factory/OpticalLink.py
new file mode 100644
index 0000000000000000000000000000000000000000..d4d7a330ce67fa2690efe3a0d285a226e3e6e7c3
--- /dev/null
+++ b/src/common/tools/object_factory/OpticalLink.py
@@ -0,0 +1,75 @@
+
+
+def convert_to_dict (single_val:int)->dict:
+    slot= dict()
+    bin_num = bin(single_val)
+    sliced_num=bin_num[2:]
+    for i in range(len(sliced_num)):
+        slot[str(i+1)]=int(sliced_num[i])
+    return slot   
+ 
+
+def order_list (lst:list[tuple])->list:
+
+    if (len(lst)<=1):
+        return lst
+    else :
+        pivot,bit_val =lst[0]
+        lst_smaller = []
+        lst_greater = []
+        for element in lst[1:]:
+            key,val=element
+            if (key <= pivot):
+                lst_smaller.append(element)
+            else :
+                lst_greater.append(element)
+        return order_list(lst_smaller) + [(pivot,bit_val)] + order_list(lst_greater)        
+                
+  
+def list_to_dict (lst:list[tuple[int,int]])->dict:
+    dct = dict()
+    for ele in lst :
+        key,value = ele
+        dct[str(key)]=value
+    return dct    
+        
+            
+def order_dict (dct:dict)->dict:
+   
+    lst = list()  
+    for key,value in sorted(dct.items()):
+        lst.append((int(key),value))
+    ordered_lst= order_list(lst)
+    if (len(ordered_lst)>0):
+        return list_to_dict (ordered_lst)    
+
+def order_dict_v1 (dct:dict)->dict:
+   
+    lst = list()  
+    for key,value in dct.items():
+        lst.append((int(key),value))
+    ordered_lst= order_list(lst)
+    if (len(ordered_lst)>0):
+        return list_to_dict (ordered_lst)        
+      
+def correct_slot (dic:dict):
+    ordered_dict= order_dict_v1(dic)
+    keys_list = list(ordered_dict.keys())
+   
+    if (len(keys_list) < 20):
+        num_keys= []
+        for i in keys_list:
+            num_keys.append(int(i)) 
+                 
+        if num_keys[-1] != 20 :
+            missed_keys=[]
+            diff= 20 - len(num_keys)
+            print(f"diff {diff}")
+            for i in range(diff+1):
+                missed_keys.append(num_keys[-1]+i)
+            print(f"missed_keys {missed_keys}")     
+            for key in missed_keys :
+                ordered_dict[key]=1
+            print(f"result {ordered_dict}")    
+    return order_dict_v1(ordered_dict)                
+                
\ No newline at end of file
diff --git a/src/context/service/database/models/OpticalConfig/OpticalConfigModel.py b/src/context/service/database/models/OpticalConfig/OpticalConfigModel.py
new file mode 100644
index 0000000000000000000000000000000000000000..515a21a8574a2683f41dc3ce2e5d4c5e5ef4027a
--- /dev/null
+++ b/src/context/service/database/models/OpticalConfig/OpticalConfigModel.py
@@ -0,0 +1,74 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json , logging
+from sqlalchemy import Column, String, Integer , ForeignKey, Boolean
+from sqlalchemy.dialects.postgresql import ARRAY
+from sqlalchemy.orm import relationship
+from context.service.database.models._Base import _Base
+from .RoadmModel import RoadmTypeModel
+
+class OpticalConfigModel(_Base):
+    __tablename__ = 'optical_config'
+    opticalconfig_uuid = Column(String, primary_key=True)
+    channel_namespace  = Column(String, nullable=True)
+    endpoints          = Column(ARRAY(String), nullable=True)
+    type               = Column(String,nullable=False)
+    
+    # transcievers       = Column(ARRAY(String), nullable=True)
+    # interfaces         = Column(String, nullable=True)
+  
+   
+    #channels           = relationship("OpticalChannelModel")
+    transponders   = relationship("TransponderTypeModel")
+    roadms         = relationship("RoadmTypeModel")
+    
+    
+    device_uuid = Column(ForeignKey("device.device_uuid",ondelete="CASCADE"),index=True ,nullable=False)
+    device= relationship("DeviceModel",  back_populates='optical_config')
+    
+
+    
+    def dump_id (self ):
+        return {
+            "opticalconfig_uuid":self.opticalconfig_uuid,
+            "device_uuid" :self.device_uuid
+        }
+
+    def dump(self):
+        obj={
+            # "channels"          : [channel.dump() for channel in self.channels],
+            # "transceivers"      : {"transceiver": [transciever for transciever in self.transcievers]},
+            # "interfaces"        : {"interface":json.loads(self.interfaces) if self.interfaces else ''},
+            "channel_namespace" : self.channel_namespace,
+            "endpoints"         : [json.loads(endpoint) for endpoint in self.endpoints if endpoint],
+            "device_name"       : self.device.device_name,
+            "type"              : self.type
+        }
+        if self.type =="optical-transponder" :
+            channels= [transponer.dump() for transponer in self.transponders ][0]
+            obj['channels']=channels['channels'] if 'channels' in channels else None
+            obj['transceivers']=channels['transceivers'] if 'transceivers' in channels else None
+            obj['interfaces']=channels['interfaces'] if 'interfaces' in channels else None
+            obj['trasponder_uuid']=channels['trasponder_uuid'] if 'trasponder_uuid' in channels else None
+            
+        if self.type =="optical-roadm" :
+            channels=[roadms.dump() for roadms in self.roadms ][0]
+            obj['channels']=channels['channels'] if 'channels' in channels else None
+            obj['roadm_uuid']=channels['roadm_uuid'] if 'roadm_uuid' in channels else None
+                
+                        
+            logging.info(f"optical_config_model {obj}")
+        return obj
+        
diff --git a/src/context/service/database/models/OpticalConfig/RoadmModel.py b/src/context/service/database/models/OpticalConfig/RoadmModel.py
new file mode 100644
index 0000000000000000000000000000000000000000..8e37a3cf688d3455c9a7b3bf16862b4c39ef4cb2
--- /dev/null
+++ b/src/context/service/database/models/OpticalConfig/RoadmModel.py
@@ -0,0 +1,81 @@
+
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json , logging
+from sqlalchemy import Column, String, Integer , ForeignKey, Boolean
+from sqlalchemy.dialects.postgresql import ARRAY
+from sqlalchemy.orm import relationship
+from context.service.database.models._Base import _Base
+
+
+
+
+class RoadmTypeModel (_Base):
+    
+    __tablename__             = 'roadm_type'
+    roadm_uuid                = Column(String, primary_key=True)
+
+    channels                  = relationship("ChannelModel")
+    circuits                   = Column (String,nullable=True)
+    
+    opticalconfig_uuid        = Column(ForeignKey('optical_config.opticalconfig_uuid',  ondelete='CASCADE' ),index=True ,nullable=False)
+    opticalconfig             = relationship('OpticalConfigModel',     back_populates='roadms')
+    
+    def dump_id (self): 
+        return {
+            "roadm_uuid":self.roadm_uuid
+        }
+    
+    def dump (self):
+        return {
+            "channels"          : [channel.dump() for channel in self.channels],
+            "roadm_uuid"        : self.dump_id()
+        }
+
+class ChannelModel(_Base):
+    __tablename__               =   'channel'
+    channel_uuid                =   Column(String, primary_key=True)
+    band_name                   =   Column (String,nullable=True)
+    lower_frequency             =   Column(Integer, nullable=True)
+    upper_frequency             =   Column(Integer, nullable=True)
+    channel_index               =   Column(String , nullable=True)
+    status                      =   Column(String , nullable=True)
+    src_port                    =   Column(String, nullable=True)
+    dest_port                   =   Column(String, nullable=True)
+    type                        =   Column(String, nullable=False)
+    optical_band_parent         =   Column(String, nullable=True)
+    
+    roadm_uuid      =       Column(ForeignKey('roadm_type.roadm_uuid', ondelete='CASCADE' ),nullable=False)
+    roadm           =       relationship('RoadmTypeModel',back_populates='channels')
+    # opticalconfig_uuid        = Column(ForeignKey('optical_config.opticalconfig_uuid',         ondelete='CASCADE' ), primary_key=True)
+    # opticalconfig             = relationship('OpticalConfigModel',     back_populates='channels')
+    def dump_id (self ):
+        return {
+            "channel_uuid":self.channel_uuid
+        }
+
+    def dump(self):
+        return {
+            "band_name"      :self.band_name,
+            "lower_frequency"         : self.lower_frequency,
+            "upper_frequency"         : self.upper_frequency,
+            "type"      : self.type,
+            "src_port"  : self.src_port,
+            "dest_port"  : self.dest_port,
+            "status":self.status,
+            "optical_band_parent":self.optical_band_parent,
+            "channel_index":self.channel_index
+        }
+        
diff --git a/src/context/service/database/models/OpticalConfig/TransponderModel.py b/src/context/service/database/models/OpticalConfig/TransponderModel.py
new file mode 100644
index 0000000000000000000000000000000000000000..9a07536b1242711b2dd608579cd492ef8e857663
--- /dev/null
+++ b/src/context/service/database/models/OpticalConfig/TransponderModel.py
@@ -0,0 +1,78 @@
+
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json , logging
+from sqlalchemy import Column, String, Integer , ForeignKey, Boolean
+from sqlalchemy.dialects.postgresql import ARRAY
+from sqlalchemy.orm import relationship
+from context.service.database.models._Base import _Base
+
+
+
+
+
+class TransponderTypeModel (_Base):
+    
+    __tablename__             = 'transponder_type'
+    transponder_uuid          = Column(String, primary_key=True)
+           
+    transcievers              = Column(ARRAY(String), nullable=True)
+    interfaces                = Column(String, nullable=True)
+    channels                  = relationship("OpticalChannelModel")
+    
+    opticalconfig_uuid        = Column(ForeignKey('optical_config.opticalconfig_uuid',  ondelete='CASCADE' ),index=True ,nullable=False)
+    opticalconfig             = relationship('OpticalConfigModel',     back_populates='transponders')
+    
+    def dump_id (self): 
+        return {
+            "transponder_uuid":self.transponder_uuid
+        }
+    
+    def dump (self):
+        return {
+            "channels"          : [channel.dump() for channel in self.channels],
+            "transceivers"      : {"transceiver": [transciever for transciever in self.transcievers]},
+            "interfaces"        : {"interface":json.loads(self.interfaces) if self.interfaces else ''},
+            "trasponder_uuid"   : self.dump_id()
+        }
+
+class OpticalChannelModel(_Base):
+    __tablename__         =      'optical_channel'
+    channel_uuid          =       Column(String, primary_key=True)
+    
+    channel_name          =       Column (String,nullable=True)
+    frequency             =       Column(Integer, nullable=True)
+    operational_mode      =       Column(Integer, nullable=True)
+    status                =       Column(String , nullable=True)
+    target_output_power   =       Column(String, nullable=True)
+    
+    transponder_uuid      =       Column(ForeignKey('transponder_type.transponder_uuid', ondelete='CASCADE' ),nullable=False)
+    transponder           =       relationship('TransponderTypeModel',back_populates='channels')
+    # opticalconfig_uuid        = Column(ForeignKey('optical_config.opticalconfig_uuid',         ondelete='CASCADE' ), primary_key=True)
+    # opticalconfig             = relationship('OpticalConfigModel',     back_populates='channels')
+    def dump_id (self ):
+        return {
+            "channel_uuid":self.channel_uuid
+        }
+
+    def dump(self):
+        return {
+            "name"      :{'index':self.channel_name},
+            "frequency"         : self.frequency,
+            "target-output-power"      : self.target_output_power,
+            "operational-mode"  : self.operational_mode,
+            "status":self.status
+        }
+        
diff --git a/src/context/service/database/models/OpticalConfig/__init__.py b/src/context/service/database/models/OpticalConfig/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..38d04994fb0fa1951fb465bc127eb72659dc2eaf
--- /dev/null
+++ b/src/context/service/database/models/OpticalConfig/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/context/service/database/models/Slot.py b/src/context/service/database/models/Slot.py
new file mode 100644
index 0000000000000000000000000000000000000000..4daca913a72f803167ba52fa5d7d9abfca73390c
--- /dev/null
+++ b/src/context/service/database/models/Slot.py
@@ -0,0 +1,106 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from common.tools.object_factory.OpticalLink import order_dict
+import logging
+
+from sqlalchemy.types import  PickleType , TypeDecorator ,Integer
+
+
+
+class SlotType(TypeDecorator):
+
+    impl = Integer
+
+    def process_bind_param(self, value, dialect):
+       
+        if value is not None:
+           
+            value =order_dict(value)
+
+            bin_num="0b"
+            for i,(key,val) in enumerate(value.items()):
+                bin_num =bin_num + f"{val}"
+           
+            int_num = int(bin_num,2)  
+
+        return int_num
+
+    def process_result_value(self, value, dialect):
+       
+        if value is not None:
+            slot= dict()
+            bin_num = bin(value)
+            sliced_num=bin_num[2:]
+            for i in range(len(sliced_num)):
+                slot[str(i+1)]=int(sliced_num[i])
+        return slot
+    
+    
+class C_Slot (SlotType):
+    start_point=0
+   
+
+        
+    def process_result_value(self, value, dialect):
+               
+        if value is not None:
+            slot= dict()
+            bin_num = bin(value)
+            sliced_num=bin_num[2:]
+            if (len(sliced_num) != 20) :
+                for i in range(0,20 - len(sliced_num)):
+                    sliced_num='0'+sliced_num
+        
+            for i in range(len(sliced_num)):
+                slot[str(self.start_point+i+1)]=int(sliced_num[i])
+                
+        return slot
+    
+    
+class L_Slot (SlotType):
+    start_point=100
+
+
+        
+    def process_result_value(self, value, dialect):
+               
+        if value is not None:
+            slot= dict()
+            bin_num = bin(value)
+            sliced_num=bin_num[2:]
+            if (len(sliced_num) != 20) :
+                for i in range(0,20 - len(sliced_num)):
+                    sliced_num='0'+sliced_num
+            for i in range(len(sliced_num)):
+                slot[str(self.start_point+i+1)]=int(sliced_num[i])
+        return slot
+
+class S_Slot (SlotType):
+    start_point=500
+    
+        
+    def process_result_value(self, value, dialect):
+               
+        if value is not None:
+            slot= dict()
+            bin_num = bin(value)
+            sliced_num=bin_num[2:]
+            if (len(sliced_num) != 20) :
+                for i in range(0,20 - len(sliced_num)):
+                    sliced_num='0'+sliced_num
+            for i in range(len(sliced_num)):
+                slot[str(self.start_point+i+1)]=int(sliced_num[i])
+        return slot
diff --git a/src/device/service/drivers/oc_driver/templates/VPN/common.py b/src/device/service/drivers/oc_driver/templates/VPN/common.py
new file mode 100644
index 0000000000000000000000000000000000000000..a1ad52ab7947c085700c0d558882358609e70aeb
--- /dev/null
+++ b/src/device/service/drivers/oc_driver/templates/VPN/common.py
@@ -0,0 +1,53 @@
+
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from yattag import Doc, indent
+import logging
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+def seperate_port_config(resources:list,unwanted_keys=[])->list[list,dict,str]:
+    config=[]
+    ports={}
+    index=None
+    for item in resources :
+        if len(unwanted_keys)>0:
+            if (item['value'] is not None and (item['resource_key']  not in unwanted_keys)):
+                config.append({'resource_key':item['resource_key'], 'value':item['value']} )
+        #if (item['resource_key'] == 'destination_port' or item['resource_key'] == 'source_port') and item['value'] is not None:
+        #     ports[item['resource_key']]=item['value']
+        if (item['resource_key'] == 'destination_port' or item['resource_key'] == 'source_port'):
+            ports[item['resource_key']]=item['value']
+        if (item['resource_key']=='index' and item['value'] is not None)     :
+            index=item['value']
+      
+    return [config,ports,index]
+
diff --git a/src/device/service/drivers/oc_driver/templates/VPN/roadms.py b/src/device/service/drivers/oc_driver/templates/VPN/roadms.py
new file mode 100644
index 0000000000000000000000000000000000000000..4e3c24291c7f52af25e5d022ddab0858f42facd1
--- /dev/null
+++ b/src/device/service/drivers/oc_driver/templates/VPN/roadms.py
@@ -0,0 +1,193 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+
+from yattag import Doc, indent
+import logging
+from .common  import seperate_port_config
+
+
+
+
+def create_media_channel (resources):
+        optical_band_namespaces="http://flex-scale-project.eu/yang/flex-scale-mg-on"
+        results=[]
+        unwanted_keys=['destination_port','source_port','channel_namespace','frequency','operational-mode']
+        config,ports,index= seperate_port_config(resources,unwanted_keys=unwanted_keys)
+
+        doc, tag, text = Doc().tagtext()
+        #with tag('config'):
+        with tag('config',xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"):
+            with tag('wavelength-router', xmlns="http://openconfig.net/yang/wavelength-router"):
+                with tag('media-channels'):
+                    n = 0
+                    if 'destination_port' in ports:
+                        n = len(ports['destination_port'])
+                    else:
+                        n = len(ports['source_port'])
+                    for i in range(0, n):
+                        #with tag('channel', operation="create"):
+                        with tag('channel'):
+                            with tag('index'):text(str(int(index)+i))
+                            with tag('config'):
+                                #with tag('index'):text(index)
+                                for resource in config:
+                                   
+                                    if resource['resource_key'] == "index":
+                                        with tag('index'):text(str(int(index)+i))
+                                    elif resource['resource_key']== 'optical-band-parent'    :
+                                        with tag('optical-band-parent',xmlns=optical_band_namespaces):text(resource['value'])
+                                    else:
+                                        with tag(resource['resource_key']):text(resource['value'])
+                            if ('destination_port' in ports) and (ports['destination_port'][i] is not None):         
+                                with tag('dest'):
+                                    with tag('config'):  
+                                        with tag('port-name'):text(ports['destination_port'][i])   
+                            if ('source_port' in ports) and (ports['source_port'][i] is not None):                    
+                                with tag('source'):
+                                        with tag('config'):  
+                                            with tag('port-name'):text(ports['source_port'][i])     
+                            
+                            
+        result = indent(
+                    doc.getvalue(),
+                    indentation = ' '*2,
+                    newline = ''
+                )
+        results.append(result)
+        return results
+             
+                
+
+
+def create_optical_band (resources) :
+    results =[]
+    unwanted_keys=['destination_port','source_port','channel_namespace','frequency','optical-band-parent']
+    config,ports,index= seperate_port_config(resources,unwanted_keys=unwanted_keys)
+  
+    doc, tag, text = Doc().tagtext()
+    #with tag('config'):
+    with tag('config',xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"):
+      with tag('wavelength-router', xmlns="http://openconfig.net/yang/wavelength-router"):
+        with tag('optical-bands',xmlns="http://flex-scale-project.eu/yang/flex-scale-mg-on"):
+            n = 0
+            if 'destination_port' in ports:
+                n = len(ports['destination_port'])
+            else:
+                n = len(ports['source_port'])
+            for i in range(0, n):
+                #with tag('optical-band', operation="create"):
+                with tag('optical-band'):
+                    if index is not None:
+                        with tag('index'):text(str(int(index)+i))
+                    with tag('config'):
+                        #if index is not None:
+                        #    with tag('index'):text(str(int(index)+i))
+                        for resource in config:       
+                            if resource['resource_key'] == "index":
+                                with tag('index'):text(str(int(index)+i))
+                            else:
+                                with tag(resource['resource_key']):text(resource['value'])
+                        with tag('admin-status'):text('ENABLED')       
+                        #with tag('fiber-parent'):text(ports['destination_port'] if 'destination_port' in ports else ports['source_port'])       
+                    if ('destination_port' in ports) and (ports['destination_port'][i] is not None):        
+                        with tag('dest'):
+                            with tag('config'):
+                                with tag('port-name'):text(ports['destination_port'][i])
+                    if ('source_port' in ports) and (ports['source_port'][i] is not None):        
+                        with tag('source'):
+                            with tag('config'):  
+                                with tag('port-name'):text(ports['source_port'][i])   
+                            
+                                
+    result = indent(
+                doc.getvalue(),
+                indentation = ' '*2,
+                newline = ''
+            )
+    results.append(result)
+    return results
+
+
+def disable_media_channel (resources):
+    
+    results=[]
+    unwanted_keys=['destination_port','source_port','channel_namespace','frequency','operational-mode', 'optical-band-parent']
+    config,ports,index= seperate_port_config(resources,unwanted_keys=unwanted_keys)
+    
+    doc, tag, text = Doc().tagtext()
+    #with tag('config'):
+    with tag('config',xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"):
+      with tag('wavelength-router', xmlns="http://openconfig.net/yang/wavelength-router"):
+        with tag('media-channels'):
+            with tag("channel",operation="delete"):
+                with tag('index'):text(str(int(index)))
+                with tag('config'):
+                    with tag('index'):text(str(int(index)))
+                            
+    result = indent(
+                doc.getvalue(),
+                indentation = ' '*2,
+                newline = ''
+            )
+    results.append(result)
+    return results
+                        
+def disable_optical_band (resources:list,state:str):
+    results=[]
+    unwanted_keys=['destination_port','source_port','channel_namespace','frequency','operational-mode', 'optical-band-parent']
+    config,ports,index= seperate_port_config(resources,unwanted_keys=unwanted_keys)
+    doc, tag, text = Doc().tagtext()
+    #with tag('config'):
+    with tag('config',xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"):
+      with tag('wavelength-router', xmlns="http://openconfig.net/yang/wavelength-router"):
+        with tag('optical-bands',xmlns="http://flex-scale-project.eu/yang/flex-scale-mg-on"):
+            with tag('optical-band'):
+                if index is not None:
+                    with tag('index'):text(index)
+                with tag('config'):
+                    with tag('index'):text(index)
+                    with tag('admin-status'):text(state)  
+    result = indent(
+                doc.getvalue(),
+                indentation = ' '*2,
+                newline = ''
+            )
+    results.append(result)
+    return results                          
+
+
+def delete_optical_band (resources:list):
+    results=[]
+    unwanted_keys=['destination_port','source_port','channel_namespace','frequency','operational-mode', 'optical-band-parent']
+    config,ports,index= seperate_port_config(resources,unwanted_keys=unwanted_keys)
+    doc, tag, text = Doc().tagtext()
+    #with tag('config'):
+    with tag('config',xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"):
+      with tag('wavelength-router', xmlns="http://openconfig.net/yang/wavelength-router"):
+        with tag('optical-bands',xmlns="http://flex-scale-project.eu/yang/flex-scale-mg-on"):
+            with tag('optical-band',operation="delete"):
+                if index is not None:
+                    with tag('index'):text(index)
+                with tag('config'):
+                    with tag('index'):text(index)
+                   
+    result = indent(
+                doc.getvalue(),
+                indentation = ' '*2,
+                newline = ''
+            )
+    results.append(result)
+    return results                          
\ No newline at end of file
diff --git a/src/device/service/drivers/oc_driver/templates/VPN/transponder.py b/src/device/service/drivers/oc_driver/templates/VPN/transponder.py
new file mode 100644
index 0000000000000000000000000000000000000000..0ec952e7444706bc1a20557c4e5ebe7912029546
--- /dev/null
+++ b/src/device/service/drivers/oc_driver/templates/VPN/transponder.py
@@ -0,0 +1,159 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+
+
+from yattag import Doc, indent
+import logging
+
+from .common  import seperate_port_config
+
+def add_transceiver (transceiver_name:str):
+ 
+    doc, tag, text = Doc().tagtext()
+    with tag('config',xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"):
+        with tag('components', xmlns="http://openconfig.net/yang/platform"):
+            with tag('component'):
+                with tag('name'):text(transceiver_name)
+                with tag("config"):
+                    with tag('name'):text(transceiver_name)
+                with tag("state"):
+                    with tag('name'):text(transceiver_name) 
+                    with tag("type",('xmlns:oc-platform-types',"http://openconfig.net/yang/platform-types")):text("oc-platform-types:TRANSCEIVER")
+                with tag("transceiver",xmlns="http://openconfig.net/yang/platform/transceiver"):
+                    with tag("config"):
+                        with tag("enabled"):text("true")
+                        with tag("form-factor-preconf",("xmlns:oc-opt-types","http://openconfig.net/yang/transport-types")):text("oc-opt-types:QSFP56_DD_TYPE1")
+                        with tag("ethernet-pmd-preconf",("xmlns:oc-opt-types","http://openconfig.net/yang/transport-types")):text("oc-opt-types:ETH_400GBASE_ZR")
+                        with tag("fec-mode",("xmlns:oc-platform-types","http://openconfig.net/yang/platform-types")):text("oc-platform-types:FEC_AUTO")
+                        with tag("module-functional-type",("xmlns:oc-opt-types","http://openconfig.net/yang/transport-types")):text("oc-opt-types:TYPE_DIGITAL_COHERENT_OPTIC")
+                    with tag("state"):
+                        with tag("enabled"):text("true")
+                        with tag("form-factor-preconf",("xmlns:oc-opt-types","http://openconfig.net/yang/transport-types")):text("oc-opt-types:QSFP56_DD_TYPE1")
+                        with tag("ethernet-pmd-preconf",("xmlns:oc-opt-types","http://openconfig.net/yang/transport-types")):text("oc-opt-types:ETH_400GBASE_ZR")
+                        with tag("fec-mode",("xmlns:oc-platform-types","http://openconfig.net/yang/platform-types")):text("oc-platform-types:FEC_AUTO")
+                        with tag("module-functional-type",("xmlns:oc-opt-types","http://openconfig.net/yang/transport-types")):text("oc-opt-types:TYPE_DIGITAL_COHERENT_OPTIC")
+                        with tag("vendor"):text("Cisco")
+                        with tag("vendor-part"):text("400zr-QSFP-DD")
+                        with tag("vendor-rev"):text("01")
+                        with tag("serial-no"):text("1567321")
+                    with tag("physical-channels"):
+                        with tag("channel"):
+                            with tag("index"):text("1")
+                            with tag("config"):
+                                with tag("index"):text("1")
+                                with tag("associated-optical-channel"):text("channel-4")    
+    result = indent(
+                doc.getvalue(),
+                indentation = ' '*2,
+                newline = ''
+            )
+         
+   
+    return result               
+    
+
+def create_optical_channel(resources:list[dict],ports:list[dict],config:list[dict] ):
+  
+    #unwanted_keys=['destination_port','source_port','channel_namespace','optical-band-parent','index', 'name','admin-state']
+    results =[]
+    data ={}
+    data["channel_namespace"]=next((i["value"] for i in resources if i["resource_key"] == "channel_namespace"), None)
+    #config,ports,index=seperate_port_config(resources,unwanted_keys=unwanted_keys)
+    logging.info(f"ports are {ports}")
+    port_val = ""
+    if 'destination_port' in ports and ports['destination_port'][0] is not None:
+        port_val = ports['destination_port'][0]
+    else:
+        port_val = ports['source_port'][0]
+
+    
+    doc, tag, text = Doc().tagtext()
+    #with tag('config'):
+    with tag('config',xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"):
+        with tag('components', xmlns="http://openconfig.net/yang/platform"):
+            with tag('component'):
+                with tag('name'):text("channel-{}".format(port_val))
+                with tag('config'):
+                    with tag('name'):text("channel-{}".format(port_val))
+                with tag('optical-channel',xmlns=data["channel_namespace"]):
+                    with tag('config'):
+                        for resource in config:
+                            with tag(resource['resource_key']):text(resource['value'])
+        with tag('terminal-device', xmlns="http://openconfig.net/yang/terminal-device"):
+            with tag('logical-channels'):
+                with tag('channel'):
+                    with tag('index'):text("{}".format(port_val))
+                    with tag('config'):
+                        with tag('index'):text("{}".format(port_val))
+                        with tag('admin-state'):text("ENABLED")
+    result = indent(
+        doc.getvalue(),
+        indentation = ' '*2,
+        newline = ''
+    )
+    results.append(result)
+
+
+    return results
+
+
+def change_optical_channel_status (state:str,ports:list[dict]) :
+    port_val=""
+    if 'destination_port' in ports and ports['destination_port'][0] is not None:
+        port_val = ports['destination_port'][0]
+    else:
+        port_val = ports['source_port'][0]
+
+    results=[]
+    doc, tag, text = Doc().tagtext()
+    #with tag('config'):
+    with tag('config',xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"):
+      
+        with tag('terminal-device',xmlns="http://openconfig.net/yang/terminal-device"):
+            with tag("logical-channels"):
+                with tag('channel'):
+                    with tag('index'):text("{}".format(port_val))
+                    with tag('config'):
+                        with tag('admin-state'):text("{}".format(state))
+                       
+    result = indent(
+        doc.getvalue(),
+        indentation = ' '*2,
+        newline = ''
+    )
+    results.append(result)
+
+
+    return results
+
+
+def edit_optical_channel (resources:list[dict]):
+    logging.info(f"building xml {resources}")
+    unwanted_keys=['destination_port','source_port','channel_namespace','optical-band-parent','index', 'name','admin-state']
+    config,ports,index=seperate_port_config(resources,unwanted_keys=unwanted_keys)
+    results = []
+    # channel_name=next((i["value"] for i in resources if i["resource_key"]=="channel_name" and i["value"] != None),None)
+    # admin_state= next((i["value"] for i in resources if i["resource_key"]== "admin-state" and i["value"] != None) , None)
+    
+    # logging.info(f"channel_name {channel_name}")
+
+    # results.extend(change_optical_channel_status(state=admin_state,ports=ports))
+    # else :    
+    logging.info(f"config_xml {config}")   
+    logging.info(f"ports_xml {ports}") 
+    results.extend(create_optical_channel(resources=resources,ports=ports,config=config)  )
+    
+    return results                  
\ No newline at end of file
diff --git a/src/device/service/drivers/oc_driver/templates/descovery_tool/roadms.py b/src/device/service/drivers/oc_driver/templates/descovery_tool/roadms.py
new file mode 100644
index 0000000000000000000000000000000000000000..00276b01fca98024198bbe802cf504379408b27e
--- /dev/null
+++ b/src/device/service/drivers/oc_driver/templates/descovery_tool/roadms.py
@@ -0,0 +1,294 @@
+  
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import re,logging
+import json
+import lxml.etree as ET
+from typing import Collection, Dict, Any
+
+
+
+
+
+def extract_channel_xmlns (data_xml:str,is_opticalband:bool):
+    xml_bytes = data_xml.encode("utf-8")
+    root = ET.fromstring(xml_bytes) 
+ 
+    namespace=None
+    channels=None
+  
+    if (not is_opticalband) :
+      
+        optical_channel_namespaces = {
+        'ns': 'urn:ietf:params:xml:ns:netconf:base:1.0',
+          'oc': 'http://openconfig.net/yang/platform',
+        }
+       
+        channels= root.find('.//{*}optical-channel',optical_channel_namespaces)
+        if channels is not None :
+          optical_channel_namespace = channels.tag.replace("optical-channel", "")
+          namespace=optical_channel_namespace.replace("{", "").replace("}", "")
+    else :       
+        optical_band_namespaces= {
+          'oc':'http://openconfig.net/yang/wavelength-router'
+        }
+        
+        channels= root.find('.//{*}optical-bands',optical_band_namespaces)
+        if channels is not None: 
+          optical_channel_namespace = channels.tag.replace("optical-bands", "")
+          namespace=optical_channel_namespace.replace("{", "").replace("}", "")
+        
+   
+    return namespace
+
+
+
+def extract_optical_bands (data_xml:str,namespace:str):
+    namespaces={"oc":namespace}
+    xml_bytes = data_xml.encode("utf-8")
+    root = ET.fromstring(xml_bytes) 
+    op_bands=[]
+    optical_bands= root.find('.//oc:optical-bands',namespaces)
+    logging.info(f'optical_bands {optical_bands}')
+    if optical_bands is not None :
+        optical_bands_ele= optical_bands.findall('.//oc:optical-band',namespaces)
+     
+        
+        for optical_band in optical_bands_ele:
+            
+            band_ele=optical_band.find('.//oc:name',namespaces)
+            lower_freq_ele=optical_band.find('.//oc:lower-frequency',namespaces)
+            upper_freq_ele=optical_band.find('.//oc:upper-frequency',namespaces)
+            admin_status_ele=optical_band.find('.//oc:admin-status',namespaces)
+            source_ele=optical_band.find('.//oc:source/oc:config/oc:port-name',namespaces)
+            dest_ele=optical_band.find('.//oc:dest/oc:config/oc:port-name',namespaces)
+            channel_index= optical_band.find('.//oc:index',namespaces)
+            op_band_obj={
+                'band_name':band_ele.text if band_ele is not None else None,
+                'lower_frequency':lower_freq_ele.text if lower_freq_ele is not None else None,
+                'upper_frequency':upper_freq_ele.text if upper_freq_ele is not None else None,
+                'status':admin_status_ele.text if admin_status_ele is not None else None,
+                'src_port':source_ele.text if source_ele is not None else None,
+                'dest_port':dest_ele.text if dest_ele is not None else None,
+                "channel_index":channel_index.text if channel_index is not None else None
+            }
+            op_bands.append(op_band_obj)
+        
+    return op_bands
+        
+def extract_media_channels (data_xml:str):
+    optical_band_namespaces="http://flex-scale-project.eu/yang/flex-scale-mg-on"
+    namespaces={"oc":"http://openconfig.net/yang/wavelength-router",'ob_parent':optical_band_namespaces}
+    xml_bytes = data_xml.encode("utf-8")
+    root = ET.fromstring(xml_bytes) 
+    media_channels= root.find(f'.//oc:media-channels',namespaces)
+    op_bands=[]
+    if media_channels is not None :
+        media_channels_ele= media_channels.findall('.//oc:channel',namespaces)
+
+        for optical_band in media_channels_ele:
+            
+            band_ele=optical_band.find('.//oc:name',namespaces)
+            lower_freq_ele=optical_band.find('.//oc:lower-frequency',namespaces)
+            upper_freq_ele=optical_band.find('.//oc:upper-frequency',namespaces)
+            admin_status_ele=optical_band.find('.//oc:admin-status',namespaces)
+            source_ele=optical_band.find('.//oc:source/oc:config/oc:port-name',namespaces)
+            dest_ele=optical_band.find('.//oc:dest/oc:config/oc:port-name',namespaces)
+            ob_parent=optical_band.find('.//ob_parent:optical-band-parent',namespaces)
+            channel_index= optical_band.find('.//oc:index',namespaces)
+            op_band_obj={
+                'band_name':band_ele.text if band_ele is not None else None,
+                'lower_frequency':lower_freq_ele.text if lower_freq_ele is not None else None,
+                'upper_frequency':upper_freq_ele.text if upper_freq_ele is not None else None,
+                'status':admin_status_ele.text if admin_status_ele is not None else None,
+                'src_port':source_ele.text if source_ele is not None else None,
+                'dest_port':dest_ele.text if dest_ele is not None else None,
+                'optical_band_parent':ob_parent.text if ob_parent is not None else None,
+                'channel_index':channel_index.text if channel_index is not None else None
+            }
+            op_bands.append(op_band_obj)
+        
+    return op_bands
+              
+        
+  
+
+def extract_roadm_ports (xml_data:str):
+  
+    ports =[]
+    pattern = r'\bMG_ON_OPTICAL_PORT_WAVEBAND\b'
+    xml_bytes = xml_data.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+    with open('xml.log', 'w') as f:
+         print(xml_bytes, file=f)
+    
+
+    namespace = {'oc': 'http://openconfig.net/yang/platform'}
+    ports = []
+    components = root.findall('.//oc:component',namespace)
+    print(f"component {components}")
+    
+    
+    for component  in components:
+       
+        properties = component.find(".//oc:properties",namespace)
+       
+        if (properties is not None):
+            for property in properties :
+                value = property.find(".//oc:value",namespace)
+              
+                if (re.search(pattern,value.text)):
+                    name_element= component.find(".//oc:name",namespace)
+                    ports.append(name_element.text)
+    return ports                
+
+
+
+  
+def roadm_values_extractor (data_xml:str,resource_keys:list,dic:dict):
+     ports_result=[]
+     ports = extract_roadm_ports(data_xml)
+     namespcae= extract_channel_xmlns(data_xml,True)
+     optical_bands=extract_optical_bands(data_xml=data_xml,namespace=namespcae)
+     media_cahannels=extract_media_channels(data_xml)
+     
+     
+     if len(ports)>0 :
+      for port in ports :
+        
+        resource_key = '/endpoints/endpoint[{:s}]'.format(port)
+        resource_value = {'uuid': port, 'type':'MG_ON_OPTICAL_PORT_WAVEBAND'}
+        ports_result.append((resource_key, resource_value))
+      
+     return [ports_result,optical_bands,media_cahannels]   
+ 
+ 
+ 
+ #/////////////// OpenRoadm //////////////
+ 
+ 
+def extract_roadm_circuits_pack (xml_data:str):
+  
+   
+    xml_bytes = xml_data.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+    # with open('xml.log', 'w') as f:
+    #      print(xml_bytes, file=f)
+    
+    
+    namespace = {'oc': "http://org/openroadm/device"}
+    
+    circuits = root.findall('.//oc:circuit-packs',namespace)
+  
+    circuits_list =[]
+    # print(f"component {components}")
+    
+    if (circuits is not None):
+        for circuit  in circuits:
+            circuit_info ={}
+            circuit_ports=[]
+            circuit_name = circuit.find(".//oc:circuit-pack-name",namespace)
+            circuit_type=circuit.find(".//oc:circuit-pack-type",namespace)
+            circuit_adminstrative_status=circuit.find(".//oc:administrative-state",namespace)
+            circuit_equipment_state=circuit.find("./oc:equipment-state",namespace)
+            circuit_mode=circuit.find("./oc:circuit-pack-mode",namespace)
+            slot= circuit.find("./oc:slot",namespace)
+            shelf= circuit.find("./oc:shelf",namespace)
+            ports = circuit.findall("./oc:ports",namespace)
+           
+            
+            if (ports is not None):
+                
+                for port in ports :
+                    port_info={}
+                    port_name=port.find('./oc:port-name',namespace)
+                    port_qual= port.find("./oc:port-qual",namespace)
+                   
+                    if port_name is not None :
+                        port_info["port_name"]=port_name.text
+                    if port_qual is not None :
+                        port_info["port_qual"]=port_qual.text
+    
+                    circuit_ports.append(port_info)            
+            if (circuit_name is not None):
+                circuit_info["circuit_name"]=circuit_name.text
+            if (circuit_type is not None):
+                circuit_info["circuit_type"]=circuit_type.text
+            if (circuit_adminstrative_status is not None):
+                circuit_info["circuit_adminstrative_status"]=circuit_adminstrative_status.text
+            if (circuit_equipment_state is not None):
+                circuit_info["circuit_equipment_state"]=circuit_equipment_state.text
+            if (circuit_mode is not None):
+                circuit_info["circuit_mode"]=circuit_mode.text
+            if (slot is not None):
+                circuit_info["slot"]=slot.text
+            if (shelf is not None):
+                circuit_info["shelf"]=shelf.text
+            logging.info(f"circuit_ports {circuit_ports}")        
+            circuit_info["ports"]=circuit_ports 
+                                   
+            circuits_list.append(circuit_info)   
+          
+        
+   
+    return circuits_list            
+
+
+
+def extract_openroadm_info(xml_data:str):
+    roadm_info={"node-id":None,"node-number":None,"node-type":None,'clli':None}
+    xml_bytes = xml_data.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+    namespace = {'oc': "http://org/openroadm/device"}
+    info = root.findall('.//oc:info',namespace)
+    if info is not None :
+        for i in info :
+            node_id= i.find('.//oc:node-id',namespace)
+            node_number= i.find('.//oc:node-number',namespace)
+            node_type=i.find('.//oc:node-type',namespace)
+            clli=i.find('.//oc:clli',namespace)
+            if (node_id is not None):
+                roadm_info['node-id']=node_id.text
+            if (node_number is not None):
+                roadm_info['node-number']=node_number.text
+            if (node_type is not None):
+                roadm_info['node-type']=node_type.text
+            if (clli is not None):
+                roadm_info['clli']=clli.text
+ 
+    return roadm_info             
+
+def  openroadm_values_extractor (data_xml:str,resource_keys:list,dic:dict):
+    ports_result=[]
+    openroadm_info= extract_openroadm_info(data_xml)
+    circuits_list = extract_roadm_circuits_pack(data_xml)
+    dic["openroadm_info"]=openroadm_info
+    dic["circuits"]=circuits_list
+    
+    for circuit in circuits_list :
+ 
+        for port in circuit['ports']:
+            if port is not None and  'port_name' in port :
+                resource_key = '/endpoints/endpoint[{:s}]'.format(port["port_name"])
+                resource_value = {'uuid': port["port_name"], 'type':port["port_qual"] if "port_qual" in port else None}
+                ports_result.append((resource_key, resource_value))
+    return [dic,ports_result]            
+    
+    
+    
+    
+    
+    
+              
\ No newline at end of file
diff --git a/src/device/service/drivers/oc_driver/templates/descovery_tool/transponders.py b/src/device/service/drivers/oc_driver/templates/descovery_tool/transponders.py
new file mode 100644
index 0000000000000000000000000000000000000000..892ef98dc1f001a859b5ad8e102218607e204540
--- /dev/null
+++ b/src/device/service/drivers/oc_driver/templates/descovery_tool/transponders.py
@@ -0,0 +1,302 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import re,logging
+import json
+import lxml.etree as ET
+from typing import Collection, Dict, Any
+
+
+
+def add_value_from_tag(target : Dict, field_name: str, field_value : ET.Element, cast=None) -> None:
+    if isinstance(field_value,str) or field_value is None or field_value.text is None: return
+    field_value = field_value.text
+    if cast is not None: field_value = cast(field_value)
+    target[field_name] = field_value
+
+def add_value_from_collection(target : Dict, field_name: str, field_value : Collection) -> None:
+    if field_value is None or len(field_value) == 0: return
+    target[field_name] = field_value
+
+
+def generate_templates(resource_key: str, resource_value: str, channel:str) -> str:    # template management to be configured
+
+    result_templates = []
+    data={}
+    data['name']=channel
+    data['resource_key']=resource_key
+    data['value']=resource_value
+    #result_templates.append(create_physical_config(data))
+
+    return result_templates
+
+
+def extract_status (dic:dict,resource_key:str,xml_data:str,channel_name:str):
+    
+    xml_bytes = xml_data.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+    channel_name=channel_name if 'index'  not in channel_name else channel_name['index']
+    index=None
+    if channel_name.find('-') != -1 :
+        index= channel_name.split("-")[1]
+    
+   
+    namespaces = { "td": "http://openconfig.net/yang/terminal-device"}
+    channels  = root.findall(f".//td:terminal-device/td:logical-channels/td:channel",namespaces) 
+    for channel in channels : 
+       
+        index_ele= channel.find(f".//td:config[td:index='{index}']/td:{resource_key}",namespaces)
+        if index_ele is not None :
+           dic["status"]=index_ele.text
+           print(index_ele.text)
+    return dic
+
+
+def extract_channel_xmlns (data_xml:str,is_opticalband:bool):
+    xml_bytes = data_xml.encode("utf-8")
+    root = ET.fromstring(xml_bytes) 
+ 
+    namespace=None
+    channels=None
+  
+    if (not is_opticalband) :
+      
+        optical_channel_namespaces = {
+        'ns': 'urn:ietf:params:xml:ns:netconf:base:1.0',
+          'oc': 'http://openconfig.net/yang/platform',
+        }
+       
+        channels= root.find('.//{*}optical-channel',optical_channel_namespaces)
+        if channels is not None :
+          optical_channel_namespace = channels.tag.replace("optical-channel", "")
+          namespace=optical_channel_namespace.replace("{", "").replace("}", "")
+    else :       
+        optical_band_namespaces= {
+          'oc':'http://openconfig.net/yang/wavelength-router'
+        }
+        
+        channels= root.find('.//{*}optical-bands',optical_band_namespaces)
+        if channels is not None: 
+          optical_channel_namespace = channels.tag.replace("optical-bands", "")
+          namespace=optical_channel_namespace.replace("{", "").replace("}", "")
+        
+   
+    return namespace
+  
+def extract_channels_based_on_channelnamespace (xml_data:str,channel_namespace:str,is_opticalband:bool):
+    xml_bytes = xml_data.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+    channels=[]
+   
+    # Find the component names whose children include the "optical-channel" element
+    if (not is_opticalband):
+       namespace = {'namespace': 'http://openconfig.net/yang/platform','cn':channel_namespace}
+
+       component_names = root.findall('.//namespace:component[cn:optical-channel]',namespace)
+
+      # Extract and print the component names
+       for component in component_names:
+          component_name = component.find('namespace:name', namespace).text 
+          channels.append({"index":component_name})
+    else :
+        namespaces = {
+              'wr': 'http://openconfig.net/yang/wavelength-router',
+              'fs': channel_namespace
+        }
+       
+        wl = root.findall('.//fs:optical-band',namespaces=namespaces)
+  
+        for component in wl :
+                index=component.find('.//fs:index',namespaces).text
+                dest_port_name = component.find('.//fs:dest/fs:config/fs:port-name', namespaces).text
+
+        # Retrieve port-name for source (assuming it exists in the XML structure)
+                source_port_name = component.find('.//fs:source/fs:config/fs:port-name', namespaces).text
+                channels.append({"index":index,"endpoints":(source_port_name,dest_port_name)})
+             
+        # Retrieve port-name for dest
+
+    return channels
+  
+def extract_channels_based_on_type (xml_data:str):
+    xml_bytes = xml_data.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+
+    namespace = {'oc': 'http://openconfig.net/yang/platform', 'typex': 'http://openconfig.net/yang/platform-types'}
+    channel_names = []
+    components = root.findall('.//oc:component', namespace)
+    for component in components:
+      
+        type_element = component.find('.//oc:state/oc:type[.="oc-opt-types:OPTICAL_CHANNEL"]',namespaces=namespace)
+    
+        if type_element is not None and type_element.text == 'oc-opt-types:OPTICAL_CHANNEL':
+            name_element = component.find('oc:name', namespace)
+            if name_element is not None:
+                channel_names.append(name_element.text)
+    return channel_names            
+    
+def extract_value(resource_key:str,xml_data:str,dic:dict,channel_name:str,channel_namespace:str):
+    logging.info(f"resource_key {resource_key} and channgel_name {channel_name} and channel_namespace {channel_namespace}")  
+    xml_bytes = xml_data.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+    channel_name=channel_name if 'index'  not in channel_name else channel_name['index']
+    namespace = {'oc': 'http://openconfig.net/yang/platform',
+              'td': channel_namespace}
+
+    element = root.find(f'.//oc:component[oc:name="{channel_name}"]', namespace)
+
+    if element is not None:
+      parameter= element.find(f'.//td:{resource_key}',namespace)
+      if (parameter is not None):
+        value = parameter.text
+        dic[resource_key]=value
+      else :
+           logging.info("parameter is None")    
+      
+    else:
+       logging.info("element is None")     
+       print(" element not found.")
+    logging.info(f"dic {dic}")    
+    return dic  
+
+
+def extract_port_value (xml_string:list,port_name:str):
+
+    xml_bytes = xml_string.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+
+    namespace = {"oc": "http://openconfig.net/yang/platform"}
+    component=root.find(f".//oc:component[oc:name='{port_name}']", namespace)
+    onos_index = component.find(
+        f".//oc:property//oc:state/oc:name[.='onos-index']/../oc:value", namespace
+    ).text
+  
+    return (port_name,onos_index)
+            
+           
+
+  
+def extract_tranceiver (data_xml:str,dic:dict):
+    xml_bytes = data_xml.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+    namespaces = {
+      'ns': 'urn:ietf:params:xml:ns:netconf:base:1.0',
+      'oc': 'http://openconfig.net/yang/platform',
+      'oc-terminal': 'http://openconfig.net/yang/terminal-device',
+      'oc-platform-types': 'http://openconfig.net/yang/platform-types'
+    }
+
+ 
+    transceiver_components = root.findall('.//oc:component/oc:state/[oc:type="oc-platform-types:TRANSCEIVER"]../oc:state/oc:name', namespaces)
+   
+    component_names = [component.text for component in transceiver_components]
+    dic['transceiver']=component_names
+    return dic
+  
+def extract_interface (xml_data:str,dic:dict):
+    xml_bytes = xml_data.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+    namespaces = {
+    'ns': 'urn:ietf:params:xml:ns:netconf:base:1.0',
+    'oc': 'http://openconfig.net/yang/interfaces',
+    }
+    ip_namespaces = {
+    'oc': 'http://openconfig.net/yang/interfaces',
+    'ip': 'http://openconfig.net/yang/interfaces/ip',
+    }
+
+    interfaces = root.findall('.//oc:interfaces/oc:interface', namespaces)
+    interface_names = [interface.find('oc:name', namespaces).text for interface in interfaces]
+    interface_enabled=[interface.find('oc:config/oc:enabled', namespaces).text for interface in interfaces]
+    ip_address_element = root.find('.//ip:ip', ip_namespaces)
+    interface_prefix_length=root.find('.//ip:prefix-length',ip_namespaces)
+    if (len(interface_names) > 0):
+       dic['interface']={"name":interface_names[0],'ip':ip_address_element.text,'enabled':interface_enabled[0],"prefix-length":interface_prefix_length.text}
+    else :
+        dic['interface']={}   
+    return dic
+  
+def has_opticalbands(xml_data:str):
+    xml_bytes = xml_data.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+ 
+    has_opticalbands=False
+    elements= root.find('.//{*}optical-bands')
+
+    if (elements is not None and len(elements) >0):
+      has_opticalbands=True
+    else :
+      has_opticalbands=False
+    return has_opticalbands
+  
+def extract_ports_based_on_type (xml_data:str):
+    pattern = r':\s*PORT\b'
+    xml_bytes = xml_data.encode("utf-8")
+    root = ET.fromstring(xml_bytes)
+    namespace = {'oc': 'http://openconfig.net/yang/platform', 'typex': 'http://openconfig.net/yang/platform-types'}
+    ports = []
+    components = root.findall(".//oc:state[oc:type]",namespace)
+    for component in components:
+         type_ele = component.find(".//oc:type",namespace)
+         match = re.search(pattern, type_ele.text)
+         if match is not None :
+            name_element= component.find(".//oc:name",namespace)
+            port_name =name_element.text       
+            port_index=name_element.text.split("-")[1]
+            port = (port_name,port_index)
+            ports.append(port)
+    return ports  
+    
+def transponder_values_extractor(data_xml:str,resource_keys:list,dic:dict):
+   
+    endpoints=[]
+    is_opticalband=has_opticalbands(xml_data=data_xml)
+    channel_namespace=extract_channel_xmlns(data_xml=data_xml,is_opticalband=is_opticalband)
+    # channel_names=extract_channels_based_on_type(xml_data=data_xml) 
+    # if len(channel_names)==0 :
+    channel_names= extract_channels_based_on_channelnamespace(xml_data=data_xml,channel_namespace=channel_namespace,is_opticalband=is_opticalband)
+    logging.info(f"channel_names {channel_names}")
+    ports = extract_ports_based_on_type(data_xml)
+    optical_channels_params=[]
+    ports_result=[]
+    if (is_opticalband):
+        endpoints=channel_names
+    else:
+            
+        for channel_name in channel_names:
+            dic={}
+            for resource_key in resource_keys  :
+                
+                if (resource_key != 'admin-state'):
+                  
+                    dic=extract_value(dic=dic,resource_key=resource_key,xml_data=data_xml
+                                      ,channel_name=channel_name,channel_namespace=channel_namespace)  
+                else : 
+                    dic = extract_status(dic=dic,resource_key=resource_key,xml_data=data_xml, channel_name=channel_name) 
+            dic["name"]=channel_name
+            endpoints.append({"endpoint_uuid":{"uuid":channel_name}})
+            optical_channels_params.append(dic)                
+    #transceivers_dic=extract_tranceiver(data_xml=data_xml,dic={})
+    transceivers_dic={"transceiver":[]}
+    #interfaces_dic=extract_interface(xml_data=data_xml,dic={})
+    if len(ports)>0 :
+      for port in ports :
+        endpoint_name,endpoint_id=port
+        resource_key = '/endpoints/endpoint[{:s}]'.format(endpoint_id)
+        resource_value = {'uuid': endpoint_id, 'type':endpoint_name}
+        ports_result.append((resource_key, resource_value))
+      
+   
+    return [transceivers_dic,optical_channels_params,channel_namespace,endpoints,ports_result]
+  
\ No newline at end of file
diff --git a/src/tests/ofc24/get_topology.sh b/src/tests/ofc24/get_topology.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2799934ad8d927e40607c3285cc2ff447d4e48d7
--- /dev/null
+++ b/src/tests/ofc24/get_topology.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+ip=$(sudo kubectl get all --all-namespaces | grep service/opticalcontrollerservice | awk '{print $4}')
+
+#echo $ip
+
+#push=$(curl -X GET "http://$ip:10060/OpticalTFS/GetTopology/admin/admin")
+
+
+links=$(curl -X GET "http://$ip:10060/OpticalTFS/GetLinks")
+
+echo $links
\ No newline at end of file
diff --git a/src/tests/ofc24/tempOC/files/transponders_x4.xml b/src/tests/ofc24/tempOC/files/transponders_x4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb55f02abefa6c5a444d3fecaa2ca049798f9483
--- /dev/null
+++ b/src/tests/ofc24/tempOC/files/transponders_x4.xml
@@ -0,0 +1,1039 @@
+<config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
+    <components xmlns="http://openconfig.net/yang/platform">
+        <component>
+            <name>device</name>
+            <config>
+                <name>device</name>
+            </config>
+            <state>
+				<name>MellanoxSwitch</name>
+				<mfg-name>SSSA-CNIT</mfg-name>
+				<hardware-version>1.0.0</hardware-version>
+				<firmware-version>1.0.0</firmware-version>
+				<software-version>1.0.0</software-version>
+				<serial-no>610610</serial-no>
+				<type xmlns:typex="http://openconfig.net/yang/platform-types">typex:OPERATING_SYSTEM</type>
+			</state>
+		</component>
+		<component>
+			<name>channel-1</name>
+			<config>
+					<name>channel-1</name>
+			</config>
+			<state>
+				<name>channel-1</name>
+				<type xmlns:typex="http://openconfig.net/yang/transport-types">typex:OPTICAL_CHANNEL</type>
+			</state>
+			<optical-channel xmlns="http://openconfig.net/yang/terminal-device">
+				<config>
+					<frequency>191600000</frequency>
+					<target-output-power>100</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-1</line-port>
+				</config>
+				<state>
+					<frequency>191600000</frequency>
+					<target-output-power>0</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-1</line-port>
+					<group-id>1</group-id>
+					<output-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</output-power>
+					<input-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</input-power>
+					<laser-bias-current>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</laser-bias-current>
+					<chromatic-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</chromatic-dispersion>
+					<polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</polarization-mode-dispersion>
+					<second-order-polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</second-order-polarization-mode-dispersion>
+					<polarization-dependent-loss>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</polarization-dependent-loss>
+				</state>
+			</optical-channel>
+		</component>
+		<component>
+			<name>channel-2</name>
+			<config>
+					<name>channel-2</name>
+			</config>
+			<state>
+				<name>channel-2</name>
+				<type xmlns:typex="http://openconfig.net/yang/transport-types">typex:OPTICAL_CHANNEL</type>
+			</state>
+			<optical-channel xmlns="http://openconfig.net/yang/terminal-device">
+				<config>
+					<frequency>191600000</frequency>
+					<target-output-power>100</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-2</line-port>
+				</config>
+				<state>
+					<frequency>191600000</frequency>
+					<target-output-power>0</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-2</line-port>
+					<group-id>1</group-id>
+					<output-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</output-power>
+					<input-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</input-power>
+					<laser-bias-current>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</laser-bias-current>
+					<chromatic-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</chromatic-dispersion>
+					<polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</polarization-mode-dispersion>
+					<second-order-polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</second-order-polarization-mode-dispersion>
+					<polarization-dependent-loss>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</polarization-dependent-loss>
+				</state>
+			</optical-channel>
+		</component>
+		<component>
+			<name>channel-3</name>
+			<config>
+					<name>channel-3</name>
+			</config>
+			<state>
+				<name>channel-3</name>
+				<type xmlns:typex="http://openconfig.net/yang/transport-types">typex:OPTICAL_CHANNEL</type>
+			</state>
+			<optical-channel xmlns="http://openconfig.net/yang/terminal-device">
+				<config>
+					<frequency>191600000</frequency>
+					<target-output-power>100</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-3</line-port>
+				</config>
+				<state>
+					<frequency>191600000</frequency>
+					<target-output-power>0</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-3</line-port>
+					<group-id>1</group-id>
+					<output-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</output-power>
+					<input-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</input-power>
+					<laser-bias-current>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</laser-bias-current>
+					<chromatic-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</chromatic-dispersion>
+					<polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</polarization-mode-dispersion>
+					<second-order-polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</second-order-polarization-mode-dispersion>
+					<polarization-dependent-loss>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</polarization-dependent-loss>
+				</state>
+			</optical-channel>
+		</component>
+		<component>
+			<name>channel-4</name>
+			<config>
+					<name>channel-4</name>
+			</config>
+			<state>
+				<name>channel-4</name>
+				<type xmlns:typex="http://openconfig.net/yang/transport-types">typex:OPTICAL_CHANNEL</type>
+			</state>
+			<optical-channel xmlns="http://openconfig.net/yang/terminal-device">
+				<config>
+					<frequency>191600000</frequency>
+					<target-output-power>100</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-4</line-port>
+				</config>
+				<state>
+					<frequency>191600000</frequency>
+					<target-output-power>0</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-4</line-port>
+					<group-id>1</group-id>
+					<output-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</output-power>
+					<input-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</input-power>
+					<laser-bias-current>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</laser-bias-current>
+					<chromatic-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</chromatic-dispersion>
+					<polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</polarization-mode-dispersion>
+					<second-order-polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</second-order-polarization-mode-dispersion>
+					<polarization-dependent-loss>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</polarization-dependent-loss>
+				</state>
+			</optical-channel>
+		</component>
+				<component>
+			<name>transceiver-1</name>
+			<config>
+				<name>transceiver-1</name>
+			</config>
+			<state>
+				<name>transceiver-1</name>
+				<type xmlns:typex="http://openconfig.net/yang/platform-types">typex:TRANSCEIVER</type>
+			</state>
+			<transceiver xmlns="http://openconfig.net/yang/platform/transceiver">
+				<config>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+				</config>
+				<state>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+					<vendor>Cisco</vendor>
+					<vendor-part>400zr-QSFP-DD</vendor-part>
+					<vendor-rev>01</vendor-rev>
+					<serial-no>1567321</serial-no>
+				</state>
+				<physical-channels>
+					<channel>
+						<index>1</index>
+						<config>
+							<index>1</index>
+							<associated-optical-channel>channel-1</associated-optical-channel>
+						</config>
+					</channel>
+				</physical-channels>
+			</transceiver>
+		</component>
+		<component>
+			<name>transceiver-2</name>
+			<config>
+				<name>transceiver-2</name>
+			</config>
+			<state>
+				<name>transceiver-2</name>
+				<type xmlns:typex="http://openconfig.net/yang/platform-types">typex:TRANSCEIVER</type>
+			</state>
+			<transceiver xmlns="http://openconfig.net/yang/platform/transceiver">
+				<config>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+				</config>
+				<state>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+					<vendor>Cisco</vendor>
+					<vendor-part>400zr-QSFP-DD</vendor-part>
+					<vendor-rev>01</vendor-rev>
+					<serial-no>1567321</serial-no>
+				</state>
+				<physical-channels>
+					<channel>
+						<index>1</index>
+						<config>
+							<index>1</index>
+							<associated-optical-channel>channel-2</associated-optical-channel>
+						</config>
+					</channel>
+				</physical-channels>
+			</transceiver>
+		</component>
+		<component>
+			<name>transceiver-3</name>
+			<config>
+				<name>transceiver-3</name>
+			</config>
+			<state>
+				<name>transceiver-3</name>
+				<type xmlns:typex="http://openconfig.net/yang/platform-types">typex:TRANSCEIVER</type>
+			</state>
+			<transceiver xmlns="http://openconfig.net/yang/platform/transceiver">
+				<config>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+				</config>
+				<state>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+					<vendor>Cisco</vendor>
+					<vendor-part>400zr-QSFP-DD</vendor-part>
+					<vendor-rev>01</vendor-rev>
+					<serial-no>1567321</serial-no>
+				</state>
+				<physical-channels>
+					<channel>
+						<index>1</index>
+						<config>
+							<index>1</index>
+							<associated-optical-channel>channel-3</associated-optical-channel>
+						</config>
+					</channel>
+				</physical-channels>
+			</transceiver>
+		</component>
+
+		<component>
+			<name>transceiver-4</name>
+			<config>
+				<name>transceiver-4</name>
+			</config>
+			<state>
+				<name>transceiver-4</name>
+				<type xmlns:typex="http://openconfig.net/yang/platform-types">typex:TRANSCEIVER</type>
+			</state>
+			<transceiver xmlns="http://openconfig.net/yang/platform/transceiver">
+				<config>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+				</config>
+				<state>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+					<vendor>Cisco</vendor>
+					<vendor-part>400zr-QSFP-DD</vendor-part>
+					<vendor-rev>01</vendor-rev>
+					<serial-no>1567321</serial-no>
+				</state>
+				<physical-channels>
+					<channel>
+						<index>1</index>
+						<config>
+							<index>1</index>
+							<associated-optical-channel>channel-4</associated-optical-channel>
+						</config>
+					</channel>
+				</physical-channels>
+			</transceiver>
+		</component>
+		<component>
+            <name>port-1</name>
+            <config>
+                <name>port-1</name>
+            </config>
+            <state>
+                <name>port-1</name>
+                <type xmlns:typex="http://openconfig.net/yang/platform-types">typex:PORT</type>
+            </state>
+            <subcomponents>
+				<subcomponent>
+					<name>channel-1</name>
+					<config>
+							<name>channel-1</name>
+					</config>
+					<state>
+							<name>channel-1</name>
+					</state>
+				</subcomponent>
+            </subcomponents>
+            <properties>
+				<property>
+						<name>onos-index</name>
+						<config>
+								<name>onos-index</name>
+								<value>1</value>
+						</config>
+						<state>
+								<name>onos-index</name>
+								<value>1</value>
+						</state>
+				</property>
+				<property>
+						<name>odtn-port-type</name>
+						<config>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</config>
+						<state>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</state>
+				</property>
+            </properties>
+        </component>   
+				<component>
+            <name>port-2</name>
+            <config>
+                <name>port-2</name>
+            </config>
+            <state>
+                <name>port-2</name>
+                <type xmlns:typex="http://openconfig.net/yang/platform-types">typex:PORT</type>
+            </state>
+            <subcomponents>
+				<subcomponent>
+					<name>channel-2</name>
+					<config>
+							<name>channel-2</name>
+					</config>
+					<state>
+							<name>channel-2</name>
+					</state>
+				</subcomponent>
+            </subcomponents>
+            <properties>
+				<property>
+						<name>onos-index</name>
+						<config>
+								<name>onos-index</name>
+								<value>2</value>
+						</config>
+						<state>
+								<name>onos-index</name>
+								<value>2</value>
+						</state>
+				</property>
+				<property>
+						<name>odtn-port-type</name>
+						<config>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</config>
+						<state>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</state>
+				</property>
+            </properties>
+        </component>
+				<component>
+            <name>port-3</name>
+            <config>
+                <name>port-3</name>
+            </config>
+            <state>
+                <name>port-3</name>
+                <type xmlns:typex="http://openconfig.net/yang/platform-types">typex:PORT</type>
+            </state>
+            <subcomponents>
+				<subcomponent>
+					<name>channel-3</name>
+					<config>
+							<name>channel-3</name>
+					</config>
+					<state>
+							<name>channel-3</name>
+					</state>
+				</subcomponent>
+            </subcomponents>
+            <properties>
+				<property>
+						<name>onos-index</name>
+						<config>
+								<name>onos-index</name>
+								<value>3</value>
+						</config>
+						<state>
+								<name>onos-index</name>
+								<value>3</value>
+						</state>
+				</property>
+				<property>
+						<name>odtn-port-type</name>
+						<config>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</config>
+						<state>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</state>
+				</property>
+            </properties>
+        </component>   
+		<component>
+            <name>port-4</name>
+            <config>
+                <name>port-4</name>
+            </config>
+            <state>
+                <name>port-4</name>
+                <type xmlns:typex="http://openconfig.net/yang/platform-types">typex:PORT</type>
+            </state>
+            <subcomponents>
+				<subcomponent>
+					<name>channel-4</name>
+					<config>
+							<name>channel-4</name>
+					</config>
+					<state>
+							<name>channel-4</name>
+					</state>
+				</subcomponent>
+            </subcomponents>
+            <properties>
+				<property>
+						<name>onos-index</name>
+						<config>
+								<name>onos-index</name>
+								<value>4</value>
+						</config>
+						<state>
+								<name>onos-index</name>
+								<value>4</value>
+						</state>
+				</property>
+				<property>
+						<name>odtn-port-type</name>
+						<config>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</config>
+						<state>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</state>
+				</property>
+            </properties>
+        </component>      
+	</components>
+	<terminal-device xmlns="http://openconfig.net/yang/terminal-device">
+        <logical-channels>
+            <!--Description: Optical logical link-->
+            <channel>
+			<!--Description: Line (OTN) Port-->
+			<index>1</index>
+			<config>
+				<index>1</index>
+				<description>Logical channel 1</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+			</config>
+			<state>
+				<index>1</index>
+				<description>Logical channel 1</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+				<link-state>UP</link-state>
+			</state>
+		   	<ingress>
+				<config>
+					<transceiver>transceiver-1</transceiver>
+				</config>
+				<state>
+					<transceiver>transceiver-1</transceiver>
+				</state>
+			</ingress>
+			<otn>
+				<config>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+				</config>
+				<state>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+					<tti-msg-auto>0</tti-msg-auto>
+					<tti-msg-recv>0</tti-msg-recv>
+					<rdi-msg>0</rdi-msg>
+					<errored-seconds>0</errored-seconds>
+					<severely-errored-seconds>0</severely-errored-seconds>
+					<unavailable-seconds>0</unavailable-seconds>
+					<code-violations>0</code-violations>
+					<fec-uncorrectable-words>0</fec-uncorrectable-words>
+					<fec-corrected-bytes>0</fec-corrected-bytes>
+					<fec-corrected-bits>0</fec-corrected-bits>
+					<background-block-errors>0</background-block-errors>
+					<pre-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</pre-fec-ber>
+					<post-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</post-fec-ber>
+					<q-value>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</q-value>
+					<esnr>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</esnr>
+				</state>
+			</otn>
+			<logical-channel-assignments>
+				<assignment>
+					<index>1</index>
+					<config>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-1</optical-channel>
+					</config>
+					<state>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-1</optical-channel>
+					</state>
+				</assignment>
+			</logical-channel-assignments>
+                  </channel>
+		           <!--Description: Optical logical link-->
+            <channel>
+			<!--Description: Line (OTN) Port-->
+			<index>2</index>
+			<config>
+				<index>2</index>
+				<description>Logical channel 2</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+			</config>
+			<state>
+				<index>2</index>
+				<description>Logical channel 2</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+				<link-state>UP</link-state>
+			</state>
+		   	<ingress>
+				<config>
+					<transceiver>transceiver-2</transceiver>
+				</config>
+				<state>
+					<transceiver>transceiver-2</transceiver>
+				</state>
+			</ingress>
+			<otn>
+				<config>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+				</config>
+				<state>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+					<tti-msg-auto>0</tti-msg-auto>
+					<tti-msg-recv>0</tti-msg-recv>
+					<rdi-msg>0</rdi-msg>
+					<errored-seconds>0</errored-seconds>
+					<severely-errored-seconds>0</severely-errored-seconds>
+					<unavailable-seconds>0</unavailable-seconds>
+					<code-violations>0</code-violations>
+					<fec-uncorrectable-words>0</fec-uncorrectable-words>
+					<fec-corrected-bytes>0</fec-corrected-bytes>
+					<fec-corrected-bits>0</fec-corrected-bits>
+					<background-block-errors>0</background-block-errors>
+					<pre-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</pre-fec-ber>
+					<post-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</post-fec-ber>
+					<q-value>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</q-value>
+					<esnr>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</esnr>
+				</state>
+			</otn>
+			<logical-channel-assignments>
+				<assignment>
+					<index>1</index>
+					<config>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-2</optical-channel>
+					</config>
+					<state>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-2</optical-channel>
+					</state>
+				</assignment>
+			</logical-channel-assignments>
+                  </channel>
+            <!--Description: Optical logical link-->
+            <channel>
+			<!--Description: Line (OTN) Port-->
+			<index>3</index>
+			<config>
+				<index>3</index>
+				<description>Logical channel 3</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+			</config>
+			<state>
+				<index>3</index>
+				<description>Logical channel 3</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+				<link-state>UP</link-state>
+			</state>
+		   	<ingress>
+				<config>
+					<transceiver>transceiver-3</transceiver>
+				</config>
+				<state>
+					<transceiver>transceiver-3</transceiver>
+				</state>
+			</ingress>
+			<otn>
+				<config>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+				</config>
+				<state>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+					<tti-msg-auto>0</tti-msg-auto>
+					<tti-msg-recv>0</tti-msg-recv>
+					<rdi-msg>0</rdi-msg>
+					<errored-seconds>0</errored-seconds>
+					<severely-errored-seconds>0</severely-errored-seconds>
+					<unavailable-seconds>0</unavailable-seconds>
+					<code-violations>0</code-violations>
+					<fec-uncorrectable-words>0</fec-uncorrectable-words>
+					<fec-corrected-bytes>0</fec-corrected-bytes>
+					<fec-corrected-bits>0</fec-corrected-bits>
+					<background-block-errors>0</background-block-errors>
+					<pre-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</pre-fec-ber>
+					<post-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</post-fec-ber>
+					<q-value>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</q-value>
+					<esnr>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</esnr>
+				</state>
+			</otn>
+			<logical-channel-assignments>
+				<assignment>
+					<index>1</index>
+					<config>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-3</optical-channel>
+					</config>
+					<state>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-3</optical-channel>
+					</state>
+				</assignment>
+			</logical-channel-assignments>
+                  </channel>
+            <!--Description: Optical logical link-->
+            <channel>
+			<!--Description: Line (OTN) Port-->
+			<index>4</index>
+			<config>
+				<index>4</index>
+				<description>Logical channel 4</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+			</config>
+			<state>
+				<index>4</index>
+				<description>Logical channel 4</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+				<link-state>UP</link-state>
+			</state>
+		   	<ingress>
+				<config>
+					<transceiver>transceiver-4</transceiver>
+				</config>
+				<state>
+					<transceiver>transceiver-4</transceiver>
+				</state>
+			</ingress>
+			<otn>
+				<config>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+				</config>
+				<state>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+					<tti-msg-auto>0</tti-msg-auto>
+					<tti-msg-recv>0</tti-msg-recv>
+					<rdi-msg>0</rdi-msg>
+					<errored-seconds>0</errored-seconds>
+					<severely-errored-seconds>0</severely-errored-seconds>
+					<unavailable-seconds>0</unavailable-seconds>
+					<code-violations>0</code-violations>
+					<fec-uncorrectable-words>0</fec-uncorrectable-words>
+					<fec-corrected-bytes>0</fec-corrected-bytes>
+					<fec-corrected-bits>0</fec-corrected-bits>
+					<background-block-errors>0</background-block-errors>
+					<pre-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</pre-fec-ber>
+					<post-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</post-fec-ber>
+					<q-value>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</q-value>
+					<esnr>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</esnr>
+				</state>
+			</otn>
+			<logical-channel-assignments>
+				<assignment>
+					<index>1</index>
+					<config>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-4</optical-channel>
+					</config>
+					<state>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-4</optical-channel>
+					</state>
+				</assignment>
+			</logical-channel-assignments>
+        </channel>
+	</logical-channels>
+	<operational-modes>
+       <mode>
+		<mode-id>1</mode-id>
+			<state>
+				<mode-id>1</mode-id>
+				<description>FEC1</description>
+				<vendor-id>Ericsson</vendor-id>
+			</state>
+		</mode>
+		<mode>
+		    <mode-id>2</mode-id>
+			<state>
+				<mode-id>2</mode-id>
+				<description>FEC2</description>
+				<vendor-id>Ericsson</vendor-id>
+			</state>
+		</mode>		
+    	   </operational-modes>
+	</terminal-device>
+</config>
+
diff --git a/src/tests/ofc24/tempOC/files/transponders_x4_2.xml b/src/tests/ofc24/tempOC/files/transponders_x4_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8d10c593b3c2166b16e8ecea383dadd69c3ac067
--- /dev/null
+++ b/src/tests/ofc24/tempOC/files/transponders_x4_2.xml
@@ -0,0 +1,1039 @@
+<config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
+    <components xmlns="http://openconfig.net/yang/platform">
+        <component>
+            <name>device</name>
+            <config>
+                <name>device</name>
+            </config>
+            <state>
+				<name>MellanoxSwitch</name>
+				<mfg-name>SSSA-CNIT</mfg-name>
+				<hardware-version>1.0.0</hardware-version>
+				<firmware-version>1.0.0</firmware-version>
+				<software-version>1.0.0</software-version>
+				<serial-no>610610</serial-no>
+				<type xmlns:typex="http://openconfig.net/yang/platform-types">typex:OPERATING_SYSTEM</type>
+			</state>
+		</component>
+		<component>
+			<name>channel-5</name>
+			<config>
+					<name>channel-5</name>
+			</config>
+			<state>
+				<name>channel-5</name>
+				<type xmlns:typex="http://openconfig.net/yang/transport-types">typex:OPTICAL_CHANNEL</type>
+			</state>
+			<optical-channel xmlns="http://openconfig.net/yang/terminal-device">
+				<config>
+					<frequency>191600000</frequency>
+					<target-output-power>100</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-5</line-port>
+				</config>
+				<state>
+					<frequency>191600000</frequency>
+					<target-output-power>0</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-5</line-port>
+					<group-id>1</group-id>
+					<output-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</output-power>
+					<input-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</input-power>
+					<laser-bias-current>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</laser-bias-current>
+					<chromatic-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</chromatic-dispersion>
+					<polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</polarization-mode-dispersion>
+					<second-order-polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</second-order-polarization-mode-dispersion>
+					<polarization-dependent-loss>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</polarization-dependent-loss>
+				</state>
+			</optical-channel>
+		</component>
+		<component>
+			<name>channel-6</name>
+			<config>
+					<name>channel-6</name>
+			</config>
+			<state>
+				<name>channel-6</name>
+				<type xmlns:typex="http://openconfig.net/yang/transport-types">typex:OPTICAL_CHANNEL</type>
+			</state>
+			<optical-channel xmlns="http://openconfig.net/yang/terminal-device">
+				<config>
+					<frequency>191600000</frequency>
+					<target-output-power>100</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-6</line-port>
+				</config>
+				<state>
+					<frequency>191600000</frequency>
+					<target-output-power>0</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-6</line-port>
+					<group-id>1</group-id>
+					<output-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</output-power>
+					<input-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</input-power>
+					<laser-bias-current>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</laser-bias-current>
+					<chromatic-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</chromatic-dispersion>
+					<polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</polarization-mode-dispersion>
+					<second-order-polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</second-order-polarization-mode-dispersion>
+					<polarization-dependent-loss>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</polarization-dependent-loss>
+				</state>
+			</optical-channel>
+		</component>
+		<component>
+			<name>channel-7</name>
+			<config>
+					<name>channel-7</name>
+			</config>
+			<state>
+				<name>channel-7</name>
+				<type xmlns:typex="http://openconfig.net/yang/transport-types">typex:OPTICAL_CHANNEL</type>
+			</state>
+			<optical-channel xmlns="http://openconfig.net/yang/terminal-device">
+				<config>
+					<frequency>191600000</frequency>
+					<target-output-power>100</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-7</line-port>
+				</config>
+				<state>
+					<frequency>191600000</frequency>
+					<target-output-power>0</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-7</line-port>
+					<group-id>1</group-id>
+					<output-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</output-power>
+					<input-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</input-power>
+					<laser-bias-current>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</laser-bias-current>
+					<chromatic-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</chromatic-dispersion>
+					<polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</polarization-mode-dispersion>
+					<second-order-polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</second-order-polarization-mode-dispersion>
+					<polarization-dependent-loss>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</polarization-dependent-loss>
+				</state>
+			</optical-channel>
+		</component>
+		<component>
+			<name>channel-8</name>
+			<config>
+					<name>channel-8</name>
+			</config>
+			<state>
+				<name>channel-8</name>
+				<type xmlns:typex="http://openconfig.net/yang/transport-types">typex:OPTICAL_CHANNEL</type>
+			</state>
+			<optical-channel xmlns="http://openconfig.net/yang/terminal-device">
+				<config>
+					<frequency>191600000</frequency>
+					<target-output-power>100</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-8</line-port>
+				</config>
+				<state>
+					<frequency>191600000</frequency>
+					<target-output-power>0</target-output-power>
+					<operational-mode>0</operational-mode>
+					<line-port>transceiver-8</line-port>
+					<group-id>1</group-id>
+					<output-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</output-power>
+					<input-power>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</input-power>
+					<laser-bias-current>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</laser-bias-current>
+					<chromatic-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</chromatic-dispersion>
+					<polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</polarization-mode-dispersion>
+					<second-order-polarization-mode-dispersion>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+					</second-order-polarization-mode-dispersion>
+					<polarization-dependent-loss>
+						<instant>0</instant>
+						<avg>0</avg>
+						<min>0</min>
+						<max>0</max>
+						<interval>0</interval>
+					</polarization-dependent-loss>
+				</state>
+			</optical-channel>
+		</component>
+				<component>
+			<name>transceiver-5</name>
+			<config>
+				<name>transceiver-5</name>
+			</config>
+			<state>
+				<name>transceiver-5</name>
+				<type xmlns:typex="http://openconfig.net/yang/platform-types">typex:TRANSCEIVER</type>
+			</state>
+			<transceiver xmlns="http://openconfig.net/yang/platform/transceiver">
+				<config>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+				</config>
+				<state>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+					<vendor>Cisco</vendor>
+					<vendor-part>400zr-QSFP-DD</vendor-part>
+					<vendor-rev>01</vendor-rev>
+					<serial-no>1567321</serial-no>
+				</state>
+				<physical-channels>
+					<channel>
+						<index>1</index>
+						<config>
+							<index>1</index>
+							<associated-optical-channel>channel-5</associated-optical-channel>
+						</config>
+					</channel>
+				</physical-channels>
+			</transceiver>
+		</component>
+		<component>
+			<name>transceiver-6</name>
+			<config>
+				<name>transceiver-6</name>
+			</config>
+			<state>
+				<name>transceiver-6</name>
+				<type xmlns:typex="http://openconfig.net/yang/platform-types">typex:TRANSCEIVER</type>
+			</state>
+			<transceiver xmlns="http://openconfig.net/yang/platform/transceiver">
+				<config>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+				</config>
+				<state>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+					<vendor>Cisco</vendor>
+					<vendor-part>400zr-QSFP-DD</vendor-part>
+					<vendor-rev>01</vendor-rev>
+					<serial-no>1567321</serial-no>
+				</state>
+				<physical-channels>
+					<channel>
+						<index>1</index>
+						<config>
+							<index>1</index>
+							<associated-optical-channel>channel-6</associated-optical-channel>
+						</config>
+					</channel>
+				</physical-channels>
+			</transceiver>
+		</component>
+		<component>
+			<name>transceiver-7</name>
+			<config>
+				<name>transceiver-7</name>
+			</config>
+			<state>
+				<name>transceiver-7</name>
+				<type xmlns:typex="http://openconfig.net/yang/platform-types">typex:TRANSCEIVER</type>
+			</state>
+			<transceiver xmlns="http://openconfig.net/yang/platform/transceiver">
+				<config>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+				</config>
+				<state>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+					<vendor>Cisco</vendor>
+					<vendor-part>400zr-QSFP-DD</vendor-part>
+					<vendor-rev>01</vendor-rev>
+					<serial-no>1567321</serial-no>
+				</state>
+				<physical-channels>
+					<channel>
+						<index>1</index>
+						<config>
+							<index>1</index>
+							<associated-optical-channel>channel-7</associated-optical-channel>
+						</config>
+					</channel>
+				</physical-channels>
+			</transceiver>
+		</component>
+
+		<component>
+			<name>transceiver-8</name>
+			<config>
+				<name>transceiver-8</name>
+			</config>
+			<state>
+				<name>transceiver-8</name>
+				<type xmlns:typex="http://openconfig.net/yang/platform-types">typex:TRANSCEIVER</type>
+			</state>
+			<transceiver xmlns="http://openconfig.net/yang/platform/transceiver">
+				<config>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+				</config>
+				<state>
+					<enabled>true</enabled>
+					<form-factor-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:QSFP56_DD_TYPE1</form-factor-preconf>
+					<ethernet-pmd-preconf xmlns:typex="http://openconfig.net/yang/transport-types">typex:ETH_400GBASE_ZR</ethernet-pmd-preconf>
+					<fec-mode xmlns:typex="http://openconfig.net/yang/platform-types">typex:FEC_AUTO</fec-mode>
+					<module-functional-type xmlns:typex="http://openconfig.net/yang/transport-types">typex:TYPE_DIGITAL_COHERENT_OPTIC</module-functional-type>
+					<vendor>Cisco</vendor>
+					<vendor-part>400zr-QSFP-DD</vendor-part>
+					<vendor-rev>01</vendor-rev>
+					<serial-no>1567321</serial-no>
+				</state>
+				<physical-channels>
+					<channel>
+						<index>1</index>
+						<config>
+							<index>1</index>
+							<associated-optical-channel>channel-8</associated-optical-channel>
+						</config>
+					</channel>
+				</physical-channels>
+			</transceiver>
+		</component>
+		<component>
+            <name>port-5</name>
+            <config>
+                <name>port-5</name>
+            </config>
+            <state>
+                <name>port-5</name>
+                <type xmlns:typex="http://openconfig.net/yang/platform-types">typex:PORT</type>
+            </state>
+            <subcomponents>
+				<subcomponent>
+					<name>channel-5</name>
+					<config>
+							<name>channel-5</name>
+					</config>
+					<state>
+							<name>channel-5</name>
+					</state>
+				</subcomponent>
+            </subcomponents>
+            <properties>
+				<property>
+						<name>onos-index</name>
+						<config>
+								<name>onos-index</name>
+								<value>5</value>
+						</config>
+						<state>
+								<name>onos-index</name>
+								<value>5</value>
+						</state>
+				</property>
+				<property>
+						<name>odtn-port-type</name>
+						<config>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</config>
+						<state>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</state>
+				</property>
+            </properties>
+        </component>   
+				<component>
+            <name>port-6</name>
+            <config>
+                <name>port-6</name>
+            </config>
+            <state>
+                <name>port-6</name>
+                <type xmlns:typex="http://openconfig.net/yang/platform-types">typex:PORT</type>
+            </state>
+            <subcomponents>
+				<subcomponent>
+					<name>channel-6</name>
+					<config>
+							<name>channel-6</name>
+					</config>
+					<state>
+							<name>channel-6</name>
+					</state>
+				</subcomponent>
+            </subcomponents>
+            <properties>
+				<property>
+						<name>onos-index</name>
+						<config>
+								<name>onos-index</name>
+								<value>6</value>
+						</config>
+						<state>
+								<name>onos-index</name>
+								<value>6</value>
+						</state>
+				</property>
+				<property>
+						<name>odtn-port-type</name>
+						<config>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</config>
+						<state>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</state>
+				</property>
+            </properties>
+        </component>
+				<component>
+            <name>port-7</name>
+            <config>
+                <name>port-7</name>
+            </config>
+            <state>
+                <name>port-7</name>
+                <type xmlns:typex="http://openconfig.net/yang/platform-types">typex:PORT</type>
+            </state>
+            <subcomponents>
+				<subcomponent>
+					<name>channel-7</name>
+					<config>
+							<name>channel-7</name>
+					</config>
+					<state>
+							<name>channel-7</name>
+					</state>
+				</subcomponent>
+            </subcomponents>
+            <properties>
+				<property>
+						<name>onos-index</name>
+						<config>
+								<name>onos-index</name>
+								<value>7</value>
+						</config>
+						<state>
+								<name>onos-index</name>
+								<value>7</value>
+						</state>
+				</property>
+				<property>
+						<name>odtn-port-type</name>
+						<config>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</config>
+						<state>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</state>
+				</property>
+            </properties>
+        </component>   
+		<component>
+            <name>port-8</name>
+            <config>
+                <name>port-8</name>
+            </config>
+            <state>
+                <name>port-8</name>
+                <type xmlns:typex="http://openconfig.net/yang/platform-types">typex:PORT</type>
+            </state>
+            <subcomponents>
+				<subcomponent>
+					<name>channel-8</name>
+					<config>
+							<name>channel-8</name>
+					</config>
+					<state>
+							<name>channel-8</name>
+					</state>
+				</subcomponent>
+            </subcomponents>
+            <properties>
+				<property>
+						<name>onos-index</name>
+						<config>
+								<name>onos-index</name>
+								<value>8</value>
+						</config>
+						<state>
+								<name>onos-index</name>
+								<value>8</value>
+						</state>
+				</property>
+				<property>
+						<name>odtn-port-type</name>
+						<config>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</config>
+						<state>
+								<name>odtn-port-type</name>
+								<value>line</value>
+						</state>
+				</property>
+            </properties>
+        </component>      
+	</components>
+	<terminal-device xmlns="http://openconfig.net/yang/terminal-device">
+        <logical-channels>
+            <!--Description: Optical logical link-->
+            <channel>
+			<!--Description: Line (OTN) Port-->
+			<index>5</index>
+			<config>
+				<index>5</index>
+				<description>Logical channel 5</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+			</config>
+			<state>
+				<index>5</index>
+				<description>Logical channel 5</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+				<link-state>UP</link-state>
+			</state>
+		   	<ingress>
+				<config>
+					<transceiver>transceiver-5</transceiver>
+				</config>
+				<state>
+					<transceiver>transceiver-5</transceiver>
+				</state>
+			</ingress>
+			<otn>
+				<config>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+				</config>
+				<state>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+					<tti-msg-auto>0</tti-msg-auto>
+					<tti-msg-recv>0</tti-msg-recv>
+					<rdi-msg>0</rdi-msg>
+					<errored-seconds>0</errored-seconds>
+					<severely-errored-seconds>0</severely-errored-seconds>
+					<unavailable-seconds>0</unavailable-seconds>
+					<code-violations>0</code-violations>
+					<fec-uncorrectable-words>0</fec-uncorrectable-words>
+					<fec-corrected-bytes>0</fec-corrected-bytes>
+					<fec-corrected-bits>0</fec-corrected-bits>
+					<background-block-errors>0</background-block-errors>
+					<pre-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</pre-fec-ber>
+					<post-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</post-fec-ber>
+					<q-value>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</q-value>
+					<esnr>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</esnr>
+				</state>
+			</otn>
+			<logical-channel-assignments>
+				<assignment>
+					<index>1</index>
+					<config>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-5</optical-channel>
+					</config>
+					<state>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-5</optical-channel>
+					</state>
+				</assignment>
+			</logical-channel-assignments>
+                  </channel>
+		           <!--Description: Optical logical link-->
+            <channel>
+			<!--Description: Line (OTN) Port-->
+			<index>6</index>
+			<config>
+				<index>6</index>
+				<description>Logical channel 6</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+			</config>
+			<state>
+				<index>6</index>
+				<description>Logical channel 6</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+				<link-state>UP</link-state>
+			</state>
+		   	<ingress>
+				<config>
+					<transceiver>transceiver-6</transceiver>
+				</config>
+				<state>
+					<transceiver>transceiver-6</transceiver>
+				</state>
+			</ingress>
+			<otn>
+				<config>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+				</config>
+				<state>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+					<tti-msg-auto>0</tti-msg-auto>
+					<tti-msg-recv>0</tti-msg-recv>
+					<rdi-msg>0</rdi-msg>
+					<errored-seconds>0</errored-seconds>
+					<severely-errored-seconds>0</severely-errored-seconds>
+					<unavailable-seconds>0</unavailable-seconds>
+					<code-violations>0</code-violations>
+					<fec-uncorrectable-words>0</fec-uncorrectable-words>
+					<fec-corrected-bytes>0</fec-corrected-bytes>
+					<fec-corrected-bits>0</fec-corrected-bits>
+					<background-block-errors>0</background-block-errors>
+					<pre-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</pre-fec-ber>
+					<post-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</post-fec-ber>
+					<q-value>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</q-value>
+					<esnr>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</esnr>
+				</state>
+			</otn>
+			<logical-channel-assignments>
+				<assignment>
+					<index>1</index>
+					<config>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-6</optical-channel>
+					</config>
+					<state>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-6</optical-channel>
+					</state>
+				</assignment>
+			</logical-channel-assignments>
+                  </channel>
+            <!--Description: Optical logical link-->
+            <channel>
+			<!--Description: Line (OTN) Port-->
+			<index>7</index>
+			<config>
+				<index>7</index>
+				<description>Logical channel 7</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+			</config>
+			<state>
+				<index>7</index>
+				<description>Logical channel 7</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+				<link-state>UP</link-state>
+			</state>
+		   	<ingress>
+				<config>
+					<transceiver>transceiver-7</transceiver>
+				</config>
+				<state>
+					<transceiver>transceiver-7</transceiver>
+				</state>
+			</ingress>
+			<otn>
+				<config>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+				</config>
+				<state>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+					<tti-msg-auto>0</tti-msg-auto>
+					<tti-msg-recv>0</tti-msg-recv>
+					<rdi-msg>0</rdi-msg>
+					<errored-seconds>0</errored-seconds>
+					<severely-errored-seconds>0</severely-errored-seconds>
+					<unavailable-seconds>0</unavailable-seconds>
+					<code-violations>0</code-violations>
+					<fec-uncorrectable-words>0</fec-uncorrectable-words>
+					<fec-corrected-bytes>0</fec-corrected-bytes>
+					<fec-corrected-bits>0</fec-corrected-bits>
+					<background-block-errors>0</background-block-errors>
+					<pre-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</pre-fec-ber>
+					<post-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</post-fec-ber>
+					<q-value>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</q-value>
+					<esnr>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</esnr>
+				</state>
+			</otn>
+			<logical-channel-assignments>
+				<assignment>
+					<index>1</index>
+					<config>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-7</optical-channel>
+					</config>
+					<state>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-7</optical-channel>
+					</state>
+				</assignment>
+			</logical-channel-assignments>
+                  </channel>
+            <!--Description: Optical logical link-->
+            <channel>
+			<!--Description: Line (OTN) Port-->
+			<index>8</index>
+			<config>
+				<index>8</index>
+				<description>Logical channel 8</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+			</config>
+			<state>
+				<index>8</index>
+				<description>Logical channel 8</description>
+				<admin-state>DISABLED</admin-state>
+				<logical-channel-type xmlns:type="http://openconfig.net/yang/transport-types">type:PROT_OTN</logical-channel-type>
+				<loopback-mode>NONE</loopback-mode>
+				<link-state>UP</link-state>
+			</state>
+		   	<ingress>
+				<config>
+					<transceiver>transceiver-8</transceiver>
+				</config>
+				<state>
+					<transceiver>transceiver-8</transceiver>
+				</state>
+			</ingress>
+			<otn>
+				<config>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+				</config>
+				<state>
+					<tti-msg-expected>test1</tti-msg-expected>
+					<tti-msg-transmit>test1</tti-msg-transmit>
+					<tti-msg-auto>0</tti-msg-auto>
+					<tti-msg-recv>0</tti-msg-recv>
+					<rdi-msg>0</rdi-msg>
+					<errored-seconds>0</errored-seconds>
+					<severely-errored-seconds>0</severely-errored-seconds>
+					<unavailable-seconds>0</unavailable-seconds>
+					<code-violations>0</code-violations>
+					<fec-uncorrectable-words>0</fec-uncorrectable-words>
+					<fec-corrected-bytes>0</fec-corrected-bytes>
+					<fec-corrected-bits>0</fec-corrected-bits>
+					<background-block-errors>0</background-block-errors>
+					<pre-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</pre-fec-ber>
+					<post-fec-ber>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+					</post-fec-ber>
+					<q-value>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</q-value>
+					<esnr>
+						<instant>0.0</instant>
+						<avg>0.0</avg>
+						<min>0.0</min>
+						<max>0.0</max>
+						<interval>0</interval>
+					</esnr>
+				</state>
+			</otn>
+			<logical-channel-assignments>
+				<assignment>
+					<index>1</index>
+					<config>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-8</optical-channel>
+					</config>
+					<state>
+							<index>1</index>
+							<description>Optical channel assigned 100</description>
+							<allocation>100</allocation>
+							<assignment-type>OPTICAL_CHANNEL</assignment-type>
+							<optical-channel>channel-8</optical-channel>
+					</state>
+				</assignment>
+			</logical-channel-assignments>
+        </channel>
+	</logical-channels>
+	<operational-modes>
+       <mode>
+		<mode-id>1</mode-id>
+			<state>
+				<mode-id>1</mode-id>
+				<description>FEC1</description>
+				<vendor-id>Ericsson</vendor-id>
+			</state>
+		</mode>
+		<mode>
+		    <mode-id>2</mode-id>
+			<state>
+				<mode-id>2</mode-id>
+				<description>FEC2</description>
+				<vendor-id>Ericsson</vendor-id>
+			</state>
+		</mode>		
+    	   </operational-modes>
+	</terminal-device>
+</config>
+
diff --git a/src/webui/service/templates/opticalconfig/update_status.html b/src/webui/service/templates/opticalconfig/update_status.html
new file mode 100644
index 0000000000000000000000000000000000000000..72612f86b62126fb7b36ef66fa89658cf5b9c45f
--- /dev/null
+++ b/src/webui/service/templates/opticalconfig/update_status.html
@@ -0,0 +1,51 @@
+
+{% extends 'base.html' %}
+
+{% block content %}
+<h1>Update Channel Status </h1>
+<br />
+<div>
+    channel : <span class="font-weight-bold">{{channel_name}}</span>
+</div>
+<form id="update_status" method="POST">
+    {{ form.hidden_tag() }}
+    <fieldset>
+        <div class="row mb-3 ">
+            <div class="col-12">
+            {{ form.status.label(class="col-sm-2 col-form-label") }}
+            <div class="col-sm-10">
+                {% if form.status.errors %}
+                {{ form.status(class="form-control is-invalid") }}
+                <div class="invalid-feedback">
+                    {% for error in form.status.errors %}
+                    <span>{{ error }}</span>
+                    {% endfor %}
+                </div>
+                {% else %}
+
+                {{ form.status(class="col-sm-7 form-control") }}
+    
+                {% endif %}
+            </div>
+        
+        </div> 
+        <div class="row gx-2">
+            <div class="col-5">
+                <button type="submit" class="btn btn-primary" >
+                    <i class="bi bi-plus-circle-fill"></i>
+                    {{ submit_text }}
+                </button>
+                <div class="col-5">
+  
+                    <button type="button" class="btn btn-block btn-secondary" onclick="javascript: history.back()">
+                        <i class="bi bi-box-arrow-in-left"></i>
+                        Cancel
+                    </button>
+                </div>
+            </div>
+        </div>
+      
+    </div>
+    </fieldset>
+</form>
+{% endblock %}
\ No newline at end of file