
    h)                     2   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e          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 G d" d#e          Z G d$ d%e          Z G d& d'e          Z G d( d)e          Zeeeeeeeeed*	Z G d+ d,e          Z  G d- d.e e          Z! G d/ d0e e          Z" G d1 d2e e          Z# G d3 d4e e          Z$ G d5 d6e e          Z% G d7 d8e e          Z& eee!d9            eee"d:9            eee#d;9            eee$d<9            eee%d=9            eee&d>9           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                       e Zd ZdZdS )_RPLGuessOptionzDummy RPL Option classN)__name__
__module____qualname__name     U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/rpl.pyr$   r$   8   s        #DDDr*   r$   c                       e Zd ZdZdZ edde           e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                     |dz   S )Nr   r)   pktxs     r+   <lambda>zRPLOptRIO.<lambda>C   
    q1u r*   	length_offmtadjustplenres1r   prfr   res2
rtlifetime    )r%   r&   r'   __doc__r(   r   
RPLOPTSSTRr   r   r	   r
   r   r   r   fields_descr)   r*   r+   r-   r-   <   s          !D =!Z88 =c(<(<> > >9VT**8FAq))<q!^<<8FAq))8L*55"?8T224KKKr*   r-   c                   V   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   PCSr   DIOIntDoubl   	DIOIntMinDIORedunr"   MaxRankIncreaseMinRankIncrease   OCPreservedDefLifetime   LifetimeUniti  N)r%   r&   r'   rB   r(   r   rC   r   r	   r   rD   r)   r*   r+   rF   rF   L   s         !D =!Z889UB''8GQ**8CA&&8E1a((9]B//9[!,,9Z,,:/33:/55:eQ''9Z++9]D11:nf557KKKr*   rF   c                       e Zd ZdZdZ edde           e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/   Nr0   r1   c                     |dz   S )Nr   r)   r3   s     r+   r6   zRPLOptTgt.<lambda>h   r7   r*   r8   rH   r   r<   )r%   r&   r'   rB   r(   r   rC   r   r   r   rD   r)   r*   r+   rX   rX   a   s          D =!Z88 =c(<(<> > >9Wa((9VQ''"?8T224KKKr*   rX   c                       e Zd ZdZdZ edde           e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/   N
parentaddrr1   c                     |dz   S )Nr   r)   r3   s     r+   r6   zRPLOptTIO.<lambda>u   r7   r*   r8   Er   r   rH   r   pathcontrolpathseqpathlifetimerU   )r%   r&   r'   rB   r(   r   rC   r   r	   r   r   rD   r)   r*   r+   r[   r[   n   s          !D =!Z88 =#(<(<> > >8CA&&8GQ**9]A..9Y**9^T22"?<668KKKr*   r[   c                       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DrH   r   dodagid::1verN)r%   r&   r'   rB   r(   r   rC   r   r	   r   rD   r)   r*   r+   rc   rc   ~   s          #D =!Z889UB''9_a008CA&&8CA&&8CA&&8GQ**8Iu--9UA&&(KKKr*   rc   c                      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/      r<   @   Lr   r   rI   R	reserved1r   validlifetimerA   preflifetime	reserved2r0   rj   N)r%   r&   r'   rB   r(   r   rC   r   r	   r   r   rD   r)   r*   r+   rm   rm      s           D =!Z889UB''9VR((8CA&&8CA&&8CA&&8KA..8OZ888NJ778K++8He,,
.KKKr*   rm   c                   ^    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   
descriptorr   N)
r%   r&   r'   rB   r(   r   rC   r   r   rD   r)   r*   r+   rw   rw      sU          #D =!Z889UA&&8L!,,.KKKr*   rw   c                   2    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'   rB   r(   r   rC   rD   r)   r*   r+   rz   rz      s5          D =$
;;<KKKr*   rz   c                   j    e Zd ZdZdZ edde           edddd	           edd
d           gZ	dS )
RPLOptPadNz%
    Control Option: Pad N bytes
    r   r.   r   optlenNoptdatar1   )r9   r:    c                     | j         S )N)r}   r4   s    r+   r6   zRPLOptPadN.<lambda>   s    sz r*   )length_from)
