§
    w“&by  ã                   ó°  — d Z ddlZddlZddlZ	  ej        ej        ej        d¦  «        Ze                     d¦  «         [d„ Zd„ Z	d„ Z
d4d„Znb# ej        $ rU 	 ddlZd	„ Zd
„ Z	d„ Z
d4d„Zn?# e$ r7 ddlZ ej        d¦  «        Z G d„ dej        ¦  «        Zd„ Zd„ Z	d„ Z
d4d„ZY nw xY wY nw xY wdZdZdZdZdZdZdZdZdZ G d„ 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"dZ#dZ$dZ%dZ&dZ'd%Z(d&Z)d'Z*dZ+d(Z,d)Z-d*Z.d+Z/d,Z0d-Z1d.Z2dZ3 G d/„ d0¦  «        Z4 G d1„ d2¦  «        Z5d3„ Z6dS )5z‡
Netlink message generation/parsing

Copyright 2007        Johannes Berg <johannes@sipsolutions.net>

GPLv2+; See copying for details.
é    N)r   r   c                 ó0   — |                       |¦  «         d S ©N)Úbind©Ú
descriptorÚaddrs     ú//usr/lib/python3/dist-packages/iotop/netlink.pyÚ_nl_bindr
      s   € Ø�Š˜ÑÔÐÐÐó    c                 ó*   — |                       ¦   «         S r   )Úgetsockname©r   s    r	   Ú_nl_getsocknamer      s   € Ø×%Ò%Ñ'Ô'Ð'r   c                 ó0   — |                       |¦  «         d S r   )Úsend©r   Úmsgs     r	   Ú_nl_sendr      s   € Ø�Š˜ÑÔÐÐÐr   é @  c                 ó,   — |                       |¦  «        S r   )Úrecvfrom©r   Úbufss     r	   Ú_nl_recvr      s   € Ø×"Ò" 4Ñ(Ô(Ð(r   c                 ó`   — t          j        |                      ¦   «         |d         ¦  «         d S ©Né   )Ú_netlinkr   Úfilenor   s     r	   r
   r
   #   s*   € ÝŒM˜*×+Ò+Ñ-Ô-¨t°A¬wÑ7Ô7Ð7Ð7Ð7r   c                 óN   — t          j        |                      ¦   «         ¦  «        S r   )r   r   r   r   s    r	   r   r   &   s   € ÝÔ'¨
×(9Ò(9Ñ(;Ô(;Ñ<Ô<Ð<r   c                 óT   — t          j        |                      ¦   «         |¦  «         d S r   )r   r   r   r   s     r	   r   r   )   s&   € ÝŒM˜*×+Ò+Ñ-Ô-¨sÑ3Ô3Ð3Ð3Ð3r   c                 óP   — t          j        |                      ¦   «         |¦  «        S r   )r   r   r   r   s     r	   r   r   ,   s!   € ÝÔ$ Z×%6Ò%6Ñ%8Ô%8¸$Ñ?Ô?Ð?r   c                   óR   — e Zd Zdej        fdej        fdej        fdej        fgZdS )ÚSOCKADDR_NLÚ	nl_familyÚnl_padÚnl_pidÚ	nl_groupsN)Ú__name__Ú
__module__Ú__qualname__ÚctypesÚc_ushortÚc_intÚ_fields_© r   r	   r$   r$   4   s=   € € € € € Ø$ f¤oÐ6Ø! f¤oÐ6Ø! f¤lÐ3Ø$ f¤lÐ3ð5ˆHˆHˆHr   r$   c                 ó   — t          t          j        dt          j        ¦   «         d¦  «        }t
                               |                      ¦   «         t          j	        |¦  «        t          j
        |¦  «        ¦  «        S ©Nr   )r$   ÚsocketÚ
