a
    kÄ#dH' ã                3   @   s  d Z ddlmZ ddlZddlmZ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 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"œZ d#d$d%œZ!d&d'd(d)d*d+d,d-d.d/œ	Z"d0d1d2d3œZ#d4d5d6d7œZ$d8Z%d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkœ2Z&dldmgZ'dndo„ Z(G dpdq„ dqeƒZ)G drds„ dseƒZ*G dtdu„ dueƒZ+G dvdw„ dweƒZ,G dxdy„ dyeƒZ-G dzd{„ d{eƒZ.G d|d}„ d}eƒZ/G d~d„ deƒZ0G d€d�„ d�eƒZ1G d‚dƒ„ dƒeƒZ2d„d…d†œZ3G d‡dˆ„ dˆeƒZ4G d‰dŠ„ dŠeƒZ5G d‹dŒ„ dŒeƒZ6G d�dŽ„ dŽeƒZ7d�d�d‘d’œZ8G d“d”„ d”eƒZ9G d•d–„ d–eƒZ:G d—d˜„ d˜eƒZ;G d™dš„ dšeƒZ<d›dœd%œZ=dd�iZ>G dždŸ„ dŸeƒZ?d4d d¡œZ@G d¢d£„ d£eƒZAd¤d¥d%œZBd¦d§d%œZCG d¨d©„ d©eƒZDG dªd«„ d«eƒZEd�d¬d­d7œZFG d®d¯„ d¯eƒZGd°d±d²œZHG d³d´„ d´eƒZIG dµd¶„ d¶eƒZJd·d¸d¹dºd»œZKd¼d½„ ZLG d¾d¿„ d¿eƒZMG dÀdÁ„ dÁeƒZNG dÂdÃ„ dÃeƒZOG dÄdÅ„ dÅeƒZPG dÆdÇ„ dÇeƒZQG dÈdÉ„ dÉeƒZRG dÊdË„ dËeƒZSG dÌdÍ„ dÍeƒZTG dÎdÏ„ dÏeƒZUG dÐdÑ„ dÑeƒZVG dÒdÓ„ dÓeƒZWG dÔdÕ„ dÕeƒZXG dÖd×„ d×eƒZYG dØdÙ„ dÙeƒZZG dÚdÛ„ dÛeƒZ[G dÜdÝ„ dÝeƒZ\G dÞdß„ dßeƒZ]G dàdá„ dáeƒZ^dd�iZ_G dâdã„ dãeƒZ`G dädå„ dåeƒZadd�iZbG dædç„ dçeƒZcG dèdé„ déeƒZddd�iZeG dêdë„ dëeƒZfdìdídîdïdðdñdòdódôdõdöd÷død&dùdúdûdüdýœZgG dþdÿ„ dÿeƒZhG �d �d„ �deƒZiG �d�d„ �deƒZjG �d�d„ �deƒZkG �d�d„ �deƒZleeel�d�d	iƒ eele+�d
�d� eele`�d�d� eelea�d�d� eelec�d�d� eeled�d�d� eele,dm�d� eeleE�d�d� eeleG�d�d� eeleM�d�d� eeleN�d�d� eeleI�d�d� eeleJ�d�d� eeleO�d�d� eelej�d�d� eelek�d�d� eele1�dd�d� eele2�d�d�d� ee1e-�dd�d� ee2e/�d�d�d� eele4�d�d� eele5�d�d� eele6�d�d� eele7�d�d� eele9�d �d� eelef�d!�d� eelei�d"�d� eele:�d#�d� eele;�d$�d� eele<�d%�d� eele?�d&�d� eeleA�d'�d� eeleD�d(�d� dS ()  zˆ
HomePlugAV Layer for Scapy

Copyright (C) FlUxIuS (Sebastien Dudek)

HomePlugAV Management Message Type
Key (type value) : Description
é    )Úabsolute_importN)ÚPacketÚbind_layers)ÚBitFieldÚByteEnumFieldÚ	ByteFieldÚConditionalFieldÚ	EnumFieldÚFieldLenFieldÚIntFieldÚ
LEIntFieldÚLELongFieldÚLEShortEnumFieldÚLEShortFieldÚMACFieldÚOUIFieldÚPacketListFieldÚ
ShortFieldÚStrFixedLenFieldÚStrLenFieldÚX3BytesFieldÚ
XByteFieldÚ	XIntFieldÚ
XLongFieldÚXShortField)ÚEtherz'Get Device/sw version Request'z$'Get Device/sw version Confirmation'z'Read MAC Memory Request'z'Read MAC Memory Confirmation'z'Start MAC Request'z'Start MAC Confirmation'z'Get NVM Parameters Request'z!'Get NVM Parameters Confirmation'z'Reset Device Request'z'Reset Device Confirmation'z'Write Module Data Request'z'Read Module Data Request'z'Read Module Data Confirmation'z"'Write Module Data to NVM Request'z''Write Module Data to NVM Confirmation'z'Sniffer Request'z'Sniffer Confirmation'z'Sniffer Indicates'z'Network Information Request'z"'Network Information Confirmation'z'Loopback Request'z'Loopback Request Confirmation'z'Set Encryption Key Request'z)'Set Encryption Key Request Confirmation'z"'Read Configuration Block Request'z''Read Configuration Block Confirmation'z*'Embedded Host Action Required Indication')é    é   é   é	   é   é   é   é   é   é   é    é$   é%   é(   é)   é4   é5   é6   é8   é9   éH   éI   éP   éQ   éX   éY   éb   z1.0z1.1©r   é   ÚUnknownz	'INT6000'z	'INT6300'z	'INT6400'z'AR7400'z'AR6405'z'QCA7450/QCA7420'z'QCA6410/QCA6411'z	'QCA7000')	r   r8   é   é   é   é   é    é!   é"   z	'Station'z'Proxy coordinator'z'Central coordinator')r   r8   r:   z	'Success'z'Invalid Address'z'Invalid Length')r   é   é   ÚQualcommZ	VS_WR_MEMZ	VS_RSVD_1Z	VS_RSVD_2Z	VS_WD_RPTZVS_LNK_STATSZ	VS_RSVD_3Z	VS_CP_RPTZVS_ARPCZVS_MFG_STRINGZVS_SET_SDRAMZVS_HOST_ACTIONZVS_OP_ATTRIBUTESZVS_ENET_SETTINGSZVS_TONE_MAP_CHARZVS_NW_INFO_STATSZVS_SLAVE_MEMZVS_FAC_DEFAULTSZVS_FAC_DEFAULTS_CONFIRMZVS_MULTICAST_INFOZVS_CLASSIFICATIONZVS_RX_TONE_MAP_CHARZVS_SET_LED_BEHAVIORZVS_WRITE_AND_EXECUTE_APPLETZVS_MDIO_COMMANDZVS_SLAVE_REGZVS_BANDWIDTH_LIMITINGZVS_SNID_OPERATIONZVS_NN_MITIGATEZVS_MODULE_OPERATIONZVS_DIAG_NETWORK_PROBEZVS_PL_LINK_STATUSZVS_GPIO_STATE_CHANGEZVS_CONN_ADDZVS_CONN_MODZVS_CONN_RELZVS_CONN_INFOZVS_MULTIPORT_LNK_STAZVS_EM_ID_TABLEZ
VS_STANDBYZVS_SLEEPSCHEDULEZVS_SLEEPSCHEDULE_NOTIFICATIONZVS_MICROCONTROLLER_DIAGZVS_GET_PROPERTYZVS_SET_PROPERTYZVS_PHYSWITCH_MDIOZVS_SELFTEST_ONETIME_CONFIGZVS_SELFTEST_RESULTSZVS_MDU_TRAFFIC_STATSZVS_FORWARD_CONFIGZVS_HYBRID_INFO)2i   i   i   i,   i0   i<   i@   iD   iT   i\   i`   ih   il   ip   it   ix   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 ¢  r   r.   c                 C   s
   | j dkS )zG
        A fragmentation field condition
        TODO: To complete
    r8   ©Úversion©Zpkt© rI   úO/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/homeplugav.pyÚFragmentCondª   s    rK   c                   @   s<   e Zd ZdZedkre e¡ edde	ƒe
ddedƒgZdS )	ÚMACManagementHeaderzMACManagementHeader rC   rG   r   ÚHPtyper   ú<HN)Ú__name__Ú
__module__Ú__qualname__ÚnameÚDefaultVendorÚHPAVTypeListÚupdateÚQualcommTypeListr   ÚHPAVversionListr	   Úfields_descrI   rI   rI   rJ   rL   ²   s   

ÿrL   c                   @   s   e Zd ZdZeddƒgZdS )Ú	VendorMMEz
VendorMME ZOUIiR°  N)rO   rP   rQ   rR   r   rX   rI   rI   rI   rJ   rY   º   s   rY   c                   @   sf   e Zd Zd Zeddeƒeddeƒeddddd	�edd
dd„ d�edddd„ d�edddddœƒgZ	dS )ÚGetDeviceVersionÚStatusr   ZDeviceIDr>   Ú
VersionLenNZDeviceVersionÚB©Zcount_ofÚfmts
   NoVersion c                 C   s   | j S ©N©r\   rH   rI   rI   rJ   Ú<lambda>Ä   ó    zGetDeviceVersion.<lambda>©Zlength_fromZDeviceVersion_pads@   ÌÌÌÌÌ                                                           c                 C   s
   d| j  S )Né@   ra   rH   rI   rI   rJ   rb   Å   rc   Z
UpgradableÚFalseÚTruer7   )
rO   rP   rQ   rR   r   ÚStatusCodesÚHPAVDeviceIDListr
   r   rX   rI   rI   rI   rJ   rZ   ¿   s   

