a
    kÄ#d¿  ã                €   @   sn	  d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z& dd	l'm(Z( dd
l)m*Z* dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd€d�d‚dƒd„d…d†d‡dˆd‰dŠœZ+d‹dŒd�dŽd�d�d‘d’d“d”d•d–d—d˜d™dšd›dœd�dždŸd d¡d¢d£d¤d¥d¦d§d¨d©dªd«d¬d­d®dddddd¯d°d±d²d³d´dµd¶d·d¸d¹dºd»d¼d½d¾d¿dÀdÁdÂdÃdÄdÅdÆdÇdÈdÉdÊdËdÌdÍdddd6dÎdÏdÐdjdÑdÒdÓdÔœSZ,dÕdÖd×dØdÙœZ-dÚdÛdÜdÝdÞœZ.dßdàdádâdÞœZ/dãdädåœZ0dædçdèœZ1dédêdëdìdídîdïdðdñœZ2dídòdódôdõdöd÷dédñœZ3dídødùdúdûœZ4edüƒedýƒedþƒedÿƒ�d œZ5G �d�d„ �deƒZ6G �d�d„ �deƒZ7G �d�d„ �de7ƒZ8G �d�d„ �de7ƒZ9G �d	�d
„ �d
e7ƒZ:G �d�d„ �de7ƒZ;G �d�d„ �de7ƒZ<G �d�d„ �de7ƒZ=g �d¢Z>G �d�d„ �deƒZ?ee:e?�d�d� ee?e	j@ƒ G �d�d„ �deƒZAG �d�d„ �de7ƒZBG �d�d„ �de7ƒZCG �d�d„ �de7ƒZDG �d�d„ �de7ƒZEG �d �d!„ �d!e7ƒZFG �d"�d#„ �d#e7ƒZGG �d$�d%„ �d%e7ƒZHG �d&d!„ d!e7ƒZIG �d'dz„ dze7ƒZJG �d(�d)„ �d)eƒZKG �d*�d+„ �d+eƒZLG �d,d"„ d"e7ƒZMG �d-d{„ d{e7ƒZNG �d.dM„ dMe7ƒZOG �d/dU„ dUe7ƒZPG �d0d>„ d>e7ƒZQG �d1dD„ dDe7ƒZRG �d2�d3„ �d3e7ƒZSG �d4�d5„ �d5e7ƒZTG �d6dV„ dVe7ƒZUeQeSeReOePeUeT�d7œZV�d8�d9„ ZWG �d:d7„ d7e7ƒZXG �d;�d<„ �d<eƒZYG �d=�d>„ �d>eƒZZG �d?�d@„ �d@eƒZ[G �dAd$„ d$e7ƒZ\�dB�dCiZ]�dD�dE�dFœZ^G �dGd#„ d#e7ƒZ_G �dHd|„ d|e7ƒZ`G �dI�dJ„ �dJeƒZaG �dKdq„ dqeaƒZbG �dL�dM„ �dMeaƒZcG �dN�dO„ �dOeaƒZdG �dPds„ dseaƒZe�dQ�dR�dS�dT�dUœZfef g�dV�dW„ eh�dB�dXƒD ƒ¡ ef g�dY�dW„ eh�dX�dZƒD ƒ¡ ef g�d[�dW„ eh�d\�d]ƒD ƒ¡ G �d^�d_„ �d_eaƒZiG �d`�da„ �daeaƒZjG �db�dc„ �dceaƒZkecececebedeeejejejeiek�ddœZl�de�df„ ZmG �dg�dh„ �dhe7ƒZnG �did„ denƒZoG �djd„ denƒZp�dk�dl�dm�dn�do�dp�dqœZqeq g�dr�dW„ eh�ds�dtƒD ƒ¡ dé�du�dv�dwœZrer g�dx�dW„ eh�dy�dtƒD ƒ¡ G �dz�d{„ �d{eƒZsG �d|�d}„ �d}eƒZtG �d~�d„ �deƒZueDeEeFeGeHeIeMe_e\e8e8e8e8e8e8e8e8eXeJeNe`e9e9e9e9e9e9e9e9�d€œZv�d��d‚„ Zw�dƒ�d„„ ZxG �d…�d†„ �d†eƒZyG �d‡�dˆ„ �dˆeƒZze$ {ez¡ G �d‰�dŠ„ �dŠeƒZ|e$ {e|¡ dS (‹  z
PNIO RPC endpoints
é    N)ÚUUID)ÚPacketÚRawÚbind_layers)Úconf)ÚBitFieldÚ	ByteFieldÚBitEnumFieldÚByteEnumFieldÚConditionalFieldÚFieldLenFieldÚFieldListFieldÚIntFieldÚIntEnumFieldÚLenFieldÚMACFieldÚPadFieldÚPacketFieldÚPacketListFieldÚShortEnumFieldÚ
ShortFieldÚStrFixedLenFieldÚStrLenFieldÚ	UUIDFieldÚ
XByteFieldÚ	XIntFieldÚXShortEnumFieldÚXShortField)ÚDceRpc4ÚDceRpc4Payload)ÚEField)Ú	bytes_hex)ÚRandUUIDÚAlarmNotification_HighÚAlarmNotification_LowZIODWriteReqHeaderZIODReadReqHeaderZDiagnosisDataZExpectedIdentificationDataZRealIdentificationDataZSubsituteValueZRecordInputDataObjectElementZRecordOutputDataObjectElementZARDataZLogBookDataZAPIDataZSRLDatazI&M0zI&M1zI&M2zI&M3zI&M4zI&M0FilterDataSubmodulezI&M0FilterDataModulezI&M0FilterDataDeviceÚ
ARBlockReqÚIOCRBlockReqÚAlarmCRBlockReqÚExpectedSubmoduleBlockReqZPrmServerBlockReqZMCRBlockReqZARRPCBlockReqZARVendorBlockReqZIRInfoBlockZSRInfoBlockZ
ARFSUBlockZIODBlockReq_connect_endZIODBlockReq_plugZIOXBlockReq_connectZIOXBlockReq_plugZReleaseBlockReqZIOXBlockReq_companionZIOXBlockReq_rt_class_3ZIODBlockReq_connect_beginZSubmoduleListBlockZPDPortDataCheckZPdevDataÚPDPortDataAdjustZ
PDSyncDataZIsochronousModeDataZPDIRDataZPDIRGlobalDataZPDIRFrameDataZPDIRBeginEndDataÚAdjustDomainBoundaryZSubBlock_check_PeersZSubBlock_check_LineDelayZSubBlock_check_MAUTypeZAdjustMAUTypeZPDPortDataRealÚAdjustMulticastBoundaryZPDInterfaceMrpDataAdjustZPDInterfaceMrpDataRealZPDInterfaceMrpDataCheckZPDPortMrpDataAdjustZPDPortMrpDataRealZMrpManagerParamsZMrpClientParamsZMrpRingStateDataÚAdjustLinkStateZCheckLinkStateZCheckSyncDifferenceZCheckMAUTypeDifferenceZPDPortFODataRealZFiberOpticManufacturerSpecificZPDPortFODataAdjustZPDPortFODataCheckÚAdjustPeerToPeerBoundaryÚAdjustDCPBoundaryZAdjustPreambleLengthZFiberOpticDiagnosisInfoZPDIRSubframeDataZSubframeBlockZ
PDTimeDataZPDNCDataCheckZMrpInstanceDataAdjustBlockZMrpInstanceDataRealBlockZMrpInstanceDataCheckBlockZPDInterfaceDataRealZPDInterfaceAdjustZPDPortStatisticZMultipleBlockHeaderZCOContainerContentZRecordDataReadQueryZFSHelloBlockZFSParameterBlockZPDInterfaceFSUDataAdjustZARFSUDataAdjustZAutoConfigurationZAutoConfigurationCommunicationZAutoConfigurationConfigurationZAutoConfigurationIsochronousZUploadBLOBQueryZ
UploadBLOBZNestedDiagnosisInfoÚMaintenanceItemZUploadRecordÚiParameterItemZRetrieveRecordZRetrieveAllRecordZAlarmAckHighZAlarmAckLowZIODWriteResHeaderZIODReadResHeaderÚ
ARBlockResÚIOCRBlockResÚAlarmCRBlockResZModuleDiffBlockZPrmServerBlockResZARServerBlockResZARRPCBlockResZARVendorBlockResZIODBlockRes_connect_endZIODBlockRes_plugZIOXBlockRes_connectZIOXBlockRes_plugZReleaseBlockResZIOXBlockRes_companionZIOXBlockRes_rt_class_3ZIODBlockRes_connect_begin)é   é   é   é	   é   é   é   é   é   é   é   é   é   é   é    é!   é"   é#   é$   é0   é1   é2   é  é  é  é  i  i  i  i  i	  i
  i  é  é  é  é  é  é  é  é  i  i   i  é  i  i  i  i  i  i  é	  i
  i  i  é  i  é  i  i  i  i  i  i  i  i  é  i  i  i  i   i!  i"  i#  é$  é%  i&  i(  i*  i+  i-  i0  i1  i2  i3  i@  iP  iQ  i   i  i   i   i  i  i	  i   i  i  i  i 
  i
  i
  i   i  i  i  i  é€  é€  é€  é	€  é�  é�  é�  i�  i�  i�  i�  i�  é�  i�  i�  i�  i�  i�  i�  i�  Z"ExpectedIdentificationData_subslotZRealIdentificationData_subslotZDiagnosis_channel_subslotZDiagnosis_all_subslotZDiagnosis_Maintenance_subslotZ'Maintenance_required_in_channel_subslotZ'Maintenance_demanded_in_channel_subslotZ,Maintenance_required_in_all_channels_subslotZ,Maintenance_demanded_in_all_channels_subslotZSubstitueValue_subslotZPDIRSubframeData_subslotZ$RecordInputDataObjectElement_subslotZ%RecordOutputDataObjectElement_subslotZPDPortDataReal_subslotZPDPortDataCheck_subslotZPDIRData_subslotZExpected_PDSyncData_subslotZPDPortDataAdjust_subslotZIsochronousModeData_subslotZExpected_PDTimeData_subslotZPDInterfaceMrpDataReal_subslotZPDInterfaceMrpDataCheck_subslotZ PDInterfaceMrpDataAdjust_subslotZPDPortMrpDataAdjust_subslotZPDPortMrpDataReal_subslotZPDPortFODataReal_subslotZPDPortFODataCheck_subslotZPDPortFODataAdjust_subslotZPdNCDataCheck_subslotZPDInterfaceAdjust_subslotZPDPortStatistic_subslotZPDInterfaceDataReal_subslotZ!Expected_PDInterfaceFSUDataAdjustZEnergy_saving_profile_record_0ZCombinedObjectContainerZ Sequence_events_profile_record_0z Expect edIdentificationData_slotzRealId entificationData_slotzDiagno sis_channel_slotZDiagnosis_all_slotZDiagnosis_Maintenance_slotZ$Maintenance_required_in_channel_slotZ$Maintenance_demanded_in_channel_slotZ)Maintenance_required_in_all_channels_slotZ)Maintenance_demanded_in_all_channels_slotZExpectedIdentificationData_ARZRealIdentificationData_ARZModuleDiffBlock_ARZDiagnosis_channel_ARZDiagnosis_all_ARZDiagnosis_Maintenance_ARZ"Maintenance_required_in_channel_ARZ"Maintenance_demanded_in_channel_ARZ'Maintenance_required_in_all_channels_ARZ'Maintenance_demanded_in_all_channels_ARZWriteMultipleZARFSUDataAdjust_ARZRealIdentificationData_APIZDiagnosis_channel_APIZDiagnosis_all_APIZDiagnosis_Maintenance_APIZ#Maintenance_required_in_channel_APIZ#Maintenance_demanded_in_channel_APIZ(Maintenance_required_in_all_channels_APIZ(Maintenance_demanded_in_all_channels_APIZ
