
    h(                    (3   d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlm Z  ddl!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z* d	d
dddddddZ+ddddZ,dddZ-ddiZ.dddddZ/ddiZ0ddiZ1ddiZ2 G d de&          Z3 G d de&          Z4de4iZ5g d Z6g d!Z7g d"Z8 G d# d$e"          Z9d%d&d'd(d)Z:i dd*dd+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIi dJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrZ;i dg dsdg dtd,g dud.g dvd0g dwd2g dxd4g dyd6g dzd8g d{d:g d|d<g d}d>g d~d@g ddBg ddDg ddFg ddHg di dJg ddLg ddNg ddPg ddRg ddTg ddVg ddXg ddZg dd\g dd^g dd`g ddbg dddg ddfg ddhg ddjg dg dg dg dg dg dg ddrZ<g dZ=i Z>d Z?e<@                                D ]&\  ZAZB e?d,eAz  eB            e?d,eAz  dz   eB           'i ZCi ZDd ZE eE            ZF eE            ZG eE            ZH eE            ZI eE            ZJ eE            ZK eE            ZL eE            ZM eE            ZN eE            ZO eE            ZP eE            ZQ eE            ZR eE            ZS eE            ZT eE            ZU eE            ZV eE            ZW eE            ZX eE            ZY eE            ZZ eE            Z[ eE            Z\ eE            Z] eE            Z^ eE            Z_ eE            Z` eE            Za eE            Zb eE            Zc eE            Zd eE            Ze eE            Zf eE            Zg eE            Zh eE            Zi eE            Zj eE            Zk eE            Zl eE            Zm eE            Zn eE            Zo eE            Zp eE            Zq eE            Zr eE            Zs eE            Zt eE            Zu eE            Zv eE            Zw eE            Zx eE            Zy eE            Zz eE            Z{ eE            Z| eE            Z} eE            Z~ eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Z eE            Zi dDd@dgdHd<dgdLd<dgdPd<dgdRd<dgdTd<dgdXd<dgd\dPd4gd`dPd4gdddPdJgdhdPdJgddPdgddPdgddPdgddPdgdd<dgdd<dgi dd<dgdd<dgdd<dgdd<dgdd<dgdd<dgddRdgddRdgdddgdddgdddgdd<dgdd<dgdd<dgdd<dgdd<dgZ G d de          Z G d de"          Z G d de"          Z G dÄ de          Z G dń de)          Zi ddǓddȓd,dɓd.dʓd0d˓d2d̓d4d͓d6dΓd8dϓd:dГd<dѓd>dғd@dӓdBdԓdDdՓdFd֓dHdדdddddddddddddZ G d de&          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d	 d
e          Z G d de          Z  G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z	 G d d e          Z
i deded,ed.ed0ed2ed4ed6ed8ed:ed<ed>ed@edBedDedFedHeee eeeeeeeee	e
dZ G d! d"e&          Z G d# d$e          Z G d% d&e          Z G d' d(e          Z G d) d*e          Z G d+ d,e          Z G d- d.e          Z G d/ d0e          Z G d1 d2e          Z G d3 d4e          Z G d5 d6e          Z G d7 d8e          Z G d9 d:e          Z G d; d<e          Z G d= d>e          Z G d? d@e          Z G dA dBe          Z G dC dDe          Z G dE dFe          Z G dG dHe          Z G dI dJe          Z  G dK dLe          Z! G dM dNe          Z" G dO dPe          Z# G dQ dRe          Z$ G dS dTe          Z% G dU dVe          Z& G dW dXe          Z' G dY dZe          Z( G d[ d\e          Z)i deded,ed.ed0ed2ed4ed6ed8ed:ed<ed>ed@edBedDedFedHeeee e!e"e#e$e%e&e'e(e)dZ*d]d^d_d`dadbdcddZ+ G de dfe&          Z, G dg dhe,          Z- G di dje,          Z. G dk dle,          Z/ G dm dne,          Z0 G do dpe,          Z1 G dq dre,          Z2 G ds dte,          Z3e-e.e/e0e1e2e3ddZ4 G du dve&          Z5 G dw dxe5          Z6 G dy dze5          Z7 G d{ d|e5          Z8 G d} d~e5          Z9 G d de5          Z: G d de5          Z; G d de5          Z<e6e7e8e9e:e;e<ddZ= G d de'          Z>dddZ? G d de&          Z@ G d de@          ZA G d de@          ZBeAeBdZC G d de"          ZDddddZE G d de&          ZF G d deF          ZG G d deF          ZH G d deF          ZIeGeHeIdZJddddddZKi ddddd,dd.dd0dd2dd4dd6dd8dd:dd<dd>dd@ddBddDddFddHdddddddddddddddÜZL G dĄ de&          ZMdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐd՜ZN G dք de&          ZO G d؄ de&          ZP G dڄ de&          ZQ G d܄ de&          ZR G dބ de&          ZS G d de&          ZT G d de&          ZU G d de&          ZV G d de&          ZW G d de&          ZX G d de&          ZY G d de&          ZZ G d de&          Z[ G d de&          Z\ G d de&          Z]eOePeQeReSeTeUeVeWeXeYeZe[e\e]d՜Z^ G d de&          Z_ G d de&          Z` G d de&          Za G d de&          Zb G d de&          Zc G d de&          Zd G d  de&          Ze G d de&          Zf G d de&          Zg G d de&          Zh G d d	e&          Zi G d
 de&          Zj G d de&          Zk G d de&          Zl G d de&          Zm G d de&          Znddddddddddddd d!d"d՜Zod#gZpd$gZq G d% d&e&          Zr G d' d(e&          Zs G d) d*e&          Zt G d+ d,e'          Zu G d- d.e&          Zv G d/ d0et          Zw G d1 d2e&          Zx G d3 d4e&          Zy G d5 d6e"          Zz G d7 d8e&          Z{ G d9 d:e&          Z| G d; d<e"          Z} G d= d>e&          Z~ G d? d@e&          Z G dA dBe"          Z G dC dDe&          Z G dE dFe&          Z G dG dHe"          Z G dI dJe'          Z G dK dLe&          Z G dM dNe&          Z G dO dPe'          Z G dQ dRe&          Z G dS dTe&          ZdU e                                D             Z G dV dWe&          Z G dX dYe&          Z G dZ d[e"          Z G d\ d]e"          Z G d^ d_e&          Z G d` dae&          Z G db dce'          Z G dd dee&          Z G df dge&          Z G dh die&          Z G dj dke"          Zi ddlddmd,dnd.dod0dpd2dqd4drd6dsd8dtd<dud@dvdBdwdDdxdFdydzd{dd|Z G d} d~e          Z G d de          Z G d de"          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Zi deded,ed.ed0ed2ed4ed6ed8ed<ed@edBedDedFedzedeZ G d de'          Z G d de&          Z G d de&          Z G d de&          Z G d de&          Z G d de&          Z G d de&          Zereteweye|eeeeeeeeeed՜Zesevexe{e~eeeeeeeeeed՜Z G d de&          Z G d de&          Z G d de&          Z G d de&          Z G d de&          Z G d de          Z G d de&          Zg dZg dZg dZ G d de&          Z G d de          Z G d de&          Zi deMd,e_d.e`d0ead2ebd4ecd6edd8eed:efd<egd>ehd@eidBejdDekdFeldHemdJeneeeeeeeeeedĜ
ZdS (  z
OpenFlow v1.3.4

OpenFlow is an open standard used in SDN deployments.
Specifications can be retrieved from https://www.opennetworking.org/
    N)orbraw)conf)BitEnumFieldBitFieldByteEnumField	ByteFieldFieldLenField
FlagsFieldIntEnumFieldIntFieldIPField	LongFieldMACFieldPacketFieldPacketListFieldShortEnumField
ShortFieldStrFixedLenFieldX3BytesField	XBitField
XByteField	XIntFieldXShortFieldPacketLenField)Ether)PacketPaddingRaw)_ofp_header_ofp_header_itemOFPacketFieldOpenFlow_UnknownOpenFlowIN_PORTTABLENORMALFLOODALL
CONTROLLERLOCALANY)l    l    l    l                    MAX)l     r-   r0   )      r0   SLOWPATH)l      r.   r/   r0   	NO_BUFFER     OFPHET_VERSIONBITMAPc                   ,    e Zd Zedd            Zd ZdS )OFPHETNc                     |rVt          |          dk    rCt          j        d|d d                   d         }t                              |t
                    S t
          S N   !Hr   )lenstructunpackofp_hello_elem_clsgetr   cls_pktargskargsts        [/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/openflow3.pydispatch_hookzOFPHET.dispatch_hookS   Q     	2CIINNdD!H--a0A%))!S111
    c                 
    d|fS NrM    selfss     rJ   extract_paddingzOFPHET.extract_paddingZ       AvrM   N__name__
__module____qualname__classmethodrK   rT   rP   rM   rJ   r:   r:   R   A           [    rM   r:   c            	       b    e Zd ZdZ edde           edd           edddg d	          gZd
S )OFPHETVersionBitmapr8   typer7   r?      bitmapr       )zType 0zOFv1.0zOFv1.1zOFv1.2zOFv1.3zOFv1.4zOFv1.5N)	rX   rY   rZ   namer   ofp_hello_elem_typesr   r   fields_descrP   rM   rJ   r^   r^   ^   s_        !D!>&!-ABB:eQ'':h2 0: 0: 0: ; ;<KKKrM   r^   )	PORT_DOWNNO_STPNO_RECVNO_RECV_STPNO_FLOODNO_FWDNO_PACKET_IN)	LINK_DOWNBLOCKEDLIVE)10MB_HD10MB_FD100MB_HD100MB_FD1GB_HD1GB_FD10GB_FD40GB_FD100GB_FD1TB_FDOTHERCOPPERFIBERAUTONEGPAUSE
PAUSE_ASYMc                   V   e Zd ZdZ edde           edd           edd           edd           e	dd	d
           e
ddde           e
ddde           e
ddde           e
ddde           e
ddde           e
ddde           edd           edd          gZd ZdS )OFPPortOFP_PHY_PORTport_nor   pad1hw_addr0pad2	port_name    configrb   statecurr
advertised	supportedpeer
curr_speed	max_speedc                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPPort.extract_padding   rU   rM   N)rX   rY   rZ   rc   r   ofp_port_nor   r   r   r   r   ofp_port_configofp_port_stateofp_port_featuresr   re   rT   rP   rM   rJ   r   r      s       D<	1k::9VQ''8Is++;vq))##KR88:h2??:gq"n==:fa->??:lAr3DEE:k1b2CDD:fa->??8L!,,8K++-K    rM   r   OFPXMC_NXM_0OFPXMC_NXM_1OFPXMC_OPENFLOW_BASICOFPXMC_EXPERIMENTER)r   r7   i   r6   OFB_IN_PORTOFB_IN_PHY_PORTr=   OFB_METADATA   OFB_ETH_DST   OFB_ETH_SRC   OFB_ETH_TYPE   OFB_VLAN_VID   OFB_VLAN_PCPr`   OFB_IP_DSCP	   
OFB_IP_ECN
   OFB_IP_PROTO   OFB_IPV4_SRC   OFB_IPV4_DST   OFB_TCP_SRC   OFB_TCP_DST   OFB_UDP_SRCr   OFB_UDP_DST   OFB_SCTP_SRC   OFB_SCTP_DST   OFB_ICMPV4_TYPE   OFB_ICMPV4_CODE   
OFB_ARP_OP   OFB_ARP_SPA   OFB_ARP_TPA   OFB_ARP_SHA   OFB_ARP_THA   OFB_IPV6_SRC   OFB_IPV6_DST   OFB_IPV6_FLABEL   OFB_ICMPV6_TYPE   OFB_ICMPV6_CODE   OFB_IPV6_ND_TARGETrb   OFB_IPV6_ND_SLL!   OFB_IPV6_ND_TLLOFB_MPLS_LABELOFB_MPLS_TCOFB_MPLS_BOSOFB_PBB_ISIDOFB_TUNNEL_IDOFB_IPV6_EXTHDR)"   #   $   %   &   '   )	OFBInPortin_portr   )OFBInPhyPortin_phy_portr   )OFBMetadatametadatar`   )	OFBEthDsteth_dstr   )	OFBEthSrceth_srcr   )
OFBEthTypeeth_typer=   )
OFBVLANVIDvlan_vidr=   )
OFBVLANPCPvlan_pcpr7   )	OFBIPDSCPip_dscpr7   )OFBIPECNip_ecnr7   )
OFBIPProtoip_protor7   )
OFBIPv4Srcipv4_srcr   )
OFBIPv4Dstipv4_dstr   )	OFBTCPSrctcp_srcr=   )	OFBTCPDsttcp_dstr=   )	OFBUDPSrcudp_srcr=   )	OFBUDPDstudp_dstr=   )
OFBSCTPSrcsctp_srcr=   )
OFBSCTPDstsctp_dstr=   )OFBICMPv4Typeicmpv4_typer7   )OFBICMPv4Codeicmpv4_coder7   )OFBARPOParp_opr=   )	OFBARPSPAarp_spar   )	OFBARPTPAarp_tpar   )	OFBARPSHAarp_shar   )	OFBARPTHAarp_thar   )
OFBIPv6Srcipv6_srcr   )
OFBIPv6Dstipv6_dstr   )OFBIPv6FLabelipv6_flabelr   )OFBICMPv6Typeicmpv6_typer7   )OFBICMPv6Codeicmpv6_coder7   )OFBIPv6NDTargetipv6_nd_targetr   )OFBIPv6NDSLLipv6_sllr   )OFBIPv6NDTLLipv6_tllr   )OFBMPLSLabel
mpls_labelr   )	OFBMPLSTCmpls_tcr7   )
OFBMPLSBoSmpls_bosr7   )
OFBPBBISIDpbb_isidr   )OFBTunnelID	tunnel_idr`   )OFBIPv6ExtHdripv6_ext_hdr_flagsr=   )	NONEXTESPAUTHDESTFRAGROUTERHOPUNREPUNSEQc           	      p   t          ddt                    t          d| dz  dt                    t	          d| dz  d          gt
          | <   t
          |                              t          d|d         |d         | dz  z  z                        | dz  d	k    r<t
          |                              t          |d         d	t                               n| dz  d
k    s	| dz  dk    r5t
          |                              t          |d         d                      n| dz  dk    s	| dz  dk    r5t
          |                              t          |d         d                     n| dz  dk    rEt
          |                              t          |d         d	d|d         z  t                               n>t
          |                              t	          |d         d	d|d         z                       | dz  rCt
          |                              t	          |d         dz   d	d|d         z                       d S d S )Nclass_r   fieldr=   r   hasmaskr7   r?   r   r   r   r   r   r   r   r`   _mask)r   ofp_oxm_classesr   ofp_oxm_namesr   ofp_oxm_fieldsappendr	   r   r   r   r   r   	ipv6flags)iorgs     rJ   add_ofp_oxm_fieldsrK    s	   '2I?[[%gqAvq-HH!)QUA668N1 1Yuc!fs1vQ7G.GHHIIIAv{{q  c!fa!E!EFFFF	