AF_NETLINKÚosÚgetpidÚlibcr   r   r,   ÚpointerÚsizeofr   s     r	   r
   r
   :   s\   € Ý�vÔ0°!µR´Y±[´[À!ÑDÔDˆDÝ—9’9˜Z×.Ò.Ñ0Ô0Ý#œ^¨DÑ1Ô1Ý#œ]¨4Ñ0Ô0ñ2ô 2ð 2r   c                 ó2  — t          dddd¦  «        }t          j        t          j        |¦  «        ¦  «        }t                               |                      ¦   «         t          j        |¦  «        t          j        |¦  «        ¦  «         |j        |j	        fS r2   )
r$   r,   r.   r9   r7   r   r   r8   r'   r(   )r   r   Úlens      r	   r   r   @   s   € Ý˜q ! Q¨Ñ*Ô*ˆDÝ”,�vœ}¨TÑ2Ô2Ñ3Ô3ˆCÝ×Ò˜Z×.Ò.Ñ0Ô0Ý#œ^¨DÑ1Ô1Ý#œ^¨CÑ0Ô0ñ2ô 2ð 2ð ”; ¤Ð.Ð.r   c                 óz   — t                                |                      ¦   «         |t          |¦  «        d¦  «        S r2   )r7   r   r   r;   r   s     r	   r   r   H   s,   € Ý—9’9˜Z×.Ò.Ñ0Ô0°#µs¸3±x´xÀÑCÔCÐCr   c           
      ó²  — t          dddd¦  «        }t          j        t          j        |¦  «        ¦  «        }t          j        |¦  «        }t
                               |                      ¦   «         ||dt          j        |¦  «        t          j        |¦  «        ¦  «        }t          j	        t          j        |¦  «        |¦  «        }||j
        |j        ffS r2   )r$   r,   r.   r9   Úcreate_string_bufferr7   r   r   r8   Ú	string_atr'   r(   )r   r   r   r;   ÚbufÚrÚrets          r	   r   r   K   s³   € Ý˜q ! Q¨Ñ*Ô*ˆDÝ”,�vœ}¨TÑ2Ô2Ñ3Ô3ˆCÝÔ-¨dÑ3Ô3ˆCå—’˜j×/Ò/Ñ1Ô1Ø! 4¨Ý$œn¨TÑ2Ô2µF´NÀ3Ñ4GÔ4GñIô IˆAõ Ô"¥6¤>°#Ñ#6Ô#6¸Ñ:Ô:ˆCØ˜œ d¤nÐ5Ð5Ð5r   r   é   é   é   é   é   c                   óJ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZdS )ÚAttrc                 ór   — || _         t          |¦  «        rt          j        |g|¢R Ž | _        d S || _        d S r   )Útyper;   ÚstructÚpackÚdata)ÚselfÚ	attr_typerN   Úvaluess       r	   Ú__init__zAttr.__init__g   s?   € ØˆŒ	Ýˆv‰;Œ;ð 	Ýœ DÐ2¨6Ð2Ð2Ð2ˆDŒIˆIˆIàˆDŒIˆIˆIr   c                 óÆ   — t          j        dt          | j        ¦  «        dz   | j        ¦  «        }t          | j        ¦  «        }|dz   dz
  dz  |z
  }|| j        z   d|z  z   S )NÚHHrD   r   éüÿÿÿó    )rL   rM   r;   rN   rK   )rO   ÚhdrÚlengthÚpads       r	   Ú_dumpz
