a
    kÄ#dnâ ã                )   @   sn  d Z ddlm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(  m)Z) dd	l*m+Z+m,Z,m-Z-m.Z.m/Z/ d
ddddddddœZ0ddddœZ1dddœZ2ddiZ3dddddœZ4ddiZ5ddiZ6ddiZ7G dd„ de+ƒZ8G dd „ d e+ƒZ9de9iZ:g d!¢Z;g d"¢Z<g d#¢Z=G d$d%„ d%e$ƒZ>d&d'd(d)d*œZ?d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSœ(Z@g dT¢g dU¢g dV¢g dW¢g dX¢g dY¢g dZ¢g d[¢g d\¢g d]¢g d^¢g d_¢g d`¢g da¢g db¢g dc¢g dd¢g de¢g df¢g dg¢g dh¢g di¢g dj¢g dk¢g dl¢g dm¢g dn¢g do¢g dp¢g dq¢g dr¢g ds¢g dt¢g du¢g dv¢g dw¢g dx¢g dy¢g dz¢g d{¢dSœ(ZAg d|¢ZBi ZCd}d~„ ZDeA E¡ D ]*\ZFZGeDdeF eGƒ eDdeF d eGƒ �q
i ZHi ZId€d�„ ZJeJƒ ZKeJƒ ZLeJƒ ZMeJƒ ZNeJƒ ZOeJƒ ZPeJƒ ZQeJƒ ZReJƒ ZSeJƒ ZTeJƒ ZUeJƒ ZVeJƒ ZWeJƒ ZXeJƒ ZYeJƒ ZZeJƒ Z[eJƒ Z\eJƒ Z]eJƒ Z^eJƒ Z_eJƒ Z`eJƒ ZaeJƒ ZbeJƒ ZceJƒ ZdeJƒ ZeeJƒ ZfeJƒ ZgeJƒ ZheJƒ ZieJƒ ZjeJƒ ZkeJƒ ZleJƒ ZmeJƒ ZneJƒ ZoeJƒ ZpeJƒ ZqeJƒ ZreJƒ ZseJƒ ZteJƒ ZueJƒ ZveJƒ ZweJƒ ZxeJƒ ZyeJƒ ZzeJƒ Z{eJƒ Z|eJƒ Z}eJƒ Z~eJƒ ZeJƒ Z€eJƒ Z�eJƒ Z‚eJƒ ZƒeJƒ Z„eJƒ Z…eJƒ Z†eJƒ Z‡eJƒ ZˆeJƒ Z‰eJƒ ZŠeJƒ Z‹eJƒ ZŒeJƒ Z�eJƒ ZŽeJƒ Z�eJƒ Z�eJƒ Z‘eJƒ Z’eJƒ Z“eJƒ Z”eJƒ Z•eJƒ Z–eJƒ Z—eJƒ Z˜eJƒ Z™eJƒ ZšeJƒ Z›eJƒ ZœeJƒ Z�eJƒ ZžeJƒ ZŸeJƒ Z eJƒ Z¡eJƒ Z¢eJƒ Z£eJƒ Z¤eJƒ Z¥eJƒ Z¦eJƒ Z§eJƒ Z¨eJƒ Z©eJƒ ZªeJƒ Z«eJƒ Z¬eJƒ Z­eJƒ Z®eJƒ Z¯eJƒ Z°eJƒ Z±eJƒ Z²eJƒ Z³eJƒ Z´eJƒ ZµeJƒ Z¶eJƒ Z·eJƒ Z¸eJƒ Z¹eJƒ ZºeJƒ Z»eJƒ Z¼eJƒ Z½eJƒ Z¾eJƒ Z¿eJƒ ZÀeJƒ ZÁeJƒ ZÂeJƒ ZÃeJƒ ZÄeJƒ ZÅeJƒ ZÆeJƒ ZÇeJƒ ZÈeJƒ ZÉeJƒ ZÊeJƒ ZËeJƒ ZÌeJƒ ZÍeJƒ ZÎeJƒ ZÏeJƒ ZÐeJƒ ZÑeJƒ ZÒeJƒ ZÓeJƒ ZÔeJƒ ZÕeJƒ ZÖeJƒ Z×eJƒ ZØeJƒ ZÙeJƒ ZÚeJƒ ZÛeJƒ ZÜeJƒ ZÝeJƒ ZÞeJƒ ZßeJƒ ZàeJƒ ZáeJƒ ZâeJƒ ZãeJƒ ZäeJƒ ZåeJƒ ZæeJƒ ZçeJƒ ZèeJƒ ZéeJƒ Zêd‚dƒgd„d…gd„d…gd„d…gd„d†gd„d…gd„d…gd‡dˆgd‡dˆgd‡d‰gd‡d‰gd‡dŠgd‡dŠgd‡dgd‡dgd„d‹gd„d‹gd„d‹gd„d‹gd„d‹gd„d†gd„d†gd„d†gdŒd�gdŒd�gd�dŽgd�dŽgd�d�gd„d�gd„d�gd„d�gd„d‘gd„d†gd’œ!ZëG d“d”„ d”eƒZìG d•d–„ d–e$ƒZíG d—d˜„ d˜e$ƒZîG d™dš„ dšeƒZïG d›dœ„ dœe.ƒZð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ºœZñG d»d¼„ d¼e+ƒZòG d½d¾„ d¾eòƒZóG d¿dÀ„ dÀeòƒZôG dÁdÂ„ dÂeòƒZõG dÃdÄ„ dÄeòƒZöG dÅdÆ„ dÆeòƒZ÷G dÇdÈ„ dÈeòƒZøG dÉdÊ„ dÊeòƒZùG dËdÌ„ dÌeòƒZúG dÍdÎ„ dÎeòƒZûG dÏdÐ„ dÐeòƒZüG dÑdÒ„ dÒeòƒZýG dÓdÔ„ dÔeòƒZþG dÕdÖ„ dÖeòƒZÿG d×dØ„ dØeòƒ�Z G dÙdÚ„ dÚeòƒ�ZG dÛdÜ„ dÜeòƒ�ZG dÝdÞ„ dÞeòƒ�ZG dßdà„ dàeòƒ�ZG dádâ„ dâeòƒ�ZG dãdä„ däeòƒ�ZG dådæ„ dæeòƒ�ZG dçdè„ dèeòƒ�ZG dédê„ dêeòƒ�Z	G dëdì„ dìeòƒ�Z
G dídî„ dîeòƒ�ZG dïdð„ dðeòƒ�ZG dñdò„ dòeòƒ�ZG dódô„ dôeòƒ�ZG dõdö„ döeòƒ�Zeóeôeõeöe÷eøeùeúeûeüeý�e �eeþeÿ�e�e�e�e�e�e�e�e	�e
�e�e�e�e�edºœ�ZG d÷dø„ døe+ƒ�ZG dùdú„ dú�eƒ�ZG dûdü„ dü�eƒ�ZG dýdþ„ dþ�eƒ�ZG dÿ�d „ �d �eƒ�ZG �d�d„ �d�eƒ�ZG �d�d„ �d�eƒ�ZG �d�d„ �d�eƒ�ZG �d�d„ �d�eƒ�ZG �d	�d
„ �d
�eƒ�ZG �d�d„ �d�eƒ�ZG �d�d„ �d�eƒ�ZG �d�d„ �d�eƒ�ZG �d�d„ �d�eƒ�ZG �d�d„ �d�eƒ�ZG �d�d„ �d�eƒ�Z G �d�d„ �d�eƒ�Z!G �d�d„ �d�eƒ�Z"G �d�d„ �d�eƒ�Z#G �d�d„ �d�eƒ�Z$G �d�d „ �d �eƒ�Z%G �d!�d"„ �d"�eƒ�Z&G �d#�d$„ �d$�eƒ�Z'G �d%�d&„ �d&�eƒ�Z(G �d'�d(„ �d(�eƒ�Z)G �d)�d*„ �d*�eƒ�Z*G �d+�d,„ �d,�eƒ�Z+G �d-�d.„ �d.�eƒ�Z,G �d/�d0„ �d0�eƒ�Z-G �d1�d2„ �d2�eƒ�Z.�e�e�e�e�e�e�e�e�e�e�e�e�e �e�e�e!�e"�e#�e$�e%�e&�e'�e(�e)�e*�e+�e,�e-�e.dºœ�Z/�d3�d4�d5�d6�d7�d8�d9�d:œ�Z0G �d;�d<„ �d<e+ƒ�Z1G �d=�d>„ �d>�e1ƒ�Z2G �d?�d@„ �d@�e1ƒ�Z3G �dA�dB„ �dB�e1ƒ�Z4G �dC�dD„ �dD�e1ƒ�Z5G �dE�dF„ �dF�e1ƒ�Z6G �dG�dH„ �dH�e1ƒ�Z7G �dI�dJ„ �dJ�e1ƒ�Z8�e2�e3�e4�e5�e6�e7�e8�d:œ�Z9G �dK�dL„ �dLe+ƒ�Z:G �dM�dN„ �dN�e:ƒ�Z;G �dO�dP„ �dP�e:ƒ�Z<G �dQ�dR„ �dR�e:ƒ�Z=G �dS�dT„ �dT�e:ƒ�Z>G �dU�dV„ �dV�e:ƒ�Z?G �dW�dX„ �dX�e:ƒ�Z@G �dY�dZ„ �dZ�e:ƒ�ZA�e;�e<�e=�e>�e?�e@�eA�d:œ�ZBG �d[�d\„ �d\e,ƒ�ZC�d]�d^�d_œ�ZDG �d`�da„ �dae+ƒ�ZEG �db�dc„ �dc�eEƒ�ZFG �dd�de„ �de�eEƒ�ZG�eF�eG�d_œ�ZHG �df�dg„ �dge$ƒ�ZI�dh�di�dj�dkœ�ZJG �dl�dm„ �dme+ƒ�ZKG �dn�do„ �do�eKƒ�ZLG �dp�dq„ �dq�eKƒ�ZMG �dr�ds„ �ds�eKƒ�ZN�eL�eM�eN�dtœ�ZO�du�dv�dw�dx�dy�dzœ�ZP�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™œ�ZQG �dš�d›„ �d›e+ƒ�ZR�dœ�d��dž�dŸ�d �d¡�d¢�d£�d¤�d¥�d¦�d§�d¨�d©�dª�d«œ�ZSG �d¬�d­„ �d­e+ƒ�ZTG �d®�d¯„ �d¯e+ƒ�ZUG �d°�d±„ �d±e+ƒ�ZVG �d²�d³„ �d³e+ƒ�ZWG �d´�dµ„ �dµe+ƒ�ZXG �d¶�d·„ �d·e+ƒ�ZYG �d¸�d¹„ �d¹e+ƒ�ZZG �dº�d»„ �d»e+ƒ�Z[G �d¼�d½„ �d½e+ƒ�Z\G �d¾�d¿„ �d¿e+ƒ�Z]G �dÀ�dÁ„ �dÁe+ƒ�Z^G �dÂ�dÃ„ �dÃe+ƒ�Z_G �dÄ�dÅ„ �dÅe+ƒ�Z`G �dÆ�dÇ„ �dÇe+ƒ�ZaG �dÈ�dÉ„ �dÉe+ƒ�Zb�eT�eU�eV�eW�eX�eY�eZ�e[�e\�e]�e^�e_�e`�ea�eb�d«œ�ZcG �dÊ�dË„ �dËe+ƒ�ZdG �dÌ�dÍ„ �dÍe+ƒ�ZeG �dÎ�dÏ„ �dÏe+ƒ�ZfG �dÐ�dÑ„ �dÑe+ƒ�ZgG �dÒ�dÓ„ �dÓe+ƒ�ZhG �dÔ�dÕ„ �dÕe+ƒ�ZiG �dÖ�d×„ �d×e+ƒ�ZjG �dØ�dÙ„ �dÙe+ƒ�ZkG �dÚ�dÛ„ �dÛe+ƒ�ZlG �dÜ�dÝ„ �dÝe+ƒ�ZmG �dÞ�dß„ �dße+ƒ�ZnG �dà�dá„ �dáe+ƒ�ZoG �dâ�dã„ �dãe+ƒ�ZpG �dä�då„ �dåe+ƒ�ZqG �dæ�dç„ �dçe+ƒ�ZrG �dè�dé„ �dée+ƒ�Zs�dê�dë�dì�dí�dî�dï�dð�dñ�dò�dó�dô�dõ�dö�d÷�dø�d«œ�Zt�dùg�Zu�dúg�ZvG �dû�dü„ �düe+ƒ�ZwG �dý�dþ„ �dþe+ƒ�ZxG �dÿ�d „ �d e+ƒ�ZyG �d�d„ �de,ƒ�ZzG �d�d„ �de+ƒ�Z{G �d�d„ �d�eyƒ�Z|G �d�d„ �de+ƒ�Z}G �d	�d
„ �d
e+ƒ�Z~G �d�d„ �de$ƒ�ZG �d�d„ �de+ƒ�Z€G �d�d„ �de+ƒ�Z�G �d�d„ �de$ƒ�Z‚G �d�d„ �de+ƒ�ZƒG �d�d„ �de+ƒ�Z„G �d�d„ �de$ƒ�Z…G �d�d„ �de+ƒ�Z†G �d�d„ �de+ƒ�Z‡G �d�d„ �de$ƒ�ZˆG �d�d „ �d e,ƒ�Z‰G �d!�d"„ �d"e+ƒ�ZŠG �d#�d$„ �d$e+ƒ�Z‹G �d%�d&„ �d&e,ƒ�ZŒG �d'�d(„ �d(e+ƒ�Z�G �d)�d*„ �d*e+ƒ�ZŽ�d+�d,„ e)� �eñ¡D ƒ�Z�G �d-�d.„ �d.e+ƒ�Z‘G �d/�d0„ �d0e+ƒ�Z’G �d1�d2„ �d2e$ƒ�Z“G �d3�d4„ �d4e$ƒ�Z”G �d5�d6„ �d6e+ƒ�Z•G �d7�d8„ �d8e+ƒ�Z–G �d9�d:„ �d:e,ƒ�Z—G �d;�d<„ �d<e+ƒ�Z˜G �d=�d>„ �d>e+ƒ�Z™G �d?�d@„ �d@e+ƒ�ZšG �dA�dB„ �dBe$ƒ�Z›�dC�dD�dE�dF�dG�dH�dI�dJ�dK�dL�dM�dN�dO�dP�dQ�dR�dSœ�ZœG �dT�dU„ �dU�e›ƒ�Z�G �dV�dW„ �dW�e›ƒ�ZžG �dX�dY„ �dYe$ƒ�ZŸG �dZ�d[„ �d[�e›ƒ�Z G �d\�d]„ �d]�e›ƒ�Z¡G �d^�d_„ �d_�e›ƒ�Z¢G �d`�da„ �da�e›ƒ�Z£G �db�dc„ �dc�e›ƒ�Z¤G �dd�de„ �de�e›ƒ�Z¥G �df�dg„ �dg�e›ƒ�Z¦G �dh�di„ �di�e›ƒ�Z§G �dj�dk„ �dk�e›ƒ�Z¨G �dl�dm„ �dm�e›ƒ�Z©G �dn�do„ �do�e›ƒ�ZªG �dp�dq„ �dq�e›ƒ�Z«G �dr�ds„ �ds�e›ƒ�Z¬G �dt�du„ �du�e›ƒ�Z­�e��ež�e �e¡�e¢�e£�e¤�e¥�e¦�e§�e¨�e©�eª�e«�e¬�e­�dSœ�Z®G �dv�dw„ �dwe,ƒ�Z¯G �dx�dy„ �dye+ƒ�Z°G �dz�d{„ �d{e+ƒ�Z±G �d|�d}„ �d}e+ƒ�Z²G �d~�d„ �de+ƒ�Z³G �d€�d�„ �d�e+ƒ�Z´G �d‚�dƒ„ �dƒe+ƒ�Zµ�ew�ey�e|�e~�e��e„�e‡�e‹�eŽ�e’�e–�e™�e°�e²�e´�d«œ�Z¶�ex�e{�e}�e€�eƒ�e†�eŠ�e��e‘�e•�e˜�eš�e±�e³�eµ�d«œ�Z·G �d„�d…„ �d…e+ƒ�Z¸G �d†�d‡„ �d‡e+ƒ�Z¹G �dˆ�d‰„ �d‰e+ƒ�ZºG �dŠ�d‹„ �d‹e+ƒ�Z»G �dŒ�d�„ �d�e+ƒ�Z¼G �dŽ�d�„ �d��e¼ƒ�Z½G �d��d‘„ �d‘e+ƒ�Z¾g �d’¢�Z¿g �d“¢�ZÀg �d”¢�ZÁG �d•�d–„ �d–e+ƒ�ZÂG �d—�d˜„ �d˜�eÂƒ�ZÃG �d™�dš„ �dše+ƒ�ZÄ�eR�ed�ee�ef�eg�eh�ei�ej�ek�el�em�en�eo�ep�eq�er�es�e¸�e¹�eº�e»�e¼�e½�e¾�eÂ�eÃ�eÄ�d›œ�ZÅdS (œ  z�
OpenFlow v1.3.4