a1Q!q  #a&$!7!78888	
a2a2q  Q!5!56666	
a2q  CFAq3q6z9!M!MNNNNq  #a&!QQZ!@!@AAA1u Lq  #a&7*:Aq3q6z!J!JKKKKKL LrM   c                     t          t          d          sdt          _        t          j        } t          | dz           d         }| dz  dk    r|dz  }| dz  r|dz  }t          | dz           }t
          | dz           }| dz  r
|d d         }t          |t          f||d          }| dz  dk    r|t          | dz  <   n|t          | dz  <   t          xj        dz  c_        d	 |_
        |S )
NrI  r   r   r=   HMID)rc   re   r7   c                 
    d|fS rO   rP   rQ   s     rJ   <lambda>z!_create_oxm_cls.<locals>.<lambda>O  s
    3( rM   )hasattr_create_oxm_clsrI  ofp_oxm_constrrE  rF  r_   r   ofp_oxm_clsofp_oxm_id_clsrT   )indexcls_nameoxm_name
oxm_fieldsrE   s        rJ   rR  rR  ,  s   ?C(( Eeqj)!,HqyA~~Dqy DUaZ(H
+Jqy $^

x&Xj$Q$Q
R
RC qyA~~"%EQJ%(uz"22CJrM   i   i   i݆  r      r   r   (   *   i  ,   .   0   2   4   6   8   :   <   >      @   B      D   G  F   H   J     N   c                   L    e Zd ZddgZddZd Zd Zed             Zd	 Z	d
 Z
dS )OXMPacketListFieldautocompleterV  NFc                 T    t          j        | ||||           || _        g | _        d S )Nlength_from)r   __init__rt  rV  )rR   rc   defaultrE   rw  rt  s         rJ   rx  zOXMPacketListField.__init__#  s1     tWc{SSSS(


rM   c                    | j         st          j        d         d         rt          j        |          }|D ]}d|j        z  }t          | j                  }|t          v rt          |         }|d         }|dk    rdn|}||vrp| j        	                    d|           t          |                     }	t          |	t          |dz           d         |d                    |	                    d|	           |t          v |S )NOPENFLOWprereq_autocompleter=   r   r   r   r7   )rt  r   contribscopydeepcopyrA  listrV  need_prereqinsertrT  setattrrS  )
rR   pktvalfix_valoxmf	fix_indexprereqf2prrqs
             rJ   i2mzOXMPacketListField.i2m(  s
     	,j 9:O P 	,mC((G , ,	M ,,	;&& )^Fq	A BwwAB**
))!R000*200nR1W&=a&@&)LLL

1d+++ ;&&" 
rM   c                     t          |d                   }||dz  z
  }|| j        vr| j                            |           t                              |t
                    |          S Nr=   )r   rV  rG  rT  rC   r   )rR   r  rS   rI   nrm_ts        rJ   m2izOXMPacketListField.m2iE  s]    !IIAE	
""Je$$$q#&&q)))rM   c                 ,    t          | d                   S )Nr   )r   )rS   s    rJ   _get_oxm_lengthz"OXMPacketListField._get_oxm_lengthL  s    1Q4yyrM   c                 n    |d                     d |                     ||          D                       z   S )NrM   c              3   4   K   | ]}t          |          V  d S rV   )r   ).0xs     rJ   	<genexpr>z.OXMPacketListField.addfield.<locals>.<genexpr>Q  s(      ??qCFF??????rM   )joinr  )rR   r  rS   r  s       rJ   addfieldzOXMPacketListField.addfieldP  s6    388??DHHS#,>,>???????rM   c                    g }|                      |          }||d          }|d |         }|rt          |          dk    rt                              |          dz   }|dk    st          |          |k     rnT|d |         }||d          }|                     ||          }	|                    |	           |rt          |          dk    g | _        ||z   |fS Nr   )rw  r?   rs  r  r  rG  rV  )
rR   r  rS   lstlimretremaintmp_lencurrentps
             rJ   getfieldzOXMPacketListField.getfieldS  s    s##g4C4 		Vq(88@@1DG!||s6{{W44XgX&GGHH%Fg&&AJJqMMM  		Vq 
 |S  rM   )NF)rX   rY   rZ   	__slots__rx  r  r  staticmethodr  r  r  rP   rM   rJ   rs  rs    s        )I   
  :* * *   \@ @ @! ! ! ! !rM   rs  c                   ,    e Zd Zedd            Zd ZdS )OXMIDNc                     |rHt          |          dk    r5t          |d                   }t                              |t                    S t          S r  )r?   r   rU  rC   r   rD   s        rJ   rK   zOXMID.dispatch_hooko  sB     	.CIINNDGA!%%a---
rM   c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOXMID.extract_paddingv  rU   rM   rV   rW   rP   rM   rJ   r  r  n  r\   rM   r  c                   t    e Zd ZdZ eddddd           edd           ed	g ed
           gZd Z	d Z
dS )OFPMatch	OFP_MATCHr_   r7   OFPMT_STANDARD	OFPMT_OXMr   r7   r?   NrY  c                     | j         dz
  S r  r?   r  s    rJ   rP  zOFPMatch.<lambda>      SWq[ rM   rv  c                     | j         }|]t          |          t          |          z   }|d d         t          j        d|          z   |dd          z   }d|dz  z
  dz  }|d|z  z  }||z   S Nr=   r>   r   r`       r?   r@   packrR   r  payr  
zero_bytess        rJ   
post_buildzOFPMatch.post_build  y    (?!ffs3xx'G"1"D'222QqrrU:Agk/Q.J:%%A3wrM   c                 N    | j         }d|dz  z
  dz  }||d          |d |         fS Nr`   r  )rR   rS   r  r  s       rJ   rT   zOFPMatch.extract_padding  s6    ('A+o*
~q*~--rM   )rX   rY   rZ   rc   r   r   rs  r   re   r  rT   rP   rM   rJ   r  r  z  s        D!>&!1A1<.> .> ? ?:eT**%%lB2H2HJ J JKK  . . . . .rM   r  c                       e Zd Zd Zd ZdS )
MatchFieldc                 V    t          j        | |t                      t                     d S rV   )r   rx  r  )rR   rc   s     rJ   rx  zMatchField.__init__  s#    T4X>>>>>rM   c                     |                      ||          }t          |v r5|t                   }t          |v r|t                   }||_        |`|j        |fS d|fS rO   )r  r   r   payloadload)rR   r  rS   rI  rr  s         rJ   r  zMatchField.getfield  s\    HHS!
 !88#A!||gJ	I6196MrM   N)rX   rY   rZ   rx  r  rP   rM   rJ   r  r    s2        ? ? ?    rM   r  c                   *    e Zd ZdZedd            ZdS )	OpenFlow3zOpenFlow v1.3 dissectorNc                    |rt          |          dk    rt          |d                   }|dk    r*t          |d                   }|dk    rd}t          |         S |dk    r*t          |d                   }|dk    rd}t          |         S |dk    r*t          |d                   }|dk    rd}t          |         S t
          |         S t          S )Nr=   r7   r   r3   r6   r   r   )r?   r   ofp_error_clsofp_multipart_request_clsofp_multipart_reply_clsofpt_clsr$   )rE   rF   rG   rH   of_typeerr_typemp_types          rJ   rK   zOpenFlow3.dispatch_hook  s     	)CIINN $q'llG!||tAw<<s??$H$X..Bd1g,,c>>#G099Bd1g,,c>>#G.w77((rM   rV   )rX   rY   rZ   rc   r[   rK   rP   rM   rJ   r  r    s7        $D      [     rM   r  OFPAT_OUTPUTOFPAT_SET_VLAN_VIDOFPAT_SET_VLAN_PCPOFPAT_STRIP_VLANOFPAT_SET_DL_SRCOFPAT_SET_DL_DSTOFPAT_SET_NW_SRCOFPAT_SET_NW_DSTOFPAT_SET_NW_TOSOFPAT_SET_TP_SRCOFPAT_SET_TP_DSTOFPAT_COPY_TTL_OUTOFPAT_COPY_TTL_INOFPAT_SET_MPLS_LABELOFPAT_DEC_MPLS_TCOFPAT_SET_MPLS_TTLOFPAT_DEC_MPLS_TTLOFPAT_PUSH_VLANOFPAT_POP_VLANOFPAT_PUSH_MPLSOFPAT_POP_MPLSOFPAT_SET_QUEUEOFPAT_GROUPOFPAT_SET_NW_TTLOFPAT_DEC_NW_TTLOFPAT_SET_FIELDOFPAT_PUSH_PBBOFPAT_POP_PBBOFPAT_EXPERIMENTER)r   r   r   r   r   r   r   r   r   r   r   r6   c                   ,    e Zd Zedd            Zd ZdS )OFPATNc                     |rVt          |          dk    rCt          j        d|d d                   d         }t                              |t
                    S t
          S r<   )r?   r@   rA   ofp_action_clsrC   r   rD   s        rJ   rK   zOFPAT.dispatch_hook  sQ     	.CIINNdD!H--a0A!%%a---
rM   c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPAT.extract_padding  rU   rM   rV   rW   rP   rM   rJ   r  r    r\   rM   r  c            	           e Zd ZdZ edde           edd           edde           edde	           e
d	dd
          gZdS )OFPATOutputr  r_   r   r?   r   portmax_lenr5   padr_  N)rX   rY   rZ   rc   r   ofp_action_typesr   r   r   ofp_max_lenr   re   rP   rM   rJ   r  r    sn        D!>&!-=>>:eR((<;77!>)[+FF9UAr**	,KKKrM   r  c                   p    e Zd ZdZ edde           edd           edd           edd          gZd	S )
OFPATSetVLANVIDr  r_   r7   r?   r`   r   r   r  N	rX   rY   rZ   rc   r   r  r   r   re   rP   rM   rJ   r  r    sY        D!>&!-=>>:eQ'':j!,,;ua((*KKKrM   r  c                   p    e Zd ZdZ edde           edd           edd           edd          gZ	d	S )
OFPATSetVLANPCPr  r_   r=   r?   r`   r   r   r  N
rX   rY   rZ   rc   r   r  r   r	   r   re   rP   rM   rJ   r  r    sY        D!>&!-=>>:eQ''9Z++<q))+KKKrM   r  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPATStripVLANr  r_   r   r?   r`   r  r   N	rX   rY   rZ   rc   r   r  r   r   re   rP   rM   rJ   r  r    sJ        D!>&!-=>>:eQ''9UA&&(KKKrM   r  c                   r    e Zd ZdZ edde           edd           edd           edd	d
          gZ	dS )OFPATSetDlSrcr  r_   r   r?   r   dl_addrr   r  r   r_  N
rX   rY   rZ   rc   r   r  r   r   r   re   rP   rM   rJ   r  r    [        D!>&!-=>>:eR((8Is++9UAr**,KKKrM   r  c                   r    e Zd ZdZ edde           edd           edd           edd	d
          gZ	dS )OFPATSetDlDstr  r_   r   r?   r   r  r   r  r   r_  Nr  rP   rM   rJ   r
  r
  $  r  rM   r
  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPATSetNwSrcr  r_   r   r?   r`   nw_addrr   N	rX   rY   rZ   rc   r   r  r   r   re   rP   rM   rJ   r  r  ,  J        D!>&!-=>>:eQ''79c**,KKKrM   r  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPATSetNwDstr  r_   r   r?   r`   r  r   Nr  rP   rM   rJ   r  r  3  r  rM   r  c                   p    e Zd ZdZ edde           edd           edd           edd          gZ	dS )	OFPATSetNwToSOFPAT_SET_TP_TOSr_   r`   r?   nw_tosr   r  Nr   rP   rM   rJ   r  r  :  sY        D!>&!-=>>:eQ''9Xq))<q))+KKKrM   r  c                   p    e Zd ZdZ edde           edd           edd           edd          gZd	S )