ARData_APIZDiagnosis_Maintenance_devicezI&M0FilterDataZ
PDRealDataZPDExpectedDataZ
GSD_uploadZNested_Diagnosis_infoZTrigger_index_CMSM)Sé €  r]   i
€  i€  i€  i€  i€  i€  i€  i€  i €  i(€  i)€  i*€  i+€  i,€  i-€  i/€  i0€  i1€  iP€  iQ€  iR€  iS€  iT€  i`€  ia€  ib€  ip€  iq€  ir€  i€€  i�€  i €  i°€  iÀ€  ið¯  iñ¯  iò¯  ió¯  iô¯  é À  iÀ  i
À  iÀ  iÀ  iÀ  iÀ  iÀ  iÀ  i à  ià  ià  i
à  ià  ià  ià  ià  ià  ià  é@à  iPà  i ð  i
ð  ið  ið  ið  ið  ið  ið  i ð  iø  i ø  i!ø  i0ø  i1ø  i@ø  iAø  iBø  iPø  i`ø  iaø  iÿû  ZIOCARSingleZIOSARZIOCARSingle_RT_CLASS_3ZIOCARSR)r4   é   r8   rB   ZInputCRZOutputCRZMulticastProviderCRZMulticastConsumerCR)r4   r5   é   é   Z
RT_CLASS_1Z
RT_CLASS_2Z
RT_CLASS_3ZRT_CLASS_UDPZRadioz1000-BaseT-FD)r   é   ÚNonezPolymeric-Optical-Fiber)r   é   ÚReservedZUpZDownZTestingÚUnknownZDormantZ
NotPresentZLowerLayerDown)r   r4   r5   ri   rj   é   rh   é   zDisabled/DiscardingZBlockingZ	ListeningZLearningZ
ForwardingZBrokenzCopper cablezFiber optic cablezRadio communication)r   r4   r5   ri   z$dea00001-6c97-11d1-8271-00a02442df7dz$dea00002-6c97-11d1-8271-00a02442df7dz$dea00003-6c97-11d1-8271-00a02442df7dz$dea00004-6c97-11d1-8271-00a02442df7d)ÚUUID_IO_DeviceInterfaceÚUUID_IO_ControllerInterfaceZUUID_IO_SupervisorInterfaceZ UUID_IO_ParameterServerInterfacec                   @   s>   e Zd ZdZeddeƒeddƒeddƒeddƒgZd	d
„ Z	dS )ÚBlockHeaderz2Abstract packet to centralize block headers fieldsÚ
block_typeNÚblock_lengthZblock_version_highr4   Zblock_version_lowr   c                 C   s
   t ƒ ‚d S ©N©ÚNotImplementedError©ÚclsÚnameÚbasesÚdct© r   úM/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/pnio_rpc.pyÚ__new__N  s    zBlockHeader.__new__)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚBLOCK_TYPES_ENUMr   r   Úfields_descr�   r   r   r   r€   rt   E  s   
