
    hZ              
          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e          Z G d de          Z G d de          Z ej        ee          Z ej        ee          Z  ej        ee          Z! ej        ee          Z" ej        ee          Z# eeee           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               SKBMarkHashIDPrioQMapTCIndexc                       e Zd ZdZd Z edde           edddd            e e	 e
dd          d	d
          d f e	 edd          d	d
          d fg e	 edd          d	d
                    gZd ZdS )IFETlvz<
    Parent Class interhit by all ForCES TLV structures
    typer   lengthNvaluec                     |dz   S Nr    pktxs     U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/ife.py<lambda>zIFETlv.<lambda>E   
    AE     	length_ofadjustr       )padwithc                     | j         t          v S N)r   IFE_TYPES_SHORTr#   s    r%   r&   zIFETlv.<lambda>I   s    SX8 r(   c                     | j         t          v S r/   )r   IFE_TYPES_INTr1   s    r%   r&   zIFETlv.<lambda>K   s    SX6 r(   c                 
    d|fS )N r!   )selfss     r%   extract_paddingzIFETlv.extract_paddingQ   s    1ur(   )__name__
__module____qualname____doc__namer   IFE_META_TYPESr   r	   r   r
   r   fields_descr8   r!   r(   r%   r   r   <   s          D 	vq.11h11	3 	3 	3**Wa00!WEEE88:((7A..7CCC668 HXXgq))1g>>>	
 	
	K    r(   r   c                   b    e Zd ZdZ edde           edddd            edd	          gZdS )
	IFETlvStrz)
    A IFE TLV with variable payload
    r   r   r   Nr   c                     |dz   S r    r!   r"   s     r%   r&   zIFETlvStr.<lambda>\   r'   r(   r)   r5   )	r9   r:   r;   r<   r   r>   r   r   r?   r!   r(   r%   rA   rA   U   sa          	vq.11h11	3 	3 	3"	KKKr(   rA   c                   P    e Zd ZdZd Z edddd            edde          gZdS )r   z
    Main IFE Packet Class
    mdlenNtlvsc                     |dz   S )Nr   r!   r"   s     r%   r&   zIFE.<lambda>i   r'   r(   r)   )	r9   r:   r;   r<   r=   r   r   r   r?   r!   r(   r%   r   r   a   sY          D 	gtv11	3 	3 	3f--KKKr(   )r   )$r<   	functools
scapy.datar   scapy.packetr   r   scapy.fieldsr   r   r   r	   r
   r   r   r   scapy.layers.l2r   	ETH_P_IFEIFE_META_SKBMARKIFE_META_HASHIDIFE_META_PRIOIFE_META_QMAPIFE_META_TCINDEXr>   r0   r3   r   rA   r   partial
IFESKBMark	IFEHashIDIFEPrioIFEQMap
IFETCIndexr!   r(   r%   <module>rX      sH   "     " " " " " " , , , , , , , ,F F F F F F F F F F F F F F F F F F F F ! ! ! ! ! !	I     iX66i $$    V   2	 	 	 	 	 	 	 	
 
 
 
 
& 
 
 
 Yv,<===
If?;;;	
)
F
7
7
7
)
F
7
7
7Yv,<===
 E3Y ' ' ' ' ' 'r(   