OFPATSetTpSrcr  r_   r   r?   r`   tp_portr   r  Nr  rP   rM   rJ   r  r  B  sY        D!>&!-=>>:eQ'':i++;ua((*KKKrM   r  c                   p    e Zd ZdZ edde           edd           edd           edd          gZd	S )
OFPATSetTpDstr  r_   r   r?   r`   r  r   r  Nr  rP   rM   rJ   r  r  J  sY        D!>&".>??:eQ'':i++;ua((*KKKrM   r  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPATSetMPLSLabelr  r_   r   r?   r`   r+  r   N	rX   rY   rZ   rc   r   r  r   r   re   rP   rM   rJ   r  r  Z  sJ        !D!>&".>??:eQ''8L!,,.KKKrM   r  c                   p    e Zd ZdZ edde           edd           edd           edd          gZ	d	S )
OFPATSetMPLSTCOFPAT_SET_MPLS_TCr_   r   r?   r`   r-  r   r  Nr   rP   rM   rJ   r  r  a  sY        D!>&".>??:eQ''9Y**<q))+KKKrM   r  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPATCopyTTLOutr  r_   r   r?   r`   r  r   Nr  rP   rM   rJ   r"  r"  k  J        D!>&".>??:eQ''9UA&&(KKKrM   r"  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPATCopyTTLInr  r_   r   r?   r`   r  r   Nr  rP   rM   rJ   r%  r%  r  sJ        D!>&".>??:eQ''9UA&&(KKKrM   r%  c                   p    e Zd ZdZ edde           edd           edd           edd          gZ	d	S )
OFPATSetMPLSTTLr  r_   r   r?   r`   mpls_ttlr   r  Nr   rP   rM   rJ   r'  r'  y  sY        D!>&".>??:eQ''9Z++<q))+KKKrM   r'  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPATDecMPLSTTLr  r_   r   r?   r`   r  r   Nr  rP   rM   rJ   r*  r*    r#  rM   r*  c                   p    e Zd ZdZ edde           edd           edd           edd	          gZd
S )OFPATPushVLANr  r_   r   r?   r`   	ethertypei   r  r   Nr  rP   rM   rJ   r,  r,    Y        D!>&".>??:eQ'':k622;ua((*KKKrM   r,  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPATPopVLANr  r_   r   r?   r`   r  r   Nr  rP   rM   rJ   r0  r0    sJ        D!>&".>??:eQ''9UA&&(KKKrM   r0  c                   p    e Zd ZdZ edde           edd           edd           edd	          gZd
S )OFPATPushMPLSr  r_   r   r?   r`   r-  rl  r  r   Nr  rP   rM   rJ   r2  r2    r.  rM   r2  c                   p    e Zd ZdZ edde           edd           edd           edd	          gZd
S )OFPATPopMPLSr  r_   r   r?   r`   r-  rl  r  r   Nr  rP   rM   rJ   r4  r4    Y        D!>&".>??:eQ'':k622;ua((*KKKrM   r4  c                   \    e Zd ZdZ edde           edd           edde          gZ	dS )	OFPATSetQueuer  r_   r   r?   r`   queue_idr   N)
rX   rY   rZ   rc   r   r  r   r   	ofp_queuere   rP   rM   rJ   r7  r7    sL        D!>&".>??:eQ''<
Ay99;KKKrM   r7  c                   \    e Zd ZdZ edde           edd           edde          gZ	dS )	
OFPATGroupr  r_   r   r?   r`   group_idr   N)
rX   rY   rZ   rc   r   r  r   r   	ofp_groupre   rP   rM   rJ   r;  r;    sL        D!>&".>??:eQ''<
Ay99;KKKrM   r;  c                   p    e Zd ZdZ edde           edd           edd           edd          gZ	d	S )
OFPATSetNwTTLr  r_   r   r?   r`   nw_ttlr   r  Nr   rP   rM   rJ   r?  r?    sY        D!>&".>??:eQ''9Xq))<q))+KKKrM   r?  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPATDecNwTTLr  r_   r   r?   r`   r  r   Nr  rP   rM   rJ   rB  rB    sJ        D!>&".>??:eQ''9UA&&(KKKrM   rB  c            	       p    e Zd ZdZ edde           edd           edg ed d	          gZ	d
 Z
d ZdS )OFPATSetFieldr  r_   r   r?   NrA  c                     | j         dz
  S r  r  r  s    rJ   rP  zOFPATSetField.<lambda>  r  rM   F)rw  rt  c                     | j         }d}|bt          |          t          |          z   }d|dz  z
  dz  }||z   }|d d         t          j        d|          z   |dd          z   }|d|z  z  }||z   S )Nr   r`   r=   r>   r   r  r  r  s        rJ   r  zOFPATSetField.post_build  s    (
?!ffs3xx'Ggk/Q.J
*G"1"D'222QqrrU:A:%%A3wrM   c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPATSetField.extract_padding  rU   rM   )rX   rY   rZ   rc   r   r  r   rs  r   re   r  rT   rP   rM   rJ   rD  rD    s        D!>&".>??:eT**%%gr62H2H38: : :;K
 
 
    rM   rD  c                   p    e Zd ZdZ edde           edd           edd           edd	          gZd
S )OFPATPushPBBr  r_   r   r?   r`   r-  rp  r  r   Nr  rP   rM   rJ   rI  rI    r5  rM   rI  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPATPopPBBr  r_   r   r?   r`   r  r   Nr  rP   rM   rJ   rK  rK    sJ        D!>&".>??:eQ''9UA&&(KKKrM   rK  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPATExperimenterr  r_   r6   r?   r`   experimenterr   Nr  rP   rM   rJ   rM  rM    sJ        D!>&%1ABB:eQ''8NA..0KKKrM   rM  c                   ,    e Zd Zedd            Zd ZdS )OFPATIDNc                     |rVt          |          dk    rCt          j        d|d d                   d         }t                              |t
                    S t
          S r<   )r?   r@   rA   ofp_action_id_clsrC   r   rD   s        rJ   rK   zOFPATID.dispatch_hook  sQ     	1CIINNdD!H--a0A$((C000
rM   c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPATID.extract_padding  rU   rM   rV   rW   rP   rM   rJ   rP  rP    r\   rM   rP  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATOutputIDr  r_   r   r?   r   NrX   rY   rZ   rc   r   r  r   re   rP   rM   rJ   rU  rU  %  s;        D!>&!-=>>:eQ'')KKKrM   rU  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetVLANVIDIDr  r_   r7   r?   r   NrV  rP   rM   rJ   rX  rX  -  ;        D!>&!-=>>:eQ'')KKKrM   rX  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetVLANPCPIDr  r_   r=   r?   r   NrV  rP   rM   rJ   r[  r[  3  rY  rM   r[  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATStripVLANIDr  r_   r   r?   r   NrV  rP   rM   rJ   r]  r]  9  ;        D!>&!-=>>:eQ'')KKKrM   r]  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetDlSrcIDr  r_   r   r?   NrV  rP   rM   rJ   r`  r`  ?  r^  rM   r`  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetDlDstIDr  r_   r   r?   r   NrV  rP   rM   rJ   rb  rb  E  r^  rM   rb  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetNwSrcIDr  r_   r   r?   r   NrV  rP   rM   rJ   rd  rd  K  r^  rM   rd  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetNwDstIDr  r_   r   r?   r   NrV  rP   rM   rJ   rf  rf  Q  r^  rM   rf  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetNwToSIDr  r_   r`   r?   r   NrV  rP   rM   rJ   rh  rh  W  r^  rM   rh  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetTpSrcIDr  r_   r   r?   r   NrV  rP   rM   rJ   rj  rj  ]  r^  rM   rj  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetTpDstIDr  r_   r   r?   r   NrV  rP   rM   rJ   rl  rl  c  ;        D!>&".>??:eQ'')KKKrM   rl  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetMPLSLabelIDr  r_   r   r?   r   NrV  rP   rM   rJ   ro  ro  n  s;        !D!>&".>??:eQ'')KKKrM   ro  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetMPLSTCIDr   r_   r   r?   r   NrV  rP   rM   rJ   rq  rq  t  ;        D!>&".>??:eQ'')KKKrM   rq  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATCopyTTLOutIDr  r_   r   r?   r   NrV  rP   rM   rJ   rt  rt  |  ;        D!>&".>??:eQ'')KKKrM   rt  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATCopyTTLInIDr  r_   r   r?   r   NrV  rP   rM   rJ   rw  rw    rr  rM   rw  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetMPLSTTLIDr  r_   r   r?   r   NrV  rP   rM   rJ   ry  ry    ru  rM   ry  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATDecMPLSTTLIDr  r_   r   r?   r   NrV  rP   rM   rJ   r{  r{    ru  rM   r{  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATPushVLANIDr  r_   r   r?   r   NrV  rP   rM   rJ   r}  r}    ;        D!>&".>??:eQ'')KKKrM   r}  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATPopVLANIDr  r_   r   r?   r   NrV  rP   rM   rJ   r  r    ;        D!>&".>??:eQ'')KKKrM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATPushMPLSIDr  r_   r   r?   r   NrV  rP   rM   rJ   r  r    r~  rM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATPopMPLSIDr  r_   r   r?   r   NrV  rP   rM   rJ   r  r    r  rM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetQueueIDr  r_   r   r?   r   NrV  rP   rM   rJ   r  r    r~  rM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATGroupIDr  r_   r   r?   r   NrV  rP   rM   rJ   r  r    s;        D!>&".>??:eQ'')KKKrM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetNwTTLIDr  r_   r   r?   r   NrV  rP   rM   rJ   r  r    rm  rM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATDecNwTTLIDr  r_   r   r?   r   NrV  rP   rM   rJ   r  r    rm  rM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATSetFieldIDr  r_   r   r?   r   NrV  rP   rM   rJ   r  r    r~  rM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATPushPBBIDr  r_   r   r?   r   NrV  rP   rM   rJ   r  r    r  rM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATPopPBBIDr  r_   r   r?   r   NrV  rP   rM   rJ   r  r    s;        D!>&".>??:eQ'')KKKrM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPATExperimenterIDr  r_   r6   r?   NrV  rP   rM   rJ   r  r    s;        D!>&%1ABB:eT**,KKKrM   r  OFPIT_GOTO_TABLEOFPIT_WRITE_METADATAOFPIT_WRITE_ACTIONSOFPIT_APPLY_ACTIONSOFPIT_CLEAR_ACTIONSOFPIT_METEROFPIT_EXPERIMENTER)r7   r=   r   r   r   r   r6   c                   ,    e Zd Zedd            Zd ZdS )OFPITNc                     |rVt          |          dk    rCt          j        d|d d                   d         }t                              |t
                    S t
          S r<   )r?   r@   rA   ofp_instruction_clsrC   r   rD   s        rJ   rK   zOFPIT.dispatch_hook	  sQ     	3CIINNdD!H--a0A&**1c222
rM   c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPIT.extract_padding  rU   rM   rV   rW   rP   rM   rJ   r  r    r\   rM   r  c                   r    e Zd ZdZ edde           edd           edde           e	dd          gZ
d	S )
OFPITGotoTabler  r_   r7   r?   r`   table_idr   r  N)rX   rY   rZ   rc   r   ofp_instruction_typesr   r   	ofp_tabler   re   rP   rM   rJ   r  r    s[        D!>&!-BCC:eQ'' =Q	::<q))+KKKrM   r  c                       e Zd ZdZ edde           edd           edd           edd           ed	d          gZ	d
S )OFPITWriteMetadatar  r_   r=   r?   r   r  r   r   metadata_maskN)
rX   rY   rZ   rc   r   r  r   r   r   re   rP   rM   rJ   r  r    sh        !D!>&!-BCC:eR((9UA&&9Z++9_a00	2KKKrM   r  c            	       x    e Zd ZdZ edde           edd           edd           edg e	d	 
          gZ
dS )OFPITWriteActionsr  r_   r   r?   Nr  r   actionsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPITWriteActions.<lambda>+      #'A+ rM   rv  rX   rY   rZ   rc   r   r  r   r   r   r  re   rP   rM   rJ   r  r  %  n         D!>&!-BCC:eT**9UA&&"?9b%/E/EG G GHKKKrM   r  c            	       x    e Zd ZdZ edde           edd           edd           edg e	d	 
          gZ
dS )OFPITApplyActionsr  r_   r   r?   Nr  r   r  c                     | j         dz
  S r  r  r  s    rJ   rP  zOFPITApplyActions.<lambda>4  r  rM   rv  r  rP   rM   rJ   r  r  .  r  rM   r  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPITClearActionsr  r_   r   r?   r`   r  r   N)	rX   rY   rZ   rc   r   r  r   r   re   rP   rM   rJ   r  r  7  sJ         D!>&!-BCC:eQ''9UA&&(KKKrM   r  c                   \    e Zd ZdZ edde           edd           edde          gZ	dS )	
OFPITMeterr  r_   r   r?   r`   meter_idr7   N)
rX   rY   rZ   rc   r   r  r   r   	ofp_meterre   rP   rM   rJ   r  r  >  sL        D!>&!-BCC:eQ''<
Ay99;KKKrM   r  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )OFPITExperimenterr  r_   r6   r?   NrN  r   )	rX   rY   rZ   rc   r   r  r   r   re   rP   rM   rJ   r  r  E  sJ        D!>&%1FGG:eT**8NA..0KKKrM   r  c                   ,    e Zd Zedd            Zd ZdS )OFPITIDNc                     |rVt          |          dk    rCt          j        d|d d                   d         }t                              |t
                    S t
          S r<   )r?   r@   rA   ofp_instruction_id_clsrC   r   rD   s        rJ   rK   zOFPITID.dispatch_hook[  Q     	6CIINNdD!H--a0A)--a555
rM   c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPITID.extract_paddingb  rU   rM   rV   rW   rP   rM   rJ   r  r  Z  r\   rM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPITGotoTableIDr  r_   r7   r?   r   NrX   rY   rZ   rc   r   r  r   re   rP   rM   rJ   r  r  f  s;        D!>&!-BCC:eQ'')KKKrM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPITWriteMetadataIDr  r_   r=   r?   r   Nr  rP   rM   rJ   r  r  l  s;        !D!>&!-BCC:eQ'')KKKrM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPITWriteActionsIDr  r_   r   r?   r   Nr  rP   rM   rJ   r  r  r  ;         D!>&!-BCC:eQ'')KKKrM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPITApplyActionsIDr  r_   r   r?   Nr  rP   rM   rJ   r  r  x  r  rM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPITClearActionsIDr  r_   r   r?   r   Nr  rP   rM   rJ   r  r  ~  r  rM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPITMeterIDr  r_   r   r?   r   Nr  rP   rM   rJ   r  r    s;        D!>&!-BCC:eQ'')KKKrM   r  c                   D    e Zd ZdZ edde           edd          gZdS )OFPITExperimenterIDr  r_   r6   r?   Nr  rP   rM   rJ   r  r    s;        D!>&%1FGG:eT**,KKKrM   r  c                       e Zd ZdZ edd           edd           edde           edde           edd           e	d	g e
d
           gZd ZdS )	OFPBucket
OFP_BUCKETr?   Nweightr   
watch_portwatch_groupr  r  c                     | j         dz
  S Nr   r  r  s    rJ   rP  zOFPBucket.<lambda>      #'B, rM   rv  c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPBucket.extract_padding  rU   rM   )rX   rY   rZ   rc   r   r   r   r=  r   r   r  re   rT   rP   rM   rJ   r  r    s        D:eT**:h**<a==<q)<<9UA&&"?9b%/F/FH H HIK    rM   r  
OFPQT_NONEOFPQT_MIN_RATEr  c                   ,    e Zd Zedd            Zd ZdS )OFPQTNc                     |rVt          |          dk    rCt          j        d|d d                   d         }t                              |t
                    S t
          S r<   )r?   r@   rA   ofp_queue_property_clsrC   r   rD   s        rJ   rK   zOFPQT.dispatch_hook  r  rM   c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPQT.extract_padding  rU   rM   rV   rW   rP   rM   rJ   r  r    r\   rM   r  c                   Z    e Zd ZdZ edde           edd           edd          gZdS )	OFPQTNoner  r_   r   r?   r`   r  N)	rX   rY   rZ   rc   r   ofp_queue_property_typesr   r   re   rP   rM   rJ   r  r    sJ        D!>&!-EFF:eQ''9UA&&(KKKrM   r  c            	           e Zd ZdZ edde           edd           edd           edd           ed	dd
          gZ	dS )OFPQTMinRater  r_   r7   r?   r   r   r   rater   r_  N)