Attr._dumpn   s]   € ÝŒk˜$¥ D¤I¡¤°Ñ 2°D´IÑ>Ô>ˆÝ�T”Y‘”ˆØ˜‘
˜Q‘ "Ñ$¨Ñ.ˆØ�T”Y‰ ¨¡Ñ,Ð,r   c                 ó>   — d| j         t          | j        ¦  «        fz  S )Nz<Attr type %d, data "%s">)rK   ÚreprrN   ©rO   s    r	   Ú__repr__zAttr.__repr__t   s   € Ø*¨d¬i½¸d¼i¹¼Ð-IÑIÐIr   c                 óB   — t          j        d| j        ¦  «        d         S )NÚHr   ©rL   ÚunpackrN   r]   s    r	   Úu16zAttr.u16w   ó   € ÝŒ}˜S $¤)Ñ,Ô,¨QÔ/Ð/r   c                 óB   — t          j        d| j        ¦  «        d         S )NÚhr   ra   r]   s    r	   Ús16zAttr.s16z   rd   r   c                 óB   — t          j        d| j        ¦  «        d         S )NÚIr   ra   r]   s    r	   Úu32zAttr.u32}   rd   r   c                 óB   — t          j        d| j        ¦  «        d         S )NÚir   ra   r]   s    r	   Ús32zAttr.s32€   rd   r   c                 ó   — | j         S r   )rN   r]   s    r	   ÚstrzAttr.strƒ   s
   € ØŒyÐr   c                 óB   — | j                              d¦  «        d         S )Nú r   )rN   Úsplitr]   s    r	   ÚnulstrzAttr.nulstr†   s   € ØŒy�Š˜tÑ$Ô$ QÔ'Ð'r   c                 ó*   — t          | j        ¦  «        S r   )Úparse_attributesrN   r]   s    r	   ÚnestedzAttr.nested‰   s   € Ý ¤	Ñ*Ô*Ð*r   N)r)   r*   r+   rR   rZ   r^   rc   rg   rj   rm   ro   rs   rv   r0   r   r	   rI   rI   f   s­   € € € € € ðð ð ð-ð -ð -ðJð Jð Jð0ð 0ð 0ð0ð 0ð 0ð0ð 0ð 0ð0ð 0ð 0ðð ð ð(ð (ð (ð+ð +ð +ð +ð +r   rI   c                   ó   — e Zd Zd„ ZdS )ÚStrAttrc                 ó†   — t                                | |dt          |¦  «        z  |                     d¦  «        ¦  «         d S )Nz%dsúutf-8©rI   rR   r;   Úencode©rO   rP   rN   s      r	   rR   zStrAttr.__init__Ž   s7   € Ý�Š�d˜I u­s°4©y¬yÑ'8¸$¿+º+ÀgÑ:NÔ:NÑOÔOÐOÐOÐOr   N©r)   r*   r+   rR   r0   r   r	   rx   rx   �   s(   € € € € € ðPð Pð Pð Pð Pr   rx   c                   ó   — e Zd Zd„ ZdS )Ú
NulStrAttrc                 óˆ   — t                                | |dt          |¦  «        z  |                     d¦  «        d¦  «         d S )Nz%dsBrz   r   r{   r}   s      r	   rR   zNulStrAttr.__init__“   sI   € Ý�Š�dØ ­#¨d©)¬)Ñ!3°T·[²[ÀÑ5IÔ5IÈ1ñ	Nô 	Nð 	Nð 	Nð 	Nr   Nr~   r0   r   r	   r€   r€   ’   s(   € € € € € ðNð Nð Nð Nð Nr   r€   c                   ó   — e Zd Zd„ ZdS )ÚU32Attrc                 ó@   — t                                | |d|¦  «         d S )Nri   ©rI   rR   ©rO   rP   Úvals      r	   rR   zU32Attr.__init__™   ó    € Ý�Š�d˜I s¨CÑ0Ô0Ð0Ð0Ð0r   Nr~   r0   r   r	   rƒ   rƒ   ˜   ó#   € € € € € ð1ð 1ð 1ð 1ð 1r   rƒ   c                   ó   — e Zd Zd„ ZdS )ÚU8Attrc                 ó@   — t                                | |d|¦  «         d S )NÚBr…   r†   s      r	   rR   zU8Attr.__init__ž   rˆ   r   Nr~   r0   r   r	   r‹   r‹   �   r‰   r   r‹   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚNestedc                 ó"   — || _         || _        d S r   )ÚattrsrK   )rO   rP   r‘   s      r	   rR   zNested.__init__£   s   € ØˆŒ
ØˆŒ	ˆ	ˆ	r   c                 óö   — g }| j         D ])}|                     |                     ¦   «         ¦  «         Œ*d                     |¦  «        }t	          |¦  «        }t          j        d|dz   | j        ¦  «        }||z   S )NÚ rT   rD   )r‘   ÚappendrZ   Újoinr;   rL   rM   rK   )rO   ÚcontentsÚattrrX   rW   s        r	   rZ   zNested._dump§   st   € ØˆØ”Jð 	*ð 	*ˆDØ�OŠO˜DŸJšJ™LœLÑ)Ô)Ð)Ð)Ø—7’7˜8Ñ$Ô$ˆÝ�X‘”ˆÝŒk˜$ ¨¡
¨D¬IÑ6Ô6ˆØ�X‰~Ðr   N)r)   r*   r+   rR   rZ   r0   r   r	   r�   r�   ¢   s2   € € € € € ðð ð ðð ð ð ð r   r�   é   é   é   é	   é
   é   é   é   é   é   c                   ó"   — e Zd Zdd„Zd„ Zd„ ZdS )ÚMessager   éÿÿÿÿNc                 ó  — || _         || _        || _        d| _        |pg }t	          |t
          ¦  «        rJg }|D ])}|                     |                     ¦   «         ¦  «         Œ*d                     |¦  «        | _	        d S || _	        d S )Nr¤   r   )
