a
    kÄ#dã)  ã                   @   s  d 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 ddlmZmZmZ ddddd	d
œZddddddddddd	dœZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG d d!„ d!eƒZG d"d#„ d#eƒZG d$d%„ d%eƒZG d&d'„ d'eƒZG d(d)„ d)eƒZeeeeeeeeed*œ	ZG d+d,„ d,eƒZ G d-d.„ d.e eƒZ!G d/d0„ d0e eƒZ"G d1d2„ d2e eƒZ#G d3d4„ d4e eƒZ$G d5d6„ d6e eƒZ%G d7d8„ d8e eƒZ&eee!dd9� eee"d:d9� eee#d;d9� eee$d<d9� eee%d=d9� eee&d>d9� d?S )@a�  
RPL
===

RFC 6550 - Routing Protocol for Low-Power and Lossy Networks (RPL)
draft-ietf-roll-efficient-npdao-17 - Efficient Route Invalidation

+----------------------------------------------------------------------+
| RPL Options : Pad1 PadN TIO RIO PIO Tgt TgtDesc DODAGConfig DAGMC ...|
+----------------------------------------------------------------------+
| RPL Msgs : DIS DIO DAO DAOACK DCO DCOACK                             |
+----------------------------------------------------------------------+
| ICMPv6 : type 155 RPL                                                |
+----------------------------------------------------------------------+

é    )ÚPacketÚbind_layers)
ÚByteEnumFieldÚ	ByteFieldÚIP6FieldÚ
ShortFieldÚBitFieldÚBitEnumFieldÚFieldLenFieldÚStrLenFieldÚIntFieldÚConditionalField)Ú	ICMPv6RPLÚicmp6ndraprefsÚ_IP6PrefixFieldzNo Downward routeszNon-Storingz!Storing with no multicast supportzStoring with multicast supportzP2P Route Discovery)r   é   é   é   é   ÚPad1ÚPadNzDAG Metric ContainerúRouting InformationúDODAG Configurationú
RPL TargetúTransit InformationúSolicited InformationzPrefix Information OptionzTarget Descriptor)r   r   r   r   r   é   é   é   é   é	   é
   c                   @   s   e Zd ZdZdS )Ú_RPLGuessOptionzDummy RPL Option classN)Ú__name__Ú
__module__Ú__qualname__Úname© r'   r'   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/rpl.pyr"   8   s   r"   c                
   @   sn   e Zd ZdZdZeddeƒeddddd	d
„ d�eddƒe	dddƒe
dddeƒe	dddƒeddƒeddƒgZdS )Ú	RPLOptRIOz:
    Control Option: Routing Information Option (RIO)
    r   Úotyper   ÚlenNÚprefixÚBc                 C   s   |d S )Nr   r'   ©ÚpktÚxr'   r'   r(   Ú<lambda>C   ó    zRPLOptRIO.<lambda>©Ú	length_ofÚfmtÚadjustÚplenZres1r   Úprfr   Zres2Z
rtlifetimeì   ÿÿ )r#   r$   r%   Ú__doc__r&   r   Ú
RPLOPTSSTRr
   r   r   r	   r   r   r   Úfields_descr'   r'   r'   r(   r)   <   s   

ÿ

ør)   c                   @   s�   e Zd ZdZdZeddeƒe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ƒe	dd
ƒeddƒeddƒe	ddƒgZ
dS )ÚRPLOptDODAGConfigz-
    Control Option: DODAG Configuration
    r   r*   r   r+   é   Úflagsr   ÚAr   ZPCSr   ZDIOIntDoublé   Z	DIOIntMinZDIORedunr!   ZMaxRankIncreaseZMinRankIncreaseé   ZOCPÚreservedZDefLifetimeéÿ   ZLifetimeUnitiÿÿ  N)r#   r$   r%   r:   r&   r   r;   r   r   r   r<   r'   r'   r'   r(   r=   L   s"   



