Commit 1e9c8cfd authored by Mohammad Ismaeel's avatar Mohammad Ismaeel
Browse files

openroamd bidirectional service

parent eabcbf21
Loading
Loading
Loading
Loading
+192 −7
Original line number Diff line number Diff line
@@ -1202,26 +1202,211 @@
        </nmc-ctp>
      </interface>
      <interface>
        <name>NMC-SRG-SRG1-OUT1-192081250</name>
        <description>Network-Media-Channel-CTP-192081250THz</description>
        <name>MC-TTP-DEG2-AMPTX-OUT-192081250</name>
        <description>Media-channel-192081250THz</description>
        <type>openROADM-if:mediaChannelTrailTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG2-AMPTX</supporting-circuit-pack-name>
        <supporting-port>DEG2-AMPTX-OUT</supporting-port>
        <supporting-interface-list>OMS-DEG2-TTP-TX</supporting-interface-list>
        <mc-ttp xmlns="http://org/openroadm/media-channel-interfaces">
          <max-freq>192156250.0</max-freq>
          <min-freq>192006250.0</min-freq>
        </mc-ttp>
        <supporting-interface-list>NMC-DEG2-AMPTX-OUT-192081250</supporting-interface-list>
      </interface>
      <interface>
        <name>NMC-DEG2-AMPTX-OUT-192081250</name>
        <description>Media-channel-192081250THz</description>
        <type>openROADM-if:networkMediaChannelConnectionTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG2-AMPTX</supporting-circuit-pack-name>
        <supporting-port>DEG2-AMPTX-OUT</supporting-port>
        <supporting-interface-list>OMS-DEG2-TTP-TX</supporting-interface-list>
        <nmc-ctp xmlns="http://org/openroadm/network-media-channel-interfaces">
          <frequency>192081250</frequency>
          <width>150000</width>
        </nmc-ctp>
        <supporting-interface-list>NMC-DEG2-AMPTX-OUT-192081250</supporting-interface-list>
      </interface>
      <interface>
        <name>MC-TTP-DEG2-AMPRX-IN-192081250</name>
        <description>Media-channel-192081250THz</description>
        <type>openROADM-if:mediaChannelTrailTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG2-AMPRX</supporting-circuit-pack-name>
        <supporting-port>DEG2-AMPRX-IN</supporting-port>
        <supporting-interface-list>OMS-DEG2-TTP-RX</supporting-interface-list>
        <mc-ttp xmlns="http://org/openroadm/media-channel-interfaces">
          <max-freq>192156250.0</max-freq>
          <min-freq>192006250.0</min-freq>
        </mc-ttp>
        <supporting-interface-list>NMC-DEG2-AMPRX-IN-192081250</supporting-interface-list>
      </interface>
      <interface>
        <name>NMC-DEG2-AMPRX-IN-192081250</name>
        <description>Media-channel-192081250THz</description>
        <type>openROADM-if:networkMediaChannelConnectionTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>SRG1-WSS</supporting-circuit-pack-name>
        <supporting-port>SRG1-OUT1</supporting-port>
        <supporting-circuit-pack-name>DEG2-AMPRX</supporting-circuit-pack-name>
        <supporting-port>DEG2-AMPRX-IN</supporting-port>
        <supporting-interface-list>OMS-DEG2-TTP-RX</supporting-interface-list>
        <nmc-ctp xmlns="http://org/openroadm/network-media-channel-interfaces">
          <frequency>192081250</frequency>
          <width>150000</width>
        </nmc-ctp>
        <supporting-interface-list>NMC-DEG2-AMPRX-IN-192081250</supporting-interface-list>
      </interface>
      <interface>
        <name>MC-TTP-DEG1-AMPTX-OUT-192081250</name>
        <description>Media-channel-192081250THz</description>
        <type>openROADM-if:mediaChannelTrailTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG1-AMPTX</supporting-circuit-pack-name>
        <supporting-port>DEG1-AMPTX-OUT</supporting-port>
        <supporting-interface-list>OMS-DEG1-TTP-TX</supporting-interface-list>
        <mc-ttp xmlns="http://org/openroadm/media-channel-interfaces">
          <max-freq>192156250.0</max-freq>
          <min-freq>192006250.0</min-freq>
        </mc-ttp>
      </interface>
      <interface>
        <name>NMC-DEG1-AMPTX-OUT-192081250</name>
        <description>Media-channel-192081250THz</description>
        <type>openROADM-if:networkMediaChannelConnectionTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG1-AMPTX</supporting-circuit-pack-name>
        <supporting-port>DEG1-AMPTX-OUT</supporting-port>
        <supporting-interface-list>OMS-DEG1-TTP-TX</supporting-interface-list>
        <nmc-ctp xmlns="http://org/openroadm/network-media-channel-interfaces">
          <frequency>192081250</frequency>
          <width>150000</width>
        </nmc-ctp>
      </interface>
      <interface>
        <name>MC-TTP-DEG1-AMPRX-IN-186131250</name>
        <description>Media-channel-186131250THz</description>
        <type>openROADM-if:mediaChannelTrailTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG1-AMPRX</supporting-circuit-pack-name>
        <supporting-port>DEG1-AMPRX-IN</supporting-port>
        <supporting-interface-list>OMS-DEG1-TTP-RX</supporting-interface-list>
        <mc-ttp xmlns="http://org/openroadm/media-channel-interfaces">
          <max-freq>186206250.0</max-freq>
          <min-freq>186056250.0</min-freq>
        </mc-ttp>
      </interface>
      <interface>
        <name>NMC-DEG1-AMPRX-IN-186131250</name>
        <description>Media-channel-186131250THz</description>
        <type>openROADM-if:networkMediaChannelConnectionTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG1-AMPRX</supporting-circuit-pack-name>
        <supporting-port>DEG1-AMPRX-IN</supporting-port>
        <supporting-interface-list>OMS-DEG1-TTP-RX</supporting-interface-list>
        <nmc-ctp xmlns="http://org/openroadm/network-media-channel-interfaces">
          <frequency>186131250</frequency>
          <width>150000</width>
        </nmc-ctp>
      </interface>
      <interface>
        <name>MC-TTP-DEG2-AMPTX-OUT-186131250</name>
        <description>Media-channel-186131250THz</description>
        <type>openROADM-if:mediaChannelTrailTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG2-AMPTX</supporting-circuit-pack-name>
        <supporting-port>DEG2-AMPTX-OUT</supporting-port>
        <supporting-interface-list>NMC-DEG2-AMPTX-OUT-192081250</supporting-interface-list>
        <mc-ttp xmlns="http://org/openroadm/media-channel-interfaces">
          <max-freq>186206250.0</max-freq>
          <min-freq>186056250.0</min-freq>
        </mc-ttp>
      </interface>
      <interface>
        <name>NMC-DEG2-AMPTX-OUT-186131250</name>
        <description>Media-channel-186131250THz</description>
        <type>openROADM-if:networkMediaChannelConnectionTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG2-AMPTX</supporting-circuit-pack-name>
        <supporting-port>DEG2-AMPTX-OUT</supporting-port>
        <supporting-interface-list>NMC-DEG2-AMPTX-OUT-192081250</supporting-interface-list>
        <nmc-ctp xmlns="http://org/openroadm/network-media-channel-interfaces">
          <frequency>186131250</frequency>
          <width>150000</width>
        </nmc-ctp>
      </interface>
      <roadm-connections>
        <connection-name>NMC-DEG1-AMPRX-IN-186131250 to NMC-DEG2-AMPTX-OUT-186131250</connection-name>
        <opticalControlMode>off</opticalControlMode>
        <target-output-power>0</target-output-power>
        <source>
          <src-if>NMC-DEG1-AMPRX-IN-186131250</src-if>
        </source>
        <destination>
          <dst-if>NMC-DEG2-AMPTX-OUT-186131250</dst-if>
        </destination>
      </roadm-connections>
      <interface>
        <name>MC-TTP-DEG2-AMPRX-IN-186131250</name>
        <description>Media-channel-186131250THz</description>
        <type>openROADM-if:mediaChannelTrailTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG2-AMPRX</supporting-circuit-pack-name>
        <supporting-port>DEG2-AMPRX-IN</supporting-port>
        <supporting-interface-list>NMC-DEG2-AMPRX-IN-192081250</supporting-interface-list>
        <mc-ttp xmlns="http://org/openroadm/media-channel-interfaces">
          <max-freq>186206250.0</max-freq>
          <min-freq>186056250.0</min-freq>
        </mc-ttp>
      </interface>
      <interface>
        <name>NMC-DEG2-AMPRX-IN-186131250</name>
        <description>Media-channel-186131250THz</description>
        <type>openROADM-if:networkMediaChannelConnectionTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG2-AMPRX</supporting-circuit-pack-name>
        <supporting-port>DEG2-AMPRX-IN</supporting-port>
        <supporting-interface-list>NMC-DEG2-AMPRX-IN-192081250</supporting-interface-list>
        <nmc-ctp xmlns="http://org/openroadm/network-media-channel-interfaces">
          <frequency>186131250</frequency>
          <width>150000</width>
        </nmc-ctp>
      </interface>
      <interface>
        <name>MC-TTP-DEG1-AMPTX-OUT-186131250</name>
        <description>Media-channel-186131250THz</description>
        <type>openROADM-if:mediaChannelTrailTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG1-AMPTX</supporting-circuit-pack-name>
        <supporting-port>DEG1-AMPTX-OUT</supporting-port>
        <supporting-interface-list>OMS-DEG1-TTP-TX</supporting-interface-list>
        <mc-ttp xmlns="http://org/openroadm/media-channel-interfaces">
          <max-freq>186206250.0</max-freq>
          <min-freq>186056250.0</min-freq>
        </mc-ttp>
      </interface>
      <interface>
        <name>NMC-DEG1-AMPTX-OUT-186131250</name>
        <description>Media-channel-186131250THz</description>
        <type>openROADM-if:networkMediaChannelConnectionTerminationPoint</type>
        <administrative-state>inService</administrative-state>
        <supporting-circuit-pack-name>DEG1-AMPTX</supporting-circuit-pack-name>
        <supporting-port>DEG1-AMPTX-OUT</supporting-port>
        <supporting-interface-list>OMS-DEG1-TTP-TX</supporting-interface-list>
        <nmc-ctp xmlns="http://org/openroadm/network-media-channel-interfaces">
          <frequency>186131250</frequency>
          <width>150000</width>
        </nmc-ctp>
      </interface>
      <roadm-connections>
        <connection-name>NMC-DEG1-AMPRX-IN-192081250 to NMC-SRG-SRG1-OUT1-192081250</connection-name>
        <connection-name>NMC-DEG2-AMPRX-IN-186131250 to NMC-DEG1-AMPTX-OUT-186131250</connection-name>
        <opticalControlMode>off</opticalControlMode>
        <target-output-power>0</target-output-power>
        <source>
          <src-if>NMC-DEG1-AMPRX-IN-192081250</src-if>
          <src-if>NMC-DEG2-AMPRX-IN-186131250</src-if>
        </source>
        <destination>
          <dst-if>NMC-SRG-SRG1-OUT1-192081250</dst-if>
          <dst-if>NMC-DEG1-AMPTX-OUT-186131250</dst-if>
        </destination>
      </roadm-connections>
    </org-openroadm-device>