ürt   c                   @   sB   e Zd ZdZeedddd„ d�gZdZdd	„ Zd
d„ Z	dd„ Z
dS )ÚBlockz#A generic block packet for PNIO RPCÚloadÚ c                 C   s
   | j d S )Nr5   ©rv   ©Úpktr   r   r€   Ú<lambda>V  ó    zBlock.<lambda>©Zlength_fromr   c                 C   sH   | j d u r:t|ƒd }|d d… t d|¡ |dd …  }t | ||¡S )Nrj   r5   ú!H)rv   ÚlenÚstructÚpackr   Ú
post_build)ÚselfÚpÚpayÚlengthr   r   r€   r•   [  s    
$zBlock.post_buildc                 C   s    |   ¡ }|d |… ||d … fS rw   )Úpayload_length)r–   Úsr™   r   r   r€   Úextract_paddingd  s    zBlock.extract_paddingc                 C   s   dS )zK A function for each block, to determine the length of
        the payload r   r   ©r–   r   r   r€   rš   j  s    zBlock.payload_lengthN)r‚   rƒ   r„   r…   rt   r   r‡   ru   r•   rœ   rš   r   r   r   r€   rˆ   R  s   þ	rˆ   c                   @   s¢   e Zd ZdZeedddd�eddƒedd	ƒed
d	ƒe	dd	dƒe	dd	dƒe	dd	dƒe	dd	dƒe	dd	dƒe	dd	dƒe	dd	dƒe	dd	dƒedd	ƒgZ
dd„ Zdd„ ZdS )ÚIODControlReqzIODControl request blockÚpaddingrŠ   r5   ©r™   ÚARUUIDNÚ
SessionKeyr   ÚAlarmSequenceNumberÚControlCommand_reservedr7   ÚControlCommand_PrmBeginr4   Ú!ControlCommand_ReadyForRT_CLASS_3Ú ControlCommand_ReadyForCompanionÚControlCommand_DoneÚControlCommand_ReleaseÚControlCommand_ApplicationReadyÚControlCommand_PrmEndÚControlBlockPropertiesc                 C   s"  | j d u �r| jr,t dd¡|dd …  }nè| jrLt dd¡|dd …  }nÈ| jrlt dd¡|dd …  }n¨| jrŒt dd¡|dd …  }nˆ| jrÐ| jdkr¶t dd¡|dd …  }nt dd	¡|dd …  }nD| j	�r| jdkrüt dd
¡|dd …  }nt dd¡|dd …  }t
 | ||¡S )Nr‘   rU   r5   rT   rS   rR   r   rQ   rP   rO   rN   )ru   r¥   r“   r”   r¦   r§   r©   rª   r£   r«   rˆ   r•   ©r–   r—   r˜   r   r   r€   r•   †  s$    

zIODControlReq.post_buildc                 C   s2   t ƒ }dD ]}| ||  |¡¡ q
| jd |_|S )ú€Generate the response block of this request.
        Careful: it only sets the fields which can be set from the request
        )r¡   r¢   r£   re   )ÚIODControlResÚsetfieldvalÚgetfieldvalru   ©r–   ÚresÚfieldr   r   r€   Úget_response�  s
    zIODControlReq.get_response)r‚   rƒ   r„   r…   rt   r   r   r   r   r   r‡   r•   rµ   r   r   r   r€   rž   r  s$   







ñrž   c                   @   s–   e Zd ZdZeedddd�eddƒedd	ƒed
d	ƒe	dd	dƒe	dd	dƒe	dd	dƒe	dd	dƒe	dddƒe	dd	dƒe	dd	dƒe	dd	dƒedd	ƒgZ
dZdS )r¯   zIODControl response blockrŸ   rŠ   r5   r    r¡   Nr¢   r   r£   r¤   r7   r¥   r4   r¦   r§   r¨   r©   rª   r«   r¬   rd   )r‚   rƒ   r„   r…   rt   r   r   r   r   r   r‡   ru   r   r   r   r€   r¯   ©  s"   







ñr¯   c                   @   s€   e Zd ZdZeeddƒeddƒeddƒeddƒeddƒe	d	d
dd�e
ddeƒedddd�e	dd
dd�g
ZdZdd„ Zdd„ ZdS )ÚIODWriteReqzIODWrite request blockÚseqNumr   r¡   NÚAPIÚ
slotNumberÚsubslotNumberrŸ   rŠ   r5   r    ÚindexÚrecordDataLengthÚI©ÚfmtÚ	RWPaddingr>   r6   c                 C   s   | j S rw   ©r¼   r�   r   r   r€   rš   Ö  s    zIODWriteReq.payload_lengthc                 C   s&   t ƒ }dD ]}| ||  |¡¡ q
|S )r®   ©r·   r¡   r¸   r¹   rº   r»   )ÚIODWriteResr°   r±   r²   r   r   r€   rµ   Ù  s    zIODWriteReq.get_response©r‚   rƒ   r„   r…   rt   r   r   r   r   r   r   ÚIOD_WRITE_REQ_INDEXr   r‡   ru   rš   rµ   r   r   r   r€   r¶   Å  s   
ör¶   c                   @   sŒ   e Zd ZdZeeddƒeddƒeddƒeddƒeddƒe	d	d
dd�e
ddeƒedddd�eddƒeddƒedddgƒe	dd
dd�gZdZdS )rÃ   zIODWrite response blockr·   r   r¡   Nr¸   r¹   rº   rŸ   rŠ   r5   r    r»   r¼   r½   r¾   ÚadditionalValue1ÚadditionalValue2ÚstatusÚOKrÀ   r8   r_   )r‚   rƒ   r„   r…   rt   r   r   r   r   r   r   rÅ   r   r   r‡   ru   r   r   r   r€   rÃ   ä  s    
órÃ   c                   @   s€   e Zd ZdZeeddƒeddƒeddƒeddƒeddƒe	d	d
dd�e
ddeƒedddd�e	dd
dd�g
ZdZdd„ Zdd„ ZdS )Ú
IODReadReqzIODRead request blockr·   r   r¡   Nr¸   r¹   rº   rŸ   rŠ   r5   r    r»   r¼   r½   r¾   rÀ   r>   r7   c                 C   s   | j S rw   rÁ   r�   r   r   r€   rš   
  s    zIODReadReq.payload_lengthc                 C   s&   t ƒ }dD ]}| ||  |¡¡ q
