a
    kÄ#da  ã                   @   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 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
„ d
eƒZG dd„ deƒZeeeed� eeeed� eeeed� 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)Úwarningép   c                   @   s˜   e Zd Zedddƒedddƒeddƒeddƒed	d
ddd�eddƒeddƒedd
ƒedg eddƒdd„ d�e	ddƒe	ddƒgZ
dd„ Zeddd„ƒZd
S )ÚVRRPÚversioné   é   Útypeé   ÚvridÚpriorityéd   ÚipcountNÚaddrlistÚB©Zcount_ofÚfmtZauthtyper   ÚadvÚchksumÚ ú0.0.0.0c                 C   s   | j S ©N©r    ©Zpkt© r,   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/vrrp.pyÚ<lambda>#   ó    zVRRP.<lambda>©Z
count_fromZauth1Zauth2c                 C   sF   | j d u rBt|ƒ}|d d… t|d? ƒ t|d@ ƒ |dd …  }|S )Né   é   éÿ   )r&   r   r   ©ÚselfÚpZpayZckr,   r,   r-   Ú
post_build'   s    
0zVRRP.post_buildc                 O   s4   |r0t |ƒdkr0t|d ƒ}|dkr0|dkr0tS tS )Né	   r   é0   é9   )Úlenr   ÚVRRPv3r   ©ÚclsZ_pktÚargsZkargsZ
ver_n_typer,   r,   r-   Údispatch_hook-   s
    zVRRP.dispatch_hook)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r
   Úfields_descr7   Úclassmethodr@   r,   r,   r,   r-   r      s"   

ÿôr   c                   @   sÂ   e Zd Zedddƒedddƒeddƒeddƒed	d
ddd�edddƒedddƒedd
ƒeedg e	ddƒdd„ d�dd„ fedg e
ddƒdd„ d�dd„ fgeddƒƒg	Zdd„ Zed dd„ƒZd
S )!r<   r   é   r   r   r   r   r   r   r    Nr!   r"   r#   Úresr   r%   é   r&   r'   r(   c                 C   s   | j S r)   r*   r+   r,   r,   r-   r.   D   r/   zVRRPv3.<lambda>r0   c                 C   s   t | jtƒS r)   )Ú
isinstanceÚ
underlayerr   ©r6   r,   r,   r-   r.   E   r/   z::c                 C   s   | j S r)   r*   r+   r,   r,   r-   r.   G   r/   c                 C   s   t | jtƒS r)   )rI   rJ   r   rK   r,   r,   r-   r.   H   r/   c                 C   s‚   | j d u r~t| jtƒr&td| j|ƒ}n(t| jtƒrBtd| j|ƒ}ntdƒ d}|d d… t|d? ƒ t|d@ ƒ |dd …  }|S )Nr   z9No IP(v6) layer to compute checksum on VRRP. Leaving nullr   r1   r2   r3   )	r&   rI   rJ   r   r   r   r   r   r   r4   r,   r,   r-   r7   N   s    
0zVRRPv3.post_buildc                 O   s4   |r0t |ƒdkr0t|d ƒ}|dk s,|dkr0tS tS )Né   r   r9   r:   )r;   r   r   r<   r=   r,   r,   r-   r@   [   s
    zVRRPv3.dispatch_hook)N)rA   rB   rC   r   r   r   r   r   r   r   r	   r   rD   r7   rE   r@   r,   r,   r,   r-   r<   7   s4   



ÿþÿþü÷÷r<   )Úproto)ZnhN)Ú__doc__Zscapy.packetr   r   Zscapy.fieldsr   r   r   r   r   r	   r
   r   r   r   Zscapy.compatr   r   Zscapy.layers.inetr   r   r   Zscapy.layers.inet6r   r   Zscapy.errorr   ZIPPROTO_VRRPr   r<   r,   r,   r,   r-   Ú<module>   s   00