OpenFlow is an open standard used in SDN deployments.
Specifications can be retrieved from https://www.opennetworking.org/
é    )Úabsolute_importN)Ú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Ú_UnknownOpenFlowZIN_PORTZTABLEZNORMALZFLOODÚALLÚ
CONTROLLERZLOCALÚANY)l   øÿ l   ùÿ l   úÿ l   ûÿ ì   üÿ ì   ýÿ ì   þÿ ì   ÿÿ ÚMAX)l    ÿ r(   r+   )éþ   éÿ   r+   ZSLOWPATH)l     þ r)   r*   r+   Ú	NO_BUFFERéÿÿ  é   ÚOFPHET_VERSIONBITMAPc                   @   s"   e Zd Zeddd„ƒZdd„ ZdS )ÚOFPHETNc                 O   s8   |r4t |ƒdkr4t d|d d… ¡d }t |t¡S tS ©Né   ú!Hr   )ÚlenÚstructÚunpackÚofp_hello_elem_clsÚgetr   ©ÚclsÚ_pktÚargsÚkargsÚt© rB   úN/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/openflow3.pyÚdispatch_hookU   s    zOFPHET.dispatch_hookc                 C   s   d|fS ©Nó    rB   ©ÚselfÚsrB   rB   rC   Úextract_padding\   s    zOFPHET.extract_padding)N©Ú__name__Ú
__module__Ú__qualname__ÚclassmethodrD   rJ   rB   rB   rB   rC   r3   T   s   r3   c                   @   s6   e Zd ZdZeddeƒeddƒedddg d	¢ƒgZd
S )ÚOFPHETVersionBitmapr2   Útyper1   r7   é   Zbitmapr   é    )zType 0zOFv1.0zOFv1.1zOFv1.2zOFv1.3zOFv1.4zOFv1.5N)	rL   rM   rN   Únamer   Úofp_hello_elem_typesr   r   Úfields_descrB   rB   rB   rC   rP   `   s
   
þrP   )Z	PORT_DOWNZNO_STPZNO_RECVZNO_RECV_STPZNO_FLOODZNO_FWDZNO_PACKET_IN)Z	LINK_DOWNZBLOCKEDZLIVE)Z10MB_HDZ10MB_FDZ100MB_HDZ100MB_FDZ1GB_HDZ1GB_FDZ10GB_FDZ40GB_FDZ100GB_FDZ1TB_FDÚOTHERZCOPPERZFIBERZAUTONEGZPAUSEZ
PAUSE_ASYMc                   @   s    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d„ ZdS )ÚOFPPortZOFP_PHY_PORTÚport_nor   Úpad1Úhw_addrÚ0Úpad2Z	port_nameÚ é   ÚconfigrS   ÚstateÚcurrZ
advertisedÚ	supportedZpeerZ
curr_speedZ	max_speedc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ       s    zOFPPort.extract_paddingN)rL   rM   rN   rT   r   Úofp_port_nor   r   r   r   r   Úofp_port_configÚofp_port_stateÚofp_port_featuresr   rV   rJ   rB   rB   rB   rC   rX   �   s    

ôrX   ZOFPXMC_NXM_0ZOFPXMC_NXM_1ÚOFPXMC_OPENFLOW_BASICZOFPXMC_EXPERIMENTER)r   r1   i €  r0   ZOFB_IN_PORTZOFB_IN_PHY_PORTZOFB_METADATAZOFB_ETH_DSTZOFB_ETH_SRCZOFB_ETH_TYPEZOFB_VLAN_VIDZOFB_VLAN_PCPZOFB_IP_DSCPZ
OFB_IP_ECNZOFB_IP_PROTOZOFB_IPV4_SRCZOFB_IPV4_DSTZOFB_TCP_SRCZOFB_TCP_DSTZOFB_UDP_SRCZOFB_UDP_DSTZOFB_SCTP_SRCZOFB_SCTP_DSTZOFB_ICMPV4_TYPEZOFB_ICMPV4_CODEZ
OFB_ARP_OPZOFB_ARP_SPAZOFB_ARP_TPAZOFB_ARP_SHAZOFB_ARP_THAZOFB_IPV6_SRCZOFB_IPV6_DSTZOFB_IPV6_FLABELZOFB_ICMPV6_TYPEZOFB_ICMPV6_CODEZOFB_IPV6_ND_TARGETZOFB_IPV6_ND_SLLZOFB_IPV6_ND_TLLZOFB_MPLS_LABELZOFB_MPLS_TCZOFB_MPLS_BOSZOFB_PBB_ISIDZOFB_TUNNEL_IDZOFB_IPV6_EXTHDR)(r   r1   r5   é   é   é   é   é   rR   é	   é
   é   é   é   é   é   r_   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   rS   é!   é"   é#   é$   é%   é&   é'   )Ú	OFBInPortÚin_portrj   )ÚOFBInPhyPortZin_phy_portrj   )ÚOFBMetadataÚmetadatarR   )Ú	OFBEthDstZeth_dstrl   )Ú	OFBEthSrcZeth_srcrl   )Ú
OFBEthTypeZeth_typer5   )Ú
OFBVLANVIDÚvlan_vidr5   )Ú
OFBVLANPCPÚvlan_pcpr1   )Ú	OFBIPDSCPZip_dscpr1   )ÚOFBIPECNZip_ecnr1   )Ú
OFBIPProtoZip_protor1   )Ú
OFBIPv4SrcZipv4_srcrj   )Ú
OFBIPv4DstZipv4_dstrj   )Ú	OFBTCPSrcZtcp_srcr5   )Ú	OFBTCPDstZtcp_dstr5   )Ú	OFBUDPSrcZudp_srcr5   )Ú	OFBUDPDstZudp_dstr5   )Ú
OFBSCTPSrcZsctp_srcr5   )Ú
OFBSCTPDstZsctp_dstr5   )ÚOFBICMPv4TypeZicmpv4_typer1   )ÚOFBICMPv4CodeZicmpv4_coder1   )ÚOFBARPOPZarp_opr5   )Ú	OFBARPSPAZarp_sparj   )Ú	OFBARPTPAZarp_tparj   )Ú	OFBARPSHAZarp_sharl   )Ú	OFBARPTHAZarp_tharl   )Ú
OFBIPv6SrcZipv6_srcr_   )Ú
OFBIPv6DstZipv6_dstr_   )ÚOFBIPv6FLabelZipv6_flabelrj   )ÚOFBICMPv6TypeZicmpv6_typer1   )ÚOFBICMPv6CodeZicmpv6_coder1   )ÚOFBIPv6NDTargetZipv6_nd_targetr_   )ÚOFBIPv6NDSLLZipv6_sllrl   )ÚOFBIPv6NDTLLZipv6_tllrl   )ÚOFBMPLSLabelÚ
mpls_labelrj   )Ú	OFBMPLSTCÚmpls_tcr1   )Ú
OFBMPLSBoSZmpls_bosr1   )Ú
OFBPBBISIDZpbb_isidri   )ÚOFBTunnelIDZ	tunnel_idrR   )ÚOFBIPv6ExtHdrZipv6_ext_hdr_flagsr5   )	ZNONEXTZESPZAUTHZDESTZFRAGZROUTERZHOPZUNREPZUNSEQc                 C   sn  t ddtƒtd| d dtƒtd| d dƒgt| < t|   td|d |d | d   ƒ¡ | d d	kr€t|   t|d d	t	ƒ¡ nº| d d
ks˜| d dkr²t|   t
|d d ƒ¡ nˆ| d dksÊ| d dkrät|   t|d dƒ¡ nV| d dk�rt|   t|d d	d|d  tƒ¡ n"t|   t|d d	d|d  ƒ¡ | d �rjt|   t|d d d	d|d  ƒ¡ d S )NÚclass_rh   Úfieldr5   rm   Zhasmaskr1   r7   r   ri   rj   rp   rq   r\   rŠ   rR   Z_mask)r   Úofp_oxm_classesr   Úofp_oxm_namesr   Úofp_oxm_fieldsÚappendr	   r   rd   r   r   r   Ú	ipv6flags)ÚiÚorgrB   rB   rC   Úadd_ofp_oxm_fields  s     
þ(&"
rÂ   r5   c                  C   sÌ   t tdƒsdt_tj} t| d  d }| d dkr:|d7 }| d rJ|d7 }t| d  }t| d  }| d rv|d d… }t|tf||dœƒ}| d dkr¤|t| d < n|t	| d < t jd7  _d	d
„ |_
|S )NrÀ   r   rj   r5   ZHMZID)rT   rV   r1   c                 S   s   d|fS rE   rB   rG   rB   rB   rC   Ú<lambda>Q  rF   z!_create_oxm_cls.<locals>.<lambda>)ÚhasattrÚ_create_oxm_clsrÀ   Úofp_oxm_constrr¼   r½   rQ   r   Úofp_oxm_clsÚofp_oxm_id_clsrJ   )ÚindexÚcls_nameZoxm_nameÚ
oxm_fieldsr=   rB   rB   rC   rÅ   .  s&    

rÅ   rq   i   ro   i   iÝ†  rx   rl   ru   é„   i  ry   é:   é‡   éˆ   éGˆ  éçˆ  )!rs   r_   rv   rx   ry   rz   r|   r~   r€   r‚   rS   r…   r‡   r‰   é(   é*   é,   é.   é0   é2   é4   é6   é8   rÍ   é<   é>   é@   éB   éD   éF   éH   éJ   éN   c                   @   sJ   e Zd ZddgZddd„Zdd„ Zd	d
„ Zedd„ ƒZdd„ Z	dd„ Z
dS )ÚOXMPacketListFieldÚautocompleterÉ   NFc                 C   s$   t j| ||||d� || _g | _d S )N©Úlength_from)r   Ú__init__rå   rÉ   )rH   rT   Údefaultr=   rç   rå   rB   rB   rC   rè   %  s    zOXMPacketListField.__init__c           
      C   s²   | j stjd d r®t |¡}|D ]Š}d|j }t| jƒ}|tv r"t| }|d }|dkr^dn|}||vr:| j 	d|¡ t
| ƒ }	t|	t|d  d |d ƒ | 	d|	¡ q:q"|S )NZOPENFLOWZprereq_autocompleter5   r   ry   rx   r1   )rå   r   ZcontribsÚcopyÚdeepcopyrº   ÚlistrÉ   Úneed_prereqÚinsertrÇ   ÚsetattrrÆ   )
rH   ÚpktÚvalZfix_valZoxmÚfZ	fix_indexZprereqÚf2ZprrqrB   rB   rC   Úi2m*  s    



zOXMPacketListField.i2mc                 C   s>   t |d ƒ}||d  }|| jvr.| j |¡ t |t¡|ƒS ©Nr5   )r   rÉ   r¾   rÇ   r;   r   )rH   rð   rI   rA   Znrm_trB   rB   rC   Úm2iG  s
    
zOXMPacketListField.m2ic                 C   s   t | d ƒS )Nri   )r   )rI   rB   rB   rC   Ú_get_oxm_lengthN  s    z"OXMPacketListField._get_oxm_lengthc                 C   s    |d  dd„ |  ||¡D ƒ¡ S )NrF   c                 s   s   | ]}t |ƒV  qd S ©N)r   )Ú.0ÚxrB   rB   rC   Ú	<genexpr>S  rF   z.OXMPacketListField.addfield.<locals>.<genexpr>)Újoinrô   )rH   rð   rI   rñ   rB   rB   rC   ÚaddfieldR  s    zOXMPacketListField.addfieldc           
      C   sœ   g }|   |¡}||d … }|d |… }|rŠt|ƒdkrŠt |¡d }|dksŠt|ƒ|k rZqŠ|d |… }||d … }|  ||¡}	| |	¡ q&g | _|| |fS ©Nrj   )rç   r7   rä   r÷   rö   r¾   rÉ   )
rH   rð   rI   ÚlstZlimÚretZremainÚtmp_lenÚcurrentÚprB   rB   rC   ÚgetfieldU  s    
zOXMPacketListField.getfield)NF)rL   rM   rN   Ú	__slots__rè   rô   rö   Ústaticmethodr÷   rý   r  rB   rB   rB   rC   rä   !  s   

rä   c                   @   s"   e Zd Zeddd„ƒZdd„ ZdS )ÚOXMIDNc                 O   s,   |r(t |ƒdkr(t|d ƒ}t |t¡S tS rõ   )r7   r   rÈ   r;   r   r<   rB   rB   rC   rD   q  s    zOXMID.dispatch_hookc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   x  s    zOXMID.extract_padding)NrK   rB   rB   rB   rC   r  p  s   r  c                   @   sN   e Zd ZdZedddddœƒeddƒed	g ed
d„ d�gZdd„ Z	dd„ Z
dS )ÚOFPMatchZ	OFP_MATCHrQ   r1   ZOFPMT_STANDARDZ	OFPMT_OXM©r   r1   r7   NrË   c                 C   s
   | j d S rþ   ©r7   ©rð   rB   rB   rC   rÃ   ‚  rF   zOFPMatch.<lambda>ræ   c                 C   sf   | j }|d u r^t |ƒt |ƒ }|d d… t d|¡ |dd …  }d|d  d }|d| 7 }|| S ©Nr5   r6   rj   rR   ó    ©r7   r8   Úpack©rH   r  Úpayr  Ú
zero_bytesrB   rB   rC   Ú
post_build„  s    $zOFPMatch.post_buildc                 C   s.   | j }d|d  d }||d … |d |… fS ©NrR   r
  )rH   rI   r  r  rB   rB   rC   rJ   Ž  s    zOFPMatch.extract_padding)rL   rM   rN   rT   r   r   rä   r   rV   r  rJ   rB   rB   rB   rC   r  |  s   ÿÿý
r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
MatchFieldc                 C   s   t  | |tƒ t¡ d S rø   )r   rè   r  )rH   rT   rB   rB   rC   rè   ™  s    zMatchField.__init__c                 C   sL   |   ||¡}t|v r@|t }t|v r6|t }||_|`|j|fS d|fS d S rE   )rö   r   r   ÚpayloadÚload)rH   rð   rI   rÀ   Úrr  rB   rB   rC   r  œ  s    
zMatchField.getfieldN)rL   rM   rN   rè   r  rB   rB   rB   rC   r  ˜  s   r  c                   @   s   e Zd ZdZeddd„ƒZdS )Ú	OpenFlow3zOpenFlow v1.3 dissectorNc                 O   s    |rœt |ƒdkrœt|d ƒ}|dkrDt|d ƒ}|dkr<d}t| S |dkrlt|d ƒ}|dkrdd}t| S |dkr”t|d ƒ}|dkrŒd}t| S t| S tS )Nr5   r1   rn   r.   r0   rv   rw   )r7   r   Úofp_error_clsÚofp_multipart_request_clsÚofp_multipart_reply_clsÚofpt_clsr$   )r=   r>   r?   r@   Zof_typeZerr_typeÚmp_typerB   rB   rC   rD   ³  s&    zOpenFlow3.dispatch_hook)N)rL   rM   rN   rT   rO   rD   rB   rB   rB   rC   r  °  s   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_DSTZOFPAT_SET_NW_TOSÚOFPAT_SET_TP_SRCÚOFPAT_SET_TP_DSTÚOFPAT_COPY_TTL_OUTÚOFPAT_COPY_TTL_INÚOFPAT_SET_MPLS_LABELZ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   r1   r5   ri   rj   rk   rl   rm   rR   rn   ro   rp   rq   rr   rs   rt   r_   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r0   c                   @   s"   e Zd Zeddd„ƒZdd„ ZdS )ÚOFPATNc                 O   s8   |r4t |ƒdkr4t d|d d… ¡d }t |t¡S tS r4   )r7   r8   r9   Úofp_action_clsr;   r   r<   rB   rB   rC   rD   ð  s    zOFPAT.dispatch_hookc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   ÷  s    zOFPAT.extract_padding)NrK   rB   rB   rB   rC   r:  ï  s   r:  c                   @   sD   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  rQ   r   r7   r_   ÚportÚmax_lenr/   ÚpadrÖ   N)rL   rM   rN   rT   r   Úofp_action_typesr   r   rd   Úofp_max_lenr   rV   rB   rB   rB   rC   r<  û  s   