rX   rY   rZ   rc   r   r  r   r   r   re   rP   rM   rJ   r  r    sj        D!>&!-EFF:eR((9VQ'':fa((9VQ++	-KKKrM   r  c            	           e Zd ZdZ edde           edd           edd           edg e	d 	          gZ
d
 Zd ZdS )OFPPacketQueueOFP_PACKET_QUEUEr8  r   r?   Nr  
propertiesc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPPacketQueue.<lambda>  r  rM   rv  c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPPacketQueue.extract_padding  rU   rM   c                     | j         g k    r|t          t                                z  }| j        Jt          |          t          |          z   }|d d         t	          j        d|          z   |dd          z   }||z   S Nr   r>   r   )r  r   r  r?   r@   r  rR   r  r  r  s       rJ   r  zOFPPacketQueue.post_build  sw    ?b  Y[[!!!A8!ffs3xx'G"1"D'222QqrrU:A3wrM   )rX   rY   rZ   rc   r   r9  r   r   r   r  re   rT   r  rP   rM   rJ   r  r    s        D<
Ay99:eT**;ua(("?<U/E/EG G GHK      rM   r  OFPMBT_DROPOFPMBT_DSCP_REMARKOFPMBT_EXPERIMENTER)r   r7   r6   c                   ,    e Zd Zedd            Zd ZdS )OFPMBTNc                     |rVt          |          dk    rCt          j        d|d d                   d         }t                              |t
                    S t
          S r<   )r?   r@   rA   ofp_meter_band_clsrC   r   rD   s        rJ   rK   zOFPMBT.dispatch_hook  rL   rM   c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPMBT.extract_padding  rU   rM   rV   rW   rP   rM   rJ   r  r    r\   rM   r  c                       e Zd ZdZ edde           edd           edd           edd           edd          gZ	d	S )

OFPMBTDropr  r_   r   r?   r   r  
burst_sizer  N)
rX   rY   rZ   rc   r   r  r   r   r   re   rP   rM   rJ   r  r    sh        D!>&!-EFF:eR((8FA&&8L!,,9UA&&	(KKKrM   r  c            	           e Zd ZdZ edde           edd           edd           edd           ed	d           e	d
d          gZ
dS )OFPMBTDSCPRemarkr  r_   r7   r?   r   r  r   r  
prec_levelr  N)rX   rY   rZ   rc   r   r  r   r   r	   r   re   rP   rM   rJ   r  r     sw        D!>&!-EFF:eR((8FA&&8L!,,9\1--<q))+KKKrM   r  c                       e Zd ZdZ edde           edd           edd           edd           ed	d          gZd
S )OFPMBTExperimenterr  r_   r6   r?   r   r  r   r  rN  N)	rX   rY   rZ   rc   r   r  r   r   re   rP   rM   rJ   r  r  
  sh         D!>&%1IJJ:eR((8FA&&8L!,,8NA..	0KKKrM   r  r   r7   r=   zOpenFlow 1.0zOpenFlow 1.1zOpenFlow 1.2zOpenFlow 1.3zOpenFlow 1.4)r7   r=   r   r   r   
OFPT_HELLO
OFPT_ERROROFPT_ECHO_REQUESTOFPT_ECHO_REPLYOFPT_EXPERIMENTEROFPT_FEATURES_REQUESTOFPT_FEATURES_REPLYOFPT_GET_CONFIG_REQUESTOFPT_GET_CONFIG_REPLYOFPT_SET_CONFIGOFPT_PACKET_INOFPT_FLOW_REMOVEDOFPT_PORT_STATUSOFPT_PACKET_OUTOFPT_FLOW_MODOFPT_GROUP_MODOFPT_PORT_MODOFPT_TABLE_MODOFPT_MULTIPART_REQUESTOFPT_MULTIPART_REPLYOFPT_BARRIER_REQUESTOFPT_BARRIER_REPLYOFPT_QUEUE_GET_CONFIG_REQUESTOFPT_QUEUE_GET_CONFIG_REPLYOFPT_ROLE_REQUESTOFPT_ROLE_REPLYOFPT_GET_ASYNC_REQUESTOFPT_GET_ASYNC_REPLYOFPT_SET_ASYNCOFPT_METER_MOD)r   r   r   r   r   r   r   r   r   r   r   r   r   c            
           e Zd ZdZ edde           edde           edd           edd           e	d	g e
d
           gZdS )	OFPTHellor  versionr   r_   r   r?   Nxidelementsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTHello.<lambda>I      37Q; rM   rv  )rX   rY   rZ   rc   r   ofp_versionofp_typer   r   r   r:   re   rP   rM   rJ   r"  r"  B  s~        D =D+>> =H55:eT**8E1%%"?:r6/F/FH H H	IKKKrM   r"  OFPET_HELLO_FAILEDOFPET_BAD_REQUESTOFPET_BAD_ACTIONOFPET_BAD_INSTRUCTIONOFPET_BAD_MATCHOFPET_FLOW_MOD_FAILEDOFPET_GROUP_MOD_FAILEDOFPET_PORT_MOD_FAILEDOFPET_TABLE_MOD_FAILEDOFPET_QUEUE_OP_FAILEDOFPET_SWITCH_CONFIG_FAILEDOFPET_ROLE_REQUEST_FAILEDOFPET_METER_MOD_FAILEDOFPET_TABLE_FEATURES_FAILEDOFPET_EXPERIMENTER)r   r7   r=   r   r   r   r   r   r`   r   r   r   r   r   r6   c                       e Zd ZdZ edde           edde           edd           edd	           e	d
d	e
           e	dd	ddd           edde          gZdS )OFPETHelloFailedr*  r#  r   r_   r7   r?   Nr$  r   errtypeerrcodeOFPHFC_INCOMPATIBLEOFPHFC_EPERMr  datar   rX   rY   rZ   rc   r   r(  r)  r   r   r   ofp_error_typer"   r   re   rP   rM   rJ   r:  r:  b  s        D =D+>> =H55:eT**8E1%%!>)Q??!>)Q4I4B1D 1D E E =S113KKKrM   r:  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	ddddddddddddddd           edde          gZdS )OFPETBadRequestr+  r#  r   r_   r7   r?   Nr$  r   r;  r<  OFPBRC_BAD_VERSIONOFPBRC_BAD_TYPEOFPBRC_BAD_MULTIPARTOFPBRC_BAD_EXPERIMENTEROFPBRC_BAD_EXP_TYPEOFPBRC_EPERMOFPBRC_BAD_LENOFPBRC_BUFFER_EMPTYOFPBRC_BUFFER_UNKNOWNOFPBRC_BAD_TABLE_IDOFPBRC_IS_SLAVEOFPBRC_BAD_PORTOFPBRC_BAD_PACKET OFPBRC_MULTIPART_BUFFER_OVERFLOW)r   r7   r=   r   r   r   r   r   r`   r   r   r   r   r   r?  r   r@  rP   rM   rJ   rC  rC  n  s        D =D+>> =H55:eT**8E1%%!>)Q??!>)Q4H4E4J4M4I4B4D4I4K4I5F5F5H5W1Y 1Y Z Z !=S11'3KKKrM   rC  c                      e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	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(           ed)d*e          gZdS )+OFPETBadActionr,  r#  r   r_   r7   r?   Nr$  r   r;  r=   r<  OFPBAC_BAD_TYPEOFPBAC_BAD_LENOFPBAC_BAD_EXPERIMENTERr   OFPBAC_BAD_EXP_TYPEOFPBAC_BAD_OUT_PORTr   OFPBAC_BAD_ARGUMENTr   OFPBAC_EPERMr   OFPBAC_TOO_MANYr`   OFPBAC_BAD_QUEUEr   OFPBAC_BAD_OUT_GROUPr   OFPBAC_MATCH_INCONSISTENTr   OFPBAC_UNSUPPORTED_ORDERr   OFPBAC_BAD_TAGr   OFPBAC_BAD_SET_TYPEr   OFPBAC_BAD_SET_LENr   OFPBAC_BAD_SET_ARGUMENTr?  r   r@  rP   rM   rJ   rS  rS    sq       D =D+>> =H55:eT**8E1%%!>)Q??!>)Q 1P4E 1P124D1P124M1P 234I1P 234I	1P
 234I1P 23N1P 234E1P 234F1P 234J1P 245P1P 245O1P 245E1P 245J1P 245I1P 245N1P Q Q  !=S11+3KKKrM   rS  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	dddddddddd	           edde          gZdS )OFPETBadInstructionr-  r#  r   r_   r7   r?   Nr$  r   r;  r   r<  OFPBIC_UNKNOWN_INSTOFPBIC_UNSUP_INSTOFPBIC_BAD_TABLE_IDOFPBIC_UNSUP_METADATAOFPBIC_UNSUP_METADATA_MASKOFPBIC_BAD_EXPERIMENTEROFPBIC_BAD_EXP_TYPEOFPBIC_BAD_LENOFPBIC_EPERM)	r   r7   r=   r   r   r   r   r   r`   r?  r   r@  rP   rM   rJ   re  re    s        "D =D+>> =H55:eT**8E1%%!>)Q??!>)Q4I4G4I4K4P4M4I4D4B1D 1D E E !=S113KKKrM   re  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	ddddddddddddd           edde          gZdS )OFPETBadMatchr.  r#  r   r_   r7   r?   Nr$  r   r;  r<  OFPBMC_BAD_TYPEOFPBMC_BAD_LENOFPBMC_BAD_TAGOFPBMC_BAD_DL_ADDR_MASKOFPBMC_BAD_NW_ADDR_MASKOFPBMC_BAD_WILDCARDSOFPBMC_BAD_FIELDOFPBMC_BAD_VALUEOFPBMC_BAD_MASKOFPBMC_BAD_PREREQOFPBMC_DUP_FIELDOFPBMC_EPERMr   r7   r=   r   r   r   r   r   r`   r   r   r   r?  r   r@  rP   rM   rJ   rp  rp    s        D =D+>> =H55:eT**8E1%%!>)Q??!>)Q4E4D4D4M4M4J4F4F4E4G5G5C1E 1E F F !=S11#3KKKrM   rp  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	ddddddddd           edde          gZdS )OFPETFlowModFailedr/  r#  r   r_   r7   r?   Nr$  r   r;  r   r<  OFPFMFC_UNKNOWNOFPFMFC_TABLE_FULLOFPFMFC_BAD_TABLE_IDOFPFMFC_OVERLAPOFPFMFC_EPERMOFPFMFC_BAD_TIMEOUTOFPFMFC_BAD_COMMANDOFPFMFC_BAD_FLAGS)r   r7   r=   r   r   r   r   r   r?  r   r@  rP   rM   rJ   r  r    s        "D =D+>> =H55:eT**8E1%%!>)Q??!>)Q4E4H4J4E4C4I4I4G1I 1I J J !=S113KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	dddddddddddddddd           edde          gZdS )OFPETGroupModFailedr0  r#  r   r_   r7   r?   Nr$  r   r;  r   r<  OFPGMFC_GROUP_EXISTSOFPGMFC_INVALID_GROUPOFPGMFC_WEIGHT_UNSUPPORTEDOFPGMFC_OUT_OF_GROUPSOFPGMFC_OUT_OF_BUCKETSOFPGMFC_CHAINING_UNSUPPORTEDOFPGMFC_WATCH_UNSUPPORTEDOFPGMFC_LOOPOFPGMFC_UNKNOWN_GROUPOFPGMFC_CHAINED_GROUPOFPGMFC_BAD_TYPEOFPGMFC_BAD_COMMANDOFPGMFC_BAD_BUCKETOFPGMFC_BAD_WATCHr  )r   r7   r=   r   r   r   r   r   r`   r   r   r   r   r   r   r?  r   r@  rP   rM   rJ   r  r    s        #D =D+>> =H55:eT**8E1%%!>)Q??!>)Q4J4K4P4K4L4R4O4B4K4K5G5J5I5H5D1F 1F G G !=S11)3KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	dddddd           edde          gZdS )OFPETPortModFailedr1  r#  r   r_   r7   r?   Nr$  r   r;  r   r<  OFPPMFC_BAD_PORTOFPPMFC_BAD_HW_ADDROFPPMFC_BAD_CONFIGOFPPMFC_BAD_ADVERTISEOFPPMFC_EPERMr   r7   r=   r   r   r?  r   r@  rP   rM   rJ   r  r    s        "D =D+>> =H55:eT**8E1%%!>)Q??!>)Q4F4I4H4K4C	1E 1E F F
 !=S11
3KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	dddd           edde          gZdS )OFPETTableModFailedr2  r#  r   r_   r7   r?   Nr$  r   r;  r`   r<  OFPTMFC_BAD_TABLEOFPTMFC_BAD_CONFIGOFPTMFC_EPERMr  r?  r   r@  rP   rM   rJ   r  r    s        #D =D+>> =H55:eT**8E1%%!>)Q??!>)Q4G4H4C1E 1E F F !=S113KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	dddd           edde          gZdS )OFPETQueueOpFailedr3  r#  r   r_   r7   r?   Nr$  r   r;  r   r<  OFPQOFC_BAD_PORTOFPQOFC_BAD_QUEUEOFPQOFC_EPERMr  r?  r   r@  rP   rM   rJ   r  r    s        "D =D+>> =H55:eT**8E1%%!>)Q??!>)Q4F4G4C1E 1E F F !=S113KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	dddd           edde          gZdS )OFPETSwitchConfigFailedr4  r#  r   r_   r7   r?   Nr$  r   r;  r   r<  OFPSCFC_BAD_FLAGSOFPSCFC_BAD_LENOFPSCFC_EPERMr  r?  r   r@  rP   rM   rJ   r  r    s        'D =D+>> =H55:eT**8E1%%!>)R@@!>)Q4G4E4C1E 1E F F !=S113KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	dddd           edde          gZdS )OFPETRoleRequestFailedr5  r#  r   r_   r7   r?   Nr$  r   r;  r   r<  OFPRRFC_STALEOFPRRFC_UNSUPOFPRRFC_BAD_ROLEr  r?  r   r@  rP   rM   rJ   r  r  *  s        &D =D+>> =H55:eT**8E1%%!>)R@@!>)QO4C4F1H 1H I I !=S113KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	ddddddddddddd           edde          gZdS )OFPETMeterModFailedr6  r#  r   r_   r7   r?   Nr$  r   r;  r   r<  OFPMMFC_UNKNOWNOFPMMFC_METER_EXISTSOFPMMFC_INVALID_METEROFPMMFC_UNKNOWN_METEROFPMMFC_BAD_COMMANDOFPMMFC_BAD_FLAGSOFPMMFC_BAD_RATEOFPMMFC_BAD_BURSTOFPMMFC_BAD_BANDOFPMMFC_BAD_BAND_VALUEOFPMMFC_OUT_OF_METERSOFPMMFC_OUT_OF_BANDSr}  r?  r   r@  rP   rM   rJ   r  r  7  s        #D =D+>> =H55:eT**8E1%%!>)R@@!>)Q4E4J4K4K4I4G4F4G4F4L5L5K1M 1M N N !=S11#3KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dd	ddddddd           edde          gZdS )OFPETTableFeaturesFailedr7  r#  r   r_   r7   r?   Nr$  r   r;  r   r<  OFPTFFC_BAD_TABLEOFPTFFC_BAD_METADATAOFPTFFC_BAD_TYPEOFPTFFC_BAD_LENOFPTFFC_BAD_ARGUMENTOFPTFFC_EPERM)r   r7   r=   r   r   r   r?  r   r@  rP   rM   rJ   r  r  M  s        (D =D+>> =H55:eT**8E1%%!>)R@@!>)Q4G4J4F4E4J4C1E 1E F F !=S113KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd           edd           edde          gZdS )OFPETExperimenterr8  r#  r   r_   r7   r?   Nr$  r   r;  exp_typerN  r?  r   r@  rP   rM   rJ   r  r  ]  s        D =D+>> =H55:eT**8E1%%!>)-A>RR:j$//8ND11 =S113KKKrM   r  c                   r    e Zd ZdZ edde           edde           edd           edd	          gZ	dS )
OFPTEchoRequestr  r#  r   r_   r=   r?   Nr$  r   
rX   rY   rZ   rc   r   r(  r)  r   r   re   rP   rM   rJ   r  r  ~  sZ        D =D+>> =H55:eT**8E1%%'KKKrM   r  c                   r    e Zd ZdZ edde           edde           edd           edd	          gZ	dS )
OFPTEchoReplyr  r#  r   r_   r   r?   Nr$  r   r  rP   rM   rJ   r  r    sZ        D =D+>> =H55:eT**8E1%%'KKKrM   r  c            	           e Zd ZdZ edde           edde           edd           edd           ed	d           ed
d          gZ	dS )OFPTExperimenterr  r#  r   r_   r?   Nr$  r   rN  r  r  rP   rM   rJ   r  r    sx        D =D+>> =H55:eT**8E1%%8NA..8J**,KKKrM   r  c                   r    e Zd ZdZ edde           edde           edd           edd	          gZ	dS )
OFPTFeaturesRequestr  r#  r   r_   r   r?   Nr$  r   r  rP   rM   rJ   r  r    sZ        "D =D+>> =H55:eT**8E1%%'KKKrM   r  c                      e Zd ZdZ edde           edde           edd           edd	           e	d
d	           edd	           e
dd           e
dd	           edd	           edd	dg d           edd	          gZdS )OFPTFeaturesReplyr	  r#  r   r_   r   r?   Nr$  r   datapath_id	n_buffersn_tablesr7   auxiliary_idr  capabilitiesrb   )	
FLOW_STATSTABLE_STATS
PORT_STATSGROUP_STATSRESERVEDIP_REASMQUEUE_STATSARP_MATCH_IPPORT_BLOCKEDreserved)rX   rY   rZ   rc   r   r(  r)  r   r   r   r	   r   r   re   rP   rM   rJ   r  r    s         D =D+>> =H55:eT**8E1%%9]A..8K++9Z++9^Q//;ua((:na 6F 6F 6F G G 8J**%,KKKrM   r  c                   r    e Zd ZdZ edde           edde           edd           edd	          gZ	dS )
OFPTGetConfigRequestr
  r#  r   r_   r   r?   Nr$  r   r  rP   rM   rJ   r  r    sZ        $D =D+>> =H55:eT**8E1%%'KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
d	ddddd           edd	          gZ
dS )OFPTGetConfigReplyr  r#  r   r_   r`   r?   Nr$  r   flagsFRAG_NORMAL	FRAG_DROP
FRAG_REASM	FRAG_MASKr   r7   r=   r   miss_send_lenrX   rY   rZ   rc   r   r(  r)  r   r   r   re   rP   rM   rJ   r  r    s        "D =D+>> =H55:eT**8E1%%!>'1-2=2>2=/? /? @ @ :oq113KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
d	ddddd           edd          gZ
dS )OFPTSetConfigr  r#  r   r_   r   r?   Nr$  r   r  r  r  r  r  r  r     r  rP   rM   rJ   r  r    s        D =D+>> =H55:eT**8E1%%!>'1-2=2>2=/? /? @ @ :os335KKKrM   r  c                   0   e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	           edd	dddd           edd	e           edd	           ed           edd	           edde          gZdS )OFPTPacketInr  r#  r   r_   r   r?   Nr$  r   	buffer_idr5   	total_lenreasonOFPR_NO_MATCHOFPR_ACTIONOFPR_INVALID_TTLr  r  cookiematchr  r?  r   )rX   rY   rZ   rc   r   r(  r)  r   r   r   
ofp_bufferr  r   r  r   r   r   re   rP   rM   rJ   r  r    s        D =D+>> =X66:eT**8E1%%<[*EE:k1-- =1/2?2D/F /F G G !=Q	::9Xq)):g&&;ua((;vr5113KKKrM   r  c                   p   e Zd ZdZ edde           edde           edd           edd	           e	d
d	           edd	           edd	ddddd           edd	e
           edd	           edd	           edd	           edd	           e	dd	           e	dd	           ed          gZdS )OFPTFlowRemovedr  r#  r   r_   r   r?   Nr$  r   r  priorityr  OFPRR_IDLE_TIMEOUTOFPRR_HARD_TIMEOUTOFPRR_DELETEOFPRR_GROUP_DELETEr  r  duration_secduration_nsecidle_timeouthard_timeoutpacket_count
byte_countr  )rX   rY   rZ   rc   r   r(  r)  r   r   r   r  r  re   rP   rM   rJ   r  r    s       D =D+>> =X66:eT**8E1%%9Xq)):j!,, =12F2F2@2F/H /H I I !=Q	::8NA..8OQ//:na00:na009^Q//9\1--:g&&#(KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           ed
d	dddd           e	dd	d           e
d e            e          gZdS )OFPTPortStatusr  r#  r   r_   r   r?   Nr$  r   r  	OFPPR_ADDOFPPR_DELETEOFPPR_MODIFYr  r  rc  desc)rX   rY   rZ   rc   r   r(  r)  r   r   r   r   r   re   rP   rM   rJ   r  r    s        D =D+>> =X66:eT**8E1%% =1+2@2@/B /B C C 9UAr**;vwwyy'::<KKKrM   r  c                      e Zd ZdZ edde           edde           edd           edd	           e	d
de
           e	dde           edddd           edd	d           edg eed            edde          g
