a
    kÄ#d0  ã                   @   sô   d Z ddlZddl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 ddlmZ ddlmZmZ ddlmZmZ d	d
ddddddddddddœZG dd„ de
ƒZG dd„ de
ƒZeeedd� eeedd� eeedd� eeedd� dS ) zQ
Geneve: Generic Network Virtualization Encapsulation

draft-ietf-nvo3-geneve-16
é    N)ÚBitFieldÚ
XByteFieldÚXShortEnumFieldÚX3BytesFieldÚStrLenFieldÚPacketListField)ÚPacketÚbind_layers)ÚIPÚUDP)ÚIPv6)ÚEtherÚETHER_TYPES)ÚchbÚorbÚLinuxzOpen vSwitchzOpen Virtual Networking (OVN)zIn-band Network Telemetry (INT)ZVMwarezAmazon.com, Inc.zCisco Systems, Inc.zOracle CorporationZIBMZEricssonZ
UnassignedZExperimental)é   i  i  i  i  i  i  i  i  i  i(  iÿþ  iÿÿ  c                	   @   sR   e Zd ZdZeddeƒeddƒedddƒeddd	ƒed
ddd„ d�gZ	dd„ Z
dS )ÚGeneveOptionszGeneve OptionsZclassidr   ÚtypeÚreservedé   ÚlengthNé   ÚdataÚ c                 C   s
   | j d S ©Né   )r   )Úx© r   úK/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/geneve.pyÚ<lambda>-   ó    zGeneveOptions.<lambda>©Zlength_fromc                 C   sD   | j d u r<t| jƒd }|d d… t d|¡ |dd …  }|| S )Nr   r   z!B)r   Úlenr   ÚstructÚpack©ÚselfÚpZpayZtmp_lenr   r   r   Ú
post_build/   s    
$zGeneveOptions.post_build)Ú__name__Ú
__module__Ú__qualname__Únamer   Ú	CLASS_IDSr   r   r   Úfields_descr)   r   r   r   r   r   '   s   


ür   c                   @   sŠ   e Zd Zd Zedddƒedddƒedddƒed	ddƒed
ddƒeddeƒeddƒeddƒe	dg e
dd„ d�g	Zdd„ Zdd„ Zdd„ ZdS )ÚGENEVEÚversionr   é   Ú	optionlenNé   Zoamé   Úcriticalr   ÚprotoÚvniZ	reserved2Úoptionsc                 C   s
   | j d S r   )r3   )Zpktr   r   r   r    @   r!   zGENEVE.<lambda>r"   c                 C   sJ   | j d u rBt|ƒd d }t|d@ t|d ƒd@ B ƒ|dd …  }|| S )Né   r   é/   r   éÀ   r5   )r3   r#   r   r   r&   r   r   r   r)   B   s    
(zGENEVE.post_buildc                 C   sB   t |tƒr2| j|jkr>| j|jkr>| j |j¡S n| j |¡S dS )Nr   )Ú
isinstancer0   r7   r8   ÚpayloadÚanswers)r'   Úotherr   r   r   r?   H   s
    
zGENEVE.answersc                 C   s
   |   d¡S )NzKGENEVE (vni=%GENEVE.vni%,optionlen=%GENEVE.optionlen%,proto=%GENEVE.proto%))Zsprintf)r'   r   r   r   Ú	mysummaryP   s    zGENEVE.mysummary)r*   r+   r,   r-   r   r   r   r   r   r   r   r/   r)   r?   rA   r   r   r   r   r0   6   s   





ø
r0   iÁ  )ÚdportiXe  )r7   i   iÝ†  )Ú__doc__r$   Zscapy.fieldsr   r   r   r   r   r   Zscapy.packetr   r	   Zscapy.layers.inetr
   r   Zscapy.layers.inet6r   Zscapy.layers.l2r   r   Zscapy.compatr   r   r.   r   r0   r   r   r   r   Ú<module>	   s6    ô 