ûrZ   c                   @   s   e Zd Zd Zg ZdS )ÚNetworkInformationRequestN©rO   rP   rQ   rR   rX   rI   rI   rI   rJ   rj   É   s   rj   c                   @   sT   e Zd ZdZdZedddƒeddƒedd	ƒed
deƒe	ddƒedd	ƒgZ
dd„ ZdS )ÚNetworkInfoV10ú)
        Network Information Element
    ÚNetworkInfoÚ	NetworkIDó          é   ÚShortNetworkIDr   ÚTerminalEIDr8   ÚStationRoleÚCCoMACAdressú00:00:00:00:00:00ÚCCoTerminalEIDc                 C   s   d|fS ©Nrc   rI   ©ÚselfÚprI   rI   rJ   Úextract_paddingÞ   s    zNetworkInfoV10.extract_paddingN)rO   rP   rQ   Ú__doc__rR   r   r   r   rt   r   rX   r|   rI   rI   rI   rJ   rl   Ò   s   

ûrl   c                   @   sH   e Zd ZdZdZeddƒeddƒeddƒed	d
ƒedd
ƒgZdd„ ZdS )ÚStationInfoV10ú)
        Station Information Element
    ÚStationInfoÚ
StationMACrv   ÚStationTerminalEIDr8   ÚfirstnodeMACúff:ff:ff:ff:ff:ffÚ	TXaverager   Ú	RXaveragec                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   í   s    zStationInfoV10.extract_paddingN)	rO   rP   rQ   r}   rR   r   r   rX   r|   rI   rI   rI   rJ   r~   â   s   ür~   c                   @   sl   e Zd ZdZdZedddƒeddƒeddƒed	d
ƒeddƒe	dde
ƒeddƒedd
ƒeddƒg	Zdd„ ZdS )ÚNetworkInfoV11rm   rn   ro   rp   rq   Ú
reserved_1r   rr   rs   r8   Ú
reserved_2rt   ru   rv   rw   Ú
reserved_3c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|     s    zNetworkInfoV11.extract_paddingN)rO   rP   rQ   r}   rR   r   r   r   r   r   rt   r   r   rX   r|   rI   rI   rI   rJ   r‡   õ   s   

ø
r‡   c                   @   st   e Zd Zd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dƒeddƒeddƒeddƒg
Z
dd„ ZdS )ÚStationInfoV11r   r€   r�   rv   r‚   r8   Zreserved_s2r   rƒ   r„   r…   Z
RxCouplingr<   Z
TxCouplingZreserved_s3r†   Zreserved_s4c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|     s    zStationInfoV11.extract_paddingN)rO   rP   rQ   r}   rR   r   r   r   r   r   rX   r|   rI   rI   rI   rJ   r‹     s   

÷r‹   c                	   @   sL   e Zd ZdZdZeddƒeddedd„ d	�ed
dƒeddedd„ d	�gZ	dS )ÚNetworkInfoConfirmationV10ze
        Network Information Confirmation following the MAC Management version 1.0  # noqa: E501
    ÚNetworkInfoConfirmationÚLogicalNetworksNumberr8   ÚNetworksInfosÚ c                 C   s
   | j d S ©Né   ©rŽ   rH   rI   rI   rJ   rb   $  rc   z#NetworkInfoConfirmationV10.<lambda>rd   ÚStationsNumberÚStationsInfosc                 C   s
   | j d S )Né   ©r”   rH   rI   rI   rJ   rb   &  rc   N)
rO   rP   rQ   r}   rR   r   r   rl   r~   rX   rI   rI   rI   rJ   rŒ     s   ýrŒ   c                   @   s`   e Zd ZdZdZed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 )ÚNetworkInfoConfirmationV11z¤
        Network Information Confirmation following the MAC Management version 1.1  # noqa: E501
        This introduce few 'crazy' reserved bytes -> have fun!
    r�   Zreserved_n1s     :  r=   rŽ   r8   r�   r�   c                 C   s
   | j d S )Né   r“   rH   rI   rI   rJ   rb   1  rc   z#NetworkInfoConfirmationV11.<lambda>rd   r”   Zreserverd_s1s        r•   c                 C   s
   | j d S )Né   r—   rH   rI   rI   rJ   rb   4  rc   N)rO   rP   rQ   r}   rR   r   r   r   r‡   r‹   rX   rI   rI   rI   rJ   r˜   )  s   

ûr˜   z'PIB Update Ready'z'Loader (Bootloader)')r:   r<   c                   @   s"   e Zd ZdZd ZeddeƒgZdS )ÚHostActionRequiredz2
        Embedded Host Action Required Indice
    ZActionRequiredr:   N)rO   rP   rQ   r}   rR   r   ÚActionsListrX   rI   rI   rI   rJ   r›   <  s   r›   c                   @   s,   e Zd Zd ZeddƒeddƒeddƒgZdS )ÚLoopbackRequestÚDurationr8   Zreserved_l1ÚLRlengthr   N)rO   rP   rQ   rR   r   r   rX   rI   rI   rI   rJ   r�   D  s
   þr�   c                   @   s.   e Zd Zd ZeddeƒeddƒeddƒgZdS )ÚLoopbackConfirmationr[   r   rž   r8   rŸ   N)	rO   rP   rQ   rR   r   rh   r   r   rX   rI   rI   rI   rJ   r    L  s
   
þr    c                   @   s@   e Zd Zd Zeddƒedddƒeddƒeddƒed	ddƒgZd
S )ÚSetEncryptionKeyRequestZEKSr   ÚNMKó                   rA   ZPayloadEncKeySelectZDestinationMACr„   ÚDAKN)rO   rP   rQ   rR   r   r   r   rX   rI   rI   rI   rJ   r¡   W  s   þþúr¡   ZSuccesszInvalid EKSzInvalid PKS)r   rA   r’   c                   @   s   e Zd Zd ZeddeƒgZdS )ÚSetEncryptionKeyConfirmationr[   r   N)rO   rP   rQ   rR   r   ÚSetEncKey_StatusrX   rI   rI   rI   rJ   r¥   i  s   r¥   c                   @   s   e Zd Zd ZeddeƒgZdS )ÚQUAResetFactoryConfirmr[   r   N©rO   rP   rQ   rR   r   rh   rX   rI   rI   rI   rJ   r§   r  s   r§   c                   @   s   e Zd ZdZg ZdS )ÚGetNVMParametersRequestzGet NVM Parameters RequestNrk   rI   rI   rI   rJ   r©   {  s   r©   c                   @   s>   e Zd ZdZeddeƒeddƒeddƒedd	ƒed
dƒgZdS )ÚGetNVMParametersConfirmationzGet NVM Parameters Confirmationr[   r   ZNVMTypeé   ZNVMPageSizeé   ZNVMBlockSizei   ZNVMMemorySizei   N)rO   rP   rQ   rR   r   rh   r   rX   rI   rI   rI   rJ   rª   €  s   
ürª   z
'Disabled'z	'Enabled'z	'Regular'c                   @   s   e Zd Zd ZeddeƒgZdS )ÚSnifferRequestZSnifferControlr   N)rO   rP   rQ   rR   r   ÚSnifferControlListrX   rI   rI   rI   rJ   r­   “  s   r­   z'Invalid Control')r   rA   c                   @   s   e Zd Zd ZeddeƒgZdS )ÚSnifferConfirmationr[   r   Nr¨   rI   rI   rI   rJ   r¯   œ  s   r¯   z'Tx'z'Rx'z	'In-home'z'Access'c                !   @   s8  e Zd Zd Zeddeƒe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�edddd�edddd�eddƒe	ddƒedddd�edddd�edddd�edddd�edddd�edd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ƒgZd(S ))ÚSnifferIndicateZSnifferTyper   Z	DirectionZ
SystemTimeZ
BeaconTimerr   ZSourceTermEqIDZDestTermEqIDZLinkIDZPayloadEncrKeySelecté   ZPendingPHYblockZBitLoadingEstimZToneMapIndexr=   )ÚsizeZNumberofSymbolsr:   ZPHYblockSizer8   ZFrameLengthZReversegrandLengthZRequestSACKtransZDataMACstreamCMDr;   ZManNACFrameStreamCMDrˆ   é   ZMultinetBroadcastZDifferentCPPHYclockZ	MulticastZFrameControlCheckSeqZShortNetworkID_ZBeaconTimestampZBeaconTransOffset_0ZBeaconTransOffset_1ZBeaconTransOffset_2ZBeaconTransOffset_3ZFrameContrchkSeqN)rO   rP   rQ   rR   r   ÚSnifferTypeCodesÚDirectionCodesr   r   r   r   r   r   r   r   rX   rI   rI   rI   rJ   r°   ¨  sB   

âr°   c                   @   s$   e Zd Zd ZeddƒeddƒgZdS )ÚReadMACMemoryRequestÚAddressr   ÚLengthé   N)rO   rP   rQ   rR   r   rX   rI   rI   rI   rJ   r¶   Ð  s   ÿr¶   zInvalid AddresszInvalid Lengthc                   @   sD   e Zd Zd Zeddeƒeddƒeddddd�edd	d
d„ d�gZ	dS )ÚReadMACMemoryConfirmationr[   r   r·   ÚMACLenNZMACDatarN   )Z	length_ofr_   ó    c                 C   s   | j S r`   )r»   rH   rI   rI   rJ   rb   â  rc   z"ReadMACMemoryConfirmation.<lambda>rd   )
rO   rP   rQ   rR   r   ÚReadMACStatusr   r
   r   rX   rI   rI   rI   rJ   rº   Ü  s   