ZdS )OFPTPacketOutr  r#  r   r_   r   r?   Nr$  r   r  r5   r   r*   actions_lenHr  )fmt	length_ofr  r_  c                     | j         S rV   )r  r  s    rJ   rP  zOFPTPacketOut.<lambda>  s    #/ rM   rv  r?  r   )rX   rY   rZ   rc   r   r(  r)  r   r   r   r   r   r
   r   r   r  r   r   re   rP   rM   rJ   r  r    s        D =D+>> =X66:eT**8E1%%<[*EE<	<EE =#SSS9UAr**"?9b%#(/I/IK K K ;vr5113KKKrM   r  c                      e Zd ZdZ edde           edde           edd           edd	           e	d
d	           e	dd	           edd	e
           edd	dddddd           edd	           edd	           edd	           edde           edde           edde           edd	dg d           edd	           ed            ed!g ed" #          gZdS )$OFPTFlowModr  r#  r   r_   r   r?   Nr$  r   r  cookie_maskr  cmd	OFPFC_ADDOFPFC_MODIFYOFPFC_MODIFY_STRICTOFPFC_DELETEOFPFC_DELETE_STRICTr  r
  r  r  r  r5   out_portr,   	out_groupr  r   SEND_FLOW_REMCHECK_OVERLAPRESET_COUNTSNO_PKT_COUNTSNO_BYT_COUNTSr  r  instructionsc                 \    | j         dz
  | j        j         d| j        j         dz  z
  dz  z   z
  S )Nr_  r`   r?   r  r  s    rJ   rP  zOFPTFlowMod.<lambda>:  s3    #'B,#)-[\_b_h_lop_p[ptuZuJu:v rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   r  r   r   r   r=  r   r   r  r   r  re   rP   rM   rJ   r  r    s       D =D+>> =X66:eT**8E1%%9Xq))9]A.. =Q	:: ={/=/D/=/D	,F ,F G G
 :na00:na00:j!,,<[*EE<
E;??<UI>>:gq" /@ /@ /@ A A
 ;ua((:g&&"?>2u/v/vx x x3yKKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
d	dddd           edd	ddddd           e
dd	           edd	e           edg ed           g	ZdS )OFPTGroupModr  r#  r   r_   r   r?   Nr$  r   r  	OFPGC_ADDOFPGC_MODIFYOFPGC_DELETEr  
group_type	OFPGT_ALLOFPGT_SELECTOFPGT_INDIRECTOFPGT_FFr  r  r<  bucketsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTGroupMod.<lambda>N  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   r   r   r=  r   r  re   rP   rM   rJ   r0  r0  >  s        D =D+>> =X66:eT**8E1%%!>%0>0>-@ -@ A A !=qk6D6F6@3B 3B C C :eQ''<
Ay99"?9b)/F/FH H HIKKKrM   r0  c                   0   e Zd ZdZ edde           edde           edd           edd	           e	d
d	e
           edd	           edd           edd	           edd	de           edd	de           edd	de           edd	          gZdS )OFPTPortModr  r#  r   r_   r   r?   Nr$  r   r   r   r   r   r   r   rb   mask	advertisepad3)rX   rY   rZ   rc   r   r(  r)  r   r   r   r   r   r   r   r   r   r   re   rP   rM   rJ   r<  r<  Q  s        D =D+>> =X66:eT**8E1%%<	1k::9VQ''8Is++;vq)):h2??:fa_==:k1b2CDD9VQ'')KKKrM   r<  c                       e Zd ZdZ edde           edde           edd           edd	           ed
d	e	           e
dd	           edd	ddi          gZdS )OFPTTableModr  r#  r   r_   r   r?   Nr$  r   r  r  r   r   OFPTC_DEPRECATED_MASK)rX   rY   rZ   rc   r   r(  r)  r   r   r  r   r   re   rP   rM   rJ   rA  rA  a  s        D =D+>> =X66:eT**8E1%% =Q	::<q))<!a1H-IJJLKKKrM   rA  
OFPMP_DESC
OFPMP_FLOWOFPMP_AGGREGATEOFPMP_TABLEOFPMP_PORT_STATSOFPMP_QUEUEOFPMP_GROUPOFPMP_GROUP_DESCOFPMP_GROUP_FEATURESOFPMP_METEROFPMP_METER_CONFIGOFPMP_METER_FEATURESOFPMP_TABLE_FEATURESOFPMP_PORT_DESCOFPST_VENDORREQ_MORE
REPLY_MOREc                       e Zd ZdZ edde           edde           edd           edd	           e	d
d	e
           edd	de           edd	          gZdS )OFPMPRequestDescOFPMP_REQUEST_DESCr#  r   r_   r   r?   Nr$  r   r  r  r   r  rX   rY   rZ   rc   r   r(  r)  r   r   r   ofp_multipart_typesr   ofpmp_request_flagsr   re   rP   rM   rJ   rU  rU    s        D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".ABB9UA&&(KKKrM   rU  c                   2   e Zd ZdZ edde           edde           edd           edd	           e	d
d	e
           edd	de           edd	           eddd           eddd           eddd           eddd           eddd          gZdS )OFPMPReplyDescOFPMP_REPLY_DESCr#  r   r_   r   r?   Nr$  r   r  r  r   r  mfr_descr      hw_descsw_desc
serial_numrb   dp_desc)rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   ofpmp_reply_flagsr   r   re   rP   rM   rJ   r[  r[    s        D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".?@@9UA&&##JC88##Ir377##Ir377##L"b99##Ir3779KKKrM   r[  c                   n   e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edde           edd	           edde           edde           edd	           edd	           edd	           ed          gZdS )OFPMPRequestFlowOFPMP_REQUEST_FLOWr#  r   r_   r   r?   Nr$  r   r  r7   r  r   r   r  r)   r   r$  r,   r%  r?  r  r  r  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rY  r   r  r   r   r   r=  r   r  re   rP   rM   rJ   re  re    s       D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".ABB9VQ'' =UI>><**<
E;??<UI>>8FA&&9Xq))9]A..:g&&(KKKrM   re  c                   v   e Zd ZdZ edd           edde           edd           edd           edd           ed	d           ed
d           edd           e	dddg d           edd           e
dd           e
dd           e
dd           ed           edg ed           gZd ZdS )OFPFlowStatsOFP_FLOW_STATSr?   Nr  r   r   r  r	  r  r
  r  r  r   r&  r   r  r  r  r  r,  c                 0    | j         dz
  | j        j         z
  S )Nra  r.  r  s    rJ   rP  zOFPFlowStats.<lambda>  s    #'B,:V rM   rv  c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPFlowStats.extract_padding  rU   rM   )rX   rY   rZ   rc   r   r   r  r   r   r   r   r  r   r  re   rT   rP   rM   rJ   rh  rh    sA       D:eT** =Q	:::fa((8NA..8OQ//:j!,,:na00:na00:gq" /@ /@ /@ A A
 8FA&&9Xq))9^Q//9\1--:g&&"?>2u/V/VX X X%YK*    rM   rh  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edg ed           gZdS )OFPMPReplyFlowOFPMP_REPLY_FLOWr#  r   r_   r   r?   Nr$  r   r  r7   r  r   r   
flow_statsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPMPReplyFlow.<lambda>  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r   rh  re   rP   rM   rJ   rm  rm    s        D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".?@@9VQ''"?<\/F/FH H HIKKKrM   rm  c                       e Zd ZdZdZdS )OFPMPRequestAggregateOFPMP_REQUEST_AGGREGATEr=   N)rX   rY   rZ   rc   r  rP   rM   rJ   rr  rr    s        $DGGGrM   rr  c                      e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edd	           edd	           edd	           edd	          gZdS )OFPMPReplyAggregateOFPMP_REPLY_AGGREGATEr#  r   r_   r   r?   Nr$  r   r  r=   r  r   r   r  r  
flow_countr   )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r   re   rP   rM   rJ   ru  ru    s        "D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".?@@9VQ''9^Q//9\1--8L!,,9VQ''
)KKKrM   ru  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	          gZdS )OFPMPRequestTableOFPMP_REQUEST_TABLEr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   rW  rP   rM   rJ   ry  ry    s         D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".ABB9VQ'')KKKrM   ry  c                       e Zd ZdZ edde           edd           edd           edd           edd          gZ	d Z
d	S )
OFPTableStatsOFP_TABLE_STATSr  r   r   active_countlookup_countmatched_countc                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPTableStats.extract_padding	  rU   rM   N)rX   rY   rZ   rc   r   r  r   r   r   re   rT   rP   rM   rJ   r|  r|    s|        D =Q	::<**8NA..9^Q//9_a00	2K    rM   r|  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edded           gZdS )OFPMPReplyTableOFPMP_REPLY_TABLEr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   table_statsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPMPReplyTable.<lambda>	  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r   r|  re   rP   rM   rJ   r  r  	          D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".?@@9VQ''"?=$/F/FH H HIKKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edde           edd	          g	ZdS )OFPMPRequestPortStatsOFPMP_REQUEST_PORT_STATSr#  r   r_   r   r?   Nr$  r   r  r  r   r   r   r,   r  rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rY  r   r   r   re   rP   rM   rJ   r  r  	  s        %D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".ABB9VQ''<	5+>>9UA&&(KKKrM   r  c                   ~   e Zd Zd ZdZ edde           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          gZ
dS )OFPPortStatsc                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPPortStats.extract_padding"	  rU   rM   OFP_PORT_STATSr   r   r  
rx_packets
tx_packetsrx_bytestx_bytes
rx_dropped
tx_dropped	rx_errors	tx_errorsrx_frame_errrx_over_err
rx_crc_err
collisionsr  r	  N)rX   rY   rZ   rT   rc   r   r   r   r   r   re   rP   rM   rJ   r  r  !	  s         D<	1k::9UA&&9\1--9\1--9Z++9Z++9\1--9\1--9[!,,9[!,,9^Q//9]A..9\1--9\1--8NA..8OQ//1KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edded           gZdS )OFPMPReplyPortStatsOFPMP_REPLY_PORT_STATSr#  r   r_   r   r?   Nr$  r   r  r  r   r   
port_statsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPMPReplyPortStats.<lambda>A	  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r   r  re   rP   rM   rJ   r  r  7	  s        #D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".?@@9VQ''"?<|/F/FH H HIKKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edde           edde          g	ZdS )OFPMPRequestQueueOFPMP_REQUEST_QUEUEr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   r   r,   r8  r)   )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rY  r   r   r   r9  re   rP   rM   rJ   r  r  D	  s         D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".ABB9VQ''<	5+>><
E9==?KKKrM   r  c            
           e Zd ZdZ edde           edde           edd           edd           edd           edd           ed	d          gZ	d
 Z
dS )OFPQueueStatsOFP_QUEUE_STATSr   r   r8  r  r  r  r  r	  c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPQueueStats.extract_padding[	  rU   rM   N)rX   rY   rZ   rc   r   r   r9  r   r   re   rT   rP   rM   rJ   r  r  Q	  s        D<	1k::<
Ay999Z++9\1--9[!,,8NA..8OQ//1K    rM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edded           gZdS )OFPMPReplyQueueOFPMP_REPLY_QUEUEr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   queue_statsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPMPReplyQueue.<lambda>i	  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r   r  re   rP   rM   rJ   r  r  _	  r  rM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edde           edd	          g	ZdS )OFPMPRequestGroupOFPMP_REQUEST_GROUPr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   r<  r,   r   )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rY  r   r   r=  re   rP   rM   rJ   r  r  l	           D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".ABB9VQ''<
E9==9VQ'')KKKrM   r  c                   H    e Zd ZdZ edd           edd          gZd ZdS )OFPBucketStatsOFP_BUCKET_STATSr  r   r  c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPBucketStats.extract_padding~	  rU   rM   NrX   rY   rZ   rc   r   re   rT   rP   rM   rJ   r  r  y	  sM        D9^Q//9\1--/K    rM   r  c                      e Zd ZdZ edd           edd           edde           edd           edd           e	d	d           e	d
d           edd           edd           e
dded           g
Zd ZdS )OFPGroupStatsOFP_GROUP_STATSr?   Nr   r   r<  	ref_countr   r  r  r  r	  bucket_statsc                     | j         dz
  S Nr[  r  r  s    rJ   rP  zOFPGroupStats.<lambda>	  r  rM   rv  c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPGroupStats.extract_padding	  rU   rM   )rX   rY   rZ   rc   r   r   r   r=  r   r   r   r  re   rT   rP   rM   rJ   r  r  	  s        D:eT**;vq))<
Ay998K++8FA&&9^Q//9\1--8NA..8OQ//"?>4/F/FH H H
IK    rM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edg ed           gZdS )OFPMPReplyGroupOFPMP_REPLY_GROUPr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   group_statsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPMPReplyGroup.<lambda>	  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r   r  re   rP   rM   rJ   r  r  	          D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".?@@9VQ''"?="m/F/FH H HIKKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	          gZdS )OFPMPRequestGroupDescOFPMP_REQUEST_GROUP_DESCr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   rW  rP   rM   rJ   r  r  	  s        %D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".ABB9VQ'')KKKrM   r  c            
           e Zd ZdZ edd           edddddd	d
           edd           edde           e	dde
d           gZd ZdS )OFPGroupDescOFP_GROUP_DESCr?   Nr_   r   r5  r6  r7  r8  r  r  r<  r9  c                     | j         dz
  S r  r  r  s    rJ   rP  zOFPGroupDesc.<lambda>	  r'  rM   rv  c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPGroupDesc.extract_padding	  rU   rM   )rX   rY   rZ   rc   r   r   r   r   r=  r   r  re   rT   rP   rM   rJ   r  r  	  s        D:eT** =0>0@0:-< -< = = :eQ''<
Ay99"?9dI/F/FH H HIK    rM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edg ed           gZdS )OFPMPReplyGroupDescOFPMP_REPLY_GROUP_DESCr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   group_descsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPMPReplyGroupDesc.<lambda>	  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r   r  re   rP   rM   rJ   r  r  	  s        #D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".?@@9VQ''"?="l/F/FH H HIKKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	          gZdS )OFPMPRequestGroupFeaturesOFPMP_REQUEST_GROUP_FEATURESr#  r   r_   r   r?   Nr$  r   r  r`   r  r   r   rW  rP   rM   rJ   r  r  	  s        )D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".ABB9VQ'')KKKrM   r  c                     g | ]
}|d k    |S )r  rP   )r  vs     rJ   
<listcomp>r  	  s-     8 8 8"666 666rM   c                      e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edd	dg d           edd	dg d           edd	           edd	           edd	           edd	           edd	de           edd	de           edd	de           edd	de          gZdS )OFPMPReplyGroupFeaturesOFPMP_REPLY_GROUP_FEATURESr#  r   r_   r   r?   Nr$  r   r  r`   r  r   r   typesrb   )r)   SELECTINDIRECTFFr  )SELECT_WEIGHTSELECT_LIVENESSCHAININGCHAINING_CHECKSmax_group_allmax_group_selectmax_group_indirectmax_group_ffactions_allactions_selectactions_indirect
actions_ff)rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   ofp_action_types_flagsre   rP   rM   rJ   r  r  	  sq       'D =D+>> =X66:eT**8E1%%!>)Q0CDD:gq".?@@9VQ'':gq" /5 /5 /5 6 6 :na 6I 6I 6I J J 8OQ//8.2280!448NA..:mQ4JKK:.27MNN:0!R9OPP:lAr3IJJ/LKKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edde           edd	          g	ZdS )OFPMPRequestMeterOFPMP_REQUEST_METERr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   r  r)   r   rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rY  r   r   r  re   rP   rM   rJ   r  r  	  r  rM   r  c                   H    e Zd ZdZ edd           edd          gZd ZdS )OFPMeterBandStatsOFP_METER_BAND_STATSpacket_band_countr   byte_band_countc                 
    d|fS rO   rP   rQ   s     rJ   rT   z!OFPMeterBandStats.extract_padding
  rU   rM   Nr  rP   rM   rJ   r  r  
  sO        !D90!449.224K    rM   r  c                       e Zd ZdZ edde           edd           eddd           ed	d           e	d
d           e	dd           edd           edd           e
dded           g	Zd Zd ZdS )OFPMeterStatsr  r  r7   r?   Nr  r   r_  rw  packet_in_countbyte_in_countr  r	  
band_statsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPMeterStats.<lambda>
  r  rM   rv  c                     | j         Jt          |          t          |          z   }|d d         t          j        d|          z   |dd          z   }||z   S r  r  r  s       rJ   r  zOFPMeterStats.post_build
  sT    8!ffs3xx'G"1"D'222QqrrU:A3wrM   c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPMeterStats.extract_padding
  rU   rM   )rX   rY   rZ   rc   r   r  r   r   r   r   r   r  re   r  rT   rP   rM   rJ   r  r  

  s        D<
Ay99:eT**9UAr**8L!,,9.229_a008NA..8OQ//"?<7H/F/FH H H	IK      rM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edg ed           gZdS )OFPMPReplyMeterOFPMP_REPLY_METERr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   meter_statsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPMPReplyMeter.<lambda>+
  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r   r  re   rP   rM   rJ   r  r  !
  r  rM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edde           edd	          g	ZdS )OFPMPRequestMeterConfigOFPMP_REQUEST_METER_CONFIGr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   r  r)   r   r  rP   rM   rJ   r  r  .
  s        'D =D+>> =X66:eT**8E1%%!>)R1DEE:gq".ABB9VQ''<
E9==9VQ'')KKKrM   r  c            	           e Zd ZdZ edd           edddg d           edd	e           ed
g e	d           gZ
d ZdS )OFPMeterConfigOFP_METER_CONFIGr?   Nr  r   r   KBPSPKTPSBURSTSTATSr  r7   bandsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPMeterConfig.<lambda>D
  r  rM   rv  c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPMeterConfig.extract_paddingF
  rU   rM   )rX   rY   rZ   rc   r   r   r   r  r   r  re   rT   rP   rM   rJ   r  r  ;
  s        D:eT**:gq" /8 /8 /8 9 9  <
Ay99"?7B/E/EG G GHK    rM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edg ed           gZdS )OFPMPReplyMeterConfigOFPMP_REPLY_METER_CONFIGr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   meter_configsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPMPReplyMeterConfig.<lambda>T
  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r   r  re   rP   rM   rJ   r  r  J
  s        %D =D+>> =X66:eT**8E1%%!>)R1DEE:gq".?@@9VQ''"??B/F/FH H HIKKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	          gZdS )OFPMPRequestMeterFeaturesOFPMP_REQUEST_METER_FEATURESr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   rW  rP   rM   rJ   r  r  W
  s        )D =D+>> =X66:eT**8E1%%!>)R1DEE:gq".ABB9VQ'')KKKrM   r  c                   N   e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edd	           edd	dg d           edd	dg d           edd	           edd	           edd	          gZdS )OFPMPReplyMeterFeaturesOFPMP_REPLY_METER_FEATURESr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   	max_meter
band_typesrb   )DROPDSCP_REMARKEXPERIMENTERr  )KPBSr
  r  r  	max_bands	max_colorr   )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r	   r   re   rP   rM   rJ   r  r  b
  s       'D =D+>> =X66:eT**8E1%%!>)R1DEE:gq".?@@9VQ''8K++:lAr 4D 4D 4D E E :na 6? 6? 6? @ @ 9[!,,9[!,,;vq))#+KKKrM   r  c                   6    e Zd ZdZedd            Zd Zd ZdS )OFPTFPTz0Dummy OpenFlow3 Table Features Properties HeaderNc                     |rVt          |          dk    rCt          j        d|d d                   d         }t                              |t
                    S t
          S r<   )r?   r@   rA   ofp_table_features_prop_clsrC   r   rD   s        rJ   rK   zOFPTFPT.dispatch_hook~
  sQ     	;CIINNdD!H--a0A.221c:::
