
    w&by                        S r SSKrSSKrSSKr \R                  " \R                  \R
                  S5      r\R                  S5        CS rS r	S r
S3S jrSrSrSrSrSrSrSrSrSr " S S5      r " S S\5      r " S S\5      r " S S\5      r  " S  S!\5      r! " S" S#\5      r"Sr#Sr$Sr%Sr&Sr'S$r(S%r)S&r*Sr+S'r,S(r-S)r.S*r/S+r0S,r1S-r2Sr3 " S. S/5      r4 " S0 S15      r5S2 r6g! \R                   a\     SSKrS rS	 r	S
 r
S3S jr N! \ a=    SSKr\R                   " S5      r " S S\R$                  5      rS rS r	S r
S3S jr  Nf = ff = f)4z
Netlink message generation/parsing

Copyright 2007        Johannes Berg <johannes@sipsolutions.net>

GPLv2+; See copying for details.
    N)r   r   c                 &    U R                  U5        g N)bind
descriptoraddrs     //usr/lib/python3/dist-packages/iotop/netlink.py_nl_bindr
      s        c                 "    U R                  5       $ r   )getsocknamer   s    r	   _nl_getsocknamer      s    %%''r   c                 &    U R                  U5        g r   )sendr   msgs     r	   _nl_sendr      s    r   c                 $    U R                  U5      $ r   )recvfromr   bufss     r	   _nl_recvr      s    ""4((r   c                 T    [         R                  " U R                  5       US   5        g N   )_netlinkr   filenor   s     r	   r
   r
   #   s    MM*++-tAw7r   c                 J    [         R                  " U R                  5       5      $ r   )r   r   r   r   s    r	   r   r   &   s    ''
(9(9(;<<r   c                 N    [         R                  " U R                  5       U5        g r   )r   r   r   r   s     r	   r   r   )   s    MM*++-s3r   c                 L    [         R                  " U R                  5       U5      $ r   )r   r   r   r   s     r	   r   r   ,   s    $$Z%6%6%8$??r   c                       \ rS rSrS\R
                  4S\R
                  4S\R                  4S\R                  4/rSrg)SOCKADDR_NL4   	nl_familynl_padnl_pid	nl_groups N)	__name__
__module____qualname____firstlineno__ctypesc_ushortc_int_fields___static_attributes__r)   r   r	   r#   r#   4   s9    $foo6!foo6!fll3$fll35Hr   r#   c                     [        [        R                  S[        R                  " 5       S5      n[
        R                  U R                  5       [        R                  " U5      [        R                  " U5      5      $ Nr   )r#   socket