ür<  c                   @   s6   e Zd ZdZeddeƒeddƒeddƒeddƒgZd	S )
ÚOFPATSetVLANVIDr   rQ   r1   r7   rR   r”   r   r?  N©	rL   rM   rN   rT   r   r@  r   r   rV   rB   rB   rB   rC   rB    s   
ýrB  c                   @   s6   e Zd ZdZeddeƒeddƒeddƒeddƒgZ	d	S )
ÚOFPATSetVLANPCPr!  rQ   r5   r7   rR   r–   r   r?  N©
rL   rM   rN   rT   r   r@  r   r	   r   rV   rB   rB   rB   rC   rD    s   
ýrD  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPATStripVLANr"  rQ   ri   r7   rR   r?  r   N©	rL   rM   rN   rT   r   r@  r   r   rV   rB   rB   rB   rC   rF    s
   
þrF  c                   @   s8   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#  rQ   rj   r7   r_   Údl_addrr\   r?  r   rÖ   N©
rL   rM   rN   rT   r   r@  r   r   r   rV   rB   rB   rB   rC   rH    s   

ýrH  c                   @   s8   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$  rQ   rk   r7   r_   rI  r\   r?  r   rÖ   NrJ  rB   rB   rB   rC   rK  &  s   

ýrK  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPATSetNwSrcr%  rQ   rl   r7   rR   Únw_addrr\   N©	rL   rM   rN   rT   r   r@  r   r   rV   rB   rB   rB   rC   rL  .  s
   
þrL  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPATSetNwDstr&  rQ   rm   r7   rR   rM  r\   NrN  rB   rB   rB   rC   rO  5  s
   
þrO  c                   @   s6   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_TOSrQ   rR   r7   Znw_tosr   r?  NrE  rB   rB   rB   rC   rP  <  s   
ýrP  c                   @   s6   e Zd ZdZeddeƒeddƒeddƒeddƒgZd	S )
ÚOFPATSetTpSrcr'  rQ   rn   r7   rR   Útp_portr   r?  NrC  rB   rB   rB   rC   rR  D  s   
ýrR  c                   @   s6   e Zd ZdZeddeƒeddƒeddƒeddƒgZd	S )
ÚOFPATSetTpDstr(  rQ   ro   r7   rR   rS  r   r?  NrC  rB   rB   rB   rC   rT  L  s   
ýrT  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPATSetMPLSLabelr+  rQ   rr   r7   rR   r²   r   N©	rL   rM   rN   rT   r   r@  r   r   rV   rB   rB   rB   rC   rU  \  s
   
þrU  c                   @   s6   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_TCrQ   rs   r7   rR   r´   r   r?  NrE  rB   rB   rB   rC   rW  c  s   
ýrW  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPATCopyTTLOutr)  rQ   rp   r7   rR   r?  r   NrG  rB   rB   rB   rC   rY  m  s
   
þrY  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPATCopyTTLInr*  rQ   rq   r7   rR   r?  r   NrG  rB   rB   rB   rC   rZ  t  s
   
þrZ  c                   @   s6   e Zd ZdZeddeƒeddƒeddƒeddƒgZ	d	S )
ÚOFPATSetMPLSTTLr,  rQ   rt   r7   rR   Zmpls_ttlr   r?  NrE  rB   rB   rB   rC   r[  {  s   
ýr[  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPATDecMPLSTTLr-  rQ   r_   r7   rR   r?  r   NrG  rB   rB   rB   rC   r\  ƒ  s
   
þr\  c                   @   s6   e Zd ZdZeddeƒeddƒeddƒedd	ƒgZd
S )ÚOFPATPushVLANr.  rQ   ru   r7   rR   Ú	ethertypei �  r?  r   NrC  rB   rB   rB   rC   r]  Š  s   
ýr]  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPATPopVLANr/  rQ   rv   r7   rR   r?  r   NrG  rB   rB   rB   rC   r_  ’  s
   
þr_  c                   @   s6   e Zd ZdZeddeƒeddƒeddƒedd	ƒgZd
S )ÚOFPATPushMPLSr0  rQ   rw   r7   rR   r^  rÐ   r?  r   NrC  rB   rB   rB   rC   r`  ™  s   
ýr`  c                   @   s6   e Zd ZdZeddeƒeddƒeddƒedd	ƒgZd
S )ÚOFPATPopMPLSr1  rQ   rx   r7   rR   r^  rÐ   r?  r   NrC  rB   rB   rB   rC   ra  ¡  s   
ýra  c                   @   s0   e Zd ZdZeddeƒeddƒeddeƒgZ	dS )	ÚOFPATSetQueuer2  rQ   ry   r7   rR   Úqueue_idr   N)
rL   rM   rN   rT   r   r@  r   r   Ú	ofp_queuerV   rB   rB   rB   rC   rb  ©  s
   

þrb  c                   @   s0   e Zd ZdZeddeƒeddƒeddeƒgZ	dS )	Ú
OFPATGroupr3  rQ   rz   r7   rR   Úgroup_idr   N)
rL   rM   rN   rT   r   r@  r   r   Ú	ofp_grouprV   rB   rB   rB   rC   re  °  s
   

