o $DYy @sdZddlZddlZddlZz"eejejdZed[ddZddZ dd Z d9d d Z WnNej y~zddl Z d dZddZ dd Z d9dd Z Wn,ey{ddlZedZGdddejZddZddZ dd Z d9dd Z YnwYnwdZdZdZdZdZdZdZdZdZGdddZGdd d eZGd!d"d"eZGd#d$d$eZ Gd%d&d&eZ!Gd'd(d(eZ"dZ#dZ$dZ%dZ&dZ'd)Z(d*Z)d+Z*dZ+d,Z,d-Z-d.Z.d/Z/d0Z0d1Z1d2Z2dZ3Gd3d4d4Z4Gd5d6d6Z5d7d8Z6dS):z Netlink message generation/parsing Copyright 2007 Johannes Berg GPLv2+; See copying for details. N)rrcC||dSN)bind descriptoraddrr//usr/lib/python3/dist-packages/iotop/netlink.py_nl_bindr cCs|Sr) getsocknamerrrr _nl_getsocknamesrcCrr)sendrmsgrrr _nl_sendr r@cCs ||Sr)recvfromrbufsrrr _nl_recv rcCst||ddSN)_netlinkrfilenorrrr r #cCst|Sr)rr rr rrr r&r cCst||dSr)rrrrrrr r)cCst||Sr)rrrrrrr r,c@s0eZdZdejfdejfdejfdejfgZdS) SOCKADDR_NL nl_familynl_padnl_pid nl_groupsN)__name__ __module__ __qualname__ctypesc_ushortc_int_fields_rrrr r 4s r cCs2ttjdtd}t|t |t |SNr) r socket AF_NETLINKosgetpidlibcrrr(pointersizeofrrrr r :s  cCsHtdddd}tt|}t|t|t||j|j fSr,) r r(r*r3r1r rr2r#r$)rrlenrrr r@s  cCst||t|dSr,)r1rrr4rrrr rHrc Csntdddd}tt|}t|}t|||dt|t|}t t||}||j |j ffSr,) r r(r*r3create_string_bufferr1rrr2 string_atr#r$)rrrr4bufrretrrr rKs  rc@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)AttrcGs0||_t|rtj|g|R|_dS||_dSr)typer4structpackdata)self attr_typerCvaluesrrr __init__gs z Attr.__init__cCsJtdt|jd|j}t|j}|ddd@|}||jd|S)NHHr;r)rArBr4rCr@)rDhdrlengthpadrrr _dumpns z Attr._dumpcCsd|jt|jfS)Nz)r@reprrCrDrrr __repr__trz Attr.__repr__cCtd|jdS)NHrrAunpackrCrPrrr u16wzAttr.u16cCrR)NhrrTrPrrr s16zrWzAttr.s16cCrR)NIrrTrPrrr u32}rWzAttr.u32cCrR)NirrTrPrrr s32rWzAttr.s32cCs|jSr)rCrPrrr strszAttr.strcCs|jddS)Nr)rCsplitrPrrr nulstrrz Attr.nulstrcCs t|jSr)parse_attributesrCrPrrr nestedrz Attr.nestedN) r%r&r'rGrNrQrVrYr[r]r^rarcrrrr r?fs r?c@eZdZddZdS)StrAttrcCs"t||dt||ddS)Nz%dsutf-8r?rGr4encoderDrErCrrr rGs"zStrAttr.__init__Nr%r&r'rGrrrr re rec@rd) NulStrAttrcCs$t||dt||dddS)Nz%dsBrfrrgrirrr rGszNulStrAttr.__init__Nrjrrrr rlrkrlc@rd)U32AttrcCt||d|dS)NrZr?rGrDrEvalrrr rGrzU32Attr.__init__Nrjrrrr rmrkrmc@rd)U8AttrcCrn)NBrorprrr rGrzU8Attr.__init__Nrjrrrr rrrkrrc@seZdZddZddZdS)NestedcCs||_||_dSr)attrsr@)rDrErurrr rGs zNested.__init__cCsLg}|jD] }||qd|}t|}td|d|j}||S)NrHr;)ruappendrNjoinr4rArBr@)rDcontentsattrrLrKrrr rNs  z Nested._dumpN)r%r&r'rGrNrrrr rts rt c@s&eZdZd ddZddZdd ZdS) MessagerNcCs`||_||_||_d|_|pg}t|tr+g}|D] }||qd||_ dS||_ dS)Nr) r@flagsseqpid isinstancelistrwrNrxpayload)rDmsg_typerrrryrzrrr rGs  zMessage.__init__cCsZ|jdkr ||_|j|_t|j}td|d|j|j|j|j}|||jdS)NrIHHIIr>) rrr4rrArBr@rr)rDconnrLrKrrr rs    z Message.sendcCs d|j|j|j|jt|jfS)Nz:)r@rrrrOrrPrrr rQszMessage.__repr__)rrN)r%r&r'rGrrQrrrr rs  rc@s.eZdZd ddZddZddZd d ZdS) ConnectionrNcCsnttjtj||_|jtjtjd|jtjtjdt|jd|ft |j\|_ |_ d|_ ||_ dS)Nir)r-r.SOCK_RAWr setsockopt SOL_SOCKET SO_SNDBUF SO_RCVBUFr rrgroups_seq unexpected)rDnltyperunexpected_msg_handlerrrr rGs zConnection.__init__cCst|j|dSr)rr)rDrrrr rrzConnection.sendc Cst|j\}\}}td|dd\}}}}}t||||dd} || _| jtkrMtd| jddd } | dkrMt dt | | f} | | _ | | S)Nrr>r\r;rzNetlink error: %s (%d)) rrrArUrrr@ NLMSG_ERRORrOSErrorr/strerrorerrno) rDrynlpidnlgrpsmsglenrrrrrrerrrrr recvs   zConnection.recvcCs|jd7_|jSr)rrPrrr rszConnection.seq)rN)r%r&r'rGrrrrrrr rs    rcCsbi}t|r/td|dd\}}t||d|||<|ddd@}||d}t|s|S)NrHr;rrI)r4rArUr?)rCruattr_lenrErrr rbs rb)r)7__doc__r/r-rAr.r _dummysockrr rrrerrorr ImportErrorr(CDLLr1 Structurer NLM_F_REQUEST NLM_F_MULTI NLM_F_ACK NLM_F_ECHO NLMSG_NOOPr NLMSG_DONE NLMSG_OVERRUNNLMSG_MIN_TYPEr?rerlrmrrrt NETLINK_ROUTENETLINK_UNUSEDNETLINK_USERSOCKNETLINK_FIREWALLNETLINK_INET_DIAG NETLINK_NFLOG NETLINK_XFRMNETLINK_SELINUX NETLINK_ISCSI NETLINK_AUDITNETLINK_FIB_LOOKUPNETLINK_CONNECTORNETLINK_NETFILTERNETLINK_IP6_FWNETLINK_DNRTMSGNETLINK_KOBJECT_UEVENTNETLINK_GENERICrrrbrrrr s   ;' %