rK   ÚflagsÚseqÚpidÚ
isinstanceÚlistr”   rZ   r•   Úpayload)rO   Úmsg_typer¦   r§   r«   r–   r—   s          r	   rR   zMessage.__init__Ä   sŒ   € ØˆŒ	ØˆŒ
ØˆŒØˆŒØ�-˜RˆÝ�g�tÑ$Ô$ð 	#ØˆHØð .ð .�Ø—’ §
¢
¡¤Ñ-Ô-Ð-Ð-ØŸ8š8 HÑ-Ô-ˆDŒLˆLˆLà"ˆDŒLˆLˆLr   c                 ó(  — | j         dk    r|                      ¦   «         | _         |j        | _        t          | j        ¦  «        }t	          j        d|dz   | j        | j        | j         | j        ¦  «        }|                     || j        z   ¦  «         d S )Nr¤   ÚIHHIIrG   )	r§   r¨   r;   r«   rL   rM   rK   r¦   r   )rO   ÚconnrX   rW   s       r	   r   zMessage.sendÒ   s}   € ØŒ8�rŠ>ˆ>Ø—x’x‘z”zˆDŒHà”8ˆŒÝ�T”\Ñ"Ô"ˆåŒk˜' 6¨E¡>°4´9Øœ* d¤h°´ñ:ô :ˆà�	Š	�#˜œÑ$Ñ%Ô%Ð%Ð%Ð%r   c                 ób   — d| j         | j        | j        | j        t	          | j        ¦  «        fz  S )Nz:<netlink.Message type=%d, pid=%d, seq=%d, flags=0x%x "%s">)rK   r¨   r§   r¦   r\   r«   r]   s    r	   r^   zMessage.__repr__Ý   s5   € ØKØŒI�t”x ¤¨4¬:µt¸D¼LÑ7IÔ7IðOKñ Kð 	Kr   )r   r¤   N)r)   r*   r+   rR   r   r^   r0   r   r	   r£   r£   Ã   sK   € € € € € ð#ð #ð #ð #ð	&ð 	&ð 	&ðKð Kð Kð Kð Kr   r£   c                   ó(   — e Zd Zdd„Zd„ Zd„ Zd„ ZdS )Ú
Connectionr   Nc                 ó°  — t          j         t           j        t           j        |¦  «        | _        | j                             t           j        t           j        d¦  «         | j                             t           j        t           j        d¦  «         t          | j        d|f¦  «         t          | j        ¦  «        \  | _
        | _        d| _        || _        d S )Ni   r   )r3   r4   ÚSOCK_RAWr   Ú
setsockoptÚ
SOL_SOCKETÚ	SO_SNDBUFÚ	SO_RCVBUFr
   r   r¨   ÚgroupsÚ_seqÚ
unexpected)rO   Únltyper¹   Úunexpected_msg_handlers       r	   rR   zConnection.__init__ä   s£   € Ý œ-­Ô(9Ý(.¬¸ñAô AˆŒàŒ×"Ò"¥6Ô#4µfÔ6FÈÑNÔNÐNØŒ×"Ò"¥6Ô#4µfÔ6FÈÑNÔNÐNÝ�” 1 f +Ñ.Ô.Ð.Ý /°´Ñ @Ô @ÑˆŒ�$”+ØˆŒ	Ø0ˆŒˆˆr   c                 ó0   — t          | j        |¦  «         d S r   )r   r   )rO   r   s     r	   r   zConnection.sendî   s   € Ý�” #Ñ&Ô&Ð&Ð&Ð&r   c                 óž  — t          | j        ¦  «        \  }\  }}t          j        d|d d…         ¦  «        \  }}}}}t	          ||||dd …         ¦  «        }	||	_        |	j        t          k    r^t          j        d|	j        d d…         ¦  «        d          }
|
dk    r/t          dt          j        |
¦  «        |
fz  ¦  «        }|
|_        |‚|	S )Nr®   rG   rl   rD   r   zNetlink error: %s (%d))r   r   rL   rb   r£   r¨   rK   ÚNLMSG_ERRORr«   ÚOSErrorr5   ÚstrerrorÚerrno)rO   r–   ÚnlpidÚnlgrpsÚmsglenr¬   r¦   r§   r¨   r   rÃ   Úerrs               r	   ÚrecvzConnection.recvñ   sâ   € Ý$,¨T¬_Ñ$=Ô$=Ñ!ˆ‘/�5˜&õ -3¬M¸'Ø:BÀ3ÀBÀ3¼-ñ-Iô -IÑ)ˆ�˜%  cå�h  s¨H°R°S°S¬MÑ:Ô:ˆØˆŒØŒ8•{Ò"Ð"Ý”] 3¨¬°B°Q°B¬Ñ8Ô8¸Ô;Ð;ˆEØ˜ŠzˆzÝÐ6Ý46´KÀÑ4FÔ4FÈð:Oñ Oñ Pô P�à!�”	Ø�	Øˆ
r   c                 ó0   — | xj         dz  c_         | j         S r   )rº   r]   s    r	   r§   zConnection.seq  s   € Øˆ	Œ	�Q‰ˆ	Œ	ØŒyÐr   )r   N)r)   r*   r+   rR   r   rÈ   r§   r0   r   r	   r²   r²   â   sU   € € € € € ð1ð 1ð 1ð 1ð'ð 'ð 'ðð ð ð"ð ð ð ð r   r²   c                 óæ   — i }t          | ¦  «        r_t          j        d| d d…         ¦  «        \  }}t          || d|…         ¦  «        ||<   |dz   dz
  dz  }| |d …         } t          | ¦  «        °_|S )NrT   rD   r   rU   )r;   rL   rb   rI   )rN   r‘   Úattr_lenrP   s       r	   ru   ru     s‡   € Ø€EÝ