ýrº   ZReadZWrite)r   r’   c                   @   sâ   e Zd Zd Zeddƒeddƒeddeƒeddƒeddƒe	e
d	dƒd
d„ ƒe	eddƒdd„ ƒeddƒeddƒe	eddƒdd„ ƒe	e
ddƒdd„ ƒe	eddddd�dd„ ƒe	e
ddƒdd„ ƒe	edddd„ d�d d„ ƒgZd!d"„ ZdS )#ÚModuleOperationRequestÚreservedr   Ú	NumOpDatar8   Ú	operationÚOPDataLengthNrˆ   Ú	SessionIDc                 C   s
   d| j kS r‘   ©rÁ   rH   rI   rI   rJ   rb   ö  rc   zModuleOperationRequest.<lambda>Ú	ModuleIDXc                 C   s
   d| j kS r‘   rÄ   rH   rI   rI   rJ   rb   ø  rc   ÚModuleIDép  ÚModuleSubIDÚReadDataLenix  c                 C   s
   d| j kS ©Nr   rÄ   rH   rI   rI   rJ   rb   ü  rc   Ú
ReadOffsetc                 C   s
   d| j kS rÊ   rÄ   rH   rI   rI   rJ   rb   þ  rc   ÚWriteDataLenÚ
ModuleDatarN   r^   c                 C   s
   d| j kS r‘   rÄ   rH   rI   rI   rJ   rb     rc   ÚWriteOffsetc                 C   s
   d| j kS r‘   rÄ   rH   rI   rI   rJ   rb     rc   r¼   c                 C   s   | j S r`   )rÌ   rH   rI   rI   rJ   rb     rc   rd   c                 C   s
   d| j kS r‘   rÄ   rH   rI   rI   rJ   rb     rc   c                 C   sÂ   | j dkr<| jd u r<d}|d d… t d|¡ |dd …  }| j dkrº| jd u r‚dt| jƒ }|d d… t d|¡ |dd …  }| jd u rºt| jƒ}|d d… t d|¡ |d	d …  }|| S )
Nr   é   rq   z!Hé	   r’   rš   é   é   )rÁ   rÂ   ÚstructÚpackÚlenrÍ   rÌ   ©rz   r{   ÚpayÚ_lenrI   rI   rJ   Ú
post_build	  s    

$

$

$z!ModuleOperationRequest.post_build)rO   rP   rQ   rR   r   r   r   ÚOperationListr   r   r   r
   r   rX   rÙ   rI   rI   rI   rJ   r¾   î  sH   

ÿ
ÿ
ÿ
ÿþý
ÿÿþër¾   c                   @   sò   e Zd Zd Zeddƒeddƒeddƒeddƒeddeƒedd	ƒed
dƒe	e
ddƒdd„ ƒe	eddƒdd„ ƒeddƒeddƒe	eddddd�dd„ ƒe	e
ddƒdd„ ƒe	edddd„ d�dd„ ƒe	eddƒd d„ ƒe	e
d!dƒd"d„ ƒgZd#d$„ ZdS )%ÚModuleOperationConfirmationr[   r   Ú	ErrorCoder¿   rÀ   r8   rÁ   rÂ   rÏ   rˆ   rÃ   c                 C   s
   d| j kS r‘   rÄ   rH   rI   rI   rJ   rb   "  rc   z$ModuleOperationConfirmation.<lambda>rÅ   c                 C   s
   d| j kS r‘   rÄ   rH   rI   rI   rJ   rb   $  rc   rÆ   rÇ   rÈ   rÉ   NrÍ   rN   r^   c                 C   s
   d| j kS rÊ   rÄ   rH   rI   rI   rJ   rb   *  rc   rË   c                 C   s
   d| j kS rÊ   rÄ   rH   rI   rI   rJ   rb   ,  rc   r¼   c                 C   s   | j S r`   )rÉ   rH   rI   rI   rJ   rb   .  rc   rd   c                 C   s
   d| j kS rÊ   rÄ   rH   rI   rI   rJ   rb   /  rc   rÌ   c                 C   s
   d| j kS r‘   rÄ   rH   rI   rI   rJ   rb   1  rc   rÎ   c                 C   s
   d| j kS r‘   rÄ   rH   rI   rI   rJ   rb   3  rc   c                 C   sÌ   | j dkrF| jd u rFdt| jƒ }|d d… t d|¡ |dd …  }| j dkrÄ| jd u rŒdt| jƒ }|d d… t d|¡ |dd …  }| jd u rÄt| jƒ}|d d… t d|¡ |dd …  }|| S )	Nr’   rÏ   rq   ÚhrÐ   r   rš   r«   )rÁ   rÂ   rÕ   rÍ   rÓ   rÔ   rÌ   rÖ   rI   rI   rJ   rÙ   5  s    

$

$

$z&ModuleOperationConfirmation.post_build)rO   rP   rQ   rR   r   r   r   r   rÚ   r   r   r
   r   rX   rÙ   rI   rI   rI   rJ   rÛ     sL   

ÿ
ÿþý
ÿÿþ
ÿ
ÿèrÛ   zMAC Soft-Loader ImagezMAC Software ImageZPIBzWrite Alternate Flash Location)r   r8   r:   rA   c              	   C   sH   d}t dt| ƒdƒD ](}|t d| ||d … ¡d A d@ }q| d@ S )Nr   r<   z<Il   ÿÿ )ÚrangerÕ   rÓ   Úunpack)ÚdataZcksumÚirI   rI   rJ   Úchksum32O  s    &râ   c                   @   s6   e Zd Zd ZeddeƒeddƒeddƒeddƒgZ	dS )	ÚReadModuleDataRequestrÆ   r:   r¿   r   r¸   r¹   ÚOffsetN)
rO   rP   rQ   rR   r   ÚModuleIDListr   r   r   rX   rI   rI   rI   rJ   rã   V  s   
ýrã   c                   @   sn   e Zd Zd Zeddeƒeddƒeddeƒeddƒe	ddd	d
d�e
ddƒe
ddƒed	ddd„ d�gZdd„ ZdS )ÚReadModuleDataConfirmationr[   r   rˆ   rÆ   r:   r‰   ÚDataLenNrÍ   rN   r^   rä   Úchecksumr¼   c                 C   s   | j S r`   ©rç   rH   rI   rI   rJ   rb   g  rc   z#ReadModuleDataConfirmation.<lambda>rd   c                 C   s|   | j d u r8t| jƒ}|d d… t d|¡ |dd …  }| jd u rt|rtt| jƒ}|d d… t d|¡ |dd …  }|| S )Nr³   rÝ   é   é   ÚIrA   ©rç   rÕ   rÍ   rÓ   rÔ   rè   râ   ©rz   r{   r×   rØ   ZckrI   rI   rJ   rÙ   j  s    

$
$z%ReadModuleDataConfirmation.post_build)rO   rP   rQ   rR   r   rh   r   rå   r   r
   r   r   rX   rÙ   rI   rI   rI   rJ   ræ   ^  s   

ù
ræ   c                
   @   s\   e Zd Zd Zeddeƒeddƒeddddd	�ed
dƒeddƒe	dddd„ d�gZ
dd„ ZdS )ÚWriteModuleDataRequestrÆ   r:   rˆ   r   rç   NrÍ   rN   r^   rä   rè   r¼   c                 C   s   | j S r`   ré   rH   rI   rI   rJ   rb     rc   zWriteModuleDataRequest.<lambda>rd   c                 C   s|   | j d u r8t| jƒ}|d d… t d|¡ |dd …  }| jd u rt|rtt| jƒ}|d d… t d|¡ |dd …  }|| S )Nr:   rÝ   r<   rê   rì   rë   rí   rî   rI   rI   rJ   rÙ   ‚  s    

$
$z!WriteModuleDataRequest.post_build)rO   rP   rQ   rR   r   rå   r   r
   r   r   rX   rÙ   rI   rI   rI   rJ   rï   x  s   
ûrï   c                   @   s>   e Zd Zd ZeddƒeddƒeddƒedddƒgZdd	„ Zd
S )ÚClassifierPriorityMapZPriorityr   ZPIDÚIndividualOperandÚClassifierValuer£   rA   c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   š  s    z%ClassifierPriorityMap.extract_paddingN©rO   rP   rQ   rR   r   r   rX   r|   rI   rI   rI   rJ   rð   �  s   þýrð   c                   @   s6   e Zd Zd ZeddƒeddƒedddƒgZdd„ Zd	S )
ÚClassifierObjZClassifierPIDr   rñ   rò   r£   rA   c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   ¨  s    zClassifierObj.extract_paddingNró   rI   rI   rI   rJ   rô   ž  s   þþrô   c                   @   s’   e Zd Zd Zeddƒeddƒeddƒeddedd„ d	�ed
dƒ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ƒgZdd„ ZdS )ÚAutoConnectionÚActionr   ZClassificationOperandZNumClassifiersZClassifierObjsr�   c                 C   s   dS )NrÒ   rI   ©ÚxrI   rI   rJ   rb   ²  rc   zAutoConnection.<lambda>rd   ZCSPECversionZConnCAPZConnCoQoSPrioZConnRateZConnTTLrG   ZVlanTags       r<   rˆ   r‰   s                 é   c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   Â  s    zAutoConnection.extract_paddingN)rO   rP   rQ   rR   r   r   r   rô   r   r   r   r   rX   r|   rI   rI   rI   rJ   rõ   ¬  s,   þþòrõ   c                   @   s,   e Zd ZdZeddƒeddƒgZdd„ ZdS )	ÚPeerNodeÚ	PeerNodesZPeerTEIr   Ú
PIBMACAddrrv   c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   Ì  s    zPeerNode.extract_paddingN)rO   rP   rQ   rR   r   r   rX   r|   rI   rI   rI   rJ   rú   Æ  s
   ÿrú   c                   @   s,   e Zd Zd ZeddƒeddƒgZdd„ ZdS )ÚAggregateConfigEntrieZTrafficTypeIDr   ZAggregationConfigIDc                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   Ö  s    z%AggregateConfigEntrie.extract_paddingN©rO   rP   rQ   rR   r   rX   r|   rI   rI   rI   rJ   rý   Ð  s
   ÿrý   c                   @   s$   e Zd Zd ZeddƒgZdd„ ZdS )ÚRSVD_CustomAggregationParameterZCustomAggregationParameterr   c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   ß  s    z/RSVD_CustomAggregationParameter.extract_paddingN©rO   rP   rQ   rR   r   rX   r|   rI   rI   rI   rJ   rÿ   Ú  s   rÿ   c                   @   s$   e Zd Zd ZeddƒgZdd„ ZdS )ÚPrescalerValueZ	prescalerr   c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   è  s    zPrescalerValue.extract_paddingNr   rI   rI   rI   rJ   r  ã  s   r  c                   @   s$   e Zd Zd ZeddƒgZdd„ ZdS )ÚGPIOMapZ	GPIOvaluer   c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   ñ  s    zGPIOMap.extract_paddingNrþ   rI   rI   rI   rJ   r  ì  s   r  c                   @   s$   e Zd Zd ZeddƒgZdd„ ZdS )ÚReservedPercentageForCapZ