AF_NETLINKosgetpidlibcr   r   r.   pointersizeofr   s     r	   r
   r
   :   sR    v00!RYY[!DD99Z..0#^^D1#]]402 2r   c                 <   [        SSSS5      n[        R                  " [        R                  " U5      5      n[        R                  U R                  5       [        R                  " U5      [        R                  " U5      5        UR                  UR                  4$ r4   )
r#   r.   r0   r;   r9   r   r   r:   r'   r(   )r   r   lens      r	   r   r   @   so    q!Q*D,,v}}T23CZ..0#^^D1#^^C02 ;;..r   c                 `    [         R                  U R                  5       U[        U5      S5      $ r4   )r9   r   r   r=   r   s     r	   r   r   H   s$    99Z..0#s3xCCr   c           
         [        SSSS5      n[        R                  " [        R                  " U5      5      n[        R                  " U5      n[
        R                  U R                  5       XAS[        R                  " U5      [        R                  " U5      5      n[        R                  " [        R                  " U5      U5      nXbR                  UR                  44$ r4   )r#   r.   r0   r;   create_string_bufferr9   r   r   r:   	string_atr'   r(   )r   r   r   r=   bufrrets          r	   r   r   K   s    q!Q*D,,v}}T23C--d3Cj//1!$nnT2FNN34GIA ""6>>##6:Cdnn555r   r                  c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)Attrf   c                 v    Xl         [        U5      (       a  [        R                  " U/UQ76 U l        g X l        g r   )typer=   structpackdata)self	attr_typerQ   valuess       r	   __init__Attr.__init__g   s*    	v;;D262DIIr   c                     [         R                  " S[        U R                  5      S-   U R                  5      n[        U R                  5      nUS-   S-
  S-  U-
  nXR                  -   SU-  -   $ )NHHrF   r       )rO   rP   r=   rQ   rN   )rR   hdrlengthpads       r	   _dump
Attr._dumpn   s^    kk$DII 2DII>TYY
Q"$.YY,,r   c                 J    SU R                   [        U R                  5      4-  $ )Nz<Attr type %d, data "%s">)rN   reprrQ   rR   s    r	   __repr__Attr.__repr__t   s    *diidii-IIIr   c                 J    [         R                  " SU R                  5      S   $ )NHr   rO   unpackrQ   rb   s    r	   u16Attr.u16w       }}S$)),Q//r   c                 J    [         R                  " SU R                  5      S   $ )Nhr   rg   rb   s    r	   s16Attr.s16z   rk   r   c                 J    [         R                  " SU R                  5      S   $ )NIr   rg   rb   s    r	   u32Attr.u32}   rk   r   c                 J    [         R                  " SU R                  5      S   $ )Nir   rg   rb   s    r	   s32Attr.s32   rk   r   c                     U R                   $ r   )rQ   rb   s    r	   strAttr.str   s    yyr   c                 >    U R                   R                  S5      S   $ )N r   )rQ   splitrb   s    r	   nulstrAttr.nulstr   s    yyt$Q''r   c                 ,    [        U R                  5      $ r   )parse_attributesrQ   rb   s    r	   nestedAttr.nested   s    		**r   )rQ   rN   N)r*   r+   r,   r-   rU   r^   rc   ri   rn   rr   rv   ry   r~   r   r2   r)   r   r	   rK   rK   f   s5    -J0000(+r   rK   c                       \ rS rSrS rSrg)StrAttr   c                 h    [         R                  XS[        U5      -  UR                  S5      5        g )Nz%dsutf-8rK   rU   r=   encoderR   rS   rQ   s      r	   rU   StrAttr.__init__   s$    dus4y'8$++g:NOr   r)   Nr*   r+   r,   r-   rU   r2   r)   r   r	   r   r      s    Pr   r   c                       \ rS rSrS rSrg)
NulStrAttr   c                 l    [         R                  U US[        U5      -  UR                  S5      S5        g )Nz%dsBr   r   r   r   s      r	   rU   NulStrAttr.__init__   s,    d#d)!3T[[5I1	Nr   r)   Nr   r)   r   r	   r   r      s    Nr   r   c                       \ rS rSrS rSrg)U32Attr   c                 2    [         R                  XSU5        g )Nrq   rK   rU   rR   rS   vals      r	   rU   U32Attr.__init__       dsC0r   r)   Nr   r)   r   r	   r   r          1r   r   c                       \ rS rSrS rSrg)U8Attr   c                 2    [         R                  XSU5        g )NBr   r   s      r	   rU   U8Attr.__init__   r   r   r)   Nr   r)   r   r	   r   r      r   r   r   c                        \ rS rSrS rS rSrg)Nested   c                     X l         Xl        g r   attrsrN   )rR   rS   r   s      r	   rU   Nested.__init__   s    
	r   c                     / nU R                    H"  nUR                  UR                  5       5        M$     SR                  U5      n[	        U5      n[
        R                  " SUS-   U R                  5      nXA-   $ )N rX   rF   )r   appendr^   joinr=   rO   rP   rN   )rR   contentsattrr\   r[   s        r	   r^   Nested._dump   s`    JJDOODJJL) 778$Xkk$
DII6~r   r   N)r*   r+   r,   r-   rU   r^   r2   r)   r   r	   r   r      s    r   r            	   
                  c                   *    \ rS rSrSS jrS rS rSrg)Message   Nc                    Xl         X l        X0l        SU l        U=(       d    / n[	        U[
        5      (       aA  / nU H"  nUR                  UR                  5       5        M$     SR                  U5      U l	        g X@l	        g )Nr   )
rN   flagsseqpid
isinstancelistr   r^   r   payload)rR   msg_typer   r   r   r   r   s          r	   rU   Message.__init__   sd    	
-Rgt$$H

-  88H-DL"Lr   c                 `   U R                   S:X  a  UR                  5       U l         UR                  U l        [        U R                  5      n[        R
                  " SUS-   U R                  U R                  U R                   U R                  5      nUR                  X0R                  -   5        g )Nr   IHHIIrI   )	r   r   r=   r   rO   rP   rN   r   r   )rR   connr\   r[   s       r	   r   Message.send   su    88r>xxzDH88T\\"kk'6E>499**dhh:		#$%r   c                     SU R                   U R                  U R                  U R                  [	        U R
                  5      4-  $ )Nz:<netlink.Message type=%d, pid=%d, seq=%d, flags=0x%x "%s">)rN   r   r   r   ra   r   rb   s    r	   rc   Message.__repr__   s<    KIItxx4::tDLL7IOK K 	Kr   )r   r   r   r   rN   )r   r   N)r*   r+   r,   r-   rU   r   rc   r2   r)   r   r	   r   r      s    #	&Kr   r   c                   0    \ rS rSrSS jrS rS rS rSrg)	