ór=   c                   @   sN   e Zd ZdZdZeddeƒeddddd	d
„ d�eddƒeddƒe	ddƒgZ
dS )Ú	RPLOptTgtz$
    Control Option: RPL Target
    r   r*   r   r+   Nr,   r-   c                 C   s   |d S )Nr   r'   r.   r'   r'   r(   r1   h   r2   zRPLOptTgt.<lambda>r3   r?   r   r7   )r#   r$   r%   r:   r&   r   r;   r
   r   r   r<   r'   r'   r'   r(   rE   a   s   

ÿûrE   c                
   @   sj   e Zd ZdZdZeddeƒeddddd	d
„ d�edddƒedddƒe	ddƒe	ddƒe	ddƒe
ddƒgZdS )Ú	RPLOptTIOz:
    Control Option: Transit Information Option (TIO)
    r   r*   r   r+   NZ
parentaddrr-   c                 C   s   |d S )Nr   r'   r.   r'   r'   r(   r1   u   r2   zRPLOptTIO.<lambda>r3   ÚEr   r   r?   r   ZpathcontrolZpathseqZpathlifetimerD   )r#   r$   r%   r:   r&   r   r;   r
   r   r   r   r<   r'   r'   r'   r(   rF   n   s   

ÿ

ørF   c                   @   sj   e Zd ZdZdZeddeƒeddƒeddƒed	dd
ƒeddd
ƒeddd
ƒedddƒe	ddƒeddƒg	Z
dS )ÚRPLOptSolInfoz/
    Control Option: Solicited Information
    r   r*   r   r+   é   ÚRPLInstanceIDr   ÚVr   ÚIÚDr?   r   Údodagidú::1ÚverN)r#   r$   r%   r:   r&   r   r;   r   r   r   r<   r'   r'   r'   r(   rH   ~   s   




ørH   c                   @   sz   e Zd ZdZdZeddeƒeddƒeddƒed	d
dƒedd
dƒedd
dƒedd
dƒe	ddƒe	ddƒe	dd
ƒe
ddƒgZdS )Ú	RPLOptPIOz9
    Control Option: Prefix Information Option (PIO)
    zPrefix Informationr*   r   r+   é   r7   é@   ÚLr   r   r@   ÚRZ	reserved1r   Zvalidlifetimer9   ZpreflifetimeZ	reserved2r,   rO   N)r#   r$   r%   r:   r&   r   r;   r   r   r   r   r<   r'   r'   r'   r(   rQ   Ž   s   




örQ   c                   @   s2   e Zd ZdZdZeddeƒeddƒeddƒgZ	d	S )
ÚRPLOptTgtDescz/
    Control Option: RPL Target Descriptor
    zRPL Target Descriptorr*   r    r+   r   Z
descriptorr   N)
r#   r$   r%   r:   r&   r   r;   r   r   r<   r'   r'   r'   r(   rV       s   
þrV   c                   @   s"   e Zd ZdZdZeddeƒgZdS )Ú
RPLOptPad1z$
    Control Option: Pad 1 byte
    r   r*   r   N)r#   r$   r%   r:   r&   r   r;   r<   r'   r'   r'   r(   rW   ª   s   rW   c                   @   s@   e Zd ZdZdZeddeƒeddddd	�edd
dd„ d�gZ	dS )Ú
RPLOptPadNz%
    Control Option: Pad N bytes
    r   r*   r   ÚoptlenNZoptdatar-   )r4   r5   Ú c                 C   s   | j S )N)rY   ©r/   r'   r'   r(   r1   º   r2   zRPLOptPadN.<lambda>)Zlength_from)
r#   r$   r%   r:   r&   r   r;   r
   r   r<   r'   r'   r'   r(   rX   ²   s   
