
    h`                        d Z ddlZddlmZmZ ddlmZ ddlmZm	Z	m
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! ddl"m#Z#m$Z$ dd	l%m&Z&m'Z' dd
l(m)Z)m*Z* ddl+m,Z,m-Z-  G d de)          Z. G d de          Z/ G d de          Z0 G d de          Z1 G d de          Z2 G d de          Z3 G d de          Z4 G d de          Z5 G d de          Z6 G d de          Z7 G d  d!e          Z8 G d" d#e7          Z9 G d$ d%e7          Z: G d& d'e          Z; G d( d)e          Z< G d* d+e          Z=d,d-d.d/d0d1d2Z>d3d4d5Z?i dd6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVi dWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~Z@ G d de          ZA G d de          ZB G d de          ZC G d de          ZD G d d:e          ZE G d d<e          ZF G d d>e          ZG G d d@e          ZH G d dBe          ZI G d dDe          ZJ G d dFe          ZK G d dHe          ZL G d dJe          ZM G d dLe          ZN G d dNe          ZO G d dPe          ZP G d dRe          ZQ G d dTe          ZR G d dVe          ZS G d de          ZT G d de          ZU G d de          ZV G d dXe          ZW G d dZe          ZX G d d\e          ZY G d d^e          ZZ G d d`e          Z[ G d de          Z\ G d dde          Z] G d dfe          Z^ G d dhe          Z_ G d dje          Z` G d dle          Za G d dne          Zb G d dpe          Zc G d dre          Zd G d dte          Ze G d dve          Zf G d dxe          Zg G d dye          Zh G d dze          Zi G d d{e          Zj G d d|e          Zk G d d}e          Zl ee4e5d            ee4e6            ee5e7d            ee5e8d7            ee5e9d9            ee5e;d;            ee5e<d=            ee5e=d?            ee5e:dA            ee6e'd9            ee6eBd;            ee6eAdd7d            eeBeCd            eeBeDd7            eeBeEd9            eeBeFd;            eeBeGd=            eeBeHd?            eeBeIdA            eeBeJdC            eeBeKdE            eeBeLdG            eeBeMdI            eeBeNdK            eeBeOdM            eeBePdO            eeBeQdQ            eeBeRdS            eeBeSdU            eeBeTd            eeBeUd            eeBeVd            eeBeWdW            eeBeXdY            eeBeYd[            eeBeZd]            eeBe[d_            eeBe\da            eeBe]dc            eeBe^de            eeBe_dg            eeBe`di            eeBeadk            eeBebdm            eeBecdo            eeBeddq            eeBeeds            eeBefdu            eeBegdw            eeBehd            eeBeid            eeBejd            eeBekd            eeBeld           ejm        n                    ee4           ejm        n                    e	e/            ee/e4            ee*e.e
           dS )zBluetooth 4LE layer    N)orbchb)conf)DLT_BLUETOOTH_LE_LLDLT_BLUETOOTH_LE_LL_WITH_PHDRPPI_BTLE)Packetbind_layers)BitEnumFieldBitFieldByteEnumField	ByteFieldField
FlagsField
LEIntFieldLEShortEnumFieldLEShortFieldMACFieldPacketListFieldSignedByteFieldX3BytesField
XByteField	XIntFieldXLEIntFieldXLELongFieldXLEShortFieldXShortField)LEBitEnumField
LEBitField)EIR_Hdr	L2CAP_Hdr)PPI_ElementPPI_Hdr)mac2strstr2macc                       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           edd           edd          gZ	dS )BTLE_PPIzCooked BTLE PPI header

    See ``ppi_btle_t`` in
    https://github.com/greatscottgadgets/libbtbb/blob/master/lib/src/pcap.c
    zBTLE PPI headerbtle_versionr   btle_channelNbtle_clkn_highbtle_clk_100nsrssi_maxrssi_minrssi_avg
rssi_count)
__name__
__module____qualname____doc__namer   r   r   r   fields_desc     ]/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/bluetooth4LE.pyr'   r'   5   s         
 D	.!$$ 	^T**	"D))