+26 −2
Original line number Diff line number Diff line
@@ -338,7 +338,8 @@ def set_opticalconfig(db_engine : Engine, request : OpticalConfig):
                    ).returning(ORInterfaceModel.interface_uuid)
                    result = session.execute(update_stmt).fetchone()     
                    ifc_uuids.append(result)        

            else : 
                session.query(ORInterfaceModel).delete()         
    opticalconfig_id = run_transaction(sessionmaker(bind=db_engine), callback)
    return {'opticalconfig_uuid': opticalconfig_id}

@@ -640,7 +641,7 @@ def delete_opticalchannel(db_engine : Engine, messagebroker : MessageBroker, req
    opticalconfig_uuid = request.opticalconfig_id.opticalconfig_uuid
    channels = []
    config_type = None
   
    logging.info(f"DeleteOpticalchannel {request.config}")
    if "type" in config :
        config_type= config["type"]    
    if 'new_config' in config:
@@ -662,6 +663,23 @@ def delete_opticalchannel(db_engine : Engine, messagebroker : MessageBroker, req
                        "target_output_power": None,
                        "status"             : "DISABLED"
                    })
                    
            elif config_type == DeviceTypeEnum.OPEN_ROADM._value_:    
                    if 'new_config' in config and 'interfaces' in config['new_config']:
                        for i in config['new_config']['interfaces']:
                            channels.append({
                            "interface_uuid"      : interface_get_uuid(i['interface_name'],device_uuid),
                            'name'                : i["interface_name"],
                            "type"                :'Null',
                            "administrative_state": "Null",
                            "circuit_pack_name"   : 'Null',
                            "port"                : "Null",
                            "interface_list"      :'Null',
                            "frequency"           : "Null",
                            "width"               :  0,
                            "roadm_uuid"          : roadm_get_uuid(device_id),
                        })
                            
            elif config_type == DeviceTypeEnum.OPTICAL_ROADM._value_:
                channel_num = flow_id
               