rM   c                     | j         }|]t          |          t          |          z   }|d d         t          j        d|          z   |dd          z   }d|dz  z
  dz  }|d|z  z  }||z   S r  r  r  s        rJ   r  zOFPTFPT.post_build
  r  rM   c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPTFPT.extract_padding
  rU   rM   rV   )rX   rY   rZ   rc   r[   rK   r  rT   rP   rM   rJ   r$  r$  {
  sU        =D   [      rM   r$  OFPTFPT_INSTRUCTIONSOFPTFPT_INSTRUCTIONS_MISSOFPTFPT_NEXT_TABLESOFPTFPT_NEXT_TABLES_MISSOFPTFPT_WRITE_ACTIONSOFPTFPT_WRITE_ACTIONS_MISSOFPTFPT_APPLY_ACTIONSOFPTFPT_APPLY_ACTIONS_MISSOFPTFPT_MATCHOFPTFPT_WILDCARDSOFPTFPT_WRITE_SETFIELDOFPTFPT_WRITE_SETFIELD_MISSOFPTFPT_APPLY_SETFIELDOFPTFPT_APPLY_SETFIELD_MISS  OFPTFPT_EXPERIMENTEROFPTFPT_EXPERIMENTER_MISSc                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTInstructionsr)  r_   r   r?   Ninstruction_idsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTFPTInstructions.<lambda>
  r  rM   rv  rX   rY   rZ   rc   r   r   r  re   rP   rM   rJ   r;  r;  
  s]        !D:fa((:eT**"?#4b'/E/EG G GHKKKrM   r;  c                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTInstructionsMissr*  r_   r7   r?   Nr<  c                     | j         dz
  S r  r  r  s    rJ   rP  z OFPTFPTInstructionsMiss.<lambda>
  r  rM   rv  r>  rP   rM   rJ   r@  r@  
  s]        &D:fa((:eT**"?#4b'/E/EG G GHKKKrM   r@  c                   4    e Zd ZdZ edde          gZd ZdS )
OFPTableIDOFP_TABLE_IDr  r   c                 
    d|fS rO   rP   rQ   s     rJ   rT   zOFPTableID.extract_padding
  rU   rM   N)rX   rY   rZ   rc   r   r  re   rT   rP   rM   rJ   rC  rC  
  s>        D =Q	::;K    rM   rC  c                   `    e Zd ZdZ edd           edd           edded           gZdS )	OFPTFPTNextTablesr+  r_   r=   r?   Nnext_table_idsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTFPTNextTables.<lambda>
  r  rM   rv  rX   rY   rZ   rc   r   r   rC  re   rP   rM   rJ   rG  rG  
  s]         D:fa((:eT**"?#3T:/E/EG G GHKKKrM   rG  c                   `    e Zd ZdZ edd           edd           edded           gZdS )	OFPTFPTNextTablesMissr,  r_   r   r?   NrH  c                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTFPTNextTablesMiss.<lambda>
  r  rM   rv  rJ  rP   rM   rJ   rL  rL  
  s]        %D:fa((:eT**"?#3T:/E/EG G GHKKKrM   rL  c                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTWriteActionsr-  r_   r   r?   N
action_idsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTFPTWriteActions.<lambda>
  r  rM   rv  rX   rY   rZ   rc   r   r   rP  re   rP   rM   rJ   rO  rO  
  \        "D:fa((:eT**"?<W/E/EG G GHKKKrM   rO  c                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTWriteActionsMissr.  r_   r   r?   NrP  c                     | j         dz
  S r  r  r  s    rJ   rP  z OFPTFPTWriteActionsMiss.<lambda>
  r  rM   rv  rR  rP   rM   rJ   rU  rU  
  \        'D:fa((:eT**"?<W/E/EG G GHKKKrM   rU  c                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTApplyActionsr/  r_   r   r?   NrP  c                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTFPTApplyActions.<lambda>
  r  rM   rv  rR  rP   rM   rJ   rY  rY  
  rS  rM   rY  c                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTApplyActionsMissr0  r_   r   r?   NrP  c                     | j         dz
  S r  r  r  s    rJ   rP  z OFPTFPTApplyActionsMiss.<lambda>
  r  rM   rv  rR  rP   rM   rJ   r\  r\  
  rW  rM   r\  c                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTMatchr1  r_   r`   r?   Noxm_idsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTFPTMatch.<lambda>
  r  rM   rv  rX   rY   rZ   rc   r   r   r  re   rP   rM   rJ   r_  r_  
  s\        D:fa((:eT**"?9b%/E/EG G GHKKKrM   r_  c                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTWildcardsr2  r_   r   r?   Nr`  c                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTFPTWildcards.<lambda>
  r  rM   rv  rb  rP   rM   rJ   rd  rd  
  s\        D:fb)):eT**"?9b%/E/EG G GHKKKrM   rd  c                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTWriteSetFieldr3  r_   r   r?   Nr`  c                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTFPTWriteSetField.<lambda>  r  rM   rv  rb  rP   rM   rJ   rg  rg  
  \        #D:fb)):eT**"?9b%/E/EG G GHKKKrM   rg  c                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTWriteSetFieldMissr4  r_   r   r?   Nr`  c                     | j         dz
  S r  r  r  s    rJ   rP  z!OFPTFPTWriteSetFieldMiss.<lambda>
  r  rM   rv  rb  rP   rM   rJ   rk  rk    \        (D:fb)):eT**"?9b%/E/EG G GHKKKrM   rk  c                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTApplySetFieldr5  r_   r   r?   Nr`  c                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTFPTApplySetField.<lambda>  r  rM   rv  rb  rP   rM   rJ   ro  ro    ri  rM   ro  c                   `    e Zd ZdZ edd           edd           edg ed           gZdS )	OFPTFPTApplySetFieldMissr6  r_   r   r?   Nr`  c                     | j         dz
  S r  r  r  s    rJ   rP  z!OFPTFPTApplySetFieldMiss.<lambda>  r  rM   rv  rb  rP   rM   rJ   rr  rr    rm  rM   rr  c            
           e Zd ZdZ edd           edd           edd           edd           ed	ded
           gZdS )OFPTFPTExperimenterr8  r_   r7  r?   NrN  r   r  experimenter_datac                     | j         dz
  S Nr   r  r  s    rJ   rP  zOFPTFPTExperimenter.<lambda>$  r  rM   rv  	rX   rY   rZ   rc   r   r   r   r   re   rP   rM   rJ   ru  ru    s{        !D:fe,,:eT**8NA..8J**!>"5tS.F.FH H H	IKKKrM   ru  c            
           e Zd ZdZ edd           edd           edd           edd           ed	ded
           gZdS )OFPTFPTExperimenterMissr9  r_   r6   r?   NrN  r   r  rv  c                     | j         dz
  S rx  r  r  s    rJ   rP  z OFPTFPTExperimenterMiss.<lambda>.  r  rM   rv  ry  rP   rM   rJ   r{  r{  '  s{        &D:fe,,:eT**8NA..8J**!>"5tS.F.FH H H	IKKKrM   r{  c                       e Zd ZdZ edd           edde           eddd           edd	d
           e	dd           e	dd           e
ddddd           edd           edg ed           g	Zd ZdS )OFPTableFeaturesOFP_TABLE_FEATURESr?   Nr  r   r  r[  
table_namer   rb   metadata_matchmetadata_writer   OFPTC_NO_MASKrB  )r   r   max_entriesr  c                     | j         dz
  S )Nrh  r  r  s    rJ   rP  zOFPTableFeatures.<lambda>O  r  rM   rv  c                 
    d|fS rO   rP   rQ   s     rJ   rT   z OFPTableFeatures.extract_paddingQ  rU   rM   )rX   rY   rZ   rc   r   r   r  r   r   r   r   r   r   r$  re   rT   rP   rM   rJ   r~  r~  C  s        D:eT** =Q	::9UAr**##L"b999-q119-q11<!1H.J .J K K8M1--"?<W/F/FH H H
IK    rM   r~  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edg ed           gZdS )OFPMPRequestTableFeaturesOFPMP_REQUEST_TABLE_FEATURESr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   table_featuresc                     | j         dz
  S r  r  r  s    rJ   rP  z"OFPMPRequestTableFeatures.<lambda>_  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rY  r   r   r~  re   rP   rM   rJ   r  r  U  s        )D =D+>> =X66:eT**8E1%%!>)R1DEE:gq".ABB9VQ''"?#3R9I/F/FH H HIKKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edg ed           gZdS )OFPMPReplyTableFeaturesOFPMP_REPLY_TABLE_FEATURESr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   r  c                     | j         dz
  S r  r  r  s    rJ   rP  z OFPMPReplyTableFeatures.<lambda>l  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r   r~  re   rP   rM   rJ   r  r  b  s        'D =D+>> =X66:eT**8E1%%!>)R1DEE:gq".?@@9VQ''"?#3R9I/F/FH H HIKKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edd	e           edd	          g	ZdS )OFPMPRequestPortDescOFPMP_REQUEST_PORT_DESCr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   r   r  r  rP   rM   rJ   r  r  r  s        $D =D+>> =X66:eT**8E1%%!>)R1DEE:gq".ABB9VQ''<	1k::9UA&&(KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edded           gZdS )OFPMPReplyPortDescOFPMP_REPLY_PORT_DESCr#  r   r_   r   r?   Nr$  r   r  r   r  r   r   portsc                     | j         dz
  S r  r  r  s    rJ   rP  zOFPMPReplyPortDesc.<lambda>  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   r   r   re   rP   rM   rJ   r  r    s        "D =D+>> =X66:eT**8E1%%!>)R1DEE:gq".?@@9VQ''"?7D'/F/FH H HIKKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edd	           edd	          g	ZdS )OFPMPRequestExperimenterOFPST_REQUEST_EXPERIMENTERr#  r   r_   r   r?   Nr$  r   r  r6   r  r   r   rN  r  rW  rP   rM   rJ   r  r    s        'D =D+>> =X66:eT**8E1%%!>)U4GHH:gq".ABB9VQ''8NA..8J**,KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	de           edd	           edd	           edd	          g	ZdS )OFPMPReplyExperimenterOFPST_REPLY_EXPERIMENTERr#  r   r_   r   r?   Nr$  r   r  r6   r  r   r   rN  r  )rX   rY   rZ   rc   r   r(  r)  r   r   r   rX  r   rc  r   re   rP   rM   rJ   r  r    s        %D =D+>> =X66:eT**8E1%%!>)U4GHH:gq".?@@9VQ''8NA..8J**,KKKrM   r  c                   r    e Zd ZdZ edde           edde           edd           edd	          gZ	dS )
OFPTBarrierRequestr  r#  r   r_   r   r?   Nr$  r   r  rP   rM   rJ   r  r    sZ        !D =D+>> =X66:eT**8E1%%'KKKrM   r  c                   r    e Zd ZdZ edde           edde           edd           edd	          gZ	dS )
OFPTBarrierReplyr  r#  r   r_   r   r?   Nr$  r   r  rP   rM   rJ   r  r    sZ        D =D+>> =X66:eT**8E1%%'KKKrM   r  c            	           e Zd ZdZ edde           edde           edd           edd	           e	d
de
           edd	          gZdS )OFPTQueueGetConfigRequestr  r#  r   r_   r   r?   Nr$  r   r   r,   r  )rX   rY   rZ   rc   r   r(  r)  r   r   r   r   r   re   rP   rM   rJ   r  r    sz        *D =D+>> =X66:eT**8E1%%<	5+>>9UA&&(KKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
d	e
           edd	           edg ed           gZdS )OFPTQueueGetConfigReplyr  r#  r   r_   r   r?   Nr$  r   r  r  queuesc                     | j         dz
  S r  r  r  s    rJ   rP  z OFPTQueueGetConfigReply.<lambda>  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   r   r   r   r  re   rP   rM   rJ   r  r    s        (D =D+>> =X66:eT**8E1%%<;779UA&&"?8R/F/FH H HIKKKrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
d	ddddd           e
dd	           edd	          gZdS )OFPTRoleRequestr  r#  r   r_   r   r?   Nr$  r   roleOFPCR_ROLE_NOCHANGEOFPCR_ROLE_EQUALOFPCR_ROLE_MASTEROFPCR_ROLE_SLAVEr  r  generation_id)rX   rY   rZ   rc   r   r(  r)  r   r   r   r   r   re   rP   rM   rJ   r  r    s        D =D+>> =X66:eT**8E1%%</D/A/B/A,C ,C D D 9UA&&9_a00	2KKKrM   r  c                       e Zd ZdZdZdS )OFPTRoleReplyr  r   NrX   rY   rZ   rc   r_   rP   rM   rJ   r  r    s        DDDDrM   r  c                   r    e Zd ZdZ edde           edde           edd           edd	          gZ	d
S )OFPTGetAsyncRequestr  r#  r   r_   r   r?   r`   r$  r   Nr  rP   rM   rJ   r  r    sZ        #D =D+>> =X66:eQ''8E1%%'KKKrM   r  )NO_MATCHACTIONINVALID_TTL)ADDDELETEMODIFY)IDLE_TIMEOUTHARD_TIMEOUTr  GROUP_DELETEc                      e Zd ZdZ edde           edde           edd           edd	           e	d
d	de
           e	dd	de
           e	dd	de           e	dd	de           e	dd	de           e	dd	de          g
ZdS )OFPTGetAsyncReplyr  r#  r   r_   r   r?   rb   r$  r   packet_in_mask_masterpacket_in_mask_slaveport_status_mask_masterport_status_mask_slaveflow_removed_mask_masterflow_removed_mask_slaveN)rX   rY   rZ   rc   r   r(  r)  r   r   r   ofp_packet_in_reasonofp_port_reasonofp_flow_removed_reasonre   rP   rM   rJ   r  r    s        !D =D+>> =X66:eR((8E1%%:5q">RSS:4a=QRR:7BPP:62OO:8!RAXYY:7B@WXX	ZKKKrM   r  c                       e Zd ZdZdZdS )OFPTSetAsyncr  r   Nr  rP   rM   rJ   r  r  (  s        DDDDrM   r  c                       e Zd ZdZ edde           edde           edd           edd	           e	d
d	dddd           e
dd	dg d           edde           edg ed           gZdS )OFPTMeterModr   r#  r   r_   r   r?   Nr$  r   r  	OFPMC_ADDOFPMC_MODIFYOFPMC_DELETEr  r  r   r  r  r7   r  c                     | j         dz
  S r  r  r  s    rJ   rP  zOFPTMeterMod.<lambda><  r  rM   rv  )rX   rY   rZ   rc   r   r(  r)  r   r   r   r   r   r  r   r  re   rP   rM   rJ   r  r  -  s        D =D+>> =X66:eT**8E1%%!>%0>0>-@ -@ A A :gq" /8 /8 /8 9 9  <