|S )NrÂ   )Ú
IODReadResr°   r±   r²   r   r   r€   rµ     s    zIODReadReq.get_responserÄ   r   r   r   r€   rÊ   ú  s   
örÊ   c                   @   s€   e Zd ZdZeeddƒeddƒeddƒeddƒeddƒe	d	d
dd�e
ddeƒedddd�eddƒeddƒe	dd
dd�gZdZdS )rË   zIODRead response blockr·   r   r¡   Nr¸   r¹   rº   rŸ   rŠ   r5   r    r»   r¼   r½   r¾   rÆ   rÇ   rÀ   r;   r`   )r‚   rƒ   r„   r…   rt   r   r   r   r   r   r   rÅ   r   r‡   ru   r   r   r   r€   rË     s   
ôrË   )ZNo_F_WD_Time2_No_F_iPar_CRCZNo_F_WD_Time2_F_iPar_CRCZF_WD_Time2_No_F_iPar_CRCZF_WD_Time2_F_iPar_CRCZ
reserved_4Z
reserved_5Z
reserved_6Z
reserved_7c                   @   sä   e Zd ZdZdZedddƒedddƒedddg d	¢ƒed
ddg d¢ƒedddƒedddƒedddg d¢ƒedddeƒedddƒedddƒeddƒeddƒe	ddƒe
dd„ e	ddƒd�e
dd„ eddƒd�eddƒgZeddiiZd S )!ÚFParametersBlockz F-Parameters configuration blockzF-Parameters BlockZF_Prm_Flag1_Reserved_7r   r4   Z
F_CRC_SeedZF_CRC_Lengthr5   )zCRC-24ZdepreciatedzCRC-32ÚreservedZF_SIL)ZSIL_1ZSIL_2ZSIL_3ZNo_SILZF_Check_iParZF_Check_SeqNrZF_Par_Version)ZV1ZV2Z
reserved_2Z
reserved_3Ú
F_Block_IDri   ZF_Prm_Flag2_ReservedZF_PassivationZF_Source_AddZ
F_Dest_AddZ	F_WD_Timec                 C   s   |   d¡d@ dkS )NrÎ   rh   r5   ©r±   ©r—   r   r   r€   rŽ   G  r�   zFParametersBlock.<lambda>ZF_WD_Time_2©ZcondÚfldc                 C   s   |   d¡d@ dkS )NrÎ   rp   r4   rÏ   rÐ   r   r   r€   rŽ   J  r�   Z
F_iPar_CRCZ	F_Par_CRCr»   rm   N)r‚   rƒ   r„   r…   r|   r   r	   ÚF_PARAMETERS_BLOCK_IDr   r   r   r   r‡   r¶   Úoverload_fieldsr   r   r   r€   rÌ   /  sB   

ÿ

ÿ

þþæÿÿrÌ   rm   )r»   c                   @   s   e Zd ZdZdd„ ZdS )ÚPadFieldWithLenz<PadField which handles the i2len function to include paddingc                 C   s   | j  ||¡}||  ||¡ S )z9get the length of the field, including the padding length)rÒ   Úi2lenÚpadlen)r–   r�   ÚvalZfld_lenr   r   r€   rÖ   ]  s    zPadFieldWithLen.i2lenN)r‚   rƒ   r„   r…   rÖ   r   r   r   r€   rÕ   Z  s   rÕ   c                   @   s²   e Zd ZdZeeddƒeddƒeddƒedd	ƒed
d	ƒe	dddd�e
ddeƒeddddd�e	dddd�edg eeddeƒdƒdd„ d�gZdZdZdZd	Zd	Zdd„ Zdd„ ZdS ) ÚIODWriteMultipleReqzIODWriteMultiple requestr·   r   r¡   Nr¸   ì   ÿÿ r¹   éÿÿ  rº   rŸ   rŠ   r5   r    r»   r¼   r½   Úblocks©r¿   Z	length_ofrÀ   r>   rj   c                 C   s   | j S rw   rÁ   rŒ   r   r   r€   rŽ   r  r�   zIODWriteMultipleReq.<lambda>r�   r6   rg   c                 C   sØ   | j d u r.|d d… t dd¡ |dd …  }|  d¡\}}| | |¡dkrÊt|d ƒ}|j || ¡}|dkrÊ|d | … }| jd u rÊt 	d|d	d
… ¡d }||8 }|d d	… t d|¡ |d
d …  }t
 | ||¡S )Nr5   r‘   é<   rj   rÜ   r   éÿÿÿÿz!IrF   é(   )rv   r“   r”   Zgetfield_and_valZi2countr’   r´   r×   r¼   Úunpackr   r•   )r–   r—   r˜   rÒ   rØ   r™   Úpadr   r   r€   r•   {  s    
$
$zIODWriteMultipleReq.post_buildc                 C   sT   t ƒ }dD ]}| ||  |¡¡ q
g }|  d¡D ]}| | ¡ ¡ q0| d|¡ |S )r®   rÂ   rÜ   )ÚIODWriteMultipleResr°   r±   Úappendrµ   )r–   r³   r´   Z
res_blocksÚblockr   r   r€   rµ   �  s    z IODWriteMultipleReq.get_response)r‚   rƒ   r„   r…   rt   r   r   r   r   r   r   rÅ   r   r   rÕ   r   r¶   r‡   ru   r»   r¸   r¹   rº   r•   rµ   r   r   r   r€   rÙ   c  s.   
þõrÙ   c                   @   s´   e Zd ZdZeeddƒeddƒeddƒedd	ƒed
d	ƒe	dddd�e
ddeƒeddddd�eddƒeddƒedddgƒe	dddd�edg eddeƒdd„ d�gZdZdZdd „ ZdS )!rã   zIODWriteMultiple responser·   r   r¡   Nr¸   rÚ   r¹   rÛ   rº   rŸ   rŠ   r5   r    r»   r¼   r½   rÜ   rÝ   rÆ   rÇ   rÈ   rÉ   rÀ   r8   c                 C   s   | j S rw   rÁ   rŒ   r   r   r€   rŽ   ²  r�   zIODWriteMultipleRes.<lambda>r�   r_   rg   c                 C   s<   | j d u r.|d d… t dd¡ |dd …  }t | ||¡S )Nr5   r‘   rÞ   rj   )rv   r“   r”   r   r•   r­   r   r   r€   r•   ¸  s    
$zIODWriteMultipleRes.post_build)r‚   rƒ   r„   r…   rt   r   r   r   r   r   r   rÅ   r   r   r   r   rÃ   r‡   ru   r»   r•   r   r   r   r€   rã   ¡  s*   
ÿòrã   c                   @   sž   e Zd ZdZeeddƒeddƒedddd�ed	dd
d�eddƒedddd�eddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒgZdZ	dS )ÚIM0Blockz Identification and Maintenance 0ZVendorIDHighr   ZVendorIDLowZOrderIDrŠ   r;   r    ZIMSerialNumberr8   ZIMHardwareRevisionZIMSWRevisionPrefixÚVr4   Z!IMSWRevisionFunctionalEnhancementZIMSWRevisionBugFixZIMSWRevisionInternalChangeZIMRevisionCounterZIMProfileIDZIMProfileSpecificTypeZIMVersionMajorZIMVersionMinorZIMSupportedrB   N)
r‚   rƒ   r„   r…   rt   r   r   r   r‡   ru   r   r   r   r€   ræ   Â  s&   ðræ   c                   @   s2   e Zd ZdZeedddd�edddd�gZdZd	S )
ÚIM1Blockz Identification and Maintenance 1ZIMTagFunctionrŠ   rB   r    ZIMTagLocationr=   rC   N©r‚   rƒ   r„   r…   rt   r   r‡   ru   r   r   r   r€   rè   Û  s   ýrè   c                   @   s&   e Zd ZdZeedddd�gZdZdS )ÚIM2Blockz Identification and Maintenance 2ZIMDaterŠ   r8   r    rD   Nré   r   r   r   r€   rê   ç  s
   þrê   c                   @   s&   e Zd ZdZeedddd�gZdZdS )ÚIM3Blockz Identification and Maintenance 3ZIMDescriptorrŠ   é6   r    rE   Nré   r   r   r   r€   rë   ò  s
   þrë   c                   @   s$   e Zd ZdZeedddƒgZdZdS )ÚIM4Blockz Identification and Maintenance 4ZIMSignaturerŠ   rì   rF   Nré   r   r   r   r€   rí   ý  s
   
þrí   c                   @   s  e Zd ZdZeeddeƒeddƒeddƒe	ddƒed	dƒe
d
ddƒedddddgƒe
dddƒe
dddƒe
dddƒedddg d¢ƒedddddgƒe
dddƒedddddgƒe
dddƒeddddd iƒed!d"ƒed#d$ƒed%dd&d'd(�ed'd)d*d+„ d,�gZd-Zd.d/„ ZdS )0r%   z&Application relationship block requestÚARTyper4   r¡   Nr¢   r   ZCMInitiatorMacAddZCMInitiatorObjectUUIDZ#ARProperties_PullModuleAlarmAllowedZARProperties_StartupModeZLegacyZAdvancedZARProperties_reserved_3rh   ZARProperties_reserved_2é   Z#ARProperties_AcknowledgeCompanionARZARProperties_CompanionARr5   )Z	Single_ARZFirst_ARZCompanion_ARrÍ   ZARProperties_DeviceAccessÚExpectedSubmoduleZControlled_by_IO_device_appZARProperties_reserved_1ri   Z"ARProperties_ParametrizationServerZExternal_PrmServerZCM_InitatorZ&ARProperties_SupervisorTakeoverAllowedZARProperties_StateZActiveZ CMInitiatorActivityTimeoutFactoriè  ZCMInitiatorUDPRTPorté’ˆ  ÚStationNameLengthÚHZCMInitiatorStationNamerÝ   rŠ   c                 C   s   | j S rw   )rò   rŒ   r   r   r€   rŽ   &  r�   zARBlockReq.<lambda>r�   rJ   c                 C   s&   t ƒ }dD ]}| ||  |¡¡ q
|S )r®   )rî   r¡   r¢   )r1   r°   r±   r²   r   r   r€   rµ   +  s    zARBlockReq.get_response)r‚   rƒ   r„   r…   rt   r   ÚAR_TYPEr   r   r   r   r	   r   r   r‡   ru   rµ   r   r   r   r€   r%     sJ   

ÿ


ÿÿ
ÿ
ÿÿåc                   @   sD   e Zd ZdZeeddeƒeddƒeddƒe	ddƒed	d
ƒgZ
dZdS )r1   z'Application relationship block responserî   r4   r¡   Nr¢   r   ZCMResponderMacAddZCMResponderUDPRTPortrñ   ra   )r‚   rƒ   r„   r…   rt   r   rô   r   r   r   r‡   ru   r   r   r   r€   r1   5  s   
ú	c                   @   s8   e Zd ZdZdZeddƒeddƒeddƒgZdd„ Zd	S )
ÚIOCRAPIObjectz:API item descriptor used in API description of IOCR blockszAPI itemÚ
SlotNumberr   ÚSubslotNumberZFrameOffsetc                 C   s   d |fS rw   r   ©r–   r›   r   r   r€   rœ   M  s    zIOCRAPIObject.extract_paddingN)	r‚   rƒ   r„   r…   r|   r   r   r‡   rœ   r   r   r   r€   rõ   D  s   ýrõ   c                
   @   sd   e Zd ZdZdZeddƒedddd�edg edd	„ d
�edddd�edg edd	„ d
�gZ	dd„ Z
dS )ÚIOCRAPIz"API description used in IOCR blockr¸   r   ÚNumberOfIODataObjectsNZIODataObjects)Úcount_ofc                 C   s   | j S rw   )rú   rÐ   r   r   r€   rŽ   Y  r�   zIOCRAPI.<lambda>©Z
count_fromÚNumberOfIOCSZIOCSsc                 C   s   | j S rw   )rý   rÐ   r   r   r€   rŽ   ]  r�   c                 C   s   d |fS rw   r   rø   r   r   r€   rœ   `  s    zIOCRAPI.extract_padding)r‚   rƒ   r„   r…   r|   r   r   r   rõ   r‡   rœ   r   r   r   r€   rù   Q  s"   ÿÿÿÿørù   c                   @   sú   e Zd ZdZeeddeƒeddƒeddƒeddd	ƒed
ddƒedddƒe	ddde
ƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒe	ddd dd!iƒed"ddƒed#dd$ƒed%d&ƒed'd&d(d)d*�ed)g ed+d,„ d-�gZd.Zd/d0„ Zd&S )1r&   z(IO Connection Relationship block requestÚIOCRTyper4   ÚIOCRReferenceÚLTrñ   ZIOCRProperties_reserved3r   r6   ZIOCRProperties_reserved2é   ZIOCRProperties_reserved1r7   ZIOCRProperties_RTClassrj   Z
DataLengthrà   ÚFrameIDre   ZSendClockFactorrB   ZReductionRatioZPhaseÚSequenceZFrameSendOffsetrÚ   ZWatchdogFactoré
   ZDataHoldFactorZIOCRTagHeader_IOUserPriorityrh   ri   ZIOCRPriorityZIOCRTagHeader_reservedZIOCRTagHeader_IOCRVLANIDrï   ZIOCRMulticastMACAddNÚNumberOfAPIsró   ÚAPIs©r¿   rû   c                 C   s   | j S rw   ©r  rÐ   r   r   r€   rŽ   ‚  r�   zIOCRBlockReq.<lambda>rü   rK   c                 C   s&   t ƒ }dD ]}| ||  |¡¡ q
