
    ha                        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 ddlmZmZmZ ddlmZmZ ddlmZ dZ G d	 d
e          Z G d de          Z eeee            eeee            eeee           dS )z,
VRRP (Virtual Router Redundancy Protocol).
    )Packetbind_layers)
BitField	ByteFieldFieldLenFieldFieldListFieldIPFieldIP6FieldIntFieldMultipleTypeFieldStrFieldXShortField)chborb)IP
in4_chksumchecksum)IPv6
in6_chksum)warningp   c                   H   e Zd Z eddd           eddd           edd           edd           ed	d
dd           edd           edd           edd
           edg  edd          d            e	dd           e	dd          gZ
d Zedd            Zd
S )VRRPversion      type   vridpriorityd   ipcountNaddrlistBcount_offmtauthtyper   advchksum 0.0.0.0c                     | j         S Nr"   pkts    U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/vrrp.py<lambda>zVRRP.<lambda>#   s    ck     
count_fromauth1auth2c                     | j         Jt          |          }|d d         t          |dz	            z   t          |dz            z   |dd          z   }|S )N         )r*   r   r   selfppaycks       r2   
post_buildzVRRP.post_build'   sR    ;!B"1"B!G$s29~~5!""=Ar4   c                     |r;t          |          dk    r(t          |d                   }|dk    r|dk    rt          S t          S )N	   r   0   9   )lenr   VRRPv3r   cls_pktargskargs
ver_n_types        r2   dispatch_hookzVRRP.dispatch_hook-   sF     	CIINNT!WJRJ"$4$4r4   r.   )__name__
__module____qualname__r   r   r   r   r   r	   r   fields_descrB   classmethodrO    r4   r2   r   r      s       Aq!!A	&!	*c""i
DDD	*a  	%Hd##z2wwr9'='="9"9	; 	; 	;!!K      [  r4   r   c                      e Zd Z eddd           eddd           edd           edd           ed	d
dd           eddd           eddd           edd
           e edg  e	dd          d           d f edg  e
dd          d           d fg edd                    g	Zd Zedd            Zd
S )rH   r      r   r   r   r   r    r!   r"   Nr#   r$   r%   resr   r)      r*   r+   r,   c                     | j         S r.   r/   r0   s    r2   r3   zVRRPv3.<lambda>D       s{ r4   r5   c                 6    t          | j        t                    S r.   )
isinstance
underlayerr   r?   s    r2   r3   zVRRPv3.<lambda>E   s    :alB77 r4   z::c                     | j         S r.   r/   r0   s    r2   r3   zVRRPv3.<lambda>G   r[   r4   c                 6    t          | j        t                    S r.   )r]   r^   r   r_   s    r2   r3   zVRRPv3.<lambda>H   s    :alD99 r4   c                 p   | j         t          | j        t                    rt	          d| j        |          }nBt          | j        t
                    rt          d| j        |          }nt          d           d}|d d         t          |dz	            z   t          |dz            z   |dd          z   }|S )Nr   z9No IP(v6) layer to compute checksum on VRRP. Leaving nullr   r:   r;   r<   )	r*   r]   r^   r   r   r   r   r   r   r=   s       r2   rB   zVRRPv3.post_buildN   s    ;$/2.. T_a88DOT22 T_a88 ' ( ( ("1"B!G$s29~~5!""=Ar4   c                     |r;t          |          dk    r(t          |d                   }|dk     s|dk    rt          S t          S )N   r   rE   rF   )rG   r   r   rH   rI   s        r2   rO   zVRRPv3.dispatch_hook[   sB     	CIIOOT!WJB*r//r4   r.   )rP   rQ   rR   r   r   r   r   r   r   r	   r
   r   rS   rB   rT   rO   rU   r4   r2   rH   rH   7   sm       Aq!!A	&!	*c""i
DDD1R  Hd##
BI0F0F+B+BD D D779  
BT0B0B+B+BD D D99;	 HZ$$
	
 
	
K,      [  r4   rH   )proto)nhN)__doc__scapy.packetr   r   scapy.fieldsr   r   r   r   r	   r
   r   r   r   r   scapy.compatr   r   scapy.layers.inetr   r   r   scapy.layers.inet6r   r   scapy.errorr   IPPROTO_VRRPr   rH   rU   r4   r2   <module>ro      s    - , , , , , , ,J J J J J J J J J J J J J J J J J J J J J J J J ! ! ! ! ! ! ! ! 6 6 6 6 6 6 6 6 6 6 / / / / / / / /      
    6   >* * * * *V * * *` BL ) ) ) ) Bl + + + + D&\ * * * * * *r4   