
    h                        d Z ddlmZ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 ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lZddlmZ dddddZi dddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5Z d6Z!d7 Z" e#g  e"d8d           e"d8d           e"d8d           e"d8d           e"d8d           e"d8d           e"d8d           e"d8d           e"d8d           e"d8d!           e"d8d#           e"d8d%           e"d8d'           e"d8d)           e"d8d+           e"d8d-           e"d8d/           e"d8d9           e"d8d:           e"d8d;           e"d8d<           e"d=d           e"d=d           e"d=d           e"d=d           e"d=d           e"d=d           e"d=d           e"d=d           e"d=d           e"d=d!           e"d=d#           e"d=d%           e"d>d           e"d>d           e"d>d           e"d>d           e"d>d           e"d>d           e"d>d           e"d>d           e"d>d           e"d>d!           e"d>d#           e"d>d%           e"d>d'           e"d>d)           e"d>d+           e"d>d-           e"d>d/           e"d>d9           e"d>d:           e"d>d;           e"d>d<           e"d?d           e"d?d          e!d@f          Z$ G dA dBe          Z% G dC dDe          Z&dE Z' G dF dGe          Z( G dH dIe          Z) ee%e&e!J            eee(dKL            ee(e%            ee%e) e"d8d9          d         J            ee%e) e"d>d9          d         J            eee%dMN           d
S )Oz$
RoCE: RDMA over Converged Ethernet
    )Packetbind_layersRaw)	ByteEnumField	ByteField