CAPpercentr   c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   ú  s    z(ReservedPercentageForCap.extract_paddingNrþ   rI   rI   rI   rJ   r  õ  s   r  c                   @   s‚   e Zd Zd Z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dƒedddƒedddƒgZdS )Ú	ConfigBitZOverrideSoundCapr   r8   ZOverrideFailHoldDefaultsZOverrideResourceDefaultsZ OverrideContentionWindowDefaultsZOverrideUnplugDetectionDefaultsZOverrideResoundDefaultsZOverrideExpiryDefaultsZDisableWorseChannelTriggerZDisableBetterChannelTriggerZDisableNetworkEventTriggerZrsv1r³   N)rO   rP   rQ   rR   r   rX   rI   rI   rI   rJ   r  þ  s   










ör  c                   @   s$   e Zd Zd ZeddƒgZdd„ ZdS )ÚContentionWindowTableÚelementr   c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|     s    z%ContentionWindowTable.extract_paddingN)rO   rP   rQ   rR   r   rX   r|   rI   rI   rI   rJ   r    s   r  c                   @   s$   e Zd Zd ZeddƒgZdd„ ZdS )ÚBackoffDeferalCountTabler  r   c                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|     s    z(BackoffDeferalCountTable.extract_paddingNrþ   rI   rI   rI   rJ   r    s   r  c                   @   sl   e Zd Zd Z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ƒg
Zdd„ ZdS )ÚBehaviorBlockArrayZBehIdr   Z	NoOfStepsZDurationInMsZGPIOMaskBits_1ZGPIOMaskBits_2ZGPIOMaskBits_3ZGPIOMaskBits_4ZGPIOMaskBits_5ZGPIOMaskBits_6Zreserved_behc                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   .  s    z"BehaviorBlockArray.extract_paddingN)	rO   rP   rQ   rR   r   r   r   rX   r|   rI   rI   rI   rJ   r     s   ÷r  c                
   @   s\   e Zd Zd Z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
d„ ZdS )ÚEventBlockArrayZEventPriorityIDr   ZEventIDZBehID_1ZBehID_2ZBehID_3ZParticipatingGPIOsZEventAttributesZreserved_evbc                 C   s   d|fS rx   rI   ry   rI   rI   rJ   r|   >  s    zEventBlockArray.extract_paddingN)rO   rP   rQ   rR   r   r   rX   r|   rI   rI   rI   rJ   r	  2  s   ù
r	  c                ¾       s  e Zd ZdZd ZddgZeeddƒdd„ ƒeeddƒd	d„ ƒeed
dƒdd„ ƒeeddƒdd„ ƒeeddƒdd„ ƒee	ddƒdd„ ƒee
ddƒdd„ ƒeedddƒdd„ ƒeeddƒdd„ ƒeedddƒdd„ ƒeed ddƒd!d„ ƒeed"ddƒd#d„ ƒeed$ddƒd%d„ ƒeed&dƒd'd„ ƒeed(dƒd)d„ ƒeed*dƒd+d„ ƒeed,dƒd-d„ ƒeed.d/d0ƒd1d„ ƒeed2dƒd3d„ ƒeed4dƒd5d„ ƒeed6dƒd7d„ ƒeed8dƒd9d„ ƒee
d:dƒd;d„ ƒeed<dƒd=d„ ƒeed>dƒd?d„ ƒeed@dƒdAd„ ƒeedBdƒdCd„ ƒee
dDdƒdEd„ ƒeedFdƒdGd„ ƒeedHdƒdId„ ƒeedJdKedLd„ dM�dNd„ ƒeedOdPdQƒdRd„ ƒeedSdƒdTd„ ƒeedUdƒdVd„ ƒeedWdƒdXd„ ƒeedYdƒdZd„ ƒee	d[dƒd\d„ ƒeed]dƒd^d„ ƒeed_dƒd`d„ ƒeedadƒdbd„ ƒeedcdƒddd„ ƒeededƒdfd„ ƒeedgdƒdhd„ ƒeedidƒdjd„ ƒeedkdƒdld„ ƒeedmdƒdnd„ ƒeedodƒdpd„ ƒeedqdƒdrd„ ƒeedsdƒdtd„ ƒeedudƒdvd„ ƒeedwdƒdxd„ ƒeedydƒdzd„ ƒeed{dƒd|d„ ƒeed}dƒd~d„ ƒeeddƒd€d„ ƒeed�dƒd‚d„ ƒeedƒdƒd„d„ ƒeed…ddƒd†d„ ƒeed‡dƒdˆd„ ƒeed‰dƒdŠd„ ƒeed‹dƒdŒd„ ƒeed�dŽd�ƒd�d„ ƒeed‘dƒd’d„ ƒeed“dƒd”d„ ƒeed•dƒd–d„ ƒeed—dƒd˜d„ ƒee	d™dƒdšd„ ƒee	d›dƒdœd„ ƒee	d�dƒdžd„ ƒee	dŸdƒd d„ ƒeed¡dƒd¢d„ ƒeed£dƒd¤d„ ƒeed¥dƒd¦d„ ƒee	d§dƒd¨d„ ƒee	d©dƒdªd„ ƒee	d«dƒd¬d„ ƒeed­dKed®d„ dM�d¯d„ ƒeed°dKed±d„ dM�d²d„ ƒeed³dƒd´d„ ƒeedµdKed¶d„ dM�d·d„ ƒeed¸dKed¹d„ dM�dºd„ ƒeed»d¼d½ƒd¾d„ ƒeed¿dƒdÀd„ ƒeedÁdƒdÂd„ ƒeedÃdƒdÄd„ ƒeedÅdƒdÆd„ ƒeedÇdÈdÉƒdÊd„ ƒeedËdƒdÌd„ ƒeedÍdƒdÎd„ ƒeedÏdKedÐd„ dM�dÑd„ ƒeedÒdÓdÔƒdÕd„ ƒeedÖdƒd×d„ ƒeedØdƒdÙd„ ƒeedÚddƒdÛd„ ƒeedÜdƒdÝd„ ƒeedÞdƒdßd„ ƒeedàdádâƒdãd„ ƒeedädƒdåd„ ƒeedædƒdçd„ ƒeedèdƒdéd„ ƒeedêdƒdëd„ ƒeedìdƒdíd„ ƒeedîdƒdïd„ ƒeedðdƒdñd„ ƒeedòdƒdód„ ƒeedôdƒdõd„ ƒeedödƒd÷d„ ƒeedødƒdùd„ ƒeedúdKedûd„ dM�düd„ ƒeedýdƒdþd„ ƒeedÿdƒ�d d„ ƒee�dddƒ�dd„ ƒee�ddƒ�dd„ ƒee�d�d�dƒ�dd„ ƒee�d	dƒ�d
d„ ƒee	�ddƒ�dd„ ƒee�d�d�dƒ�dd„ ƒee�ddƒ�dd„ ƒee�ddƒ�dd„ ƒee	�ddƒ�dd„ ƒee	�ddƒ�dd„ ƒee�ddƒ�dd„ ƒee�ddƒ�dd„ ƒee�ddƒ�dd„ ƒee	�ddƒ�d d„ ƒee�d!dƒ�d"d„ ƒee�d#dKe�d$d„ dM��d%d„ ƒee�d&dƒ�d'd„ ƒee�d(dƒ�d)d„ ƒee�d*dƒ�d+d„ ƒee	�d,dƒ�d-d„ ƒee	�d.dƒ�d/d„ ƒee	�d0dƒ�d1d„ ƒee�d2dƒ�d3d„ ƒee�d4dƒ�d5d„ ƒee�d6dƒ�d7d„ ƒee�d8dƒ�d9d„ ƒee�d:dƒ�d;d„ ƒee�d<�d�dƒ�d=d„ ƒee�d>dƒ�d?d„ ƒee�d@dƒ�dAd„ ƒee	�dBdƒ�dCd„ ƒee�dDdKe�dEd„ dM��dFd„ ƒee	�dGdƒ�dHd„ ƒee	�dIdƒ�dJd„ ƒee	�dKdƒ�dLd„ ƒee�dMdƒ�dNd„ ƒee	�dOdƒ�dPd„ ƒee�dQdKe�dRd„ dM��dSd„ ƒee�dTdKe�dUd„ dM��dVd„ ƒee�dWdƒ�dXd„ ƒee�dYdƒ�dZd„ ƒee�d[dƒ�d\d„ ƒee�d]dƒ�d^d„ ƒee�d_dƒ�d`d„ ƒee�dadƒ�dbd„ ƒee�dcdƒ�ddd„ ƒee�dedƒ�dfd„ ƒee�dgdƒ�dhd„ ƒee�didƒ�djd„ ƒee�dkdƒ�dld„ ƒee�dm�dn�doƒ�dpd„ ƒee�dqdƒ�drd„ ƒee�dsdƒ�dtd„ ƒee�dudƒ�dvd„ ƒee�dwdƒ�dxd„ ƒee�dydƒ�dzd„ ƒee�d{ddƒ�d|d„ ƒee�d}dƒ�d~d„ ƒee�ddƒ�d€d„ ƒee�d�dƒ�d‚d„ ƒee�dƒdƒ�d„d„ ƒee�d…dƒ�d†d„ ƒee�d‡dƒ�dˆd„ ƒee�d‰dƒ�dŠd„ ƒee�d‹dƒ�dŒd„ ƒee�d��dŽ�d�ƒ�d�d„ ƒee�d‘�d’ƒ�d“d„ ƒee�d”dƒ�d•d„ ƒee�d–dƒ�d—d„ ƒee�d˜dƒ�d™d„ ƒee�dšdKe�d›d„ dM��dœd„ ƒee�d�dƒ�džd„ ƒee�dŸdKe�d d„ dM��d¡d„ ƒg¸Z�d¥‡ f�d£�d¤„	Z‡  ZS (¦  Ú	ModulePIBzb
        Simple Module PIB Decoder.
            /!/ A wrong slice would produce 'bad' results
    Ú_ModulePIB__offsetÚ_ModulePIB__lengthZFirmwareMajorVersionr   c                 C   s   d| j kod| j | j kS )Nr   r8   ©r  r  rH   rI   rI   rJ   rb   K  rc   zModulePIB.<lambda>ZPIBMinorVersionc                 C   s   d| j kod| j | j kS )Nr8   r:   r  rH   rI   rI   rJ   rb   M  rc   rˆ   c                 C   s   d| j kod| j | j kS )Nr:   r<   r  rH   rI   rI   rJ   rb   O  rc   Z	PIBLengthc                 C   s   d| j kod| j | j kS )Nr<   r³   r  rH   rI   rI   rJ   rb   Q  rc   r‰   c                 C   s   d| j kod| j | j kS )Nr³   rê   r  rH   rI   rI   rJ   rb   S  rc   ZchecksumPIBNc                 C   s   d| j kod| j | j kS )Nrê   rë   r  rH   rI   rI   rJ   rb   U  rc   rü   rv   c                 C   s   d| j kod| j | j kS )Nrë   rÏ   r  rH   rI   rI   rJ   rb   W  rc   r¤   r£   rA   c                 C   s   d| j kod| j | j kS )NrÏ   r@   r  rH   rI   rI   rJ   rb   [  rc   rŠ   c                 C   s   d| j kod| j | j kS )Nr@   é$   r  rH   rI   rI   rJ   rb   ]  rc   ZManufactorIDs@                                                                   re   c                 C   s   d| j kod| j | j kS )Nr  éd   r  rH   rI   rI   rJ   rb   a  rc   r¢   c                 C   s   d| j kod| j | j kS )Nr  ét   r  rH   rI   rI   rJ   rb   e  rc   ZUserIDc                 C   s   d| j kod| j | j kS )Nr  é´   r  rH   rI   rI   rJ   rb   i  rc   ZAVLN_IDc                 C   s   d| j kod| j | j kS )Nr  éô   r  rH   rI   rI   rJ   rb   m  rc   ZCCoSelectionc                 C   s   d| j kod| j | j kS )Nr  éõ   r  rH   rI   rI   rJ   rb   o  rc   ZCoExistSelectionc                 C   s   d| j kod| j | j kS )Nr  éö   r  rH   rI   rI   rJ   rb   q  rc   ZPLFreqSelectionc                 C   s   d| j kod| j | j kS )Nr  é÷   r  rH   rI   rI   rJ   rb   s  rc   ZH3CDowngradeShldc                 C   s   d| j kod| j | j kS )Nr  éø   r  rH   rI   rI   rJ   rb   u  rc   ZPreferredNIDrp   rq   c                 C   s   d| j kod| j | j kS )Nr  éÿ   r  rH   rI   rI   rJ   rb   y  rc   ZAutoFWUpgradeablec                 C   s   d| j kod| j | j kS )Nr  r¬   r  rH   rI   rI   rJ   rb   {  rc   ZMDUConfigurationc                 C   s   d| j kod| j | j kS )Nr¬   é  r  rH   rI   rI   rJ   rb   }  rc   ZMDURolec                 C   s   d| j kod| j | j kS )Nr  é  r  rH   rI   rI   rJ   rb     rc   ZSnifferEnabledc                 C   s   d| j kod| j | j kS )Nr  é  r  rH   rI   rI   rJ   rb   �  rc   ZSnifferMACAddrRetrnc                 C   s   d| j kod| j | j kS )Nr  é	  r  rH   rI   rI   rJ   rb   ƒ  rc   ZWireTapEnablec                 C   s   d| j kod| j | j kS )Nr  é
  r  rH   rI   rI   rJ   rb   …  rc   Z