ˆd‰)Œ)ð Ý$œm¨D°$°r¸°r´(Ñ;Ô;Ñˆ�)Ý 	¨4°°(°
Ô+;Ñ<Ô<ˆˆiÑØ ‘\ AÑ%¨Ñ+ˆØ�H�I�IŒˆõ	 ˆd‰)Œ)ð ð
 €Lr   )r   )7Ú__doc__r5   r3   rL   r4   r´   Ú
_dummysockr   r
   r   r   r   Úerrorr   ÚImportErrorr,   ÚCDLLr7   Ú	Structurer$   ÚNLM_F_REQUESTÚNLM_F_MULTIÚ	NLM_F_ACKÚ
NLM_F_ECHOÚ
NLMSG_NOOPrÀ   Ú
NLMSG_DONEÚNLMSG_OVERRUNÚNLMSG_MIN_TYPErI   rx   r€   rƒ   r‹   r�   ÚNETLINK_ROUTEÚNETLINK_UNUSEDÚNETLINK_USERSOCKÚNETLINK_FIREWALLÚNETLINK_INET_DIAGÚNETLINK_NFLOGÚNETLINK_XFRMÚNETLINK_SELINUXÚNETLINK_ISCSIÚNETLINK_AUDITÚNETLINK_FIB_LOOKUPÚNETLINK_CONNECTORÚNETLINK_NETFILTERÚNETLINK_IP6_FWÚNETLINK_DNRTMSGÚNETLINK_KOBJECT_UEVENTÚNETLINK_GENERICr£   r²   ru   r0   r   r	   ú<module>rë      sÜ  ððð ð 
€	€	€	Ø €€€Ø €€€ðH6à�”˜vÔ0°&´/À1ÑEÔE€JØ‡O‚O�FÑÔÐØðð ð ð(ð (ð (ðð ð ð)ð )ð )ð )ð )øà„|ð 76ð 76ð 76ð56Øˆˆˆð	8ð 	8ð 	8ð	=ð 	=ð 	=ð	4ð 	4ð 	4ð	@ð 	@ð 	@ð 	@ð 	@øàð '6ð '6ð '6àˆˆˆàˆvŒ{˜4Ñ Ô ˆð	5ð 	5ð 	5ð 	5ð 	5˜&Ô*ñ 	5ô 	5ð 	5ð	2ð 	2ð 	2ð	/ð 	/ð 	/ð	Dð 	Dð 	Dð
	6ð 
	6ð 
	6ð 
	6ð 
	6ð 
	6ð;'6øøøøøð!76øøøðv €Ø€Ø€	Ø€
ð €
Ø€Ø€
Ø€Ø€ð$+ð $+ð $+ð $+ð $+ñ $+ô $+ð $+ðNPð Pð Pð Pð Pˆdñ Pô Pð Pð
Nð Nð Nð Nð N�ñ Nô Nð Nð1ð 1ð 1ð 1ð 1ˆdñ 1ô 1ð 1ð
1ð 1ð 1ð 1ð 1ˆTñ 1ô 1ð 1ð
ð ð ð ð ˆTñ ô ð ð €Ø€ØÐ ØÐ ØÐ Ø€Ø€Ø€Ø€Ø€ØÐ ØÐ ØÐ Ø€Ø€ØÐ Ø€ðKð Kð Kð Kð Kñ Kô Kð Kð>"ð "ð "ð "ð "ñ "ô "ð "ðJð ð ð ð s5   �?A Á
B/ÁA-Á,B/Á-9B)Â&B/Â(B)Â)B/Â.B/