Connection   Nc                    [         R                   " [         R                  [         R                  U5      U l        U R                  R	                  [         R
                  [         R                  S5        U R                  R	                  [         R
                  [         R                  S5        [        U R                  SU45        [        U R                  5      u  U l
        U l        SU l        X0l        g )Ni   r   )r5   r6   SOCK_RAWr   
setsockopt
SOL_SOCKET	SO_SNDBUF	SO_RCVBUFr
   r   r   groups_seq
unexpected)rR   nltyper   unexpected_msg_handlers       r	   rU   Connection.__init__   s     --(9(9(.A""6#4#4f6F6FN""6#4#4f6F6FN1f+. / @$+	0r   c                 0    [        U R                  U5        g r   )r   r   )rR   r   s     r	   r   Connection.send   s    #&r   c                 |   [        U R                  5      u  nu  p#[        R                  " SUS S 5      u  pEpgn[	        XVXqSS  5      n	Xl        U	R                  [        :X  aZ  [        R                  " SU	R                  S S 5      S   * n
U
S:w  a,  [        S[        R                  " U
5      U
4-  5      nXl        UeU	$ )Nr   rI   ru   rF   r   zNetlink error: %s (%d))r   r   rO   rh   r   r   rN   NLMSG_ERRORr   OSErrorr7   strerrorerrno)rR   r   nlpidnlgrpsmsglenr   r   r   r   r   r   errs               r	   recvConnection.recv   s    $,T__$=!/5 -3MM':B3B--I)%chsRSM:88{"]]3BQ8;;Ez646KK4F:O O P!		
r   c                 D    U =R                   S-  sl         U R                   $ r   )r   rb   s    r	   r   Connection.seq  s    		Q	yyr   )r   r   r   r   r   )r   N)	r*   r+   r,   r-   rU   r   r   r   r2   r)   r   r	   r   r      s    1'"r   r   c                     0 n[        U 5      (       aM  [        R                  " SU S S 5      u  p#[        X0SU 5      X'   US-   S-
  S-  nXS  n [        U 5      (       a  MM  U$ )NrX   rF   r   rY   )r=   rO   rh   rK   )rQ   r   attr_lenrS   s       r	   r   r     sk    E
d))$mmD$r(;	(+;<\A%+I	 d))
 Lr   )i @  )7__doc__r7   r5   rO   r6   r   
_dummysockr   r
   r   r   r   errorr   ImportErrorr.   CDLLr9   	Structurer#   NLM_F_REQUESTNLM_F_MULTI	NLM_F_ACK
NLM_F_ECHO
NLMSG_NOOPr   
NLMSG_DONENLMSG_OVERRUNNLMSG_MIN_TYPErK   r   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   r   r)   r   r	   <module>r     s   
  H6v00&//1EJOOF()z 	
 

$+ $+NPd P
N N1d 1
1T 1
T         K K>" "JS || 7656	8	=	4	@ '6{{4 	5&** 	5	2	/	D
	6;'6!76s*   AC% %E6D

?E	EEE