
    h                        d 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 ddlmZmZmZ ddlmZ ddlmZ ddlmZ  G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          ZeeeedZ G d de          Z eeedd           ej         e e                      fdZ dS )z
    DTP Scapy Extension
    ~~~~~~~~~~~~~~~~~~~

    :version: 2008-12-22
    :author: Jochen Bartl <lobo@c3a.de>

    :Thanks:

    - TLV code derived from the CDP implementation of scapy. (Thanks to Nicolas Bareil and Arnaud Ebalard)  # noqa: E501
    N)Packetbind_layers)	ByteFieldFieldLenFieldMACFieldPacketListField
ShortFieldStrLenFieldXShortField)SNAPDot3LLC)sendp)conf)RandMACc                       e Zd ZdZ edd           eddd            edd	d
           gZedd            Z	d Z
dS )DtpGenericTlvzDTP Generic TLVtype   lengthNc                     | j         dz   S N   )valuepkts    U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/dtp.py<lambda>zDtpGenericTlv.<lambda>"   s    ciRSm     )	length_ofr    c                     | j         dz
  S r   r   r   s    r   r   zDtpGenericTlv.<lambda>#   s    3:PQ> r   length_fromc                     |rQt          |          dk    r>t          j        d|d d                   d         }t                              |d          } | S )N   z!Hr   r   )lenstructunpack_DTP_TLV_CLSget)cls_pktargskargsts        r   dispatch_hookzDtpGenericTlv.dispatch_hook&   sP     	7CIINNdD!H--a0A""1o66C
r   c                     t           j        S N)r   padding_layer)selfps     r   guess_payload_classz!DtpGenericTlv.guess_payload_class-   s    !!r   r4   )__name__
__module____qualname__namer   r   r
   fields_descclassmethodr2   r8    r   r   r   r      s        D;vv.. =4;S;STTT;w8Q8QRRRK
    [" " " " "r   r   c                   f    e Zd ZdZ edd           edddd            edd	d
           gZdS )	DTPDomainz
DTP Domainr   r   r   Ndomainc                     |dz   S r   r?   r   xs     r   r   zDTPDomain.<lambda>4       PQTUPU r   adjust    c                     | j         dz
  S r   r#   r   s    r   r   zDTPDomain.<lambda>5       VW r   r$   r9   r:   r;   r<   r	   r   r
   r=   r?   r   r   rA   rA   1   [        D:fa(( =4BUBUVVV;x>W>WXXXKKKr   rA   c                   f    e Zd ZdZ edd           edddd            edd	d
           gZdS )	DTPStatusz
DTP Statusr   r'   r   Nstatusc                     |dz   S r   r?   rD   s     r   r   zDTPStatus.<lambda><   rF   r   rG      c                     | j         dz
  S r   r#   r   s    r   r   zDTPStatus.<lambda>=   rK   r   r$   rL   r?   r   r   rO   rO   9   rM   r   rO   c                   f    e Zd ZdZ edd           edddd            edd	d
           gZdS )DTPTypezDTP Typer      r   Ndtptypec                     |dz   S r   r?   rD   s     r   r   zDTPType.<lambda>D   s    QRUVQV r   rG      c                     | j         dz
  S r   r#   r   s    r   r   zDTPType.<lambda>E   s    #*WX. r   r$   rL   r?   r   r   rU   rU   A   s[        D:fa(( =4CVCVWWW;y'?X?XYYYKKKr   rU   c                   X    e Zd ZdZ edd           edd           edd          gZdS )DTPNeighborzDTP Neighborr   r   r(   
   neighborN)r9   r:   r;   r<   r	   r   r=   r?   r   r   r\   r\   I   sG        D:fa((:eR((8J--KKKr   r\   )r   r'   rV   r   c                   D    e Zd Zd Z edd           edg e          gZdS )DTPverr   tlvlistN)r9   r:   r;   r<   r   r   r   r=   r?   r   r   r`   r`   Z   s;        D9UA&&"?9b-@@BKKKr   r`   i      )codeOUIc           	      <   t          d| z             t          |d          t                      z  }|t                      z  }|t	          t                      t                      t                      t          |          g          z  }t          |           d S )Nz+Trying to negotiate a trunk on interface %sz01:00:0c:cc:cc:cc)srcdst)r^   )rb   )
printr   r   r   r`   rA   rO   rU   r\   r   )ifacemymacr7   s      r   negotiate_trunkrl   c   s    	
7%
?@@@/0003558AKAikk9;;		;PU;V;V;VW	X	X	XXA	!HHHHHr   )!__doc__r)   scapy.packetr   r   scapy.fieldsr   r   r   r   r	   r
   r   scapy.layers.l2r   r   r   scapy.sendrecvr   scapy.configr   scapy.volatiler   r   rA   rO   rU   r\   r+   r`   rj   strrl   r?   r   r   <module>ru      sN  
 
  , , , , , , , ,) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) + + + + + + + + + +                   " " " " " "" " " " "F " " "$                  m       -    	 B B B B B& B B B D#F , , , , *CC		NN      r   