#T**
D))
D))
D))	,%%KKKr7   r'   c                      e Zd ZdZdZddddddd	d
dZdddd
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d           e
ddd           e
ddd           e
ddd           e
ddd           eddd e           e
d!dd           e
d"dd           e
d#dd           e
d$dd           ed%dd&e          gZd'S )(BTLE_RFzxCooked BTLE link-layer pseudoheader.

    https://www.tcpdump.org/linktypes/LINKTYPE_BLUETOOTH_LE_LL_WITH_PHDR.html
    zBTLE RF info headerADV_OR_DATA_UNKNOWN_DIRAUX_ADVDATA_M_TO_SDATA_S_TO_MCONN_ISO_M_TO_SCONN_ISO_S_TO_MBROADCAST_ISORFU)r                        1M2MCoded)r   rC   rD   rE   
rf_channelr   signalinoiseaccess_address_offensesreference_access_address
dewhitenedrC   sig_power_validnoise_power_valid	decryptedreference_access_address_validaccess_address_offenses_validchannel_aliasedtyperE   crc_checked	crc_validmic_checked	mic_validphyrD   N)r0   r1   r2   r3   r4   _TYPES_PHYr   r   r   r   r   r5   r6   r7   r8   r:   r:   J   s         !D %	 	F 	 D 		,""$''&&	+Q//.22
<A&&
$a++
&1--
;1%%
3Q::
2Aq99
$a++vq!V,,
=!Q''
;1%%
=!Q''
;1%%uaD))%KKKr7   r:   c                   "    e Zd ZddZd Zd ZdS )BDAddrFieldFc                 x    t          j        | ||           |r!t          j                            |            d S d S N)r   __init__r   resolveadd)selfr4   defaultrf   s       r8   re   zBDAddrField.__init__~   sE    $g... 	#LT"""""	# 	#r7   c                     |dS t          d                    |                    d          d d d                             S )Ns         :)r$   joinsplitrh   pktxs      r8   i2mzBDAddrField.i2m   s;    9"?sxxTTrT 233444r7   c                 2    t          |d d d                   S Nrl   )r%   ro   s      r8   m2izBDAddrField.m2i   s    q2wr7   N)F)r0   r1   r2   re   rr   ru   r6   r7   r8   rb   rb   }   sF        # # # #
5 5 5
         r7   rb   c                        e Zd Zd Zd Zd ZdS )BTLEChanMapFieldc                 4    t          j        | ||d           d S )Nz<Q)r   re   )rh   r4   ri   s      r8   re   zBTLEChanMapField.__init__   s    tT7D11111r7   c                 t    |t          j        | j        |                     ||                    d d         z   S )NrG   )structpackfmtrr   )rh   rp   svals       r8   addfieldzBTLEChanMapField.addfield   s2    6;tx#s););<<RaR@@@r7   c           
          |dd          |                      |t          j        | j        |d d         dz             d                   fS )NrG   s      r   )ru   rz   unpackr|   )rh   rp   r}   s      r8   getfieldzBTLEChanMapField.getfield   sD    udhhsFM$(AbqbEO<S$T$TUV$WXXXXr7   N)r0   r1   r2   re   r   r   r6   r7   r8   rw   rw      sI        2 2 2A A AY Y Y Y Yr7   rw   c                        e Zd Z fdZ xZS )BTLEFeatureFieldc                 b    t          t          |                               ||dg d           d S )Ni)'le_encryptionconn_par_req_procext_reject_indslave_init_feat_exchle_pingle_data_len_ext
ll_privacyext_scan_filter	le_2m_phy
tx_mod_idx
rx_mod_idxle_coded_phy
le_ext_advle_periodic_adv
ch_sel_algle_pwr_classmin_used_channelsconn_cte_reqconn_cte_rspconnless_cte_txconnless_cte_rxantenna_switching_cte_aod_txantenna_switching_cte_aoa_rxcte_rxperiodic_adv_sync_transfer_txperiodic_adv_sync_transfer_rxsleep_clock_accuracy_updatesremote_public_key_validationcis_centralcis_peripheraliso_broadcastersynchronized_receiverconnected_iso_host_supportle_power_control_requestr   le_path_loss_monitoringperiodic_adv_adi_supportconnection_subrating!connection_subrating_host_supportchannel_classification)superr   re   rh   r4   ri   	__class__s      r8   re   zBTLEFeatureField.__init__   sF    %%..'3'' '' ''*	
 *	
 *	
 *	
 *	
r7   r0   r1   r2   re   __classcell__r   s   @r8   r   r      s8        +
 +
 +
 +
 +
 +
 +
 +
 +
r7   r   c                        e Zd Z fdZ xZS )BTLEPhysFieldc                 b    t          t          |                               ||dg d           d S )Ni)phy_1mphy_2m	phy_coded)r   r   re   r   s      r8   re   zBTLEPhysField.__init__   s?    mT""++'2---	
 	
 	
 	
 	
r7   r   r   s   @r8   r   r      s8        
 
 
 
 
 
 
 
 
r7   r   c                   r    e Zd ZdZ edd           edd          gZedd            Zd Z	d	 Z
d
 Zd ZdS )BTLEBT4LEaccess_addr   > crcNUUU c                 4   d } ||dz             ||dz	  dz            dz  z    ||dz	  dz            dz  z   }d}d | D             D ]2}t          d          D ] }||z  dz  }|dz  }|dz  }|r
|dz  }||z  }!3t          j        d	|          d d
         S )Nc                     d}| dz  dk    r|dz  }| dz  dk    r|dz  }| dz  dk    r|dz  }| dz  dk    r|d	z  }| d	z  dk    r|dz  }| dz  dk    r|dz  }| dz  dk    r|dz  }| dz  dk    r|dz  }|S )
Nr      rC   @   rD       rF         r6   )avs     r8   swapbitsz"BTLE.compute_crc.<locals>.swapbits   s    A4x1}}T	4x1}}T	4x1}}T	4x1}}T	4x1}}T	4x1}}T	4x1}}T	4x1}}T	Hr7      r   r   i `Z c              3   4   K   | ]}t          |          V  d S rd   )r   ).0rq   s     r8   	<genexpr>z#BTLE.compute_crc.<locals>.<genexpr>   s(      &&Q#a&&&&&&&&r7   rC   i   z<Lrl   )rangerz   r{   )pduinitr   state	lfsr_maskijnext_bits           r8   compute_crczBTLE.compute_crc   s    	 	 	( %%4192D)E)E)JKxxY]acYcgkXkOlOlprOrs	&&#&&& 	' 	'A1XX ' '!AI?a! 'W$EY&E' {4'',,r7   c                     |dd          }|d d         |z   }|| j         |n|                     |dd                    z  }|S )NrF   )r   r   )rh   ppayr   s       r8   
post_buildzBTLE.post_build   sP    fcrcFSL	DH(SSd.>.>qu.E.EEr7   c                     d | _         |S rd   )raw_packet_cacherh   r}   s     r8   post_dissectzBTLE.post_dissect  s     $r7   c                 B    |d d         |dd          z   |dd         z   S )NrF   r   r6   r   s     r8   pre_dissectzBTLE.pre_dissect  s)    !uqv~!B$''r7   c                 6    t          j        d| j                  S )Nz!L)rz   r{   r   )rh   s    r8   hashretzBTLE.hashret
  s    {4!1222r7   )r   )r0   r1   r2   r4   r   r   r5   staticmethodr   r   r   r   r   r6   r7   r8   r   r      s        DM:..UD!!K
 - - - \-B    ( ( (3 3 3 3 3r7   r   c                       e Zd ZdZ edddddd           edddddd           ed	dddd
i           eddd           eddddddddddd           edd          gZd ZdS )BTLE_ADVzBTLE advertising headerRxAddr   rC   publicrandom)r   rC   TxAddChSelz#2rB   PDU_typerF   ADV_INDADV_DIRECT_INDADV_NONCONN_INDSCAN_REQSCAN_RSPCONNECT_REQADV_SCAN_IND)r   rC   rD   rE   rF   rG   rH   LengthNc                     ||z  }| j         Mt          |          dk    rt          |          }nd}|d d         t          |dz            z   |dd          z   }t          | j        t
                    s|                     t
                     |S )NrD   r   rC   r   )r   lenr   
isinstance
underlayerr   add_underlayer)rh   r   r   l_pays       r8   r   zBTLE_ADV.post_build#  s    	S;3xx!||C"1"EDL)))AabbE1A$/400 	&%%%r7   )	r0   r1   r2   r4   r   r   r   r5   r   r6   r7   r8   r   r     s        $DWa(0%2 %2 	3 	3Wa(0%2 %2 	3 	3 	WaQI..1ZA9+;+<+5+5+8+9(; (; 	< 	< 	
8T""K$
 
 
 
 
r7   r   c                       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
dddd           edd          gZd ZdS )	BTLE_DATAzBTLE data headerrB   r   rE   MDrC   SNNESNLLIDrD   continuestartcontrol)rC   rD   rE   r   Nc                 h    | j         '|d d         t          t          |                    z   }||z   S rt   )r   r   )rh   r   r   s      r8   r   zBTLE_DATA.post_build;  s1    8#2#SXX&A3wr7   )	r0   r1   r2   r4   r   r   r   r5   r   r6   r7   r8   r   r   0  s        D1q!q!AVQzg)#L#LMM	%K    r7   r   c                   D    e Zd ZdZ edd           edde          gZdS )BTLE_ADV_INDzBTLE ADV_INDAdvANdata)r0   r1   r2   r4   rb   r   r    r5   r6   r7   r8   r  r  A  s:        DFD!!g..KKKr7   r  c                   B    e Zd ZdZ edd           edd          gZdS )BTLE_ADV_DIRECT_INDzBTLE ADV_DIRECT_INDr  NInitA)r0   r1   r2   r4   rb   r5   r6   r7   r8   r	  r	  I  s8         DFD!!GT""KKKr7   r	  c                       e Zd ZdZdS )BTLE_ADV_NONCONN_INDzBTLE ADV_NONCONN_INDNr0   r1   r2   r4   r6   r7   r8   r  r  Q  s        !DDDr7   r  c                       e Zd ZdZdS )BTLE_ADV_SCAN_INDzBTLE ADV_SCAN_INDNr  r6   r7   r8   r  r  U  s        DDDr7   r  c                   H    e Zd ZdZ edd           edd          gZd ZdS )BTLE_SCAN_REQzBTLE scan requestScanANr  c                 4    t           |v o| j        |j        k    S rd   )BTLE_SCAN_RSPr  rh   others     r8   answerszBTLE_SCAN_REQ.answers`      %A$)uz*AAr7   )r0   r1   r2   r4   rb   r5   r  r6   r7   r8   r  r  Y  sR        DGT""FD!!K
B B B B Br7   r  c                   J    e Zd ZdZ edd           edde          gZd ZdS )r  zBTLE scan responser  Nr  c                 4    t           |v o| j        |j        k    S rd   )r  r  r  s     r8   r  zBTLE_SCAN_RSP.answersk  r  r7   )	r0   r1   r2   r4   rb   r   r    r5   r  r6   r7   r8   r  r  d  sT        DFD!!g..K
B B B B Br7   r  c                   "   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           e
ddd           e
ddd          gZdS )BTLE_CONNECT_REQzBTLE connect requestr
  Nr  AAr   crc_initwin_size
win_offsetintervallatencytimeoutchMSCArE   hoprG   )r0   r1   r2   r4   rb   r   r   r   r   rw   r   r5   r6   r7   r8   r  r  o  s        !DGT""FD!!	$Z%%
:s##lC((j#&&i%%i%%""11KKKr7   r  z4.0z4.1z4.2z5.0z5.1z5.2)rH   rI   r   	   
      zBroadcom CorporationzNordic Semiconductor ASA)   Y   LL_CONNECTION_UPDATE_REQrC   LL_CHANNEL_MAP_REQrD   LL_TERMINATE_INDrE   
LL_ENC_REQrF   
LL_ENC_RSPrG   LL_START_ENC_REQrH   LL_START_ENC_RSPrI   LL_UNKNOWN_RSPr   LL_FEATURE_REQr'  LL_FEATURE_RSPr(  LL_PAUSE_ENC_REQr)  LL_PAUSE_ENC_RSP   LL_VERSION_IND   LL_REJECT_IND   LL_SLAVE_FEATURE_REQr*  LL_CONNECTION_PARAM_REQr   LL_CONNECTION_PARAM_RSP   LL_LENGTH_REQ   LL_LENGTH_RSP   
LL_PHY_REQ   
LL_PHY_RSP   LL_PHY_UPDATE_IND   LL_MIN_USED_CHANNELS   
LL_CTE_REQ   
LL_CTE_RSP   LL_PERIODIC_SYNC_IND   LL_CLOCK_ACCURACY_REQ   LL_CLOCK_ACCURACY_RSP   
LL_CIS_REQr   
LL_CIS_RSP!   
LL_CIS_IND"   LL_CIS_TERMINATE_IND#   LL_POWER_CONTROL_REQ$   LL_POWER_CONTROL_RSPLL_POWER_CHANGE_INDLL_SUBRATE_REQLL_SUBRATE_INDLL_CHANNEL_REPORTING_INDLL_CHANNEL_STATUS_IND)%   &   '   (   )   c                       e Zd ZdZdS )BTLE_EMPTY_PDUzEmpty data PDUNr  r6   r7   r8   rl  rl    s        DDDr7   rl  c                   .    e Zd Zd Z edde          gZdS )	BTLE_CTRLopcoder   N)r0   r1   r2   r4   r   BTLE_BTLE_CTRL_opcoder5   r6   r7   r8   rn  rn    s,        Dh#899KKKr7   rn  c            	           e Zd Zd Z edd           edd           edd           edd           edd           ed	d          gZd
S )LL_CONNECTION_UPDATE_INDr  r   r   r!  rH   r"  r#  2   instantN)r0   r1   r2   r4   r   r   r5   r6   r7   r8   rr  rr    st        %D
:q!!lA&&j!$$i##i$$i##KKKr7   rr  c                   B    e Zd Zd Z edd           edd          gZdS )LL_CHANNEL_MAP_INDr$  l   rt  r   N)r0   r1   r2   r4   rw   r   r5   r6   r7   r8   rv  rv    s9        D--i##KKKr7   rv  c                   ,    e Zd Zd Z edd          gZdS )r.  coder   Nr0   r1   r2   r4   r   r5   r6   r7   r8   r.  r.    s)        D
63KKKr7   c                   n    e Zd Zd Z edd           edd           edd           edd          gZdS )r/  randr   edivskdmivmN)r0   r1   r2   r4   r   r   r   r5   r6   r7   r8   r/  r/    sV        DVQfa  VQE1	KKKr7   c                   B    e Zd Zd Z edd           edd          gZdS )r0  skdsr   ivsN)r0   r1   r2   r4   r   r   r5   r6   r7   r8   r0  r0    s8        DVQE1KKKr7   c                       e Zd Zd Zg ZdS )r1  Nr0   r1   r2   r4   r5   r6   r7   r8   r1  r1    s        DKKKr7   c                       e Zd Zd ZdS )r2  Nr  r6   r7   r8   r2  r2            DDDr7   c                   ,    e Zd Zd Z edd          gZdS )r3  rx  r   Nry  r6   r7   r8   r3  r3    s)        D
63KKKr7   c                   ,    e Zd Zd Z edd          gZdS )r4  feature_setr   Nr0   r1   r2   r4   r   r5   r6   r7   r8   r4  r4    *        D**KKKr7   c                   ,    e Zd Zd Z edd          gZdS )r5  r  r   Nr  r6   r7   r8   r5  r5    r  r7   c                       e Zd Zd ZdS )r6  Nr  r6   r7   r8   r6  r6    r  r7   c                       e Zd Zd ZdS )r7  Nr  r6   r7   r8   r7  r7    r  r7   c                   \    e Zd Zd Z edde           edde           edd          gZ	dS )r9  versionr   companyr   
subversionN)
r0   r1   r2   r4   r   BTLE_Versionsr   BTLE_Corp_IDsr   r5   r6   r7   r8   r9  r9    sL        DiM22A}55L!$$KKKr7   c                   ,    e Zd Zd Z edd          gZdS )r;  rx  r   Nry  r6   r7   r8   r;  r;  $  s)        D
63KKKr7   c                   ,    e Zd Zd Z edd          gZdS )r=  r  r   Nr  r6   r7   r8   r=  r=  +  s*        !D**KKKr7   c                      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           edd           edd          gZdS )r>  interval_minrH   interval_maxr"  r   r#  preferred_periodicityreference_conn_evt_countoffset0offset1offset2offset3offset4offset5Nr0   r1   r2   r4   r   r   r5   r6   r7   r8   r>  r>  2          $DNC((NC((Is##Is##
*C00.44Is##Is##Is##Is##Is##Is##KKKr7   c                      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           edd           edd          gZdS )r?  r  rH   r  r"  r   r#  r  r  r  r  r  r  r  r  Nr  r6   r7   r8   r?  r?  D  r  r7   c                   B    e Zd Zd Z edd           edd          gZdS )LL_REJECT_EXT_INDreject_opcoder   
error_codeNry  r6   r7   r8   r  r  V  s8        D
?C((
<%%KKKr7   r  c                       e Zd Zd ZdS )LL_PING_REQNr  r6   r7   r8   r  r  ^          DDDr7   r  c                       e Zd Zd ZdS )LL_PING_RSPNr  r6   r7   r8   r  r  b  r  r7   r  c                   n    e Zd ZdZ edd           edd           edd           edd          gZdS )	rA  z LL_LENGTH_REQmax_rx_bytes   max_rx_timeH  max_tx_bytesmax_tx_timeNr0   r1   r2   r4   r   r5   r6   r7   r8   rA  rA  f  V        Dnc**mT**nc**mT**	KKKr7   c                   n    e Zd ZdZ edd           edd           edd           edd          gZdS )	rC  z LL_LENGTH_RSPr  r  r  r  r  r  Nr  r6   r7   r8   rC  rC  p  r  r7   c                   B    e Zd Zd Z edd           edd          gZdS )rE  tx_physr   rx_physNr0   r1   r2   r4   r   r5   r6   r7   r8   rE  rE  z  8        Di##i##KKKr7   c                   B    e Zd Zd Z edd           edd          gZdS )rG  r  r   r  Nr  r6   r7   r8   rG  rG    r  r7   c                   X    e Zd Zd Z edd           edd           edd          gZdS )rI  tx_phyr   rx_phyrt  N)r0   r1   r2   r4   r   r   r5   r6   r7   r8   rI  rI    sG        Dh""h""Is##KKKr7   c                   B    e Zd Zd Z edd           edd          gZdS )LL_MIN_USED_CHANNELS_INDphysr   min_used_channelsrD   N)r0   r1   r2   r4   r   r   r5   r6   r7   r8   r  r    s9        %Dfa  	%q))KKKr7   r  c                   ^    e Zd Zd Z eddd           eddd           eddd          gZdS )	rM  min_cte_len_reqr   rG   rfurC   cte_type_reqrD   Nr0   r1   r2   r4   r   r5   r6   r7   r8   rM  rM    sN        D
$a++
5!Q
>1a((KKKr7   c                       e Zd Zd Zg ZdS )rO  Nr  r6   r7   r8   rO  rO    s        DKKKr7   c                       e Zd Zd Z edd           eddd           edd           edd           eddd	           ed
dd           eddd           edd           edd           edd          g
ZdS )rQ  idr  	sync_infor      conn_event_countlast_pa_event_countersidrF   a_typerC   scarE   r^   r  Nsync_conn_event_count)	r0   r1   r2   r4   r   r   r   rb   r5   r6   r7   r8   rQ  rQ    s        !DdC  
;6**(!,,-q11
5!Q
8Q""
5!QeQFD!!-q11KKKr7   c                   ,    e Zd Zd Z edd          gZdS )rS  r  r   Nry  r6   r7   r8   rS  rS    )        "D
5!KKKr7   c                   ,    e Zd Zd Z edd          gZdS )rU  r  r   Nry  r6   r7   r8   rU  rU    r  r7   c                   R   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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           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           edd           edd           edd          gZ
d S )!rW  cig_idr   cis_id
phy_c_to_p
phy_p_to_cmax_sdu_c_to_pr8  rfu1rE   framedrC   max_sdu_p_to_crfu2rF   sdu_interval_c_to_pr@  rfu3sdu_interval_p_to_crfu4max_pdu_c_to_pmax_pdu_p_to_cnsesubinterval	bn_c_to_p	bn_p_to_c	ft_c_to_p	ft_p_to_ciso_intervalcis_offset_mincis_offset_maxr  N)r0   r1   r2   r4   r   r   r   r   r   r   r5   r6   r7   r8   rW  rW    s       D
8Q
8QlA&&lA&&
#Q++
61a  
8Q""
#Q++
61a  
(!R00
61a  
(!R00
61a  &**&**
5!]C((
;1%%
;1%%	+q!!	+q!!na((%s++%s++(!,,3KKKr7   c                   X    e Zd Zd Z edd           edd           edd          gZdS )rX  r  r   r  r  N)r0   r1   r2   r4   r   r   r5   r6   r7   r8   rX  rX    sJ        D%s++%s++(!,,KKKr7   c                       e Zd Zd Z edd           edd           edd           edd           edd          gZdS )rZ  r  r   
cis_offsetcig_sync_delaycis_sync_delayr  N)r0   r1   r2   r4   r   r   r   r5   r6   r7   r8   rZ  rZ    sh        D	$\3''%s++%s++(!,,KKKr7   c                   X    e Zd Zd Z edd           edd           edd          gZdS )r\  r  r   r  r  Nr0   r1   r2   r4   r   r5   r6   r7   r8   r\  r\    sG        !D	(C  	(C  	,$$KKKr7   c                   X    e Zd Zd Z edd           edd           edd          gZdS )r^  r^   r   deltatx_powerN)r0   r1   r2   r4   r   r   r5   r6   r7   r8   r^  r^    sG        !D	%%%
C((KKKr7   c            	           e Zd Zd Z eddd           eddd           eddd           edd           edd           ed	d          gZd
S )r`  minr   rC   maxr  rH   r  r  aprN)r0   r1   r2   r4   r   r   r   r5   r6   r7   r8   r`  r`    sz        !D
5!Q
5!Q
5!Q##
C((	%KKKr7   c            	           e Zd Zd Z edd           eddd           eddd           eddd           edd           ed	d          gZd
S )ra  r^   r   r  rC   r  r  rH   r  r  N)r0   r1   r2   r4   r   r   r   r5   r6   r7   r8   ra  ra    sz         D	%
5!Q
5!Q
5!Q##	*c""KKKr7   c                       e Zd Zd Z edd           edd           edd           edd           edd          gZdS )rb  subrate_factor_minr   subrate_factor_maxmax_latencycontinuation_numberr#  Nr0   r1   r2   r4   r   r5   r6   r7   r8   rb  rb  $  sh        D)3//)3//]C((*C00Y$$KKKr7   c                       e Zd Zd Z edd           edd           edd           edd           edd          gZdS )rc  subrate_factorr   subrate_base_eventr"  r  r#  Nr  r6   r7   r8   rc  rc  /  sh        D%s++)3//Y$$*C00Y$$KKKr7   c                   X    e Zd ZdZ edd           edd           edd          gZdS )rd  rc  enabler   min_spacing	max_delayNr  r6   r7   r8   rd  rd  :  sG        D	(C  	-%%	+s##KKKr7   c                   .    e Zd Zd Z eddd          gZdS )re  r   r   P   Nr  r6   r7   r8   re  re  C  s,        "D
+Q77KKKr7   r   )r   )r   )r   )r   r   )ro           rf  rg  rh  ri  rj  )pfh_type)or3   rz   scapy.compatr   r   scapy.configr   
scapy.datar   r   r   scapy.packetr	   r
   scapy.fieldsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scapy.contrib.ethercatr   r   scapy.layers.bluetoothr    r!   scapy.layers.ppir"   r#   scapy.utilsr$   r%   r'   r:   rb   rw   r   r   r   r   r   r  r	  r  r  r  r  r  r  r  rp  rl  rn  rr  rv  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r9  r;  r=  r>  r?  r  r  r  rA  rC  rE  rG  rI  r  rM  rO  rQ  rS  rU  rW  rX  rZ  r\  r^  r`  ra  rb  rc  rd  re  l2typesregisterr6   r7   r8   <module>r     s(      ! ! ! ! ! ! ! !               
 - , , , , , , ,                                         * > = = = = = = = 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 ( ( ( ( ( ( ( (    {   *, , , , ,f , , ,f         (      Y Y Y Y Yz Y Y Y,
 ,
 ,
 ,
 ,
z ,
 ,
 ,
^
 
 
 
 
J 
 
 
93 93 93 93 936 93 93 93x    v   D       "    6       &   " " " " "< " " "       B B B B BF B B BB B B B BF B B B    v   (   
 
$ (
$(
( 	
( 	,	(
 	,( 	
( 	
( 	
( 	
( 	
( 	
( 	
( 	
( 	/( 	
 (  	
#!(" 	
##( ($ 	/%(& 	/'(( 	,)(* 	,+(, 	
-(. 	
 /(0 	,1(2 	,3(4 	
 5(6 	
!7(8 	
!9(: 	,;(< 	,=(> 	,?(@ 	
 A(B 	
 C(D 	
 E( (F  


$
!O( ( ( V    V          	 	 	 	 	v 	 	 	           v                     v   
    v       V       V       V       v       v       V       F       6       f   $    f   $           &       &       F       F                            v                 
    6        F       F          >                  6       6   	 	 	 	 	6 	 	 		 	 	 	 	& 	 	 	    V       V       v       F    D(
 3 3 3 3 D)    HlQ / / / / H)A 6 6 6 6 H*Q 7 7 7 7 Hma 0 0 0 0 Hma 0 0 0 0 H& 3 3 3 3 H'! 4 4 4 4 Iyq ) ) ) ) Iyq ) ) ) ) I~q!'<'< = = = I/ = = = = I)$ 7 7 7 7 I' 5 5 5 5 Iz$ / / / / Iz$ / / / / I' 5 5 5 5 I' 5 5 5 5 I~d 3 3 3 3 I~d 3 3 3 3 I~d 3 3 3 3 I' 5 5 5 5 I' 5 5 5 5 I~d 3 3 3 3 I}T 2 2 2 2 I+D 9 9 9 9 I.t < < < < I.t < < < < I( 6 6 6 6 I{4 0 0 0 0 I{4 0 0 0 0 I}T 2 2 2 2 I}T 2 2 2 2 Iz$ / / / / Iz$ / / / / I( 6 6 6 6 I/ = = = = Iz$ / / / / Iz$ / / / / I+D 9 9 9 9 I,T : : : : I,T : : : : Iz$ / / / / Iz$ / / / / Iz$ / / / / I+D 9 9 9 9 I+D 9 9 9 9 I+D 9 9 9 9 I*4 8 8 8 8 I~d 3 3 3 3 I~d 3 3 3 3 I/ = = = = I,T : : : :   )4 0 0 0   3W = = = GT    GX 1 1 1 1 1 1r7   