reserved_4c                 C   s   d| j kod| j | j kS )Nr  é  r  rH   rI   rI   rJ   rb   ‡  rc   ZStaticNetworkEnabledc                 C   s   d| j kod| j | j kS )Nr  é  r  rH   rI   rI   rJ   rb   ‰  rc   ZLD_TEIc                 C   s   d| j kod| j | j kS )Nr  é  r  rH   rI   rI   rJ   rb   ‹  rc   Z
CCo_MACAddc                 C   s   d| j kod| j | j kS )Nr  é  r  rH   rI   rI   rJ   rb   �  rc   ZSNIDc                 C   s   d| j kod| j | j kS )Nr   é  r  rH   rI   rI   rJ   rb   �  rc   ZNumOfPeerNodesc                 C   s   d| j kod| j | j kS )Nr!  é  r  rH   rI   rI   rJ   rb   ‘  rc   rû   r�   c                 C   s   dS )Né8   rI   r÷   rI   rI   rJ   rb   ’  rc   rd   c                 C   s   d| j kod| j | j kS )Nr"  i  r  rH   rI   rI   rJ   rb   “  rc   Z
reserved_5s>                                                                 é>   c                 C   s   d| j kod| j | j kS )NiF  iN  r  rH   rI   rI   rJ   rb   —  rc   ZOverideModeDefaultsc                 C   s   d| j kod| j | j kS )NiŒ  é�  r  rH   rI   rI   rJ   rb   ™  rc   ZDisableFlowControlc                 C   s   d| j kod| j | j kS )Nr%  éŽ  r  rH   rI   rI   rJ   rb   ›  rc   ZAdvertisementCapabilitiesc                 C   s   d| j kod| j | j kS )Nr&  é�  r  rH   rI   rI   rJ   rb   �  rc   ZOverrideMeteringDefaultsc                 C   s   d| j kod| j | j kS )Nr'  é�  r  rH   rI   rI   rJ   rb   Ÿ  rc   ZMaxFramesPerSecc                 C   s   d| j kod| j | j kS )Nr(  é”  r  rH   rI   rI   rJ   rb   ¡  rc   ZDisableAutoNegotiationc                 C   s   d| j kod| j | j kS )Nr)  é•  r  rH   rI   rI   rJ   rb   £  rc   ZEnetSpeedSettingc                 C   s   d| j kod| j | j kS )Nr*  é–  r  rH   rI   rI   rJ   rb   ¥  rc   ZEnetDuplexSettingc                 C   s   d| j kod| j | j kS )Nr+  é—  r  rH   rI   rI   rJ   rb   §  rc   ZDisableTxFlowControlc                 C   s   d| j kod| j | j kS )Nr,  é˜  r  rH   rI   rI   rJ   rb   ©  rc   ZDisableRxFlowControlc                 C   s   d| j kod| j | j kS )Nr-  é™  r  rH   rI   rI   rJ   rb   «  rc   ZPhyAddressSelectionc                 C   s   d| j kod| j | j kS )Nr.  éš  r  rH   rI   rI   rJ   rb   ­  rc   ZPhyAddressSelection_Datac                 C   s   d| j kod| j | j kS )Nr/  é›  r  rH   rI   rI   rJ   rb   ¯  rc   Z
reserved_6c                 C   s   d| j kod| j | j kS )Nr0  éœ  r  rH   rI   rI   rJ   rb   ±  rc   Z
Force33MHzc                 C   s   d| j kod| j | j kS )Nr1  é�  r  rH   rI   rI   rJ   rb   ³  rc   ZLinkStatusOnPowerlinec                 C   s   d| j kod| j | j kS )Nr2  éž  r  rH   rI   rI   rJ   rb   µ  rc   ZOverrideIdDefaultsc                 C   s   d| j kod| j | j kS )Nr3  éŸ  r  rH   rI   rI   rJ   rb   ·  rc   ZOverrideSubIdDefaultsc                 C   s   d| j kod| j | j kS )Nr4  é   r  rH   rI   rI   rJ   rb   ¹  rc   ZPCIDeviceIDc                 C   s   d| j kod| j | j kS )Nr5  é¢  r  rH   rI   rI   rJ   rb   »  rc   ZPCIVendorIDc                 C   s   d| j kod| j | j kS )Nr6  é¤  r  rH   rI   rI   rJ   rb   ½  rc   Z
reserved_7c                 C   s   d| j kod| j | j kS )Nr7  é¥  r  rH   rI   rI   rJ   rb   ¿  rc   ZPCIClassCodec                 C   s   d| j kod| j | j kS )Nr8  é¦  r  rH   rI   rI   rJ   rb   Á  rc   ZPCIClassCodeSubClassc                 C   s   d| j kod| j | j kS )Nr9  é§  r  rH   rI   rI   rJ   rb   Ã  rc   ZPCIRevisionIDc                 C   s   d| j kod| j | j kS )Nr:  é¨  r  rH   rI   rI   rJ   rb   Å  rc   ZPCISubsystemIDc                 C   s   d| j kod| j | j kS )Nr;  éª  r  rH   rI   rI   rJ   rb   Ç  rc   ZPCISybsystemVendorIDc                 C   s   d| j kod| j | j kS )Nr<  é¬  r  rH   rI   rI   rJ   rb   É  rc   Z
reserved_8c                 C   s   d| j kod| j | j kS )Nr=  éì  r  rH   rI   rI   rJ   rb   Í  rc   ZOverrideIGMPDefaultsc                 C   s   d| j kod| j | j kS )Nr>  éí  r  rH   rI   rI   rJ   rb   Ï  rc   ZConfigFlagsc                 C   s   d| j kod| j | j kS )Nr?  éî  r  rH   rI   rI   rJ   rb   Ñ  rc   ZNumCpToSend_PLFramesc                 C   s   d| j kod| j | j kS )Nr@  éï  r  rH   rI   rI   rJ   rb   Ó  rc   Z
reserved_9s                                é   c                 C   s   d| j kod| j | j kS )NrA  é  r  rH   rI   rI   rJ   rb   ×  rc   ZUniCastPriorityc                 C   s   d| j kod| j | j kS )NrC  é  r  rH   rI   rI   rJ   rb   Ù  rc   ZMcastPriorityc                 C   s   d| j kod| j | j kS )NrD  é  r  rH   rI   rI   rJ   rb   Û  rc   ZIGMPPriorityc                 C   s   d| j kod| j | j kS )NrE  é  r  rH   rI   rI   rJ   rb   Ý  rc   ZAVStreamPriorityc                 C   s   d| j kod| j | j kS )NrF  é  r  rH   rI   rI   rJ   rb   ß  rc   ZPriorityTTL_0c                 C   s   d| j kod| j | j kS )NrG  é  r  rH   rI   rI   rJ   rb   á  rc   ZPriorityTTL_1c                 C   s   d| j kod| j | j kS )NrH  é  r  rH   rI   rI   rJ   rb   ã  rc   ZPriorityTTL_2c                 C   s   d| j kod| j | j kS )NrI  é  r  rH   rI   rI   rJ   rb   å  rc   ZPriorityTTL_3c                 C   s   d| j kod| j | j kS )NrJ  é   r  rH   rI   rI   rJ   rb   ç  rc   ZEnableVLANOverc                 C   s   d| j kod| j | j kS )NrK  é!  r  rH   rI   rI   rJ   rb   é  rc   ZEnableTOSOverc                 C   s   d| j kod| j | j kS )NrL  é"  r  rH   rI   rI   rJ   rb   ë  rc   Zreserved_10c                 C   s   d| j kod| j | j kS )NrM  é$  r  rH   rI   rI   rJ   rb   í  rc   ZVLANPrioTOSPrecMatrixc                 C   s   d| j kod| j | j kS )NrN  é(  r  rH   rI   rI   rJ   rb   ï  rc   ZNumClassifierPriorityMapsc                 C   s   d| j kod| j | j kS )NrO  é,  r  rH   rI   rI   rJ   rb   ñ  rc   ZNumAutoConnectionsc                 C   s   d| j kod| j | j kS )NrP  é0  r  rH   rI   rI   rJ   rb   ó  rc   ZClassifierPriorityMapsc                 C   s   dS )Néà   rI   r÷   rI   rI   rJ   rb   ô  rc   c                 C   s   d| j kod| j | j kS )NrQ  iD  r  rH   rI   rI   rJ   rb   õ  rc   ZAutoConnectionsc                 C   s   dS )Ni@  rI   r÷   rI   rI   rJ   rb   ö  rc   c                 C   s   d| j kod| j | j kS )Ni  in  r  rH   rI   rI   rJ   rb   ÷  rc   ZNumberOfConfigEntriesc                 C   s   d| j kod| j | j kS )NiP	  éQ	  r  rH   rI   rI   rJ   rb   ù  rc   ZAggregateConfigEntriesc                 C   s   dS )NrA   rI   r÷   rI   rI   rJ   rb   ú  rc   c                 C   s   d| j kod| j | j kS )NrS  éa	  r  rH   rI   rI   rJ   rb   û  rc   Z RSVD_CustomAggregationParametersc                 C   s   dS )Né0   rI   r÷   rI   rI   rJ   rb   ü  rc   c                 C   s   d| j kod| j | j kS )NrT  é‘	  r  rH   rI   rI   rJ   rb   ý  rc   Zreserved_11s{                                                                                                                              é{   c                 C   s   d| j kod| j | j kS )NrV  é
  r  rH   rI   rI   rJ   rb     rc   ZToneMaskTypec                 C   s   d| j kod| j | j kS )NrX  é
  r  rH   rI   rI   rJ   rb     rc   ZToneMaskEnabledc                 C   s   d| j kod| j | j kS )NrY  é
  r  rH   rI   rI   rJ   rb     rc   Z	StartTonec                 C   s   d| j kod| j | j kS )NrZ  é
  r  rH   rI   rI   rJ   rb     rc   ZEndTonec                 C   s   d| j kod| j | j kS )Nr[  é
  r  rH   rI   rI   rJ   rb   	  rc   Zreserved_12s               rë   c                 C   s   d| j kod| j | j kS )Nr\  é(
  r  rH   rI   rI   rJ   rb     rc   ZPsdIndexc                 C   s   d| j kod| j | j kS )Nr]  é,
  r  rH   rI   rI   rJ   rb     rc   ZTxPrescalerTypec                 C   s   d| j kod| j | j kS )Nr^  é0
  r  rH   rI   rI   rJ   rb     rc   ZPrescalerValuesc                 C   s   dS )Ni  rI   r÷   rI   rI   rJ   rb     rc   c                 C   s   d| j kod| j | j kS )Nr_  i4
  r  rH   rI   rI   rJ   rb     rc   Zreserved_13sÌ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              iÌ  c                 C   s   d| j kod| j | j kS )Ni@  é  r  rH   rI   rI   rJ   rb     rc   ZAllowNEKRotationc                 C   s   d| j kod| j | j kS )Nr`  é  r  rH   rI   rI   rJ   rb     rc   ZOverrideLocalNEKc                 C   s   d| j kod| j | j kS )Nra  é  r  rH   rI   rI   rJ   rb     rc   ZLocalNEKToUsec                 C   s   d| j kod| j | j kS )Nrb  é$  r  rH   rI   rI   rJ   rb     rc   ZOverrideNEKRotationTimerc                 C   s   d| j kod| j | j kS )Nrc  é(  r  rH   rI   rI   rJ   rb   !  rc   ZNEKRotationTime_Minc                 C   s   d| j kod| j | j kS )Nrd  é,  r  rH   rI   rI   rJ   rb   #  rc   Zreserved_14s`                                                                                                   é`   c                 C   s   d| j kod| j | j kS )Nre  éŒ  r  rH   rI   rI   rJ   rb   '  rc   ZAVLNMembershipc                 C   s   d| j kod| j | j kS )Nrg  é�  r  rH   rI   rI   rJ   rb   )  rc   ZSimpleConnectTimeoutc                 C   s   d| j kod| j | j kS )Nrh  é”  r  rH   rI   rI   rJ   rb   +  rc   ZEnableLEDThroughputIndicatec                 C   s   d| j kod| j | j kS )Nri  é•  r  rH   rI   rI   rJ   rb   -  rc   ZMidLEDThroughputThreshold_Mbpsc                 C   s   d| j kod| j | j kS )Nrj  é–  r  rH   rI   rI   rJ   rb   /  rc   ZHighLEDThroughputThreshold_Mbpsc                 C   s   d| j kod| j | j kS )Nrk  é—  r  rH   rI   rI   rJ   rb   1  rc   Zreserved_15c                 C   s   d| j kod| j | j kS )Nrl  é˜  r  rH   rI   rI   rJ   rb   3  rc   ZEnableUnicastQuieriesToMemberc                 C   s   d| j kod| j | j kS )Nrm  é™  r  rH   rI   rI   rJ   rb   5  rc   ZDisableMLDGroupIDCheckInMACc                 C   s   d| j kod| j | j kS )Nrn  éš  r  rH   rI   rI   rJ   rb   7  rc   ZEnableReportsToNonQuerierHostsc                 C   s   d| j kod| j | j kS )Nro  éœ  r  rH   rI   rI   rJ   rb   9  rc   Z$DisableExpireGroupMembershipIntervalc                 C   s   d| j kod| j | j kS )Nrp  é   r  rH   rI   rI   rJ   rb   ;  rc   ZDisableLEDTestLightsc                 C   s   d| j kod| j | j kS )Nrq  é¤  r  rH   rI   rI   rJ   rb   =  rc   ZGPIOMapsc                 C   s   dS )Nrë   rI   r÷   rI   rI   rJ   rb   >  rc   c                 C   s   d| j kod| j | j kS )Nrr  é°  r  rH   rI   rI   rJ   rb   ?  rc   Zreserved_16c                 C   s   d| j kod| j | j kS )Nrs  é¸  r  rH   rI   rI   rJ   rb   A  rc   ZEnableTrafficClass_DSCPOverc                 C   s   d| j kod| j | j kS )Nrt  é¹  r  rH   rI   rI   rJ   rb   C  rc   ZTrafficClass_DSCPMatricesc                 C   s   d| j kod| j | j kS )Nru  éù  r  rH   rI   rI   rJ   rb   G  rc   ZGPIOControlc                 C   s   d| j kod| j | j kS )Nrv  éú  r  rH   rI   rI   rJ   rb   I  rc   Z
LEDControls                                    r>   c                 C   s   d| j kod| j | j kS )Nrw  é  r  rH   rI   rI   rJ   rb   M  rc   ZOverrideMinButtonPressHoldTimec                 C   s   d| j kod| j | j kS )Nrx  é  r  rH   rI   rI   rJ   rb   O  rc   ZMinButtonPressHoldTimec                 C   s   d| j kod| j | j kS )Nry  é"  r  rH   rI   rI   rJ   rb   Q  rc   Zreserved_17s                         rÑ   c                 C   s   d| j kod| j | j kS )Nrz  é8  r  rH   rI   rI   rJ   rb   U  rc   ZMemoryProfilec                 C   s   d| j kod| j | j kS )Nr{  é<  r  rH   rI   rI   rJ   rb   W  rc   ZDisableAllLEDFlashOnWarmRebootc                 C   s   d| j kod| j | j kS )Nr|  é@  r  rH   rI   rI   rJ   rb   Y  rc   ZUplinkLimit_bpsc                 C   s   d| j kod| j | j kS )Nr}  éD  r  rH   rI   rI   rJ   rb   [  rc   ZDownlinkLimit_bpsc                 C   s   d| j kod| j | j kS )Nr~  éH  r  rH   rI   rI   rJ   rb   ]  rc   ZMDUStaticSNIDc                 C   s   d| j kod| j | j kS )Nr  éL  r  rH   rI   rI   rJ   rb   _  rc   ZMitigateEnabledc                 C   s   d| j kod| j | j kS )Nr€  éM  r  rH   rI   rI   rJ   rb   a  rc   ZCorrelThresholdc                 C   s   d| j kod| j | j kS )Nr�  éQ  r  rH   rI   rI   rJ   rb   c  rc   ZScaledTxGainc                 C   s   d| j kod| j | j kS )Nr‚  éU  r  rH   rI   rI   rJ   rb   e  rc   ZResourceThresholdEnabledc                 C   s   d| j kod| j | j kS )Nrƒ  éV  r  rH   rI   rI   rJ   rb   g  rc   ZReservedPercentageForCapsc                 C   s   dS ©Nr<   rI   r÷   rI   rI   rJ   rb   h  rc   c                 C   s   d| j kod| j | j kS )Nr„  éZ  r  rH   rI   rI   rJ   rb   i  rc   ZPowerSavingModec                 C   s   d| j kod| j | j kS )Nr†  é[  r  rH   rI   rI   rJ   rb   k  rc   ZPowerLEDDutyCyclec                 C   s   d| j kod| j | j kS )Nr‡  é\  r  rH   rI   rI   rJ   rb   m  rc   Zreserved_18c                 C   s   d| j kod| j | j kS )Nrˆ  é^  r  rH   rI   rI   rJ   rb   o  rc   ZLinkUpDurationBeforeReset_msc                 C   s   d| j kod| j | j kS )Nr‰  éb  r  rH   rI   rI   rJ   rb   q  rc   ZPowerLEDPeriod_msc                 C   s   d| j kod| j | j kS )NrŠ  éf  r  rH   rI   rI   rJ   rb   s  rc   Z%LinkDownDurationBeforeLowPowerMode_msc                 C   s   d| j kod| j | j kS )Nr‹  éj  r  rH   rI   rI   rJ   rb   u  rc   Zreserved_19c                 C   s   d| j kod| j | j kS )NrŒ  én  r  rH   rI   rI   rJ   rb   w  rc   ZAfeGainBusModec                 C   s   d| j kod| j | j kS )Nr�  éo  r  rH   rI   rI   rJ   rb   y  rc   ZEnableDynamicPsdc                 C   s   d| j kod| j | j kS )NrŽ  ép  r  rH   rI   rI   rJ   rb   {  rc   ZReservedPercentageForTxStreamsc                 C   s   d| j kod| j | j kS )Nr�  éq  r  rH   rI   rI   rJ   rb   }  rc   ZReservedPercentageForRxStreamsc                 C   s   d| j kod| j | j kS )Nr�  ér  r  rH   rI   rI   rJ   rb     rc   Zreserved_20c                 C   s   d| j kod| j | j kS )Nr‘  éˆ  r  rH   rI   rI   rJ   rb   ƒ  rc   ZLegacyNetworkUpgradeEnablec                 C   s   d| j kod| j | j kS )Nr’  éŒ  r  rH   rI   rI   rJ   rb   …  rc   Úunknownc                 C   s   d| j kod| j | j kS )Nr“  é�  r  rH   rI   rI   rJ   rb   ‡  rc   Z	MMETTL_usc                 C   s   d| j kod| j | j kS )Nr•  é”  r  rH   rI   rI   rJ   rb   ‰  rc   Z
ConfigBitsc                 C   s   dS )Nr:   rI   r÷   rI   rI   rJ   rb   Š  rc   c                 C   s   d| j kod| j | j kS )Nr–  é–  r  rH   rI   rI   rJ   rb   ‹  rc   ZTxToneMapExpiry_msc                 C   s   d| j kod| j | j kS )Nr—  éš  r  rH   rI   rI   rJ   rb   �  rc   ZRxToneMapExpiry_msc                 C   s   d| j kod| j | j kS )Nr˜  éž  r  rH   rI   rI   rJ   rb   �  rc   ZTimeoutToResound_msc                 C   s   d| j kod| j | j kS )Nr™  é¢  r  rH   rI   rI   rJ   rb   ‘  rc   Z&MissingSackThresholdForUnplugDetectionc                 C   s   d| j kod| j | j kS )Nrš  é¦  r  rH   rI   rI   rJ   rb   “  rc   ZUnplugTimeout_msc                 C   s   d| j kod| j | j kS )Nr›  éª  r  rH   rI   rI   rJ   rb   •  rc   ZContentionWindowTableESc                 C   s   dS )Nrê   rI   r÷   rI   rI   rJ   rb   –  rc   c                 C   s   d| j kod| j | j kS )Nrœ  é²  r  rH   rI   rI   rJ   rb   —  rc   ZBackoffDeferalCountTableESc                 C   s   dS r…  rI   r÷   rI   rI   rJ   rb   ˜  rc   c                 C   s   d| j kod| j | j kS )Nr�  é¶  r  rH   rI   rI   rJ   rb   ™  rc   ZGoodSoundCountThresholdc                 C   s   d| j kod| j | j kS )Nrž  é·  r  rH   rI   rI   rJ   rb   ›  rc   Z&SoundCountThreshold_GoodSoundCountPassc                 C   s   d| j kod| j | j kS )NrŸ  é¸  r  rH   rI   rI   rJ   rb   �  rc   Z&SoundCountThreshold_GoodSoundCountFailc                 C   s   d| j kod| j | j kS )Nr   é¹  r  rH   rI   rI   rJ   rb   Ÿ  rc   Zreserved_21c                 C   s   d| j kod| j | j kS )Nr¡  é»  r  rH   rI   rI   rJ   rb   ¡  rc   ZExclusiveTxPbs_percentagec                 C   s   d| j kod| j | j kS )Nr¢  é¼  r  rH   rI   rI   rJ   rb   £  rc   ZExclusiveRxPbs_percentagec                 C   s   d| j kod| j | j kS )Nr£  é½  r  rH   rI   rI   rJ   rb   ¥  rc   ZOptimizationBackwardCompatiblec                 C   s   d| j kod| j | j kS )Nr¤  é¾  r  rH   rI   rI   rJ   rb   §  rc   Zreserved_21bc                 C   s   d| j kod| j | j kS )Nr¥  é¿  r  rH   rI   rI   rJ   rb   ©  rc   ZMaxPbsPerSymbolc                 C   s   d| j kod| j | j kS )Nr¦  éÀ  r  rH   rI   rI   rJ   rb   «  rc   ZMaxModulationc                 C   s   d| j kod| j | j kS )Nr§  éÁ  r  rH   rI   rI   rJ   rb   ­  rc   ZContinuousRxc                 C   s   d| j kod| j | j kS )Nr¨  éÂ  r  rH   rI   rI   rJ   rb   ¯  rc   Zreserved_22s         r³   c                 C   s   d| j kod| j | j kS )Nr©  éÈ  r  rH   rI   rI   rJ   rb   ³  rc   ZPBControlStatusc                 C   s   d| j kod| j | j kS )Nrª  éÉ  r  rH   rI   rI   rJ   rb   µ  rc   ZSTAMembershipMaskEnabledc                 C   s   d| j kod| j | j kS )Nr«  éÊ  r  rH   rI   rI   rJ   rb   ·  rc   ZExitDefaultEnabledc                 C   s   d| j kod| j | j kS )Nr¬  éË  r  rH   rI   rI   rJ   rb   ¹  rc   ZRejectDefaultEnabledc                 C   s   d| j kod| j | j kS )Nr­  éÌ  r  rH   rI   rI   rJ   rb   »  rc   ZChainingEnabledc                 C   s   d| j kod| j | j kS )Nr®  éÍ  r  rH   rI   rI   rJ   rb   ½  rc   ZVendorSpecificNMKc                 C   s   d| j kod| j | j kS )Nr¯  éÝ  r  rH   rI   rI   rJ   rb   Á  rc   ZLocalMACAddressLimitc                 C   s   d| j kod| j | j kS )Nr°  éÞ  r  rH   rI   rI   rJ   rb   Ã  rc   ZOverrideBridgeTableAgingTimec                 C   s   d| j kod| j | j kS )Nr±  éß  r  rH   rI   rI   rJ   rb   Å  rc   ZLocalBridgeTableAgingTime_minc                 C   s   d| j kod| j | j kS )Nr²  éá  r  rH   rI   rI   rJ   rb   Ç  rc   ZRemoteBridgeTableAgingTime_minc                 C   s   d| j kod| j | j kS )Nr³  éã  r  rH   rI   rI   rJ   rb   É  rc   ZPhySyncReferencec                 C   s   d| j kod| j | j kS )Nr´  éç  r  rH   rI   rI   rJ   rb   Ë  rc   Zreserved_23c                 C   s   d| j kod| j | j kS )Nrµ  éè  r  rH   rI   rI   rJ   rb   Í  rc   Zreserved_24c                 C   s   d| j kod| j | j kS )Nr¶  éì  r  rH   rI   rI   rJ   rb   Ï  rc   Zreserved_25c                 C   s   d| j kod| j | j kS )Nr·  éð  r  rH   rI   rI   rJ   rb   Ñ  rc   Zreserved_26s                           rÒ   c                 C   s   d| j kod| j | j kS )Nr¸  é   r  rH   rI   rI   rJ   rb   Õ  rc   ZOverrideDefaultLedEventBehavioré€   c                 C   s   d| j kod| j | j kS )Nr¹  é	   r  rH   rI   rI   rJ   rb   ×  rc   ZReportToHostInfoc                 C   s   d| j kod| j | j kS )Nr»  é
   r  rH   rI   rI   rJ   rb   Ù  rc   Zreserved_27c                 C   s   d| j kod| j | j kS )Nr¼  é   r  rH   rI   rI   rJ   rb   Û  rc   ZNumBehaviorsc                 C   s   d| j kod| j | j kS )Nr½  é   r  rH   rI   rI   rJ   rb   Ý  rc   ZBehaviorBlockArrayESc                 C   s   dS )Ni°  rI   r÷   rI   rI   rJ   rb   Þ  rc   c                 C   s   d| j kod| j | j kS )Nr¾  é¾$  r  rH   rI   rI   rJ   rb   ß  rc   Z	NumEventsc                 C   s   d| j kod| j | j kS )Nr¿  é¿$  r  rH   rI   rI   rJ   rb   á  rc   ZEventBlockArrayESc                 C   s   dS )Ni&  rI   r÷   rI   rI   rJ   rb   â  rc   c                 C   s   d| j kod| j | j kS )NrÀ  iå&  r  rH   rI   rI   rJ   rb   ã  rc   r¹   c                    s   || _ || _tt| ƒ |¡S r`   )r  r  Úsuperr
  Ú__init__)rz   ÚpacketÚoffsetÚlength©Ú	__class__rI   rJ   rÂ  æ  s    zModulePIB.__init__)r�   r   r¹   ) rO   rP   rQ   r}   rR   Ú	__slots__r   r   r   r   r   r   r   rú   rð   rõ   rý   rÿ   r   r  r  r   r  r  r  r  r   r  r	  rX   rÂ  Ú__classcell__rI   rI   rÆ  rJ   r
  B  sä  
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿþý
ÿþýþýþýþý
ÿ
ÿ
ÿ
ÿþý
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿÿþý
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿþý
ÿ
ÿ
ÿþý
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿÿÿ
ÿÿÿþý
ÿ
ÿ
ÿ
ÿþý
ÿ
ÿÿþý
ÿ
ÿþý
ÿ
ÿþý
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿÿ
ÿ
ÿþýÿþýÿÿþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿÿÿÿÿþýÿÿÿÿÿÿÿÿþýÿÿÿÿÿÿÿ€ € € ç    r
  c                   @   sF   e Zd Zd ZeddeƒeddƒeddƒeddƒeddƒeddƒgZdS )	ÚStartMACRequestrÆ   r   Z