þre  c                   @   s6   e Zd ZdZeddeƒeddƒeddƒeddƒgZ	d	S )
ÚOFPATSetNwTTLr4  rQ   r{   r7   rR   Znw_ttlr   r?  NrE  rB   rB   rB   rC   rh  ·  s   
ýrh  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPATDecNwTTLr5  rQ   r|   r7   rR   r?  r   NrG  rB   rB   rB   rC   ri  ¿  s
   
þri  c                	   @   sJ   e Zd ZdZeddeƒeddƒedg edd„ d	d
�gZ	dd„ Z
dd„ ZdS )ÚOFPATSetFieldr6  rQ   r}   r7   Nrº   c                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ   Ì  rF   zOFPATSetField.<lambda>F)rç   rå   c                 C   s„   | j }d}|d u r`t |ƒt |ƒ }d|d  d }|| }|d d… t d|¡ |dd …  }nd|d  d }|d| 7 }|| S )Nr   rR   r5   r6   rj   r  r  r  rB   rB   rC   r  Ð  s    &zOFPATSetField.post_buildc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   Þ  s    zOFPATSetField.extract_padding)rL   rM   rN   rT   r   r@  r   rä   r   rV   r  rJ   rB   rB   rB   rC   rj  Æ  s   
ýýrj  c                   @   s6   e Zd ZdZeddeƒeddƒeddƒedd	ƒgZd
S )ÚOFPATPushPBBr7  rQ   r~   r7   rR   r^  rÑ   r?  r   NrC  rB   rB   rB   rC   rk  â  s   
ýrk  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPATPopPBBr8  rQ   r   r7   rR   r?  r   NrG  rB   rB   rB   rC   rl  ê  s
   
þrl  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPATExperimenterr9  rQ   r0   r7   rR   Úexperimenterr   NrV  rB   rB   rB   rC   rm  ñ  s
   
þrm  c                   @   s"   e Zd Zeddd„ƒZdd„ ZdS )ÚOFPATIDNc                 O   s8   |r4t |ƒdkr4t d|d d… ¡d }t |t¡S tS r4   )r7   r8   r9   Úofp_action_id_clsr;   r   r<   rB   rB   rC   rD     s    zOFPATID.dispatch_hookc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   "  s    zOFPATID.extract_padding)NrK   rB   rB   rB   rC   ro    s   ro  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATOutputIDr  rQ   r   r7   rj   N©rL   rM   rN   rT   r   r@  r   rV   rB   rB   rB   rC   rq  )  s   
ÿrq  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetVLANVIDIDr   rQ   r1   r7   rj   Nrr  rB   rB   rB   rC   rs  1  s   
ÿrs  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetVLANPCPIDr!  rQ   r5   r7   rj   Nrr  rB   rB   rB   rC   rt  7  s   
ÿrt  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATStripVLANIDr"  rQ   ri   r7   rj   Nrr  rB   rB   rB   rC   ru  =  s   
ÿru  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetDlSrcIDr#  rQ   rj   r7   Nrr  rB   rB   rB   rC   rv  C  s   
ÿrv  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetDlDstIDr$  rQ   rk   r7   rj   Nrr  rB   rB   rB   rC   rw  I  s   
ÿrw  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetNwSrcIDr%  rQ   rl   r7   rj   Nrr  rB   rB   rB   rC   rx  O  s   
ÿrx  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetNwDstIDr&  rQ   rm   r7   rj   Nrr  rB   rB   rB   rC   ry  U  s   
ÿry  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetNwToSIDrQ  rQ   rR   r7   rj   Nrr  rB   rB   rB   rC   rz  [  s   
ÿrz  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetTpSrcIDr'  rQ   rn   r7   rj   Nrr  rB   rB   rB   rC   r{  a  s   
ÿr{  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetTpDstIDr(  rQ   ro   r7   rj   Nrr  rB   rB   rB   rC   r|  g  s   
ÿr|  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetMPLSLabelIDr+  rQ   rr   r7   rj   Nrr  rB   rB   rB   rC   r}  r  s   
ÿr}  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetMPLSTCIDrX  rQ   rs   r7   rj   Nrr  rB   rB   rB   rC   r~  x  s   
ÿr~  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATCopyTTLOutIDr)  rQ   rp   r7   rj   Nrr  rB   rB   rB   rC   r  €  s   
ÿr  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATCopyTTLInIDr*  rQ   rq   r7   rj   Nrr  rB   rB   rB   rC   r€  †  s   
ÿr€  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetMPLSTTLIDr,  rQ   rt   r7   rj   Nrr  rB   rB   rB   rC   r�  Œ  s   
ÿr�  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATDecMPLSTTLIDr-  rQ   r_   r7   rj   Nrr  rB   rB   rB   rC   r‚  ’  s   
ÿr‚  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATPushVLANIDr.  rQ   ru   r7   rj   Nrr  rB   rB   rB   rC   rƒ  ˜  s   
ÿrƒ  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATPopVLANIDr/  rQ   rv   r7   rj   Nrr  rB   rB   rB   rC   r„  ž  s   
ÿr„  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATPushMPLSIDr0  rQ   rw   r7   rj   Nrr  rB   rB   rB   rC   r…  ¤  s   
ÿr…  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATPopMPLSIDr1  rQ   rx   r7   rj   Nrr  rB   rB   rB   rC   r†  ª  s   
ÿr†  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetQueueIDr2  rQ   ry   r7   rj   Nrr  rB   rB   rB   rC   r‡  °  s   
ÿr‡  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATGroupIDr3  rQ   rz   r7   rj   Nrr  rB   rB   rB   rC   rˆ  ¶  s   
ÿrˆ  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetNwTTLIDr4  rQ   r{   r7   rj   Nrr  rB   rB   rB   rC   r‰  ¼  s   
ÿr‰  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATDecNwTTLIDr5  rQ   r|   r7   rj   Nrr  rB   rB   rB   rC   rŠ  Â  s   
ÿrŠ  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATSetFieldIDr6  rQ   r}   r7   rj   Nrr  rB   rB   rB   rC   r‹  È  s   
ÿr‹  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATPushPBBIDr7  rQ   r~   r7   rj   Nrr  rB   rB   rB   rC   rŒ  Î  s   
ÿrŒ  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATPopPBBIDr8  rQ   r   r7   rj   Nrr  rB   rB   rB   rC   r�  Ô  s   
ÿr�  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPATExperimenterIDr9  rQ   r0   r7   Nrr  rB   rB   rB   rC   rŽ  Ú  s   
ÿrŽ  ÚOFPIT_GOTO_TABLEÚOFPIT_WRITE_METADATAÚOFPIT_WRITE_ACTIONSÚOFPIT_APPLY_ACTIONSÚOFPIT_CLEAR_ACTIONSÚOFPIT_METERÚOFPIT_EXPERIMENTER)r1   r5   ri   rj   rk   rl   r0   c                   @   s"   e Zd Zeddd„ƒZdd„ ZdS )ÚOFPITNc                 O   s8   |r4t |ƒdkr4t d|d d… ¡d }t |t¡S tS r4   )r7   r8   r9   Úofp_instruction_clsr;   r   r<   rB   rB   rC   rD     s    zOFPIT.dispatch_hookc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ     s    zOFPIT.extract_padding)NrK   rB   rB   rB   rC   r–    s   r–  c                   @   s8   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�  rQ   r1   r7   rR   Útable_idr   r?  N)rL   rM   rN   rT   r   Úofp_instruction_typesr   r   Ú	ofp_tabler   rV   rB   rB   rB   rC   r˜    s   

ýr˜  c                   @   s>   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�  rQ   r5   r7   r|   r?  r   r�   Zmetadata_maskN)
rL   rM   rN   rT   r   rš  r   r   r   rV   rB   rB   rB   rC   rœ     s   
ürœ  c                	   @   s@   e Zd ZdZeddeƒeddƒeddƒedg e	d	d
„ d�gZ
dS )ÚOFPITWriteActionsr‘  rQ   ri   r7   Nr?  r   Úactionsc                 C   s
   | j d S r  r
  r  rB   rB   rC   rÃ   /  rF   zOFPITWriteActions.<lambda>ræ   ©rL   rM   rN   rT   r   rš  r   r   r   r:  rV   rB   rB   rB   rC   r�  )  s   
ÿýr�  c                	   @   s@   e Zd ZdZeddeƒeddƒeddƒedg e	d	d
„ d�gZ
dS )ÚOFPITApplyActionsr’  rQ   rj   r7   Nr?  r   rž  c                 C   s
   | j d S r  r
  r  rB   rB   rC   rÃ   8  rF   zOFPITApplyActions.<lambda>ræ   rŸ  rB   rB   rB   rC   r   2  s   
ÿýr   c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	ÚOFPITClearActionsr“  rQ   rk   r7   rR   r?  r   N)	rL   rM   rN   rT   r   rš  r   r   rV   rB   rB   rB   rC   r¡  ;  s
   
þr¡  c                   @   s0   e Zd ZdZeddeƒeddƒeddeƒgZ	dS )	Ú
OFPITMeterr”  rQ   rl   r7   rR   Úmeter_idr1   N)
rL   rM   rN   rT   r   rš  r   r   Ú	ofp_meterrV   rB   rB   rB   rC   r¢  B  s
   

þr¢  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )ÚOFPITExperimenterr•  rQ   r0   r7   Nrn  r   )	rL   rM   rN   rT   r   rš  r   r   rV   rB   rB   rB   rC   r¥  I  s
   
þr¥  c                   @   s"   e Zd Zeddd„ƒZdd„ ZdS )ÚOFPITIDNc                 O   s8   |r4t |ƒdkr4t d|d d… ¡d }t |t¡S tS r4   )r7   r8   r9   Úofp_instruction_id_clsr;   r   r<   rB   rB   rC   rD   _  s    zOFPITID.dispatch_hookc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   f  s    zOFPITID.extract_padding)NrK   rB   rB   rB   rC   r¦  ^  s   r¦  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPITGotoTableIDr�  rQ   r1   r7   rj   N©rL   rM   rN   rT   r   rš  r   rV   rB   rB   rB   rC   r¨  j  s   
ÿr¨  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPITWriteMetadataIDr�  rQ   r5   r7   rj   Nr©  rB   rB   rB   rC   rª  p  s   
ÿrª  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPITWriteActionsIDr‘  rQ   ri   r7   rj   Nr©  rB   rB   rB   rC   r«  v  s   
ÿr«  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPITApplyActionsIDr’  rQ   rj   r7   Nr©  rB   rB   rB   rC   r¬  |  s   
ÿr¬  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPITClearActionsIDr“  rQ   rk   r7   rj   Nr©  rB   rB   rB   rC   r­  ‚  s   
ÿr­  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPITMeterIDr”  rQ   rl   r7   rj   Nr©  rB   rB   rB   rC   r®  ˆ  s   
ÿr®  c                   @   s&   e Zd ZdZeddeƒeddƒgZdS )ÚOFPITExperimenterIDr•  rQ   r0   r7   Nr©  rB   rB   rB   rC   r¯  Ž  s   
ÿr¯  c                   @   sZ   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
d„ d�gZdd„ ZdS )Ú	OFPBucketZ
OFP_BUCKETr7   NÚweightr   Z
watch_portZwatch_groupr?  rž  c                 C   s
   | j d S ©Nr_   r
  r  rB   rB   rC   rÃ   §  rF   zOFPBucket.<lambda>ræ   c                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   ©  s    zOFPBucket.extract_padding)rL   rM   rN   rT   r   r   rd   rg  r   r   r:  rV   rJ   rB   rB   rB   rC   r°  Ÿ  s   

ÿûr°  Ú
OFPQT_NONEÚOFPQT_MIN_RATEr	  c                   @   s"   e Zd Zeddd„ƒZdd„ ZdS )ÚOFPQTNc                 O   s8   |r4t |ƒdkr4t d|d d… ¡d }t |t¡S tS r4   )r7   r8   r9   Úofp_queue_property_clsr;   r   r<   rB   rB   rC   rD   µ  s    zOFPQT.dispatch_hookc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   ¼  s    zOFPQT.extract_padding)NrK   rB   rB   rB   rC   rµ  ´  s   rµ  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )Ú	OFPQTNoner³  rQ   r   r7   rR   r?  N)	rL   rM   rN   rT   r   Úofp_queue_property_typesr   r   rV   rB   rB   rB   rC   r·  À  s
   
þr·  c                   @   s@   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´  rQ   r1   r7   r_   rZ   r   Úrater]   rÖ   N)
rL   rM   rN   rT   r   r¸  r   r   r   rV   rB   rB   rB   rC   r¹  Ç  s   

ür¹  c                	   @   sP   e Zd ZdZeddeƒeddƒeddƒedg e	dd	„ d
�gZ
dd„ Zdd„ ZdS )ÚOFPPacketQueueZOFP_PACKET_QUEUErc  r   r7   Nr?  Ú
propertiesc                 C   s
   | j d S r  r
  r  rB   rB   rC   rÃ   Ú  rF   zOFPPacketQueue.<lambda>ræ   c                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   Ü  s    zOFPPacketQueue.extract_paddingc                 C   s^   | j g kr|ttƒ ƒ7 }| jd u rVt|ƒt|ƒ }|d d… t d|¡ |dd …  }|| S ©Nrj   r6   rl   )r¼  r   r·  r7   r8   r  ©rH   r  r  r  rB   rB   rC   r  ß  s    

$zOFPPacketQueue.post_build)rL   rM   rN   rT   r   rd  r   r   r   rµ  rV   rJ   r  rB   rB   rB   rC   r»  Ô  s   
ÿýr»  ÚOFPMBT_DROPÚOFPMBT_DSCP_REMARKÚOFPMBT_EXPERIMENTER)r   r1   r0   c                   @   s"   e Zd Zeddd„ƒZdd„ ZdS )ÚOFPMBTNc                 O   s8   |r4t |ƒdkr4t d|d d… ¡d }t |t¡S tS r4   )r7   r8   r9   Úofp_meter_band_clsr;   r   r<   rB   rB   rC   rD   ð  s    zOFPMBT.dispatch_hookc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   ÷  s    zOFPMBT.extract_padding)NrK   rB   rB   rB   rC   rÂ  ï  s   rÂ  c                   @   s>   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¿  rQ   r   r7   r_   rº  Ú
burst_sizer?  N)
rL   rM   rN   rT   r   r¸  r   r   r   rV   rB   rB   rB   rC   rÄ  û  s   
ürÄ  c                   @   sF   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À  rQ   r1   r7   r_   rº  r   rÅ  Z
prec_levelr?  N)rL   rM   rN   rT   r   r¸  r   r   r	   r   rV   rB   rB   rB   rC   rÆ    s   
ûrÆ  c                   @   s>   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Á  rQ   r0   r7   r_   rº  r   rÅ  rn  N)	rL   rM   rN   rT   r   r¸  r   r   rV   rB   rB   rB   rC   rÇ    s   
ürÇ  ©r   r1   r5   zOpenFlow 1.0zOpenFlow 1.1zOpenFlow 1.2zOpenFlow 1.3zOpenFlow 1.4)r1   r5   ri   rj   rk   Ú
OFPT_HELLOZ
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_MODZOFPT_MULTIPART_REQUESTZ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   r1   r5   ri   rj   rk   rl   rm   rR   rn   ro   rp   rq   rr   rs   rt   r_   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   c                
   @   sJ   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
d„ d�gZdS )Ú	OFPTHellorÉ  Úversionrj   rQ   r   r7   NÚxidÚelementsc                 C   s
   | j d S r  r
  r  rB   rB   rC   rÃ   M  rF   zOFPTHello.<lambda>ræ   )rL   rM   rN   rT   r   Úofp_versionÚofp_typer   r   r   r3   rV   rB   rB   rB   rC   rä  F  s   

ÿü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   r1   r5   ri   rj   rk   rl   rm   rR   rn   ro   rp   rq   rr   r0   c                   @   s\   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å  rj   rQ   r1   r7   Nræ  r   ÚerrtypeÚerrcodeZOFPHFC_INCOMPATIBLEZOFPHFC_EPERMr	  Údatar^   ©rL   rM   rN   rT   r   rè  ré  r   r   r   Úofp_error_typer"   r   rV   rB   rB   rB   rC   rù  f  s   


ÿ
ùrù  c                   @   st   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å  rj   rQ   r1   r7   Nræ  r   rú  rû  ZOFPBRC_BAD_VERSIONZOFPBRC_BAD_TYPEZOFPBRC_BAD_MULTIPARTZOFPBRC_BAD_EXPERIMENTERZOFPBRC_BAD_EXP_TYPEZOFPBRC_EPERMZOFPBRC_BAD_LENZOFPBRC_BUFFER_EMPTYZOFPBRC_BUFFER_UNKNOWNZOFPBRC_BAD_TABLE_IDZOFPBRC_IS_SLAVEZOFPBRC_BAD_PORTZOFPBRC_BAD_PACKETZ OFPBRC_MULTIPART_BUFFER_OVERFLOW)r   r1   r5   ri   rj   rk   rl   rm   rR   rn   ro   rp   rq   rr   rü  r^   rý  rB   rB   rB   rC   rÿ  r  s.   


ó
írÿ  c                   @   sx   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dœƒeddeƒgZdS ) ÚOFPETBadActionrì  rå  rj   rQ   r1   r7   Nræ  r   rú  r5   rû  ZOFPBAC_BAD_TYPEZOFPBAC_BAD_LENZOFPBAC_BAD_EXPERIMENTERZOFPBAC_BAD_EXP_TYPEZOFPBAC_BAD_OUT_PORTZOFPBAC_BAD_ARGUMENTZOFPBAC_EPERMZOFPBAC_TOO_MANYZOFPBAC_BAD_QUEUEZOFPBAC_BAD_OUT_GROUPZOFPBAC_MATCH_INCONSISTENTZOFPBAC_UNSUPPORTED_ORDERZOFPBAC_BAD_TAGZOFPBAC_BAD_SET_TYPEZOFPBAC_BAD_SET_LENZOFPBAC_BAD_SET_ARGUMENT)r   r1   r5   ri   rj   rk   rl   rm   rR   rn   ro   rp   rq   rr   rs   rt   rü  r^   rý  rB   rB   rB   rC   r   Š  s2   


ñ
ër   c                   @   sj   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å  rj   rQ   r1   r7   Nræ  r   rú  ri   rû  ZOFPBIC_UNKNOWN_INSTZOFPBIC_UNSUP_INSTZOFPBIC_BAD_TABLE_IDZOFPBIC_UNSUP_METADATAZOFPBIC_UNSUP_METADATA_MASKZOFPBIC_BAD_EXPERIMENTERZOFPBIC_BAD_EXP_TYPEZOFPBIC_BAD_LENZOFPBIC_EPERM)	r   r1   r5   ri   rj   rk   rl   rm   rR   rü  r^   rý  rB   rB   rB   rC   r  ¤  s$   


ø	
òr  c                   @   sp   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å  rj   rQ   r1   r7   Nræ  r   rú  rû  ZOFPBMC_BAD_TYPEZOFPBMC_BAD_LENZOFPBMC_BAD_TAGZOFPBMC_BAD_DL_ADDR_MASKZOFPBMC_BAD_NW_ADDR_MASKZOFPBMC_BAD_WILDCARDSZOFPBMC_BAD_FIELDZOFPBMC_BAD_VALUEZOFPBMC_BAD_MASKZOFPBMC_BAD_PREREQZOFPBMC_DUP_FIELDZOFPBMC_EPERM©r   r1   r5   ri   rj   rk   rl   rm   rR   rn   ro   rp   rü  r^   rý  rB   rB   rB   rC   r  ·  s*   


õ
ïr  c                   @   sh   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å  rj   rQ   r1   r7   Nræ  r   rú  rk   rû  ZOFPFMFC_UNKNOWNZOFPFMFC_TABLE_FULLZOFPFMFC_BAD_TABLE_IDZOFPFMFC_OVERLAPÚOFPFMFC_EPERMZOFPFMFC_BAD_TIMEOUTZOFPFMFC_BAD_COMMANDZOFPFMFC_BAD_FLAGS)r   r1   r5   ri   rj   rk   rl   rm   rü  r^   rý  rB   rB   rB   rC   r  Í  s"   


ù
ór  c                   @   sv   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 )ÚOFPETGroupModFailedrð  rå  rj   rQ   r1   r7   Nræ  r   rú  rl   rû  ZOFPGMFC_GROUP_EXISTSZOFPGMFC_INVALID_GROUPZOFPGMFC_WEIGHT_UNSUPPORTEDZOFPGMFC_OUT_OF_GROUPSZOFPGMFC_OUT_OF_BUCKETSZOFPGMFC_CHAINING_UNSUPPORTEDZOFPGMFC_WATCH_UNSUPPORTEDZOFPGMFC_LOOPZOFPGMFC_UNKNOWN_GROUPZOFPGMFC_CHAINED_GROUPZOFPGMFC_BAD_TYPEZOFPGMFC_BAD_COMMANDZOFPGMFC_BAD_BUCKETZOFPGMFC_BAD_WATCHr  )r   r1   r5   ri   rj   rk   rl   rm   rR   rn   ro   rp   rq   rr   rs   rü  r^   rý  rB   rB   rB   rC   r  ß  s0   


ò
ìr  c                   @   sb   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 )ÚOFPETPortModFailedrñ  rå  rj   rQ   r1   r7   Nræ  r   rú  rm   rû  ZOFPPMFC_BAD_PORTZOFPPMFC_BAD_HW_ADDRZOFPPMFC_BAD_CONFIGZOFPPMFC_BAD_ADVERTISEZOFPPMFC_EPERM©r   r1   r5   ri   rj   rü  r^   rý  rB   rB   rB   rC   r  ø  s   


ü
ör  c                   @   s^   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 )ÚOFPETTableModFailedrò  rå  rj   rQ   r1   r7   Nræ  r   rú  rR   rû  ZOFPTMFC_BAD_TABLEZOFPTMFC_BAD_CONFIGZOFPTMFC_EPERMrÈ  rü  r^   rý  rB   rB   rB   rC   r	    s   


þ
ør	  c                   @   s^   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 )ÚOFPETQueueOpFailedró  rå  rj   rQ   r1   r7   Nræ  r   rú  rn   rû  ZOFPQOFC_BAD_PORTZOFPQOFC_BAD_QUEUEZOFPQOFC_EPERMrÈ  rü  r^   rý  rB   rB   rB   rC   r
    s   


þ
ør
  c                   @   s^   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 )ÚOFPETSwitchConfigFailedrô  rå  rj   rQ   r1   r7   Nræ  r   rú  ro   rû  ZOFPSCFC_BAD_FLAGSZOFPSCFC_BAD_LENZOFPSCFC_EPERMrÈ  rü  r^   rý  rB   rB   rB   rC   r  !  s   


þ
ør  c                   @   s^   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 )ÚOFPETRoleRequestFailedrõ  rå  rj   rQ   r1   r7   Nræ  r   rú  rp   rû  ZOFPRRFC_STALEZOFPRRFC_UNSUPZOFPRRFC_BAD_ROLErÈ  rü  r^   rý  rB   rB   rB   rC   r  .  s   


þ
ør  c                   @   sp   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 )ÚOFPETMeterModFailedrö  rå  rj   rQ   r1   r7   Nræ  r   rú  rq   rû  ZOFPMMFC_UNKNOWNZOFPMMFC_METER_EXISTSZOFPMMFC_INVALID_METERZOFPMMFC_UNKNOWN_METERZOFPMMFC_BAD_COMMANDZOFPMMFC_BAD_FLAGSZOFPMMFC_BAD_RATEZOFPMMFC_BAD_BURSTZOFPMMFC_BAD_BANDZOFPMMFC_BAD_BAND_VALUEZOFPMMFC_OUT_OF_METERSZOFPMMFC_OUT_OF_BANDSr  rü  r^   rý  rB   rB   rB   rC   r  ;  s*   


õ
ïr  c                   @   sd   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 )ÚOFPETTableFeaturesFailedr÷  rå  rj   rQ   r1   r7   Nræ  r   rú  rr   rû  ZOFPTFFC_BAD_TABLEZOFPTFFC_BAD_METADATAZOFPTFFC_BAD_TYPEZOFPTFFC_BAD_LENZOFPTFFC_BAD_ARGUMENTZOFPTFFC_EPERM)r   r1   r5   ri   rj   rk   rü  r^   rý  rB   rB   rB   rC   r  Q  s   


û
õr  c                   @   s\   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 )ÚOFPETExperimenterrø  rå  rj   rQ   r1   r7   Nræ  r   rú  Úexp_typern  rü  r^   rý  rB   rB   rB   rC   r  a  s   



ùr  c                   @   s8   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å  rj   rQ   r5   r7   Nræ  r   ©
rL   rM   rN   rT   r   rè  ré  r   r   rV   rB   rB   rB   rC   r  ‚  s   

ýr  c                   @   s8   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å  rj   rQ   ri   r7   Nræ  r   r  rB   rB   rB   rC   r  Š  s   

ýr  c                   @   sH   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å  rj   rQ   r7   Nræ  r   rn  r  r  rB   rB   rB   rC   r  ’  s   

ûr  c                   @   s8   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å  rj   rQ   rk   r7   Nræ  r   r  rB   rB   rB   rC   r  œ  s   

ýr  c                   @   sx   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å  rj   rQ   rl   r7   Nræ  r   Zdatapath_idZ	n_buffersZn_tablesr1   Zauxiliary_idr?  ÚcapabilitiesrS   )	Z
FLOW_STATSZTABLE_STATSZ
PORT_STATSZGROUP_STATSZRESERVEDZIP_REASMZQUEUE_STATSZARP_MATCH_IPZPORT_BLOCKEDÚreserved)rL   rM   rN   rT   r   rè  ré  r   r   r   r	   r   r   rV   rB   rB   rB   rC   r  ¤  s   

	îr  c                   @   s8   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å  rj   rQ   rm   r7   Nræ  r   r  rB   rB   rB   rC   r  »  s   

ýr  c                   @   sT   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å  rj   rQ   rR   r7   Nræ  r   ÚflagsÚFRAG_NORMALÚ	FRAG_DROPÚ
FRAG_REASMÚ	FRAG_MASK©r   r1   r5   ri   Úmiss_send_len©rL   rM   rN   rT   r   rè  ré  r   r   r   rV   rB   rB   rB   rC   r  Ã  s   

ýør  c                   @   sT   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å  rj   rQ   rn   r7   Nræ  r   r  r  r  r  r  r   r!  é€   r"  rB   rB   rB   rC   r#  Ð  s   

ýør#  c                   @   s†   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å  rj   rQ   ro   r7   Nræ  r   Ú	buffer_idr/   Z	total_lenÚreasonZOFPR_NO_MATCHZOFPR_ACTIONZOFPR_INVALID_TTLrÈ  r™  ÚcookieÚmatchr?  rü  r^   )rL   rM   rN   rT   r   rè  ré  r   r   r   Ú
ofp_bufferr›  r   r  r   r   r   rV   rB   rB   rB   rC   r%  Ý  s"   


þ

ór%  c                   @   sœ   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å  rj   rQ   rp   r7   Nræ  r   r(  Úpriorityr'  ZOFPRR_IDLE_TIMEOUTZOFPRR_HARD_TIMEOUTZOFPRR_DELETEZOFPRR_GROUP_DELETEr   r™  Úduration_secÚduration_nsecÚidle_timeoutÚhard_timeoutÚpacket_countÚ
byte_countr)  )rL   rM   rN   rT   r   rè  ré  r   r   r   r›  r  rV   rB   rB   rB   rC   r+  ï  s*   

ý
ïr+  c                   @   s`   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å  rj   rQ   rq   r7   Nræ  r   r'  Z	OFPPR_ADDZOFPPR_DELETEZOFPPR_MODIFYrÈ  r?  rÚ   Údesc)rL   rM   rN   rT   r   rè  ré  r   r   r   r   rX   rV   rB   rB   rB   rC   r3    s   

