a
    kÄ#d[  ã                
   @   s*  d Z ddlZddlm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 ddlmZ dZdee< d	Zd
ZdZdZdZededededediZegZeegZG dd„ deƒZG dd„ deƒZG dd„ deƒZejeed�Zejeed�Z ejeed�Z!ejeed�Z"ejeed�Z#eeeed� dS )a¯  
    IFE - ForCES Inter-FE LFB type
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    :author:    Alexander Aring, aring@mojatatu.com

    :description:

        This module provides Scapy layers for the IFE protocol.

        normative references:
            - RFC 8013
              Forwarding and Control Element Separation (ForCES)
              Inter-FE Logical Functional Block (LFB)
              https://tools.ietf.org/html/rfc8013
é    N)ÚETHER_TYPES)ÚPacketÚbind_layers)ÚFieldLenFieldÚPacketListFieldÚIntFieldÚMultipleTypeFieldÚ
ShortFieldÚShortEnumFieldÚStrFieldÚPadField)ÚEtheri>í  ÚIFEé   é   é   é   é   ZSKBMarkZHashIDZPrioZQMapZTCIndexc                	   @   sˆ   e Zd ZdZd Zeddeƒeddddd„ d	�ee	e
ddƒd
dd�dd„ fe	eddƒd
dd�dd„ fge	eddƒd
dd�ƒgZdd„ ZdS )ÚIFETlvz=
    Parent Class interhit by all ForCES TLV strucutures
    Útyper   ÚlengthNÚvaluec                 C   s   |d S ©Nr   © ©ÚpktÚxr   r   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/ife.pyÚ<lambda>E   ó    zIFETlv.<lambda>©Z	length_ofÚadjustr   ó    )Zpadwithc                 C   s
   | j tv S ©N)r   ÚIFE_TYPES_SHORT©r   r   r   r   r   I   r   c                 C   s
   | j tv S r#   )r   ÚIFE_TYPES_INTr%   r   r   r   r   K   r   c                 C   s   d|fS )NÚ r   )ÚselfÚsr   r   r   Úextract_paddingQ   s    zIFETlv.extract_padding)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Únamer
   ÚIFE_META_TYPESr   r   r   r	   r   Úfields_descr*   r   r   r   r   r   <   s$   
ÿÿÿýùür   c                   @   s8   e Zd ZdZeddeƒeddddd„ d	�edd
ƒgZdS )Ú	IFETlvStrz)
    A IFE TLV with variable payload
    r   r   r   Nr   c                 C   s   |d S r   r   r   r   r   r   r   \   r   zIFETlvStr.<lambda>r    r'   )	r+   r,   r-   r.   r
   r0   r   r   r1   r   r   r   r   r2   U   s   
ÿür2   c                   @   s4   e Zd ZdZd Zeddddd„ d�eddeƒgZdS )r   z
    Main IFE Packet Class
    ZmdlenNZtlvsc                 C   s   |d S )Nr   r   r   r   r   r   r   i   r   zIFE.<lambda>r    )	r+   r,   r-   r.   r/   r   r   r   r1   r   r   r   r   r   a   s   ÿ
ý)r   )$r.   Ú	functoolsZ
scapy.datar   Zscapy.packetr   r   Zscapy.fieldsr   r   r   r   r	   r
   r   r   Zscapy.layers.l2r   Z	ETH_P_IFEZIFE_META_SKBMARKZIFE_META_HASHIDZIFE_META_PRIOZIFE_META_QMAPZIFE_META_TCINDEXr0   r$   r&   r   r2   r   ÚpartialZ
IFESKBMarkZ	IFEHashIDZIFEPrioZIFEQMapZ
IFETCIndexr   r   r   r   Ú<module>   s>   (ûþ