r%   r&   r'   rB   r(   r   rC   r   r   rD   r)   r*   r+   r|   r|      so          D =$
;; =49#NNN;y"+A+AC C CDKKKr*   r|   )	r   r   r   r   r   r   r   r    r!   c                       e Zd ZdZd ZdS )_RPLGuessMsgTypezDummy RPL Message classc                     t          |t                    rt          |d                   }n|d         }t                              |          S )Nr   )
isinstancestrordRPLOPTSget)selfpayloadr.   s      r+   guess_payload_classz$_RPLGuessMsgType.guess_payload_class   s@    gs## 	
OOEEAJE{{5!!!r*   N)r%   r&   r'   r(   r   r)   r*   r+   r   r      s(        $D" " " " "r*   r   c                   F    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 SolicitationrH   r   rS   N)r%   r&   r'   rB   r(   r   rD   r)   r*   r+   r   r      sD          ,D9Wa((9Z++-KKKr*   r   c                      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 Objectre   2   rk   r   rankr   Gunused1mopr   r>   dtsn   rH   rS   ri   rj   N)r%   r&   r'   rB   r(   r   r   r	   r
   RPLMOPr   rD   r)   r*   r+   r   r      s          &D9_b119UA&&:fa((8CA&&8Iq!,,<q!V448E1a((9VS))9Wa((9Z++8Iu--
/KKKr*   r   c                       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           gZ	dS )RPLDAOzA
    Control Message: Destination Advertisement Object (DAO)
    z Destination Advertisement Objectre   r   Kr   r   rh   rH   r   rS   daoseqri   Nc                     | j         dk    S Nr   rh   r   s    r+   r6   zRPLDAO.<lambda>       
 r*   
r%   r&   r'   rB   r(   r   r	   r   r   rD   r)   r*   r+   r   r      s          .D9_b118CA&&8CA&&8GQ**9Z++9Xq))##HHY$=$=$:$:< <=KKKr*   r   c                       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           gZ	dS )	RPLDAOACKzT
    Control Message: Destination Advertisement Object Acknowledgement (DAOACK)
    z0Destination Advertisement Object Acknowledgementre   r   rh   r   r   rS   r   r   statusri   Nc                     | j         dk    S r   r   r   s    r+   r6   zRPLDAOACK.<lambda>  r   r*   r   r)   r*   r+   r   r     s          >D9_b118CA&&8J1--9Xq))9Xq))##HHY$=$=$:$:< <=KKKr*   r   c                       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           gZ	dS )RPLDCOz;
    Control Message: Destination Cleanup Object (DCO)
    zDestination Cleanup Objectre   r   r   r   r   rh   rH   r   r   dcoseqri   Nc                     | j         dk    S r   r   r   s    r+   r6   zRPLDCO.<lambda>  r   r*   r   r)   r*   r+   r   r     s          (D9_b118CA&&8CA&&8GQ**9Xq))9Xq))##HHY$=$=$:$:< <=KKKr*   r   c                       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           gZ	dS )	RPLDCOACKzN
    Control Message: Destination Cleanup Object Acknowledgement (DCOACK)
    z*Destination Cleanup Object Acknowledgementre   r   rh   r   r   rH   r   r   r   ri   Nc                     | j         dk    S r   r   r   s    r+   r6   zRPLDCOACK.<lambda>,  r   r*   r   r)   r*   r+   r   r   !  s          8D9_b118CA&&8GQ**9Xq))9Xq))##HHY$=$=$:$:< <=KKKr*   r   )coder   r   r   r   r    N)'rB   scapy.packetr   r   scapy.fieldsr   r   r   r   r	   r
   r   r   r   r   scapy.layers.inet6r   r   r   r   rC   r$   r-   rF   rX   r[   rc   rm   rw   rz   r|   r   r   r   r   r   r   r   r   r)   r*   r+   <module>r      s   $ - , , , , , , ,                        J I I I I I I I I I "0-"	
$ 
$ '&&&(,$'
) 
)
$ $ $ $ $f $ $ $4 4 4 4 4 4 4 4 7 7 7 7 7 7 7 7*
4 
4 
4 
4 
4 
4 
4 
48 8 8 8 8 8 8 8 ( ( ( ( (O ( ( ( . . . . . . . .$. . . . .O . . .= = = = = = = =D D D D D D D D 	 	" " " " "v " " "- - - - - - - -/ / / / / / / /$= = = = = = = == = = = = / = = == = = = = = = = = = = = = / = = = IvA & & & & IvA & & & & IvA & & & & Iyq ) ) ) ) IvA & & & & Iyq ) ) ) ) ) )r*   