Ay99"?7B/F/FH H HIKKKrM   r  )
r   r   r   r   r   r   r   r   r   r   (  __doc__r~  r@   scapy.compatr   r   scapy.configr   scapy.fieldsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scapy.layers.l2r   scapy.packetr   r   r   scapy.contrib.openflowr    r!   r"   r#   r$   r   r=  r  r9  r  r   r  rd   r:   r^   rB   r   r   r   r   rD  rE  rS  rH  rF  rK  itemsrI  rE   rT  rU  rR  r   OFBInPortIDOFBInPortHMOFBInPortHMIDr   OFBInPhyPortIDOFBInPhyPortHMOFBInPhyPortHMIDr   OFBMetadataIDOFBMetadataHMOFBMetadataHMIDr   OFBEthDstIDOFBEthDstHMOFBEthDstHMIDr   OFBEthSrcIDOFBEthSrcHMOFBEthSrcHMIDr   OFBEthTypeIDOFBEthTypeHMOFBEthTypeHMIDr   OFBVLANVIDIDOFBVLANVIDHMOFBVLANVIDHMIDr   OFBVLANPCPIDOFBVLANPCPHMOFBVLANPCPHMIDr   OFBIPDSCPIDOFBIPDSCPHMOFBIPDSCPHMIDr   
OFBIPECNID
OFBIPECNHMOFBIPECNHMIDr   OFBIPProtoIDOFBIPProtoHMOFBIPProtoHMIDr   OFBIPv4SrcIDOFBIPv4SrcHMOFBIPv4SrcHMIDr   OFBIPv4DstIDOFBIPv4DstHMOFBIPv4DstHMIDr   OFBTCPSrcIDOFBTCPSrcHMOFBTCPSrcHMIDr  OFBTCPDstIDOFBTCPDstHMOFBTCPDstHMIDr  OFBUDPSrcIDOFBUDPSrcHMOFBUDPSrcHMIDr  OFBUDPDstIDOFBUDPDstHMOFBUDPDstHMIDr  OFBSCTPSrcIDOFBSCTPSrcHMOFBSCTPSrcHMIDr
  OFBSCTPDstIDOFBSCTPDstHMOFBSCTPDstHMIDr  OFBICMPv4TypeIDOFBICMPv4TypeHMOFBICMPv4TypeHMIDr  OFBICMPv4CodeIDOFBICMPv4CodeHMOFBICMPv4CodeHMIDr  
OFBARPOPID
OFBARPOPHMOFBARPOPHMIDr  OFBARPSPAIDOFBARPSPAHMOFBARPSPAHMIDr  OFBARPTPAIDOFBARPTPAHMOFBARPTPAHMIDr  OFBARPSHAIDOFBARPSHAHMOFBARPSHAHMIDr  OFBARPTHAIDOFBARPTHAHMOFBARPTHAHMIDr  OFBIPv6SrcIDOFBIPv6SrcHMOFBIPv6SrcHMIDr  OFBIPv6DstIDOFBIPv6DstHMOFBIPv6DstHMIDr  OFBIPv6FLabelIDOFBIPv6FLabelHMOFBIPv6FLabelHMIDr   OFBICMPv6TypeIDOFBICMPv6TypeHMOFBICMPv6TypeHMIDr"  OFBICMPv6CodeIDOFBICMPv6CodeHMOFBICMPv6CodeHMIDr$  OFBIPv6NDTargetIDOFBIPv6NDTargetHMOFBIPv6NDTargetHMIDr&  OFBIPv6NDSLLIDOFBIPv6NDSLLHMOFBIPv6NDSLLHMIDr(  OFBIPv6NDTLLIDOFBIPv6NDTLLHMOFBIPv6NDTLLHMIDr*  OFBMPLSLabelIDOFBMPLSLabelHMOFBMPLSLabelHMIDr,  OFBMPLSTCIDOFBMPLSTCHMOFBMPLSTCHMIDr.  OFBMPLSBoSIDOFBMPLSBoSHMOFBMPLSBoSHMIDr0  OFBPBBISIDIDOFBPBBISIDHMOFBPBBISIDHMIDr2  OFBTunnelIDIDOFBTunnelIDHMOFBTunnelIDHMIDr4  OFBIPv6ExtHdrIDOFBIPv6ExtHdrHMOFBIPv6ExtHdrHMIDr  rs  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r"  r%  r'  r*  r,  r0  r2  r4  r7  r;  r?  rB  rD  rI  rK  rM  r  rP  rU  rX  r[  r]  r`  rb  rd  rf  rh  rj  rl  ro  rq  rt  rw  ry  r{  r}  r  r  r  r  r  r  r  r  r  r  r  rR  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ofp_meter_band_typesr  r  r  r  r  r(  r)  r"  rA  r:  rC  rS  re  rp  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r0  r<  rA  rX  rY  rc  rU  r[  re  rh  rm  rr  ru  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  valuesr  r  r  r  r  r  r  r  r  r  r  r$  ofp_table_features_prop_typesr;  r@  rC  rG  rL  rO  rU  rY  r\  r_  rd  rg  rk  ro  rr  ru  r{  r&  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rP   rM   rJ   <module>rT     s<      " ! ! ! ! ! ! !      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 " ! ! ! ! ! - - - - - - - - - -. . . . . . . . . . . . . . %"#" '" " "    	  	 	#%   	
 +&
{# 12 	 	 	 	 	[ 	 	 	
< 
< 
< 
< 
<+ 
< 
< 
< ,- 
# # #  # # # $    f   , %$202 2
'(M '(%'(N'( M'( M	'(
 N'( N'( N'( M'( L'( ^'( ^'( ^'( ]'( ]'( ]'(  ]!'( '(" ^#'($ ^%'(& &''(( &)'(* \+'(, ]-'(. ]/'(0 ]1'(2 ]3'(4 ^5'(6 ^7'(8 &9'(: &;'(< &='(> )?'(@ &A'(B &C'( '(D &"##$&O'( '( '(R'B!000 'B777'B333'B 000'B 000	'B
 222'B 222'B 222'B 000'B ...'B 333'B 333'B 333'B 111'B 111'B 111'B  111!'B 'B" 333#'B$ 333%'B& 999''B( 999)'B* ///+'B, 111-'B. 111/'B0 1111'B2 1113'B4 4445'B6 4447'B8 9999'B: 999;'B< 999='B> ????'B@ 555A'BB 555C'B 'BD 877111333333555@@@O'B 'B 'BT  	 L L L( ""$$ ' 'FAsq1uc"""q1uqy#&&&&
 $ $ $N O	oo!!   "" """?$$ o!!!!!/##O	oo!!O	oo!!_
     ""_
     ""_
     ""O	oo!!?_
_
  _
     ""_
     ""_
     ""O	oo!!O	oo!!O	oo!!O	oo!!_
     ""_
     ""!!!/##!/###O%% !!!/##!/###O%% ?_
_
  O	oo!!O	oo!!O	oo!!O	oo!!_
     ""_
     ""!!!/##!/###O%% !!!/##!/###O%% !!!/##!/###O%% !/###O%% #O%% %o''    "" """?$$    "" """?$$    "" """?$$ O	oo!!_
     ""_
     ""o!!!!!/##!!!/##!/###O%%  !rB<  !B< !B< ! B< ! B<	 !
 B< ! B< ! B7 ! B7 ! B8 ! B8 ! B9 ! B9 ! B7 ! B7 ! B< !  B<! !  !" B<# !$ B<% !& B<' !( B<) !* B<+ !, B<- !. B8/ !0 B81 !2 B93 !4 B95 !6 B97 !8 B<9 !: B<; !< B<= !> B<? !@ B<A !  !FL! L! L! L! L! L! L! L!^	 	 	 	 	F 	 	 	. . . . .v . . .8       0               >1A~ 1+1+1 )1 )	1
 )1 )1 )1 )1 )1 *1 ,1 +1 .1 +1  ,!1" ,#1$ *()()%**)('/;1 1 1 @	 	 	 	 	K 	 	 	, , , , ,% , , ,* * * * *e * * *+ + + + +e + + +( ( ( ( (U ( ( (, , , , ,E , , ,, , , , ,E , , ,, , , , ,E , , ,, , , , ,E , , ,+ + + + +E + + +* * * * *E * * ** * * * *E * * * . . . . . . . .+ + + + +U + + +( ( ( ( (e ( ( (( ( ( ( (U ( ( (+ + + + +e + + +( ( ( ( (e ( ( (* * * * *E * * *( ( ( ( (5 ( ( (* * * * *E * * ** * * * *5 * * *; ; ; ; ;E ; ; ;; ; ; ; ; ; ; ;+ + + + +E + + +( ( ( ( (E ( ( (    E   4* * * * *5 * * *( ( ( ( (% ( ( (0 0 0 0 0 0 0 0,![ ,_,_, ^, ]	,
 ], ], ], ], ], m, o, n, ', n,  o!," o#,$ $"#"# ###"!*;, , ,D	 	 	 	 	k 	 	 	) ) ) ) )G ) ) )) ) ) ) ) ) ) )) ) ) ) ) ) ) )) ) ) ) )w ) ) )) ) ) ) )g ) ) )) ) ) ) )g ) ) )) ) ) ) )g ) ) )) ) ) ) )g ) ) )) ) ) ) )g ) ) )) ) ) ) )g ) ) )) ) ) ) )g ) ) )) ) ) ) )' ) ) )) ) ) ) )w ) ) )) ) ) ) ) ) ) )) ) ) ) )w ) ) )) ) ) ) ) ) ) )) ) ) ) ) ) ) )) ) ) ) )g ) ) )) ) ) ) )W ) ) )) ) ) ) )g ) ) )) ) ) ) )W ) ) )) ) ) ) )g ) ) )) ) ) ) )7 ) ) )) ) ) ) )g ) ) )) ) ) ) )g ) ) )) ) ) ) )g ) ) )) ) ) ) )W ) ) )) ) ) ) )G ) ) ), , , , ,' , , ,1Q 1)1)1 (1 	1
 1 1 1 1 1 1 *1 )1 ,1 )1  *!1" *#1$ )'('(%((('&/;1 1 1 F /2111) 46 6 	 	 	 	 	K 	 	 	+ + + + +U + + +2 2 2 2 2 2 2 2H H H H H H H HH H H H H H H H( ( ( ( ( ( ( (; ; ; ; ; ; ; ;0 0 0 0 0 0 0 0 ),+++$/1 1 	 	 	 	 	k 	 	 	) ) ) ) )w ) ) )) ) ) ) )7 ) ) )) ) ) ) )' ) ) )) ) ) ) )' ) ) )) ) ) ) )' ) ) )) ) ) ) )7 ) ) ), , , , ,' , , , .1000)!46 6         "  ,/1 1 	 	 	 	 	K 	 	 	( ( ( ( ( ( ( (- - - - -5 - - - ')+ +     V   , )/46 6 
	 	 	 	 	[ 	 	 	( ( ( ( ( ( ( (+ + + + +v + + +0 0 0 0 0 0 0 0 $)+- -  $####	% %"A| "|"""  " "	"
 &" $" (" &"  "  " #" "" !" "  "  !"" !(&&$/-#!(&  ;" " "@I I I I I I I I *(',&,-,-,21.3-/ /"	3 	3 	3 	3 	3{ 	3 	3 	33 3 3 3 3k 3 3 303 3 3 3 3[ 3 3 343 3 3 3 3+ 3 3 3&3 3 3 3 3K 3 3 3,3 3 3 3 3 3 3 3$3 3 3 3 3+ 3 3 323 3 3 3 3 3 3 3
3 
3 
3 
3 
3+ 
3 
3 
3
3 
3 
3 
3 
3 
3 
3 
3
3 
3 
3 
3 
3k 
3 
3 
3
3 
3 
3 
3 
3[ 
3 
3 
33 3 3 3 3+ 3 3 3,3 3 3 3 3{ 3 3 3 	3 	3 	3 	3 	3 	3 	3 	3 %#"'!&'&'&,+(-)+ +&' ' ' ' 'k ' ' '' ' ' ' 'K ' ' ', , , , ,{ , , ,' ' ' ' '+ ' ' ', , , , , , , ,.' ' ' ' '; ' ' '
3 
3 
3 
3 
3 
3 
3 
3
5 
5 
5 
5 
5K 
5 
5 
53 3 3 3 3; 3 3 3$( ( ( ( (k ( ( (,
< 
< 
< 
< 
<[ 
< 
< 
<3 3 3 3 3K 3 3 3 y y y y y+ y y y@I I I I I; I I I&) ) ) ) )+ ) ) ) L L L L L; L L L  '&+','',0'/11,,. .   "l !N ( ( ( ( ({ ( ( (9 9 9 9 9[ 9 9 9 ( ( ( ( ({ ( ( (&    #   6
I 
I 
I 
I 
I[ 
I 
I 
I    ,   
) ) ) ) )+ ) ) )) ) ) ) ) ) ) )	 	 	 	 	F 	 	 	
I 
I 
I 
I 
Ik 
I 
I 
I
( 
( 
( 
( 
(K 
( 
( 
(1 1 1 1 16 1 1 1,
I 
I 
I 
I 
I+ 
I 
I 
I
? 
? 
? 
? 
? 
? 
? 
?    F   
I 
I 
I 
I 
Ik 
I 
I 
I
) 
) 
) 
) 
) 
) 
) 
)    V       $   $
I 
I 
I 
I 
Ik 
I 
I 
I) ) ) ) )K ) ) )    #    
I 
I 
I 
I 
I+ 
I 
I 
I) ) ) ) ) ) ) )8 8%5%<%<%>%> 8 8 8 L L L L Lk L L L8
) 
) 
) 
) 
) 
) 
) 
)           F   .
I 
I 
I 
I 
Ik 
I 
I 
I
) 
) 
) 
) 
)k 
) 
) 
)    %   
I 
I 
I 
I 
IK 
I 
I 
I) ) ) ) ) ) ) )+ + + + +k + + +2    f   0!E$: !E!"$?!E!"$9!E "#$>!E "#$;	!E
 "#$@!E "#$;!E "#$@!E "#O!E "$%8!E "$%=!E "$%B!E "$%=!E "$%B!E "'(>!E "'(C!E $H H H H H' H H HH H H H Hg H H H       H H H H H H H HH H H H HG H H HH H H H H' H H HH H H H Hg H H HH H H H H' H H HH H H H Hg H H HH H H H H7 H H HH H H H Hw H H HH H H H H7 H H HH H H H Hw H H HH H H H H7 H H HH H H H Hw H H HI I I I I' I I II I I I Ig I I I?q"5 ? "9? "3?  !"7?  !"5	?
  !"9?  !"5?  !"9?  !,?  "#3?  "#7?  "#;?  "#7?  "#;?  %&9?  %&=? $    '   $
I 
I 
I 
I 
I 
I 
I 
I
I 
I 
I 
I 
Ik 
I 
I 
I 
( 
( 
( 
( 
(; 
( 
( 
(
I 
I 
I 
I 
I 
I 
I 
I
, 
, 
, 
, 
,{ 
, 
, 
,
, 
, 
, 
, 
,[ 
, 
, 
, !1 0 5 1 5 1 1 5 9 1!8!:!:!5$<> >   -,1-1--15-4661"8: : &' ' ' ' ' ' ' '' ' ' ' '{ ' ' '( ( ( ( ( ( ( (	I 	I 	I 	I 	Ik 	I 	I 	I2 2 2 2 2k 2 2 2    O   
' ' ' ' '+ ' ' '' ' '   + + + Z Z Z Z Z Z Z Z    $   
I I I I I; I I I&Ay  } 	
 "   # ! }        !" #( # )'#!;  rM   