|S )r®   )rþ   rÿ   r  )r2   r°   r±   r²   r   r   r€   rµ   ‡  s    zIOCRBlockReq.get_response)r‚   rƒ   r„   r…   rt   r   Ú	IOCR_TYPEr   r   r	   ÚIOCR_BLOCK_REQ_IOCR_PROPERTIESr   r   r   r   r   rù   r‡   ru   rµ   r   r   r   r€   r&   d  sB   



ÿÿ

ÿåc                   @   s4   e Zd ZdZeeddeƒeddƒeddƒgZdZ	dS )	r2   z)IO Connection Relationship block responserþ   r4   rÿ   r  re   rb   N)
r‚   rƒ   r„   r…   rt   r   r	  r   r‡   ru   r   r   r   r€   r2   ‘  s   
üc                   @   s4   e Zd Zeedddd�eddeƒeddƒgZdZ	d	S )
r,   rŸ   rŠ   r5   r    Z	LinkStater   ZAdjustPropertiesrZ   N)
r‚   rƒ   r„   rt   r   r   ÚLINKSTATE_LINKr   r‡   ru   r   r   r   r€   r,   �  s   
üc                   @   s@   e Zd Zeedddd�eddƒeddƒeeddƒdƒgZd	Z	d
S )r-   Úpadding1rŠ   r5   r    ZpeerToPeerBoundaryr   ÚadjustPropertiesÚpadding2r[   N©
r‚   rƒ   r„   rt   r   r   r   r   r‡   ru   r   r   r   r€   r-   ¨  s   ûc                	   @   sX   e Zd Zeedddd�eddddd	œƒed
dddd	œƒeddƒeeddƒdƒgZdZ	dS )r*   r  rŠ   r5   r    ZDomainBoundaryIngressr   zNo Blockrˆ   ©r   r4   ZDomainBoundaryEgressr  r  rW   N)
r‚   rƒ   r„   rt   r   r   r   r   r‡   ru   r   r   r   r€   r*   ´  s   þþôc                   @   s@   e Zd Zeedddd�eddƒeddƒeeddƒdƒgZd	Z	d
S )r+   r  rŠ   r5   r    ZMulticastAddressr   r  r  rY   Nr  r   r   r   r€   r+   Ç  s   ûc                   @   s6   e Zd ZeeeddƒdƒeddeƒeddƒgZdZ	dS )	ÚAdjustMauTyperŸ   r   r5   ZMAUTyper4   r  rX   N)
r‚   rƒ   r„   rt   r   r   r   ÚMAU_TYPEr‡   ru   r   r   r   r€   r  Ó  s   
ür  c                   @   s6   e Zd ZeeeddƒdƒeddeƒeddƒgZdZ	dS )ÚAdjustMauTypeExtensionrŸ   r   r5   ZMAUTypeExtensionr  é)  N)
r‚   rƒ   r„   rt   r   r   r   ÚMAU_EXTENSIONr‡   ru   r   r   r   r€   r  Þ  s   
ür  c                   @   s@   e Zd Zeedddd�eddƒeddƒeeddƒdƒgZd	Z	d
S )r.   r  rŠ   r5   r    ZdcpBoundaryr   r  r  r\   Nr  r   r   r   r€   r.   é  s   û)rW   rX   rY   rZ   r[   r\   r  c                 O   sB   t }t d| d d… ¡d }|tv r,t| }|| g|¢R i |¤ŽS )Nr‘   r5   r   )rˆ   r“   rá   ÚPDPORT_ADJUST_BLOCK_ASSOCIATION©Z_pktÚargsZkargsr{   Zbtyper   r   r€   Ú_guess_pdportadjust_block   s
    r  c                
   @   sD   e Zd Zeedddd�eddƒeddƒedg ed	d
„ d�gZdZ	dS )r)   rŸ   rŠ   r5   r    r¹   r   rº   rÜ   c                 C   s   | j S rw   r‹   rÐ   r   r   r€   rŽ     r�   zPDPortDataAdjust.<lambda>r�   rV   N)
r‚   rƒ   r„   rt   r   r   r   r  r‡   ru   r   r   r   r€   r)   
  s   ÿû	c                   @   sH   e Zd ZdZdZedddddœƒeddƒed	dƒed