þ
ør3  c                   @   s‚   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d�edd	dƒedg eedd„ d�eddeƒg
ZdS )ÚOFPTPacketOutrÕ  rå  rj   rQ   rr   r7   Nræ  r   r&  r/   rŒ   r&   Úactions_lenÚHrž  )ÚfmtZ	length_ofr?  rÖ   c                 C   s   | j S rø   )r6  r  rB   rB   rC   rÃ     rF   zOFPTPacketOut.<lambda>ræ   rü  r^   )rL   rM   rN   rT   r   rè  ré  r   r   r   r*  rd   r
   r   r   r:  r   r   rV   rB   rB   rB   rC   r5    s   




þ
õr5  c                   @   sÎ   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"d#„ d$�gZdS )%ÚOFPTFlowModrÖ  rå  rj   rQ   rs   r7   Nræ  r   r(  Úcookie_maskr™  ÚcmdZ	OFPFC_ADDZOFPFC_MODIFYZOFPFC_MODIFY_STRICTZOFPFC_DELETEZOFPFC_DELETE_STRICTr  r/  r0  r,  r&  r/   Úout_portr'   Ú	out_groupr  r_   ©ZSEND_FLOW_REMZCHECK_OVERLAPZRESET_COUNTSZNO_PKT_COUNTSZNO_BYT_COUNTSr?  r)  Úinstructionsc                 C   s&   | j d | jj d| jj d  d   S )NrÖ   rR   ©r7   r)  r  rB   rB   rC   rÃ   >  rF   zOFPTFlowMod.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   r›  r   r*  rd   rg  r   r   r  r   r–  rV   rB   rB   rB   rC   r9  "  s6   