XByteField
ShortFieldXShortField
XLongFieldBitField	XBitFieldFCSField)IPUDP)IPv6)Ether)raw)warning)crc32N)Tuple    @   `   )RCUCRDUD
SEND_FIRSTSEND_MIDDLE   	SEND_LAST   SEND_LAST_WITH_IMMEDIATE   	SEND_ONLY   SEND_ONLY_WITH_IMMEDIATE   RDMA_WRITE_FIRST   RDMA_WRITE_MIDDLE   RDMA_WRITE_LAST   RDMA_WRITE_LAST_WITH_IMMEDIATE	   RDMA_WRITE_ONLY
   RDMA_WRITE_ONLY_WITH_IMMEDIATE   RDMA_READ_REQUEST   RDMA_READ_RESPONSE_FIRST   RDMA_READ_RESPONSE_MIDDLE   RDMA_READ_RESPONSE_LAST   RDMA_READ_RESPONSE_ONLY               )ACKNOWLEDGEATOMIC_ACKNOWLEDGECOMPARE_SWAP	FETCH_ADD   c                 d    t           |          t          |         z   d                    | |          fS )Nz{}_{})_transports_opsformat)	transportops     V/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/roce.pyopcoderO   ?   s)    	"T"X-w~~i/L/LMM    r   rC   rD   rE   rF   r   r   r   CNPc                      e Zd Zd Z edde           eddd           eddd           eddd           eddd	           ed
d           eddd           eddd           eddd           eddd           eddd           eddd           eddd           eddd          gZ	e
d             Zd Zd ZdS )BTHrO   r   	solicitedr    migreqpadcountr"   versionr&   pkey  fecnbecnresv6r*   dqpn   ackreqresv7r,   psnicrcN!I)fmtc                 D    t          j        d| dz            d d d         S )Nrc       )structpack)rb   s    rN   	pack_icrczBTH.pack_icrc   s&     {4
!233DDbD99rP   c                    | j         }|t          |t                    s,t          d|o|j                   |                     d          S |j         }t          |t                    r"t          d          |                                z  }d|_	        d|_
        d|_        d|t                   _	        d|t                   _        d|t                   _        d|t                   _        |t                                                   }t#          |t                   j                  }d}t          ||z   |z             |t                   _        t'          t#          |          d d                   d	z  }|                     |          S t          |t(                    r"t          d          |                                z  }d|_        d
|_        d|_        d|t                   _	        d|t                   _        d|t                   _        d|t                   _        |t                                                   }t#          |t                   j                  }d}t          ||z   |z             |t                   _        t'          t#          |          d d                   d	z  }|                     |          S t          d|o|j                   |                     d          S )Nz5Expecting UDP underlayer to compute checksum. Got %s.r   s   rY      r    s   rf   i z,The underlayer protocol %s is not supported.)
underlayer
isinstancer   r   namerj   r   r   copychksumttltosrS   rZ   r[   r\   
self_buildr   payloadr   r   hlimfltc)	selfpudpippshdrbthrv   icrc_placeholderrb   s	            rN   compute_icrczBTH.compute_icrc   sd   o;jc22;K$CH& & &>>!$$$^b" '	%$$rwwyy0E!ELEIEI &E#JE#JOE#JO#E#J*''))C%*,--G  3!$S7]5E%E!F!FE#JUCRC))J6D>>$'''D!! 	%$$rwwyy0EEJEHEH &E#JE#JOE#JO#E#J*''))C%*,--G  3!$S7]5E%E!F!FE#JUCRC))J6D>>$'''BN27$ $ $>>!$$$rP   c                 ^    ||z  }| j          |d d         |                     |          z   }|S )Nrm   )rb   r   )rz   r{   pays      rN   
post_buildzBTH.post_build   s8    	S9#2#**1---ArP   )__name__
__module____qualname__rp   r   _bth_opcodesr   r
   r   fields_descstaticmethodrj   r   r    rP   rN   rS   rS      sI       Dh<00a##1a  Q""Aq!!FF##AA!QB1a  !Q24(((*K" : : \:/% /% /%h    rP   rS   c                   B    e Zd Zd Z edd           edd          gZdS )
CNPPadding	reserved1r   	reserved2N)r   r   r   rp   r   r   r   rP   rN   r   r      s8        D
;""
;""KKKrP   r   c                 N    t          t          d|           t                      z  S )Nr    )rO   r[   r]   )rS   
CNP_OPCODEr   )r]   s    rN   cnpr      s     jqt444z||CCrP   c                       e Zd Zd Z eddd           eddd           eddd           ed	d           ed
d           edd           eddd           eddd          gZdS )GRHipverr*   r&   tclassr   r.   	flowlabelrB   paylennexthdrhoplmtsgid   dgidN)	r   r   r   rp   r   r	   r   r   r   r   rP   rN   r   r      s        D!Q1a  a$$
8Q	)Q	(A	&!S!!	&!S!!	KKKrP   r   c                   D    e Zd Zd Z edd           eddd          gZdS )AETHsyndromer   msnr^   N)r   r   r   rp   r   r   r   r   rP   rN   r   r      s:        D
:q!!	%BKKKrP   r   )rO   i  )typei  )dport)*__doc__scapy.packetr   r   r   scapy.fieldsr   r   r   r	   r
   r   r   r   r   scapy.layers.inetr   r   scapy.layers.inet6r   scapy.layers.l2r   scapy.compatr   scapy.errorr   zlibr   rh   typingr   rI   rJ   r   rO   dictr   rS   r   r   r   r   r   rP   rN   <module>r      s,	    2 1 1 1 1 1 1 1 1 1G G G G G G G G G G G G G G G G G G G G G G % % % % % % % % # # # # # # ! ! ! ! ! !                        
 


	 $4  	
     t %d t %d      t!" t#$ +  2 
N N N
 t >
F4>
F4> F4> F4+,,	>
 F4> F4+,,> F4#$$> F4$%%> F4"##> F4122> F4"##> F4122> F4$%%> F4+,,> F4,-->  F4*++!>" F4*++#>$ F4%>& F4%&&'>( F4  )>* F4+>. F4/>0 F41>2 F43>4 F4+,,5>6 F47>8 F4+,,9>: F4#$$;>< F4$%%=>> F4"##?>@ F4122A>B F4"##C>D F4122E>H F4I>J F4K>L F4M>N F4+,,O>P F4Q>R F4+,,S>T F4#$$U>V F4$%%W>X F4"##Y>Z F4122[>\ F4"##]>^ F4122_>` F4$%%a>b F4+,,c>d F4,--e>f F4*++g>h F4*++i>j F4k>l F4%&&m>n F4  o>p F4q>t F4u>v F4+,,w>z {> > >BQ Q Q Q Q& Q Q Qh       D D D
    &       6    CJ / / / / E3V $ $ $ $ C    CffT=99!< = = = = CffT=99!< = = = = CD ! ! ! ! ! !rP   