dƒgZdd„ Z	dS )Ú ExpectedSubmoduleDataDescriptionz&Description of the data of a submodulezData DescriptionÚDataDescriptionr   ZInputÚOutput)r4   r5   ZSubmoduleDataLengthZ
LengthIOCSZ
LengthIOPSc                 C   s   d |fS rw   r   rø   r   r   r€   rœ   "  s    z0ExpectedSubmoduleDataDescription.extract_paddingN)
r‚   rƒ   r„   r…   r|   r   r   r   r‡   rœ   r   r   r   r€   r    s   ür  c                   @   sŒ   e Zd ZdZdZeddƒeddƒeddƒedddƒed	dd
ƒeddd
ƒeddd
ƒeddd
ƒe	dddg d¢ƒe
dg edd„ d�g
Zdd„ ZdS )rð   z=Description of a submodule in an API of an expected submoduleZ	Submoduler÷   r   ZSubmoduleIdentNumberZSubmoduleProperties_reserved_2ZSubmoduleProperties_reserved_1r5   ZSubmoduleProperties_DiscardIOXSr4   Z3SubmoduleProperties_ReduceOutputSubmoduleDataLengthZ2SubmoduleProperties_ReduceInputSubmoduleDataLengthZSubmoduleProperties_SharedInputÚSubmoduleProperties_Type)ZNO_IOZINPUTZOUTPUTZINPUT_OUTPUTr  c                 C   s   | j dkrdS dS )Nri   r5   r4   )r  rÐ   r   r   r€   rŽ   7  r�   zExpectedSubmodule.<lambda>rü   c                 C   s   d |fS rw   r   rø   r   r   r€   rœ   ;  s    z!ExpectedSubmodule.extract_paddingN)r‚   rƒ   r„   r…   r|   r   r   r   r   r	   r   r  r‡   rœ   r   r   r   r€   rð   &  s&   