reserver_1ZImgLoadStartAddrÚ	ImgLengthÚImgCheckSumZImgStartAddrN)	rO   rP   rQ   rR   r   ÚStartMACCodesr   r   rX   rI   rI   rI   rJ   rÊ  ó  s   
ûrÊ  c                   @   s&   e Zd Zd ZeddeƒeddƒgZdS )ÚStartMACConfirmationr[   r   rÆ   N)rO   rP   rQ   rR   r   rÍ  r   rX   rI   rI   rI   rJ   rÎ  þ  s   
ÿrÎ  c                   @   s   e Zd Zd Zg ZdS )ÚResetDeviceRequestNrk   rI   rI   rI   rJ   rÏ    s   rÏ  c                   @   s   e Zd Zd ZeddeƒgZdS )ÚResetDeviceConfirmationr[   r   N)rO   rP   rQ   rR   r   ÚResetDeviceCodesrX   rI   rI   rI   rJ   rÐ    s   rÐ  c                   @   s   e Zd Zd Zg ZdS )ÚReadConfBlockRequestNrk   rI   rI   rI   rJ   rÒ    s   rÒ  zGeneric ImagezSynopsis configurationzDenali configurationzDenali appletzRuntime firmwarez
OAS clientzCustom imagezMemory control appletzPower management appletzOAS client IP stackzOAS client TR069Z
SoftLoaderzFlash layoutzChain manifestzRuntime parameterszCustom module in scratchzCustom module update applet)r   r8   r:   r;   r<   r=   r³   rq   rê   rÐ   é
   é   rë   é   rù   r±   rA   r’   c                   @   s¾   e Zd Zd Z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ƒ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ƒeddƒeddƒeddƒgZ	dS )Ú	ConfBlockZHeaderVersionNumr   Z