ü


ÿçr9  c                   @   s‚   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d„ d�g	ZdS )ÚOFPTGroupModr×  rå  rj   rQ   rt   r7   Nræ  r   r;  Z	OFPGC_ADDZOFPGC_MODIFYZOFPGC_DELETErÈ  Z
group_typeÚ	OFPGT_ALLÚOFPGT_SELECTÚOFPGT_INDIRECTÚOFPGT_FFr   r?  rf  Úbucketsc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   R  rF   zOFPTGroupMod.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   r   r   rg  r   r°  rV   rB   rB   rB   rC   rA  B  s(   

þý
ÿórA  c                   @   s†   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å  rj   rQ   r_   r7   Nræ  r   rY   rZ   r[   r\   r]   r`   rS   ÚmaskZ	advertiseÚpad3)rL   rM   rN   rT   r   rè  ré  r   r   r   rd   r   r   r   r   re   rg   rV   rB   rB   rB   rC   rG  U  s   


õrG  c                   @   sX   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å  rj   rQ   ru   r7   Nræ  r   r™  r?  r`   ri   ÚOFPTC_DEPRECATED_MASK)rL   rM   rN   rT   r   rè  ré  r   r   r›  r   r   rV   rB   rB   rB   rC   rJ  e  s   


úrJ  Z
OFPMP_DESCZ
OFPMP_FLOWZOFPMP_AGGREGATEZOFPMP_TABLEZOFPMP_PORT_STATSZOFPMP_QUEUEZOFPMP_GROUPZOFPMP_GROUP_DESCZOFPMP_GROUP_FEATURESZOFPMP_METERZOFPMP_METER_CONFIGZOFPMP_METER_FEATURESZOFPMP_TABLE_FEATURESZOFPMP_PORT_DESCZOFPST_VENDORZREQ_MOREZ
REPLY_MOREc                
   @   sV   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 )ÚOFPMPRequestDescZOFPMP_REQUEST_DESCrå  rj   rQ   rv   r7   Nræ  r   r  r  r_   r?  ©rL   rM   rN   rT   r   rè  ré  r   r   r   Úofp_multipart_typesr   Úofpmp_request_flagsr   rV   rB   rB   rB   rC   rL  Š  s   


úrL  c                   @   sˆ   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 )ÚOFPMPReplyDescZOFPMP_REPLY_DESCrå  rj   rQ   rw   r7   Nræ  r   r  r  r_   r?  Zmfr_descr^   é   Zhw_descZsw_descZ
serial_numrS   Zdp_desc)rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   Úofpmp_reply_flagsr   r   rV   rB   rB   rB   rC   rP  •  s   







õrP  c                   @   sš   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 )ÚOFPMPRequestFlowZOFPMP_REQUEST_FLOWrå  rj   rQ   rv   r7   Nræ  r   r  r1   r  r_   rZ   r™  r%   r]   r<  r'   r=  rI  r(  r:  r)  )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rO  r   r›  r   r   rd   rg  r   r  rV   rB   rB   rB   rC   rS  ¥  s"   





òrS  c                   @   s¦   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d„ d�gZdd„ ZdS )ÚOFPFlowStatsZOFP_FLOW_STATSr7   Nr™  r   rZ   r-  r.  r,  r/  r0  r  r_   r>  r]   r(  r1  r2  r)  r?  c                 C   s   | j d | jj  S )NrÚ   r@  r  rB   rB   rC   rÃ   Í  rF   zOFPFlowStats.<lambda>ræ   c                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   Ï  s    zOFPFlowStats.extract_padding)rL   rM   rN   rT   r   r   r›  r   r   r   r   r  r   r–  rV   rJ   rB   rB   rB   rC   rT  ¸  s(   
ÿîrT  c                   @   sh   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d„ d�gZdS )ÚOFPMPReplyFlowZOFPMP_REPLY_FLOWrå  rj   rQ   rw   r7   Nræ  r   r  r1   r  r_   rZ   Z
flow_statsc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   Ý  rF   zOFPMPReplyFlow.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r   rT  rV   rB   rB   rB   rC   rU  Ó  s   


ÿùrU  c                   @   s   e Zd ZdZdZdS )ÚOFPMPRequestAggregateZOFPMP_REQUEST_AGGREGATEr5   N)rL   rM   rN   rT   r  rB   rB   rB   rC   rV  à  s   rV  c                   @   sv   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 )ÚOFPMPReplyAggregateZOFPMP_REPLY_AGGREGATErå  rj   rQ   rw   r7   Nræ  r   r  r5   r  r_   rZ   r1  r2  Ú
flow_countr]   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r   rV   rB   rB   rB   rC   rW  å  s   


örW  c                
   @   sV   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 )ÚOFPMPRequestTableZOFPMP_REQUEST_TABLErå  rj   rQ   rv   r7   Nræ  r   r  ri   r  r_   rZ   rM  rB   rB   rB   rC   rY  ô  s   


úrY  c                   @   sF   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d	„ Z
d
S )ÚOFPTableStatsZOFP_TABLE_STATSr™  r   rZ   Úactive_countZlookup_countZmatched_countc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   	  s    zOFPTableStats.extract_paddingN)rL   rM   rN   rT   r   r›  r   r   r   rV   rJ   rB   rB   rB   rC   rZ  ÿ  s   
ürZ  c                   @   sh   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ZdS )ÚOFPMPReplyTableZOFPMP_REPLY_TABLErå  rj   rQ   rw   r7   Nræ  r   r  ri   r  r_   rZ   Ztable_statsc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   	  rF   zOFPMPReplyTable.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r   rZ  rV   rB   rB   rB   rC   r\  	  s   


ÿùr\  c                   @   sh   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 )ÚOFPMPRequestPortStatsZOFPMP_REQUEST_PORT_STATSrå  rj   rQ   rv   r7   Nræ  r   r  r  r_   rZ   rY   r'   r?  ©rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rO  r   r   rd   rV   rB   rB   rB   rC   r]  	  s   



ør]  c                   @   sž   e Zd Zd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                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   &	  s    zOFPPortStats.extract_paddingZOFP_PORT_STATSrY   r   r?  Z
rx_packetsÚ
tx_packetsZrx_bytesÚtx_bytesZ
rx_droppedZ
tx_droppedZ	rx_errorsÚ	tx_errorsZrx_frame_errZrx_over_errZ
rx_crc_errZ
collisionsr-  r.  N)rL   rM   rN   rJ   rT   r   rd   r   r   r   rV   rB   rB   rB   rC   r_  %	  s&   
ñr_  c                   @   sh   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ZdS )ÚOFPMPReplyPortStatsZOFPMP_REPLY_PORT_STATSrå  rj   rQ   rw   r7   Nræ  r   r  r  r_   rZ   Z
port_statsc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   E	  rF   zOFPMPReplyPortStats.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r   r_  rV   rB   rB   rB   rC   rc  ;	  s   


ÿùrc  c                   @   sj   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 )ÚOFPMPRequestQueueZOFPMP_REQUEST_QUEUErå  rj   rQ   rv   r7   Nræ  r   r  rk   r  r_   rZ   rY   r'   rc  r%   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rO  r   r   rd   rd  rV   rB   rB   rB   rC   rd  H	  s   