ÿþrX   )	r   r   r   r   r   r   r   r   r    c                   @   s   e Zd ZdZdd„ ZdS )Ú_RPLGuessMsgTypezDummy RPL Message classc                 C   s*   t |tƒrt|d ƒ}n|d }t |¡S )Nr   )Ú
isinstanceÚstrÚordÚRPLOPTSÚget)ÚselfÚpayloadr*   r'   r'   r(   Úguess_payload_classÐ   s    
z$_RPLGuessMsgType.guess_payload_classN)r#   r$   r%   r&   rd   r'   r'   r'   r(   r\   Í   s   r\   c                   @   s(   e Zd ZdZdZeddƒeddƒgZdS )ÚRPLDISz?
    Control Message: DODAG Information Solicitation (DIS)
    zDODAG Information Solicitationr?   r   rC   N)r#   r$   r%   r:   r&   r   r<   r'   r'   r'   r(   re   Ø   s
   ÿre   c                   @   sz   e Zd ZdZdZeddƒeddƒeddƒed	ddƒed
ddƒeddde	ƒedddƒeddƒeddƒeddƒe
ddƒgZdS )ÚRPLDIOz9
    Control Message: DODAG Information Object (DIO)
    zDODAG Information ObjectrJ   é2   rP   r   Zrankr   ÚGZunused1Zmopr   r8   Zdtsnéð   r?   rC   rN   rO   N)r#   r$   r%   r:   r&   r   r   r   r	   ÚRPLMOPr   r<   r'   r'   r'   r(   rf   á   s   


örf   c                
   @   s`   e Zd 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ƒeeddƒdd„ ƒgZ	dS )ÚRPLDAOzA
    Control Message: Destination Advertisement Object (DAO)
    z Destination Advertisement ObjectrJ   rg   ÚKr   r   rM   r?   r   rC   ÚdaoseqrN   Nc                 C   s
   | j dkS ©Nr   ©rM   r[   r'   r'   r(   r1   ÿ   r2   zRPLDAO.<lambda>©
r#   r$   r%   r:   r&   r   r   r   r   r<   r'   r'   r'   r(   rk   ó   s   



ÿúrk   c                	   @   sV   e Zd ZdZdZeddƒedddƒeddd	ƒed
dƒeddƒeeddƒdd„ ƒgZ	dS )Ú	RPLDAOACKzT
    Control Message: Destination Advertisement Object Acknowledgement (DAOACK)
    z0Destination Advertisement Object AcknowledgementrJ   rg   rM   r   r   rC   r   rm   ÚstatusrN   Nc                 C   s
   | j dkS rn   ro   r[   r'   r'   r(   r1     r2   zRPLDAOACK.<lambda>rp   r'   r'   r'   r(   rq     s   


ÿûrq   c                
   @   s`   e Zd 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ƒeeddƒdd„ ƒgZ	dS )ÚRPLDCOz;
    Control Message: Destination Cleanup Object (DCO)
    zDestination Cleanup ObjectrJ   rg   rl   r   r   rM   r?   r   rr   ÚdcoseqrN   Nc                 C   s
   | j dkS rn   ro   r[   r'   r'   r(   r1     r2   zRPLDCO.<lambda>rp   r'   r'   r'   r(   rs     s   



ÿúrs   c                	   @   sV   e Zd ZdZdZeddƒedddƒeddd	ƒed
dƒeddƒeeddƒdd„ ƒgZ	dS )Ú	RPLDCOACKzN
    Control Message: Destination Cleanup Object Acknowledgement (DCOACK)
    z*Destination Cleanup Object AcknowledgementrJ   rg   rM   r   r   r?   r   rt   rr   rN   Nc                 C   s
   | j dkS rn   ro   r[   r'   r'   r(   r1   ,  r2   zRPLDCOACK.<lambda>rp   r'   r'   r'   r(   ru   !  s   


ÿûru   )Úcoder   r   r   r   r   N)'r:   Zscapy.packetr   r   Zscapy.fieldsr   r   r   r   r   r	   r
   r   r   r   Zscapy.layers.inet6r   r   r   rj   r;   r"   r)   r=   rE   rF   rH   rQ   rV   rW   rX   r`   r\   re   rf   rk   rq   rs   ru   r'   r'   r'   r(   Ú<module>	   sl   0üö
÷	