ImgAddrNVMZImgAddrSDRAMrË  rÌ  Ú
EntryPointZHeaderMinVersionZHeaderImgTypeZHeaderIgnoreMaskZHeaderModuleIDZHeaderModuleSubIDZAddrNextHeaderNVMZHeaderChecksumZ	SDRAMsizeZSDRAMConfRegisterZSDRAMTimingRegister_0ZSDRAMTimingRegister_1ZSDRAMControlRegisterZSDRAMRefreshRegisterZMACClockRegisterrˆ   N)
rO   rP   rQ   rR   r   r   r   ÚCBImgTCodesr   rX   rI   rI   rI   rJ   rÖ  6  s.   
ìrÖ  c                   @   s>   e Zd Zd Zeddeƒeddddd�eddedd	„ d
�gZ	dS )ÚReadConfBlockConfirmationr[   r   ÚBlockLenNZConfigurationBlockr]   r^   c                 C   s   | j S r`   )rÚ  rH   rI   rI   rJ   rb   S  rc   z"ReadConfBlockConfirmation.<lambda>rd   )
rO   rP   rQ   rR   r   ÚReadConfBlockCodesr
   r   rÖ  rX   rI   rI   rI   rJ   rÙ  O  s
   
þrÙ  c                   @   s   e Zd Zd ZeddeƒgZdS )ÚWriteModuleData2NVMRequestrÆ   r:   N)rO   rP   rQ   rR   r   rå   rX   rI   rI   rI   rJ   rÜ  Z  s   rÜ  c                   @   s(   e Zd Zd ZeddeƒeddeƒgZdS )ÚWriteModuleData2NVMConfirmationr[   r   rÆ   r:   N)rO   rP   rQ   rR   r   rh   rå   rX   rI   rI   rI   rJ   rÝ  _  s   

ÿrÝ  c                	   @   sN   e Zd ZdZdZeeeddƒeƒee	de
ƒ e
dd„ d�d	d„ ƒgZd
d„ ZdS )Ú
HomePlugAVzH
        HomePlugAV Packet - by default => gets devices information
    zHomePlugAV ZFragmentInfor   ZVendorFieldc                 C   s   dS )Nr;   rI   r÷   rI   rI   rJ   rb   q  rc   zHomePlugAV.<lambda>rd   c                 C   s
   | j dkS rÊ   rF   rH   rI   rI   rJ   rb   r  rc   c                 C   s
   t | tƒS r`   )Ú