@@ -714,6 +732,12 @@ def delete_opticalchannel(db_engine : Engine, messagebroker : MessageBroker, req
                stmt = stmt.returning(OpticalChannelModel.channel_uuid)
                opticalChannel_id = session.execute(stmt).fetchone()
                all_suceed.append(True)
        elif config_type == DeviceTypeEnum.OPEN_ROADM._value_:
            if len(channels) > 0:
                for i in channels : 
                    num_deleted = session.query(ORInterfaceModel).filter_by(interface_uuid=i['interface_uuid']).delete()
                    all_suceed.append(num_deleted > 0)

        return all_suceed

    all_deleted = run_transaction(sessionmaker(bind=db_engine), callback)
+9 −1
Original line number Diff line number Diff line
@@ -176,7 +176,15 @@ class OpenConfigServicer(DeviceServiceServicer):
            resources, conditions = extract_resources(config=config, device=device)

            driver : _Driver = get_driver(self.driver_instance_cache, device)
            results = driver.DeleteConfig(resources=resources,conditions=conditions)
            results,config_delete = driver.DeleteConfig(resources=resources,conditions=conditions)
            if config_delete and 'interfaces' in config_delete: 
                if 'new_config'in config  :
                    config["new_config"]=config_delete
                else :
                    config['new_config']  ={}
                    config["new_config"]=config_delete
                      
                request.config=json.dumps(config)
            for result in results:
                if  result  is not None:
                    is_all_good = False
+2 −1
Original line number Diff line number Diff line
@@ -190,7 +190,8 @@ def edit_config(
                str_config_messages=delete_optical_band(resources)
                
            elif (conditions['edit_type']=='or'):    
                str_config_messages,new_config=handle_or_deconfiguration(resources)    
                str_config_messages,interfaces=handle_or_deconfiguration(resources)   
                new_config["interfaces"]=interfaces
            else :
                str_config_messages=disable_media_channel(resources)
        
+65 −56
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ def define_interface_name (type:str,port:str,freq:int)->str:
       
def create_network_media_channel (resources,port,cross_conn_resources,interfaces,doc, tag, text):
    
    logging.info(f"nmc resources {resources}")
    #logging.info(f"nmc resources {resources}")
    
    #unwanted_keys= ['max-freq','min-freq']
    #config,_,_ = filter_config(resources=resources,unwanted_keys=unwanted_keys)
@@ -153,7 +153,7 @@ def create_network_media_channel (resources,port,cross_conn_resources,interfaces
                    "port":port,
                    "interface_list":interface_list["value"],
                    "frequency":freq_thz,
                    "width":width_dict,
                    "width":band['value'],
                    "roadm_uuid":""
                })

@@ -180,12 +180,12 @@ def create_network_media_channel (resources,port,cross_conn_resources,interfaces
                    newline = ''
                )
    #results.append(result)
    logging.info(f"nmc message {results}")
    #logging.info(f"nmc message {results}")
    # return (result,interfaces)


def or_create_media_channel (resources,port,cross_conn_resources,interfaces,doc, tag, text):
    logging.info(f'or_mc {resources} ')
    #logging.info(f'or_mc {resources} ')
    frequency_dict=next((r for r in resources if r['resource_key']== 'frequency'),None)
    freq_thz=None
    if frequency_dict and frequency_dict['value']:
@@ -195,21 +195,13 @@ def or_create_media_channel (resources,port,cross_conn_resources,interfaces,doc,
    min_freq=  int(Decimal(frequency_dict["value"])) - (int(band["value"])/2)
    max_freq =int(Decimal(frequency_dict["value"])) + (int(band["value"])/2)
   
    #cconfig,ports,index= filter_config(resources,unwanted_keys=[])
   
        
    or_device_ns="http://org/openroadm/device"
    or_interface_ns="http://org/openroadm/interfaces"

    results=[]
    #interfaces=[]
    logging.info(f"from openroadm mc {resources}")
    # doc, tag, text = Doc().tagtext()
    # with tag('config',xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"):
    #     with tag('org-openroadm-device', ('xmlns',or_device_ns)):
  
            # for lst_i in [list(j) for j in ports ] :
            #     for i in lst_i:
                
    if port: 
        
@@ -322,17 +314,6 @@ def srg_network_media_channel_handle (resources,port,cross_conn_resources,interf
            interface_list =next((r for r in resources if r['resource_key']== 'interface_list'+'-'+port),None)
            interface_name = next((r for r in resources if r['resource_key']== 'interface_name'+'-'+port+'-'+'nmc'),None)
            interface_type= next((r for r in resources if r['resource_key']== 'interface_type'+'-'+port+'-'+'nmc' ),None)
            logging.info(f'interface type {interface_type}')
            logging.info(f'interface name {interface_name}')
            # if interface_type and interface_type['value'] == 'nmc':
            #     if interface_name :
            #         cross_conn_resources['nmc_name']=interface_name['value']
            #         cross_conn_resources['nmc_port']=i
            
            # only port with no interface can be configured as srg
            # if interface_list and interface_type:
            #    if  interface_list['value'] != 'Null' and interface_type['value'] != 'srg':continue
            
            administrative_state= next((r for r in resources if r['resource_key']== 'administrative_state'+'-'+port),None)
            circuit_pack =next((r for r in resources if r['resource_key']=='supporting-circuit-pack-name'+'-'+port),None)
        
@@ -380,7 +361,7 @@ def srg_network_media_channel_handle (resources,port,cross_conn_resources,interf

def delete_interface (interface_name,doc, tag, text) : 
    
    with tag('interface',operation="delete"):
    with tag('interface', **{'nc:operation': 'delete'}):
                
        with tag('name'):text(interface_name)
   
@@ -396,7 +377,7 @@ def delete_coss_connection (resources,doc, tag, text) :
    src,dst = resources['ports']
    connection_name=resources[f'nmc_name_{src}']+' to '+resources[f'nmc_name_{dst}']
        
    with tag ('roadm-connections',operation="delete"):
    with tag ('roadm-connections', **{'nc:operation': 'delete'}):
        with tag('connection-name'):text(connection_name)
   
    result = indent(
@@ -414,9 +395,10 @@ def or_handler (resources):
  interfaces= []
  cross_conn_resources={"count":0}
  doc, tag, text = Doc().tagtext()
  for lst_i in [list(j) for j in ports ] :
  logging.info(f'or_handler {resources} ')
  with tag('config',xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"):
    with tag('org-openroadm-device', ('xmlns',or_device_ns)):
        for lst_i in [list(j) for j in ports ] :
            for i in lst_i:
                
                interface_list =next((r for r in resources if r['resource_key']== 'interface_list'+'-'+i),None)
@@ -446,7 +428,21 @@ def or_handler (resources):
  return (edit_templates,interfaces)                      
                  
  
def delete_mc (mc_interfaces): 
    or_device_ns="http://org/openroadm/device"
   
    or_device_ns_1='urn:ietf:params:xml:ns:netconf:base:1.0'
    cross_conn_resources={"count":0}
    doc, tag, text = Doc().tagtext()
    with tag('config',xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"):
        with tag('org-openroadm-device', xmlns=or_device_ns, **{'xmlns:nc': or_device_ns_1}):
            for i in mc_interfaces:
                delete_interface(i,doc,tag,text)
            
    return  indent(
                  doc.getvalue(),
                  indentation = ' '*2,
                  newline = '')         
    
def handle_or_deconfiguration (resources): 
    
@@ -456,6 +452,7 @@ def handle_or_deconfiguration (resources):
    config,ports,index= filter_config(resources,unwanted_keys=[])
    edit_templates= []
    interfaces= []
    mcs_to_delete=[]
    logging.info(f"resources from deconfigure or {resources}")
    cross_conn_resources={"count":0}
    doc, tag, text = Doc().tagtext()
@@ -470,6 +467,9 @@ def handle_or_deconfiguration (resources):
                                    cross_conn_resources[f'nmc_name_{p}']=interface_list['value']
                                    cross_conn_resources[f'nmc_port_{p}']=p
                                    cross_conn_resources['count']+=1
                                    interfaces.append({
                                        'interface_name':interface_list['value']
                                    })
                                  
                                    delete_interface(interface_list['value'],doc,tag,text)
                          else : 
@@ -478,7 +478,16 @@ def handle_or_deconfiguration (resources):
                                  cross_conn_resources[f'nmc_name_{p}']=nmc_interface['value']
                                  cross_conn_resources[f'nmc_port_{p}']=p
                                  cross_conn_resources['count']+=1
                                  mc_interface =  nmc_interface['value'].replace('NMC',"MC") 
                                  mc_interface =  nmc_interface['value'].replace('NMC',"MC-TTP") 
                                  interfaces.extend([{
                                        'interface_name':nmc_interface['value']
                                    },
                                                    {
                                        'interface_name':mc_interface
                                    }]
                                                    
                                                    )
                                  mcs_to_delete.append(mc_interface)
                                  #delete_interface(mc_interface,doc,tag,text)
                                  delete_interface(nmc_interface['value'],doc,tag,text)
                    if  cross_conn_resources['count']==2 : 
@@ -492,6 +501,6 @@ def handle_or_deconfiguration (resources):
                  doc.getvalue(),
                  indentation = ' '*2,
                  newline = '') )                
                             
    edit_templates.append(delete_mc(mcs_to_delete))                          
    return (edit_templates,interfaces)                
                
 No newline at end of file
Loading