ÿþôrð   c                   @   s`   e Zd ZdZdZeddƒeddƒeddƒeddƒeddd	d
d�ed
g e	dd„ d�gZ
dd„ ZdS )ÚExpectedSubmoduleAPIz7Description of an API in the expected submodules blocksr¸   r   rö   ÚModuleIdentNumberZModulePropertiesÚNumberOfSubmodulesNró   Z
Submodulesr  c                 C   s   | j S rw   )r   rÐ   r   r   r€   rŽ   J  r�   zExpectedSubmoduleAPI.<lambda>rü   c                 C   s   d |fS rw   r   rø   r   r   r€   rœ   M  s    z$ExpectedSubmoduleAPI.extract_padding)r‚   rƒ   r„   r…   r|   r   r   r   r   rð   r‡   rœ   r   r   r   r€   r  ?  s   ÿÿùr  c                   @   sB   e Zd ZdZeeddddd�edg edd„ d	�gZd
Z	dd„ Z
dS )r(   z Expected submodule block requestr  Nró   r  r  c                 C   s   | j S rw   r  rÐ   r   r   r€   rŽ   W  r�   z"ExpectedSubmoduleBlockReq.<lambda>rü   rM   c                 C   s   dS )r®   Nr   r�   r   r   r€   rµ   \  s    z&ExpectedSubmoduleBlockReq.get_response)r‚   rƒ   r„   r…   rt   r   r   r  r‡   ru   rµ   r   r   r   r€   r(   Q  s   ÿýr4   ZAlarmCRZRTA_CLASS_1ZRTA_CLASS_UDPr  c                   @   s–   e Zd ZdZeeddeƒeddƒedddƒe	ddde
ƒed	dd
ƒedddƒeddƒeddƒeddƒeddƒeddƒeddƒgZdZdd„ Zdd„ ZdS )r'   zAlarm CR block requestÚAlarmCRTyper4   r   rñ   ZAlarmCRProperties_Priorityr   ÚAlarmCRProperties_TransportZAlarmCRProperties_Reserved1r=   ZAlarmCRProperties_Reserved2r6   ZRTATimeoutFactorZ
RTARetriesri   ÚLocalAlarmReferenceÚMaxAlarmDataLengthéÈ   ZAlarmCRTagHeaderHighrf   ZAlarmCRTagHeaderLowi    rL   c                 C   s<   | j dkr.|d d… t dd¡ |dd …  }t | ||¡S )Nr4   r6   r‘   i   r  )r"  r“   r”   rˆ   r•   r­   r   r   r€   r•   �  s    
$zAlarmCRBlockReq.post_buildc                 C   s2   t ƒ }dD ]}| ||  |¡¡ q
| jd |_|S )r®   )r!  r#  re   )r3   r°   r±   ru   r²   r   r   r€   rµ   ˆ  s
    zAlarmCRBlockReq.get_responseN)r‚   rƒ   r„   r…   rt   r   ÚALARM_CR_TYPEr   r   r	   ÚALARM_CR_TRANSPORTr‡   ru   r•   rµ   r   r   r   r€   r'   m  s$   



óc                   @   s0   e Zd ZeeddeƒeddƒeddƒgZdZdS )r3   r!  r4   r#  r   r$  rc   N)	r‚   rƒ   r„   rt   r   r&  r   r‡   ru   r   r   r   r€   r3   ”  s   
üc                   @   s*   e Zd ZeddƒeddeƒgZdd„ ZdS )Ú	AlarmItemÚUserStructureIdentifierr   r‰   rŠ   c                 C   s   d |fS rw   r   rø   r   r   r€   rœ   ¥  s    zAlarmItem.extract_paddingN)r‚   rƒ   r„   r   r   r   r‡   rœ   r   r   r   r€   r(  Ÿ  s   
þr(  c                   @   s.   e Zd Zeddƒeedddd�eddƒgZdS )	r/   r)  r   rŸ   rŠ   r5   r    ZMaintenanceStatusN©r‚   rƒ   r„   r   rt   r   r   r‡   r   r   r   r€   r/   ©  s
   üc                   @   sl   e Zd Zeddƒeddƒeddƒeddƒedd„ eddƒd	�ed
d„ eddƒd	�edd„ eddƒd	�gZdS )ÚDiagnosisItemr)  r   ÚChannelNumberZChannelPropertiesZChannelErrorTypec                 C   s   |   d¡dv S ©Nr)  )r^   é€  rÏ   rÐ   r   r   r€   rŽ   ¹  r�   zDiagnosisItem.<lambda>ZExtChannelErrorTyperÑ   c                 C   s   |   d¡dv S r-  rÏ   rÐ   r   r   r€   rŽ   ½  r�   ZExtChannelAddValuec                 C   s   |   d¡dkS )Nr)  r.  rÏ   rÐ   r   r   r€   rŽ   Á  r�   ZQualifiedChannelQualifierN)r‚   rƒ   r„   r   r   r   r‡   r   r   r   r€   r+  ²  s"   ýýþór+  c                   @   s6   e Zd Zeddƒeedddd�eddƒeddƒgZd	S )
ÚUploadRetrievalItemr)  r   rŸ   rŠ   r5   r    ZURRecordIndexZURRecordLengthNr*  r   r   r   r€   r/  Æ  s   ûr/  c                	   @   sF   e Zd Zeddƒeedddd�eddƒeddƒed	dƒed
dƒgZdS )r0   r)  r   rŸ   rŠ   r5   r    ZiPar_Req_HeaderZMax_Segm_SizeZTransfer_IndexZTotal_iPar_SizeNr*  r   r   r   r€   r0   Ð  s   ùZPE_PowerOffZ
PE_OperateZPE_SleepModeWOLZPE_ReadyToOperate)r   éð   éþ   éÿ   c                 C   s   i | ]}|d   |¡“qS )zPE_EnergySavingMode_{})Úformat©Ú.0Úir   r   r€   Ú
<dictcomp>â  s   ÿr7  rB   c                 C   s   i | ]
}|d “qS ©rn   r   r4  r   r   r€   r7  ä  r�   r0  c                 C   s   i | ]
}|d “qS r8  r   r4  r   r   r€   r7  å  r�   éñ   r1  c                   @   s$   e Zd ZeddƒeeddeƒgZdS )ÚPE_AlarmItemr)  r   ZPE_OperationalModeN)r‚   rƒ   r„   r   rt   r
   ÚPE_OPERATIONAL_MODEr‡   r   r   r   r€   r:  è  s   
ýr:  c                   @   s    e Zd ZeddƒeddƒgZdS )ÚRS_AlarmItemr)  r   ZRS_AlarmInfoN)r‚   rƒ   r„   r   r‡   r   r   r   r€   r<  ð  s   þr<  c                
   @   sH   e Zd Zeddƒeddƒeddƒeddƒeddƒeddd	d
„ d�gZdS )ÚPRAL_AlarmItemr)  r   r,  ZPRAL_ChannelPropertiesZPRAL_ReasonZPRAL_ExtReasonZPRAL_ReasonAddValuerŠ   c                 C   s
   | j d S )Nr  )r’   )Úxr   r   r€   rŽ   ÿ  r�   zPRAL_AlarmItem.<lambda>r�   N)r‚   rƒ   r„   r   r   r‡   r   r   r   r€   r=  ÷  s   ÿúr=  )Z8000Z8002Z8003Z8100Z8200Z8201Z8300Z8301Z8302Z8310Z8320c                 O   s@   t }t| d d… ƒ d¡}|tv r*t| }|| g|¢R i |¤ŽS )Nr5   Úutf8)r(  r!   ÚdecodeÚPNIO_RPC_ALARM_ASSOCIATIONr  r   r   r€   Ú_guess_alarm_payload  s
    rB  c                   @   sT   e Zd Zeeddƒeddƒeddƒeddƒeddƒeddƒeddƒed	g eƒg	Z	d
S )ÚAlarmNotificationPDUZ	AlarmTyper   r¸   rö   r÷   r  ZSubmoduleIdentNUmberZAlarmSpecifierZAlarmPayloadN)
r‚   rƒ   r„   rt   r   r   r   r   rB  r‡   r   r   r   r€   rC    s   
örC  c                   @   s   e Zd ZdZdS )r#   r4   N©r‚   rƒ   r„   ru   r   r   r   r€   r#   ,  s   c                   @   s   e Zd ZdZdS )r$   r5   NrD  r   r   r   r€   r$   0  s   ZRTA_TYPE_DATAZRTA_TYPE_NACKZRTA_TYPE_ACKZRTA_TYPE_ERRZRTA_TYPE_FREQZRTA_TYPE_FRSP)r4   r5   ri   rj   rp   rh   c                 C   s   i | ]
}|d “qS r8  r   r4  r   r   r€   r7  <  r�   rq   r8   z	Version 1z	Version 2)r   r4   r5   c                 C   s   i | ]
}|d “qS r8  r   r4  r   r   r€   r7  D  r�   ri   c                
   @   sb   e Zd Zeddƒeddƒedddeƒedddeƒedddƒed	dƒed
dƒeddƒgZ	dd„ Z
dS )ÚPNIORealTimeAcyclicPDUHeaderZAlarmDstEndpointr   ZAlarmSrcEndpointZPDUTypeTyperj   ZPDUTypeVersionZAddFlagsr6   Z
SendSeqNumZ	AckSeqNumZ
VarPartLenc                 C   s
   t ƒ ‚d S rw   rx   rz   r   r   r€   r�   T  s    z$PNIORealTimeAcyclicPDUHeader.__new__N)r‚   rƒ   r„   r   r	   ÚPDU_TYPE_TYPEÚPDU_TYPE_VERSIONr   r   r‡   r�   r   r   r   r€   rE  G  s   
÷rE  c                   @   s   e Zd ZeeddeƒgZdS )Ú	Alarm_LowÚRTA_SDUN)r‚   rƒ   r„   rE  r   r$   r‡   r   r   r   r€   rH  X  s   
þrH  c                   @   s   e Zd ZeeddeƒgZdS )Ú
Alarm_HighrI  N)r‚   rƒ   r„   rE  r   r#   r‡   r   r   r   r€   rJ  _  s   
þrJ  )Z0020Z0021Z0022Z0023Z0024Z0101Z0102Z0103Z0104Z0110Z0111Z0112Z0113Z0114Z0116Z0117Z0118Z0202Z8101Z8102Z8103Z8110Z8111Z8112Z8113Z8114Z8116Z8117Z8118c                 O   sÄ   t }| d d… dkr0| dd… dkr*t}q®t}n~| d d… dkrFt}nh| d d… dkrr| dd… dkrlt}q®t}n<| d d… dkrˆt}n&t| d d… ƒ d	¡}|t	v r®t	| }|| g|¢R i |¤ŽS )
Nr5   s    rD   rF   s   à@s    	s   €s   €	r?  )
rˆ   rÙ   r¶   rÊ   rã   rÃ   rË   r!   r@  ÚPNIO_RPC_BLOCK_ASSOCIATIONr  r   r   r€   Ú_guess_block_class�  s"    rL  c                 C   sB   z| j j}W n ty    Y dS 0 |dkr.dS |dkr:dS dS dS )z8determine the symbol for the endianness of a the DCE/RPCú!r   ú>r4   ú<N)Z
underlayerZendianÚAttributeError)r�   Z
endiannessr   r   r€   Údce_rpc_endianess¬  s    rQ  c                
   @   s€   e Zd ZdZeeddddd�ed�eeddddd�ed�eed	d
ƒed�eeddddd�ed�edg e	dd„ d�gZ
dd„ ZdS )ÚNDRDataz@Base NDRData to centralize some fields. It can't be instantiatedÚargs_lengthNr½   rÜ   rÝ   ©Zendianness_fromÚ	max_countÚoffsetr   Zactual_countc                 C   s   | j S rw   )rS  rÐ   r   r   r€   rŽ   Í  r�   zNDRData.<lambda>r�   c                 C   s
   t ƒ ‚d S rw   rx   rz   r   r   r€   r�   Ð  s    zNDRData.__new__)r‚   rƒ   r„   r…   r    r   rQ  r   r   rL  r‡   r�   r   r   r   r€   rR  ½  s,   þþþþÿórR  c                   @   sP   e Zd ZdZeeddddd�ed�egZe	e
dƒed	 d
dœiZedd„ ƒZdS )ÚPNIOServiceReqPDUzPNIO PDU for RPC RequestZargs_maxNr½   rÜ   rÝ   rT  údea00000-6c97-11d1-8271-******rr   r   ©ÚobjectZif_idÚptypec                 C   s"   |j dkrt|jƒ d¡rdS dS )úheuristic guess_payload_classr   údea00000-6c97-11d1-8271-TF©r[  ÚstrrZ  Ú
startswith©r{   r�   Zrpcr   r   r€   Ú
can_handleç  s
    
ÿzPNIOServiceReqPDU.can_handle)r‚   rƒ   r„   r…   r    r   rQ  rR  r‡   r   r"   ÚRPC_INTERFACE_UUIDrÔ   Úclassmethodrb  r   r   r   r€   rW  Ô  s   þüúÿrW  c                   @   sN   e Zd ZdZeedddgƒed�egZe	e
dƒed dd	œiZed
d„ ƒZdS )ÚPNIOServiceResPDUzPNIO PDU for RPC ResponserÈ   r   rÉ   rT  rX  rs   r5   rY  c                 C   s"   |j dkrt|jƒ d¡rdS dS )r\  r5   r]  TFr^  ra  r   r   r€   rb    s
    
ÿzPNIOServiceResPDU.can_handleN)r‚   rƒ   r„   r…   r    r   rQ  rR  r‡   r   r"   rc  rÔ   rd  rb  r   r   r   r€   re  ô  s    ÿýÿùÿre  )}r…   r“   Úuuidr   Zscapy.packetr   r   r   Zscapy.configr   Zscapy.fieldsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zscapy.layers.dcerpcr   r   Zscapy.contrib.rtps.common_typesr    Zscapy.compatr!   Zscapy.volatiler"   r†   rÅ   rô   r	  r
  r  r  r  ZLINKSTATE_PORTÚ
MEDIA_TYPErc  rt   rˆ   rž   r¯   r¶   rÃ   rÊ   rË   rÓ   rÌ   Zpadding_layerrÕ   rÙ   rã   ræ   rè   rê   rë   rí   r%   r1   rõ   rù   r&   r2   r,   r-   r*   r+   r  r  r.   r  r  r)   r  rð   r  r(   r&  r'  r'   r3   r(  r/   r+  r/  r0   r;  ÚupdateÚranger:  r<  r=  rA  rB  rC  r#   r$   rF  rG  rE  rH  rJ  rK  rL  rQ  rR  rW  Zregister_possible_payloadre  r   r   r   r€   Ú<module>	   s8  d� ­Xü	üüþþøøüù 7
&	>!--ù
ÿþ'
	
üÿ""ô
ú"ý"
Þ&