isinstancerÞ  )rz   ÚotherrI   rI   rJ   Úanswerst  s    zHomePlugAV.answersN)rO   rP   rQ   r}   rR   rL   r   r   rK   r   rY   rX   rá  rI   rI   rI   rJ   rÞ  g  s   
ÿ
þýýrÞ  Útypeiáˆ  r   )rM   r    r!   r$   r%   r   r   r'   r(   rE   i±   r&   r)   r*   r/   )rM   rG   r8   r6   r0   r1   r2   r3   r4   r5   rD   r"   r#   r+   r,   r-   )mr}   Ú
__future__r   rÓ   Zscapy.packetr   r   Zscapy.fieldsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zscapy.layers.l2r   rT   rW   ri   rt   rh   rS   rV   Z
EofPadListrK   rL   rY   rZ   rj   rl   r~   r‡   r‹   rŒ   r˜   rœ   r›   r�   r    r¡   r¦   r¥   r§   r©   rª   r®   r´   r­   ZSnifferCodesr¯   rµ   ZANCodesr°   r¶   r½   rº   rÚ   r¾   rÛ   rå   râ   rã   ræ   rï   rð   rô   rõ   rú   rý   rÿ   r  r  r  r  r  r  r  r	  r
  rÍ  rÊ  rÎ  rÑ  rÏ  rÐ  rÛ  rÒ  rØ  rÖ  rÙ  rÜ  rÝ  rÞ  rI   rI   rI   rJ   Ú<module>   sú  	`æÿø
þþÃ@
	ÿþ		ÿÿÿÿ(þÿ*1ý

						   1	ï