
    h                     8   d Z ddlmZ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 ddlmZ ddddd	Zd
dddddddddd
ZdddddddZ G d de          Z G d de          Zd D ]-Z eeee!            eeee"            eeeee#           .d$S )%zG
BFD - Bidirectional Forwarding Detection - RFC 5880, 5881, 7130, 7881
    )Packetbind_layersbind_bottom_up)BitFieldBitEnumFieldByteEnumFieldXNBytesField
XByteFieldMultipleTypeFieldIntFieldFieldLenField
FlagsField	ByteFieldPacketFieldConditionalFieldStrFixedLenField)UDP	AdminDownDownInitUp)r            zNo DiagnosticzControl Detection Time ExpiredzEcho Function FailedzNeighbor Signaled Session DownzForwarding Plane Resetz	Path DownzConcatenated Path DownzAdministratively DownzReverse Concatenated Path DownzMis-Connectivity Defect)
r   r   r   r                  	   ReservedzSimple Passwordz	Keyed MD5zMeticulous Keyed MD5z
Keyed SHA1zMeticulous Keyed SHA1)r   r   r   r   r   r   c                   J   e Zd ZdZ edde           eddddd 	           ed
d           e e	dd          d            e e
dd          d            e eddd           d f eddd          d f eddd          d fg eddd                     gZdS )OptionalAuthzOptional Auth	auth_typer   auth_lenNBauth_keyc                 ,    | j         dk    r|dz   n|dz   S )Nr   r   r   r$   pktxs     U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/bfd.py<lambda>zOptionalAuth.<lambda>K   s    3=A+=+=!a%%1q5     fmt	length_ofadjust
auth_keyidreservedr   c                     | j         dk    S Nr   r)   r+   s    r-   r.   zOptionalAuth.<lambda>P       ) r/   sequence_numberc                     | j         dk    S r7   r)   r8   s    r-   r.   zOptionalAuth.<lambda>T   r9   r/    c                     | j         S Nr%   r8   s    r-   r.   zOptionalAuth.<lambda>Z        r/   )length_fromc                     | j         dk    S )Nr   r)   r8   s    r-   r.   zOptionalAuth.<lambda>\   s     2 r/   l	   Oqzla]T&_    c                 .    | j         dk    p
| j         dk    S )Nr   r   r)   r8   s    r-   r.   zOptionalAuth.<lambda>`        2 Hcmq6H r/   l   }mLgPDPO\dTn   c                 .    | j         dk    p
| j         dk    S )Nr   r   r)   r8   s    r-   r.   zOptionalAuth.<lambda>f   rE   r/   passwordc                     | j         S r>   r?   r8   s    r-   r.   zOptionalAuth.<lambda>j   r@   r/   )__name__
__module____qualname__namer   _authentification_typer   r   r   r
   r   r   r   r	   fields_desc r/   r-   r#   r#   B   s`       Dk1&<== HH	
 	
 	
 		,""Jz1%%))	
 	
 	H&**))	
 	
 	 %$"B4L4L   32	 !L-OQSTTHH
 !L"$NPR  IH	$ J4L4L  '	
 	
%)KKKr/   r#   c                   ^   e Zd Zd Z eddd           eddde           eddde           ed	dd
d           e	dd           e
dd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e          d           gZd ZdS )BFDversionr   r   diagr   r   star   flagsr   MDACFPdetect_multlenNr&   optional_authc                     |dz   S )N   rP   r*   s     r-   r.   zBFD.<lambda>}   s
    !b& r/   r0   my_discriminatori    your_discriminatori""""min_tx_intervali ʚ;min_rx_intervalecho_rx_intervalc                 .    | j         j        d         dk    S )Nr   A)rV   namesr8   s    r-   r.   zBFD.<lambda>   s    	*c1 r/   c                 ,    |                      d          S )NzWBFD (my_disc=%BFD.my_discriminator%,your_disc=%BFD.your_discriminator%,state=%BFD.sta%))sprintf)selfs    r-   	mysummaryzBFD.mysummary   s    ||
 
 	
r/   )rJ   rK   rL   rM   r   r   _diagnostics
_sta_namesr   r   r   r   r   r#   rO   ri   rP   r/   r-   rR   rR   p   s1       DAq!!VQ<00UAq*--
7Aq(++	-##%((	
 	
 	
 	#Z44%z266"J33"J33#Z44K|<<11	
 	
%K0
 
 
 
 
r/   rR   )i  i  i  ih  )dport)sport)rl   rm   N)__doc__scapy.packetr   r   r   scapy.fieldsr   r   r   r	   r
   r   r   r   r   r   r   r   r   scapy.layers.inetr   rk   rj   rN   r#   rR   	_bfd_portrP   r/   r-   <module>rs      s    = < < < < < < < < <                              " ! ! ! ! ! 	 
 '''      + + + + +6 + + +\
 
 
 
 
& 
 
 
D < <I N39----N39----KS	;;;;;< <r/   