ørd  c                	   @   sX   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
d„ Z
dS )ÚOFPQueueStatsZOFP_QUEUE_STATSrY   r   rc  ra  r`  rb  r-  r.  c                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   _	  s    zOFPQueueStats.extract_paddingN)rL   rM   rN   rT   r   rd   rd  r   r   rV   rJ   rB   rB   rB   rC   re  U	  s   

úre  c                   @   sh   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ZdS )ÚOFPMPReplyQueueZOFPMP_REPLY_QUEUErå  rj   rQ   rw   r7   Nræ  r   r  rk   r  r_   rZ   Zqueue_statsc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   m	  rF   zOFPMPReplyQueue.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r   re  rV   rB   rB   rB   rC   rf  c	  s   


ÿùrf  c                   @   sh   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 )ÚOFPMPRequestGroupZOFPMP_REQUEST_GROUPrå  rj   rQ   rv   r7   Nræ  r   r  rl   r  r_   rZ   rf  r'   r]   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rO  r   r   rg  rV   rB   rB   rB   rC   rg  p	  s   



ørg  c                   @   s,   e Zd ZdZeddƒeddƒgZdd„ ZdS )ÚOFPBucketStatsZOFP_BUCKET_STATSr1  r   r2  c                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   ‚	  s    zOFPBucketStats.extract_paddingN©rL   rM   rN   rT   r   rV   rJ   rB   rB   rB   rC   rh  }	  s
   ÿrh  c                   @   sx   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d„ d�g
Zdd„ ZdS )ÚOFPGroupStatsÚOFP_GROUP_STATSr7   NrZ   r   rf  Z	ref_countr]   r1  r2  r-  r.  Zbucket_statsc                 C   s
   | j d S ©NrÒ   r
  r  rB   rB   rC   rÃ   ’	  rF   zOFPGroupStats.<lambda>ræ   c                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   ”	  s    zOFPGroupStats.extract_padding)rL   rM   rN   rT   r   r   r   rg  r   r   r   rh  rV   rJ   rB   rB   rB   rC   rj  †	  s   
ÿ÷rj  c                   @   sh   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d„ d�gZdS )ÚOFPMPReplyGroupZOFPMP_REPLY_GROUPrå  rj   rQ   rw   r7   Nræ  r   r  rl   r  r_   rZ   Zgroup_statsc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   ¢	  rF   zOFPMPReplyGroup.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r   rj  rV   rB   rB   rB   rC   rm  ˜	  s   


ÿùrm  c                
   @   sV   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 )ÚOFPMPRequestGroupDescZOFPMP_REQUEST_GROUP_DESCrå  rj   rQ   rv   r7   Nræ  r   r  rm   r  r_   rZ   rM  rB   rB   rB   rC   rn  ¥	  s   


úrn  c                
   @   s\   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d„ d�gZdd„ ZdS )ÚOFPGroupDescZOFP_GROUP_DESCr7   NrQ   r   rB  rC  rD  rE  r   r?  rf  rF  c                 C   s
   | j d S r  r
  r  rB   rB   rC   rÃ   º	  rF   zOFPGroupDesc.<lambda>ræ   c                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   ¼	  s    zOFPGroupDesc.extract_padding)rL   rM   rN   rT   r   r   r   r   rg  r   r°  rV   rJ   rB   rB   rB   rC   ro  °	  s   ý
ÿù
ro  c                   @   sh   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d„ d�gZdS )ÚOFPMPReplyGroupDescZOFPMP_REPLY_GROUP_DESCrå  rj   rQ   rw   r7   Nræ  r   r  rm   r  r_   rZ   Zgroup_descsc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   Ê	  rF   zOFPMPReplyGroupDesc.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r   ro  rV   rB   rB   rB   rC   rp  À	  s   


ÿùrp  c                
   @   sV   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 )ÚOFPMPRequestGroupFeaturesZOFPMP_REQUEST_GROUP_FEATURESrå  rj   rQ   rv   r7   Nræ  r   r  rR   r  r_   rZ   rM  rB   rB   rB   rC   rq  Í	  s   


úrq  c                 C   s   g | ]}|d kr|‘qS )r9  rB   )rù   ÚvrB   rB   rC   Ú
<listcomp>Ø	  s   ÿrs  c                   @   sÆ   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 )ÚOFPMPReplyGroupFeaturesZOFPMP_REPLY_GROUP_FEATURESrå  rj   rQ   rw   r7   Nræ  r   r  rR   r  r_   rZ   ÚtypesrS   )r%   ZSELECTZINDIRECTZFFr  )ZSELECT_WEIGHTZSELECT_LIVENESSZCHAININGZCHAINING_CHECKSZmax_group_allZmax_group_selectZmax_group_indirectZmax_group_ffZactions_allZactions_selectZactions_indirectZ
actions_ff)rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   Úofp_action_types_flagsrV   rB   rB   rB   rC   rt  Ü	  s&   


ért  c                   @   sh   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 )ÚOFPMPRequestMeterZOFPMP_REQUEST_METERrå  rj   rQ   rv   r7   Nræ  r   r  rn   r  r_   rZ   r£  r%   r]   ©rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rO  r   r   r¤  rV   rB   rB   rB   rC   rw  ø	  s   



ørw  c                   @   s,   e Zd ZdZeddƒeddƒgZdd„ ZdS )ÚOFPMeterBandStatsZOFP_METER_BAND_STATSZpacket_band_countr   Zbyte_band_countc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   

  s    z!OFPMeterBandStats.extract_paddingNri  rB   rB   rB   rC   ry  
  s
   ÿry  c                   @   sz   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d„ d�g	Zdd„ Zdd„ ZdS )ÚOFPMeterStatsrk  r£  r1   r7   Nr?  r   rÖ   rX  Zpacket_in_countZbyte_in_countr-  r.  Z
band_statsc                 C   s
   | j d S rl  r
  r  rB   rB   rC   rÃ   
  rF   zOFPMeterStats.<lambda>ræ   c                 C   sF   | j d u r>t |ƒt |ƒ }|d d… t d|¡ |dd …  }|| S r½  r  r¾  rB   rB   rC   r  
  s    
$zOFPMeterStats.post_buildc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   !
  s    zOFPMeterStats.extract_padding)rL   rM   rN   rT   r   r¤  r   r   r   r   r   ry  rV   r  rJ   rB   rB   rB   rC   rz  
  s   

ÿørz  c                   @   sh   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d„ d�gZdS )ÚOFPMPReplyMeterZOFPMP_REPLY_METERrå  rj   rQ   rw   r7   Nræ  r   r  rn   r  r_   rZ   Zmeter_statsc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   /
  rF   zOFPMPReplyMeter.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r   rz  rV   rB   rB   rB   rC   r{  %
  s   


ÿùr{  c                   @   sh   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 )ÚOFPMPRequestMeterConfigZOFPMP_REQUEST_METER_CONFIGrå  rj   rQ   rv   r7   Nræ  r   r  ro   r  r_   rZ   r£  r%   r]   rx  rB   rB   rB   rC   r|  2
  s   



ør|  c                	   @   sP   e Zd ZdZeddƒedddg d¢ƒedd	eƒed
g e	dd„ d�gZ
dd„ ZdS )ÚOFPMeterConfigZOFP_METER_CONFIGr7   Nr  r   r_   ©ZKBPSÚPKTPSÚBURSTÚSTATSr£  r1   Úbandsc                 C   s
   | j d S r  r
  r  rB   rB   rC   rÃ   H
  rF   zOFPMeterConfig.<lambda>ræ   c                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   J
  s    zOFPMeterConfig.extract_padding)rL   rM   rN   rT   r   r   r   r¤  r   rÂ  rV   rJ   rB   rB   rB   rC   r}  ?
  s   
ÿú	r}  c                   @   sh   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d„ d�gZdS )ÚOFPMPReplyMeterConfigZOFPMP_REPLY_METER_CONFIGrå  rj   rQ   rw   r7   Nræ  r   r  ro   r  r_   rZ   Zmeter_configsc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   X
  rF   zOFPMPReplyMeterConfig.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r   r}  rV   rB   rB   rB   rC   rƒ  N
  s   


ÿùrƒ  c                
   @   sV   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 )ÚOFPMPRequestMeterFeaturesZOFPMP_REQUEST_METER_FEATURESrå  rj   rQ   rv   r7   Nræ  r   r  rp   r  r_   rZ   rM  rB   rB   rB   rC   r„  [
  s   


úr„  c                   @   s–   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 )ÚOFPMPReplyMeterFeaturesZOFPMP_REPLY_METER_FEATURESrå  rj   rQ   rw   r7   Nræ  r   r  rp   r  r_   rZ   Z	max_meterZ
band_typesrS   )ZDROPZDSCP_REMARKZEXPERIMENTERr  )ZKPBSr  r€  r�  Z	max_bandsZ	max_colorr]   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r	   r   rV   rB   rB   rB   rC   r…  f
  s   


ïr…  c                   @   s.   e Zd ZdZed	dd„ƒZdd„ Zdd„ ZdS )
ÚOFPTFPTz0Dummy OpenFlow3 Table Features Properties HeaderNc                 O   s8   |r4t |ƒdkr4t d|d d… ¡d }t |t¡S tS r4   )r7   r8   r9   Úofp_table_features_prop_clsr;   r   r<   rB   rB   rC   rD   ‚
  s    zOFPTFPT.dispatch_hookc                 C   sf   | j }|d u rBt |ƒt |ƒ }|d d… t d|¡ |dd …  }d|d  d }|d| 7 }|| S r  r  r  rB   rB   rC   r  ‰
  s    $zOFPTFPT.post_buildc                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   “
  s    zOFPTFPT.extract_padding)N)rL   rM   rN   rT   rO   rD   r  rJ   rB   rB   rB   rC   r†  
  s
   
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_MISS)r   r1   r5   ri   rj   rk   rl   rm   rR   ro   rq   rr   rs   rt   éþÿ  r0   c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTInstructionsrˆ  rQ   r   r7   NÚinstruction_idsc                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ   ®
  rF   zOFPTFPTInstructions.<lambda>ræ   ©rL   rM   rN   rT   r   r   r¦  rV   rB   rB   rB   rC   r™  ©
  s   ÿþr™  c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTInstructionsMissr‰  rQ   r1   r7   Nrš  c                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ   ¶
  rF   z OFPTFPTInstructionsMiss.<lambda>ræ   r›  rB   rB   rB   rC   rœ  ±
  s   ÿþrœ  c                   @   s&   e Zd ZdZeddeƒgZdd„ ZdS )Ú
OFPTableIDZOFP_TABLE_IDr™  r   c                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   ½
  s    zOFPTableID.extract_paddingN)rL   rM   rN   rT   r   r›  rV   rJ   rB   rB   rB   rC   r�  ¹
  s   r�  c                   @   s6   e Zd ZdZeddƒeddƒeddedd„ d	�gZdS )
ÚOFPTFPTNextTablesrŠ  rQ   r5   r7   NÚnext_table_idsc                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ   Æ
  rF   zOFPTFPTNextTables.<lambda>ræ   ©rL   rM   rN   rT   r   r   r�  rV   rB   rB   rB   rC   rž  Á
  s   ÿþrž  c                   @   s6   e Zd ZdZeddƒeddƒeddedd„ d	�gZdS )
ÚOFPTFPTNextTablesMissr‹  rQ   ri   r7   NrŸ  c                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ   Î
  rF   zOFPTFPTNextTablesMiss.<lambda>ræ   r   rB   rB   rB   rC   r¡  É
  s   ÿþr¡  c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTWriteActionsrŒ  rQ   rj   r7   NÚ
action_idsc                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ   Ö
  rF   zOFPTFPTWriteActions.<lambda>ræ   ©rL   rM   rN   rT   r   r   ro  rV   rB   rB   rB   rC   r¢  Ñ
  s   ÿþr¢  c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTWriteActionsMissr�  rQ   rk   r7   Nr£  c                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ   Þ
  rF   z OFPTFPTWriteActionsMiss.<lambda>ræ   r¤  rB   rB   rB   rC   r¥  Ù
  s   ÿþr¥  c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTApplyActionsrŽ  rQ   rl   r7   Nr£  c                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ   æ
  rF   zOFPTFPTApplyActions.<lambda>ræ   r¤  rB   rB   rB   rC   r¦  á
  s   ÿþr¦  c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTApplyActionsMissr�  rQ   rm   r7   Nr£  c                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ   î
  rF   z OFPTFPTApplyActionsMiss.<lambda>ræ   r¤  rB   rB   rB   rC   r§  é
  s   ÿþr§  c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTMatchr�  rQ   rR   r7   NÚoxm_idsc                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ   ö
  rF   zOFPTFPTMatch.<lambda>ræ   ©rL   rM   rN   rT   r   r   r  rV   rB   rB   rB   rC   r¨  ñ
  s   ÿþr¨  c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTWildcardsr‘  rQ   ro   r7   Nr©  c                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ   þ
  rF   zOFPTFPTWildcards.<lambda>ræ   rª  rB   rB   rB   rC   r«  ù
  s   ÿþr«  c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTWriteSetFieldr’  rQ   rq   r7   Nr©  c                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ     rF   zOFPTFPTWriteSetField.<lambda>ræ   rª  rB   rB   rB   rC   r¬    s   ÿþr¬  c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTWriteSetFieldMissr“  rQ   rr   r7   Nr©  c                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ     rF   z!OFPTFPTWriteSetFieldMiss.<lambda>ræ   rª  rB   rB   rB   rC   r­  	  s   ÿþr­  c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTApplySetFieldr”  rQ   rs   r7   Nr©  c                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ     rF   zOFPTFPTApplySetField.<lambda>ræ   rª  rB   rB   rB   rC   r®    s   ÿþr®  c                   @   s6   e Zd ZdZeddƒeddƒedg edd„ d	�gZdS )
ÚOFPTFPTApplySetFieldMissr•  rQ   rt   r7   Nr©  c                 C   s
   | j d S rþ   r
  r  rB   rB   rC   rÃ     rF   z!OFPTFPTApplySetFieldMiss.<lambda>ræ   rª  rB   rB   rB   rC   r¯    s   ÿþr¯  c                
   @   sF   e Zd ZdZeddƒeddƒeddƒeddƒed	ded
d„ d�gZdS )ÚOFPTFPTExperimenterr–  rQ   r˜  r7   Nrn  r   r  Úexperimenter_datac                 C   s
   | j d S ©Nrq   r
  r  rB   rB   rC   rÃ   (  rF   zOFPTFPTExperimenter.<lambda>ræ   ©	rL   rM   rN   rT   r   r   r   r   rV   rB   rB   rB   rC   r°  !  s   ÿür°  c                
   @   sF   e Zd ZdZeddƒeddƒeddƒeddƒed	ded
d„ d�gZdS )ÚOFPTFPTExperimenterMissr—  rQ   r0   r7   Nrn  r   r  r±  c                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   2  rF   z OFPTFPTExperimenterMiss.<lambda>ræ   r³  rB   rB   rB   rC   r´  +  s   ÿür´  c                   @   s|   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d„ d�g	Zdd„ ZdS )ÚOFPTableFeaturesZOFP_TABLE_FEATURESr7   Nr™  r   r?  rÒ   Z
table_namer^   rS   Zmetadata_matchZmetadata_writer`   ZOFPTC_NO_MASKrK  )r   ri   Zmax_entriesr¼  c                 C   s
   | j d S )NrÝ   r
  r  rB   rB   rC   rÃ   S  rF   zOFPTableFeatures.<lambda>ræ   c                 C   s   d|fS rE   rB   rG   rB   rB   rC   rJ   U  s    z OFPTableFeatures.extract_padding)rL   rM   rN   rT   r   r   r›  r   r   r   r   r   r   r†  rV   rJ   rB   rB   rB   rC   rµ  G  s    


