
    h                     6   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	d
dddddddddddZ G d de
          Z G d de
          Z eeed            eeed            eeed            eeed           dS )ze
Geneve: Generic Network Virtualization Encapsulation

https://datatracker.ietf.org/doc/html/rfc8926
    N)BitField
XByteFieldXShortEnumFieldX3BytesFieldStrLenFieldPacketListField)Packetbind_layers)IPUDP)IPv6)EtherETHER_TYPESLinuxzOpen vSwitchzOpen Virtual Networking (OVN)zIn-band Network Telemetry (INT)VMwarezAmazon.com, Inc.zCisco Systems, Inc.zOracle CorporationIBMEricsson
UnassignedExperimental)   i  i  i  i  i  i  i  i  i  i(  i  i  c            	           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           gZ	d Z
d ZdS )GeneveOptionszGeneve Optionsclassidr   typereserved   lengthN   data c                     | j         dz  S N   )r   )xs    X/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/geneve.py<lambda>zGeneveOptions.<lambda>,   s    A     length_fromc                 
    d|fS )Nr     )selfss     r%   extract_paddingzGeneveOptions.extract_padding.   s    1ur'   c                     | j         Qt          | j                  dz  }|d d         t          j        d|d         dz  |dz  z            z   |dd          z   }||z   S )Nr#   r   !B   )r   lenr   structpackr,   ppaytmp_lens       r%   
post_buildzGeneveOptions.post_build1   sa    ;$)nn)G"1"D1Q4#:'D.*IJJJQqrrURA3wr'   )__name__
__module____qualname__namer   	CLASS_IDSr   r   r   fields_descr.   r9   r+   r'   r%   r   r   &   s        D"?9fi@@:fd++8J1--8HdA..;vr7M7MNNN	PK      r'   r   c                      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           g	Zd Zd Zd ZdS )GENEVEversionr      	optionlenN   oam   criticalr   protovni	reserved2optionsc                     | j         dz  S r"   )rD   )pkts    r%   r&   zGENEVE.<lambda>C   s    3=1;L r'   r(   c                     | j         Dt          |          dz
  dz  }t          j        d|d         dz  |dz  z            |dd          z   }||z   S )N   r#   r0   r      ?   rG   )rD   r2   r3   r4   r5   s       r%   r9   zGENEVE.post_buildE   sV    >!1vvza'GD1Q4$;7T>"BCCaeKA3wr'   c                     t          |t                    r@| j        |j        k    r/| j        |j        k    r| j                            |j                  S n| j                            |          S dS )Nr   )
isinstancerA   rI   rJ   payloadanswers)r,   others     r%   rV   zGENEVE.answersK   se    eV$$ 	/u{**UY1F1F|++EM:::<''...qr'   c                 ,    |                      d          S )NzKGENEVE (vni=%GENEVE.vni%,optionlen=%GENEVE.optionlen%,proto=%GENEVE.proto%))sprintf)r,   s    r%   	mysummaryzGENEVE.mysummaryS   s    || 4 5 5 	5r'   )r:   r;   r<   r=   r   r   r   r   r   r   r   r?   r9   rV   rZ   r+   r'   r%   rA   rA   8   s        D8Iq!,,8Kq118E1a((8J1--8J1--"?7FK@@<q)):k400"?9b-/L/LN N N	OK    5 5 5 5 5r'   rA   i  )dportiXe  )rI   i   i݆  )__doc__r3   scapy.fieldsr   r   r   r   r   r   scapy.packetr	   r
   scapy.layers.inetr   r   scapy.layers.inet6r   scapy.layers.l2r   r   r>   r   rA   r+   r'   r%   <module>rb      s     j j j j j j j j j j j j j j j j , , , , , , , , % % % % % % % % # # # # # # . . . . . . . .#46'*)'!#% %	    F   $5 5 5 5 5V 5 5 5B Ct $ $ $ $ FE ( ( ( ( FBf % % % % FD ' ' ' ' ' 'r'   