ÿÿ÷rµ  c                   @   sh   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d„ d�gZdS )ÚOFPMPRequestTableFeaturesZOFPMP_REQUEST_TABLE_FEATURESrå  rj   rQ   rv   r7   Nræ  r   r  rq   r  r_   rZ   Útable_featuresc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   c  rF   z"OFPMPRequestTableFeatures.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rO  r   r   rµ  rV   rB   rB   rB   rC   r¶  Y  s   


ÿùr¶  c                   @   sh   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d„ d�gZdS )ÚOFPMPReplyTableFeaturesZOFPMP_REPLY_TABLE_FEATURESrå  rj   rQ   rw   r7   Nræ  r   r  rq   r  r_   rZ   r·  c                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   p  rF   z OFPMPReplyTableFeatures.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r   rµ  rV   rB   rB   rB   rC   r¸  f  s   


ÿùr¸  c                   @   sh   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 )ÚOFPMPRequestPortDescZOFPMP_REQUEST_PORT_DESCrå  rj   rQ   rv   r7   Nræ  r   r  rr   r  r_   rZ   rY   r?  r^  rB   rB   rB   rC   r¹  v  s   



ør¹  c                   @   sh   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ZdS )ÚOFPMPReplyPortDescZOFPMP_REPLY_PORT_DESCrå  rj   rQ   rw   r7   Nræ  r   r  rr   r  r_   rZ   Zportsc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   �  rF   zOFPMPReplyPortDesc.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   r   rX   rV   rB   rB   rB   rC   rº  ƒ  s   


ÿùrº  c                   @   sf   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 )ÚOFPMPRequestExperimenterZOFPST_REQUEST_EXPERIMENTERrå  rj   rQ   rv   r7   Nræ  r   r  r0   r  r_   rZ   rn  r  rM  rB   rB   rB   rC   r»  �  s   


ør»  c                   @   sf   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 )ÚOFPMPReplyExperimenterZOFPST_REPLY_EXPERIMENTERrå  rj   rQ   rw   r7   Nræ  r   r  r0   r  r_   rZ   rn  r  )rL   rM   rN   rT   r   rè  ré  r   r   r   rN  r   rR  r   rV   rB   rB   rB   rC   r¼  �  s   


ør¼  c                   @   s8   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å  rj   rQ   rx   r7   Nræ  r   r  rB   rB   rB   rC   r½  Ï  s   

ýr½  c                   @   s8   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å  rj   rQ   ry   r7   Nræ  r   r  rB   rB   rB   rC   r¾  ×  s   

ýr¾  c                   @   sJ   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å  rj   rQ   rz   r7   Nræ  r   rY   r'   r?  )rL   rM   rN   rT   r   rè  ré  r   r   r   rd   r   rV   rB   rB   rB   rC   r¿  ß  s   


ûr¿  c                   @   s\   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d„ d�gZdS )ÚOFPTQueueGetConfigReplyrÝ  rå  rj   rQ   r{   r7   Nræ  r   r=  r?  Úqueuesc                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   ò  rF   z OFPTQueueGetConfigReply.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   rd   r   r   r»  rV   rB   rB   rB   rC   rÀ  é  s   


ÿúrÀ  c                   @   s\   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å  rj   rQ   r|   r7   Nræ  r   ZroleZOFPCR_ROLE_NOCHANGEZOFPCR_ROLE_EQUALZOFPCR_ROLE_MASTERZOFPCR_ROLE_SLAVEr   r?  Zgeneration_id)rL   rM   rN   rT   r   rè  ré  r   r   r   r   r   rV   rB   rB   rB   rC   rÂ  õ  s   

ý÷rÂ  c                   @   s   e Zd ZdZdZdS )ÚOFPTRoleReplyrß  r}   N©rL   rM   rN   rT   rQ   rB   rB   rB   rC   rÃ    s   rÃ  c                   @   s8   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å  rj   rQ   r~   r7   rR   ræ  r   Nr  rB   rB   rB   rC   rÅ    s   

ýrÅ  )ZNO_MATCHZACTIONZINVALID_TTL)ZADDÚDELETEZMODIFY)ZIDLE_TIMEOUTZHARD_TIMEOUTrÆ  ZGROUP_DELETEc                   @   s€   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å  rj   rQ   r   r7   rS   ræ  r   Zpacket_in_mask_masterZpacket_in_mask_slaveZport_status_mask_masterZport_status_mask_slaveZflow_removed_mask_masterZflow_removed_mask_slaveN)rL   rM   rN   rT   r   rè  ré  r   r   r   Úofp_packet_in_reasonÚofp_port_reasonÚofp_flow_removed_reasonrV   rB   rB   rB   rC   rÇ    s   

÷rÇ  c                   @   s   e Zd ZdZdZdS )ÚOFPTSetAsyncrâ  r€   NrÄ  rB   rB   rB   rC   rË  ,  s   rË  c                   @   sv   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d„ d�gZdS )ÚOFPTMeterModrã  rå  rj   rQ   r�   r7   Nræ  r   r;  Z	OFPMC_ADDZOFPMC_MODIFYZOFPMC_DELETErÈ  r  r_   r~  r£  r1   r‚  c                 C   s
   | j d S r²  r
  r  rB   rB   rC   rÃ   @  rF   zOFPTMeterMod.<lambda>ræ   )rL   rM   rN   rT   r   rè  ré  r   r   r   r   r   r¤  r   rÂ  rV   rB   rB   rB   rC   rÌ  1  s   

þ
ÿôrÌ  )r   r5   ri   rj   rk   rl   rm   rR   rn   ro   rp   rq   rr   rs   rt   r_   ru   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   (Æ  Ú__doc__Ú
__future__r   rê   r8   Zscapy.compatr   r   Zscapy.configr   Zscapy.fieldsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zscapy.layers.l2r   Zscapy.packetr   r   r   Zscapy.libs.sixZlibsÚsixZscapy.contrib.openflowr    r!   r"   r#   r$   rd   rg  r›  rd  r¤  r*  rA  rU   r3   rP   r:   re   rf   rg   rX   r»   r¼   rÆ   r¿   r½   rÂ   ÚitemsrÀ   r=   rÇ   rÈ   rÅ   r‹   ZOFBInPortIDZOFBInPortHMZOFBInPortHMIDr�   ZOFBInPhyPortIDZOFBInPhyPortHMZOFBInPhyPortHMIDrŽ   ZOFBMetadataIDZOFBMetadataHMZOFBMetadataHMIDr�   ZOFBEthDstIDZOFBEthDstHMZOFBEthDstHMIDr‘   ZOFBEthSrcIDZOFBEthSrcHMZOFBEthSrcHMIDr’   ZOFBEthTypeIDZOFBEthTypeHMZOFBEthTypeHMIDr“   ZOFBVLANVIDIDZOFBVLANVIDHMZOFBVLANVIDHMIDr•   ZOFBVLANPCPIDZOFBVLANPCPHMZOFBVLANPCPHMIDr—   ZOFBIPDSCPIDZOFBIPDSCPHMZOFBIPDSCPHMIDr˜   Z
OFBIPECNIDZ
OFBIPECNHMZOFBIPECNHMIDr™   ZOFBIPProtoIDZOFBIPProtoHMZOFBIPProtoHMIDrš   ZOFBIPv4SrcIDZOFBIPv4SrcHMZOFBIPv4SrcHMIDr›   ZOFBIPv4DstIDZOFBIPv4DstHMZOFBIPv4DstHMIDrœ   ZOFBTCPSrcIDZOFBTCPSrcHMZOFBTCPSrcHMIDr�   ZOFBTCPDstIDZOFBTCPDstHMZOFBTCPDstHMIDrž   ZOFBUDPSrcIDZOFBUDPSrcHMZOFBUDPSrcHMIDrŸ   ZOFBUDPDstIDZOFBUDPDstHMZOFBUDPDstHMIDr    ZOFBSCTPSrcIDZOFBSCTPSrcHMZOFBSCTPSrcHMIDr¡   ZOFBSCTPDstIDZOFBSCTPDstHMZOFBSCTPDstHMIDr¢   ZOFBICMPv4TypeIDZOFBICMPv4TypeHMZOFBICMPv4TypeHMIDr£   ZOFBICMPv4CodeIDZOFBICMPv4CodeHMZOFBICMPv4CodeHMIDr¤   Z
OFBARPOPIDZ
OFBARPOPHMZOFBARPOPHMIDr¥   ZOFBARPSPAIDZOFBARPSPAHMZOFBARPSPAHMIDr¦   ZOFBARPTPAIDZOFBARPTPAHMZOFBARPTPAHMIDr§   ZOFBARPSHAIDZOFBARPSHAHMZOFBARPSHAHMIDr¨   ZOFBARPTHAIDZOFBARPTHAHMZOFBARPTHAHMIDr©   ZOFBIPv6SrcIDZOFBIPv6SrcHMZOFBIPv6SrcHMIDrª   ZOFBIPv6DstIDZOFBIPv6DstHMZOFBIPv6DstHMIDr«   ZOFBIPv6FLabelIDZOFBIPv6FLabelHMZOFBIPv6FLabelHMIDr¬   ZOFBICMPv6TypeIDZOFBICMPv6TypeHMZOFBICMPv6TypeHMIDr­   ZOFBICMPv6CodeIDZOFBICMPv6CodeHMZOFBICMPv6CodeHMIDr®   ZOFBIPv6NDTargetIDZOFBIPv6NDTargetHMZOFBIPv6NDTargetHMIDr¯   ZOFBIPv6NDSLLIDZOFBIPv6NDSLLHMZOFBIPv6NDSLLHMIDr°   ZOFBIPv6NDTLLIDZOFBIPv6NDTLLHMZOFBIPv6NDTLLHMIDr±   ZOFBMPLSLabelIDZOFBMPLSLabelHMZOFBMPLSLabelHMIDr³   ZOFBMPLSTCIDZOFBMPLSTCHMZOFBMPLSTCHMIDrµ   ZOFBMPLSBoSIDZOFBMPLSBoSHMZOFBMPLSBoSHMIDr¶   ZOFBPBBISIDIDZOFBPBBISIDHMZOFBPBBISIDHMIDr·   ZOFBTunnelIDIDZOFBTunnelIDHMZOFBTunnelIDHMIDr¸   ZOFBIPv6ExtHdrIDZOFBIPv6ExtHdrHMZOFBIPv6ExtHdrHMIDrí   rä   r  r  r  r  r@  r:  r<  rB  rD  rF  rH  rK  rL  rO  rP  rR  rT  rU  rW  rY  rZ  r[  r\  r]  r_  r`  ra  rb  re  rh  ri  rj  rk  rl  rm  r;  ro  rq  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r€  r�  r‚  rƒ  r„  r…  r†  r‡  rˆ  r‰  rŠ  r‹  rŒ  r�  rŽ  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¹  r¶  r»  Zofp_meter_band_typesrÂ  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  r  r  r  r  r  r#  r%  r+  r3  r5  r9  rA  rG  rJ  rN  rO  rR  rL  rP  rS  rT  rU  rV  rW  rY  rZ  r\  r]  r_  rc  rd  re  rf  rg  rh  rj  rm  rn  ro  rp  rq  Ú
itervaluesrv  rt  rw  ry  rz  r{  r|  r}  rƒ  r„  r…  r†  Zofp_table_features_prop_typesr™  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  r½  r¾  r¿  rÀ  rÂ  rÃ  rÅ  rÈ  rÉ  rÊ  rÇ  rË  rÌ  r  rB   rB   rB   rC   Ú<module>   sˆ  `ù	þÿýýÙ)Ù*'
à#Oã 
ã"ã#ú
				ú
ú
ÿ
	ÿ
þ
	
	þ
	ü
ã
 ò
ò

 ò


		ñ


ñ
ò
ò

ã