ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3
BQ                 @   s  d Z ddlZddlZddlZyDejejejdZejd8 [dd Zdd Z	dd Z
d9d
dZW n ejk
r   y.ddlZdd Zdd Z	dd Z
d:ddZW n\ ek
 r   ddlZejdZG dd dejZdd Zdd Z	dd Z
d;ddZY nX Y nX dZdZdZdZdZdZdZdZdZG 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"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/Z0d0Z1d1Z2dZ3G d2d3 d3Z4G d4d5 d5Z5d6d7 Z6dS )<z
Netlink message generation/parsing

Copyright 2007        Johannes Berg <johannes@sipsolutions.net>

GPLv2+; See copying for details.
    Nc             C   s   | j | d S )N)bind)
descriptoraddr r   /usr/lib/python3.6/netlink.py_nl_bind   s    r   c             C   s   | j  S )N)getsockname)r   r   r   r   _nl_getsockname   s    r	   c             C   s   | j | d S )N)send)r   msgr   r   r   _nl_send   s    r    @  c             C   s
   | j |S )N)recvfrom)r   bufsr   r   r   _nl_recv   s    r   c             C   s   t j| j |d  d S )N   )_netlinkr   fileno)r   r   r   r   r   r      s    c             C   s   t j| j S )N)r   r   r   )r   r   r   r   r	       s    c             C   s   t j| j | d S )N)r   r
   r   )r   r   r   r   r   r   "   s    c             C   s   t j| j |S )N)r   r   r   )r   r   r   r   r   r   $   s    c               @   s0   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_NLZ	nl_familyZnl_padnl_pid	nl_groupsN)__name__
__module____qualname__ctypesZc_ushortc_intZ_fields_r   r   r   r   r   ,   s   r   c             C   s2   t tjdtj d}tj| j tj	|tj
|S )Nr   )r   socket
AF_NETLINKosgetpidlibcr   r   r   pointersizeof)r   r   r   r   r   r   2   s    
c             C   sH   t dddd}tjtj|}tj| j tj|tj| |j|j	fS )Nr   )
r   r   r   r"   r    r   r   r!   r   r   )r   r   lenr   r   r   r	   8   s    
c             C   s   t j| j |t|dS )Nr   )r    r
   r   r#   )r   r   r   r   r   r   @   s    c             C   sn   t dddd}tjtj|}tj|}tj| j ||dtj|tj|}tj	tj||}||j
|jffS )Nr   )r   r   r   r"   Zcreate_string_bufferr    r   r   r!   Z	string_atr   r   )r   r   r   r#   Zbufrretr   r   r   r   C   s    

r                  c               @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )Attrc             G   s,   || _ t|r"tj|f| | _n|| _d S )N)typer#   structpackdata)self	attr_typer/   valuesr   r   r   __init__^   s    zAttr.__init__c             C   sJ   t jdt| jd | j}t| j}|d d d@ | }|| j d|  S )NHHr'   r   r)       )r-   r.   r#   r/   r,   )r0   hdrlengthZpadr   r   r   _dumpe   s    
z
Attr._dumpc             C   s   d| j t| jf S )Nz<Attr type %d, data "%s">)r,   reprr/   )r0   r   r   r   __repr__k   s    zAttr.__repr__c             C   s   t jd| jd S )NHr   )r-   unpackr/   )r0   r   r   r   u16n   s    zAttr.u16c             C   s   t jd| jd S )Nhr   )r-   r=   r/   )r0   r   r   r   s16p   s    zAttr.s16c             C   s   t jd| jd S )NIr   )r-   r=   r/   )r0   r   r   r   u32r   s    zAttr.u32c             C   s   t jd| jd S )Nir   )r-   r=   r/   )r0   r   r   r   s32t   s    zAttr.s32c             C   s   | j S )N)r/   )r0   r   r   r   strv   s    zAttr.strc             C   s   | j jdd S )N r   )r/   split)r0   r   r   r   nulstrx   s    zAttr.nulstrc             C   s
   t | jS )N)parse_attributesr/   )r0   r   r   r   nestedz   s    zAttr.nestedN)r   r   r   r3   r9   r;   r>   r@   rB   rD   rE   rH   rJ   r   r   r   r   r+   ]   s   r+   c               @   s   e Zd Zdd ZdS )StrAttrc             C   s"   t j| |dt| |jd d S )Nz%dszutf-8)r+   r3   r#   encode)r0   r1   r/   r   r   r   r3   ~   s    zStrAttr.__init__N)r   r   r   r3   r   r   r   r   rK   }   s   rK   c               @   s   e Zd Zdd ZdS )
NulStrAttrc             C   s$   t j| |dt| |jdd d S )Nz%dsBzutf-8r   )r+   r3   r#   rL   )r0   r1   r/   r   r   r   r3      s    zNulStrAttr.__init__N)r   r   r   r3   r   r   r   r   rM      s   rM   c               @   s   e Zd Zdd ZdS )U32Attrc             C   s   t j| |d| d S )NrA   )r+   r3   )r0   r1   valr   r   r   r3      s    zU32Attr.__init__N)r   r   r   r3   r   r   r   r   rN      s   rN   c               @   s   e Zd Zdd ZdS )U8Attrc             C   s   t j| |d| d S )NB)r+   r3   )r0   r1   rO   r   r   r   r3      s    zU8Attr.__init__N)r   r   r   r3   r   r   r   r   rP      s   rP   c               @   s   e Zd Zdd Zdd ZdS )Nestedc             C   s   || _ || _d S )N)attrsr,   )r0   r1   rS   r   r   r   r3      s    zNested.__init__c             C   sP   g }x| j D ]}|j|j  qW dj|}t|}tjd|d | j}|| S )N r4   r'   )rS   appendr9   joinr#   r-   r.   r,   )r0   contentsattrr8   r7   r   r   r   r9      s    
zNested._dumpN)r   r   r   r3   r9   r   r   r   r   rR      s   rR            	   
                  c               @   s&   e Zd ZdddZdd Zdd	 ZdS )Messager   r   Nc             C   sb   || _ || _|| _d| _|pg }t|trXg }x|D ]}|j|j  q4W dj|| _	n|| _	d S )Nr       )
r,   flagsseqpid
isinstancelistrU   r9   rV   payload)r0   msg_typerf   rg   rk   rW   rX   r   r   r   r3      s    

zMessage.__init__c             C   sZ   | j dkr|j  | _ |j| _t| j}tjd|d | j| j| j | j}|j|| j  d S )Nr   IHHIIr'   re   r*   )	rg   rh   r#   rk   r-   r.   r,   rf   r
   )r0   Zconnr8   r7   r   r   r   r
      s    


zMessage.sendc             C   s    d| j | j| j| jt| jf S )Nz:<netlink.Message type=%d, pid=%d, seq=%d, flags=0x%x "%s">)r,   rh   rg   rf   r:   rk   )r0   r   r   r   r;      s    zMessage.__repr__re   )r   re   N)r   r   r   r3   r
   r;   r   r   r   r   rc      s   
rc   c               @   s.   e Zd ZdddZdd Zdd Zd	d
 ZdS )
Connectionr   Nc             C   sn   t j t jt j|| _| jjt jt jd | jjt jt jd t| jd|f t	| j\| _
| _d| _|| _d S )Ni   r   )r   r   SOCK_RAWr   Z
setsockoptZ
SOL_SOCKETZ	SO_SNDBUFZ	SO_RCVBUFr   r	   rh   groups_seqZ
unexpected)r0   Znltyperp   Zunexpected_msg_handlerr   r   r   r3      s    zConnection.__init__c             C   s   t | j| d S )N)r   r   )r0   r   r   r   r   r
      s    zConnection.sendc             C   s   t | j\}\}}tjd|d d \}}}}}t||||dd  }	||	_|	jtkrtjd|	jd d d  }
|
dkrt	dt
j|
|
f }|
|_||	S )Nrm   r*   rC   r'   r   zNetlink error: %s (%d))r   r   r-   r=   rc   rh   r,   NLMSG_ERRORrk   OSErrorr   strerrorerrno)r0   rW   ZnlpidZnlgrpsZmsglenrl   rf   rg   rh   r   ru   errr   r   r   recv   s    
zConnection.recvc             C   s   |  j d7  _ | j S )Nr   )rq   )r0   r   r   r   rg      s    zConnection.seq)r   N)r   r   r   r3   r
   rw   rg   r   r   r   r   rn      s   
	rn   c             C   s`   i }xVt | rZtjd| d d \}}t|| d| ||< |d d d@ }| |d  } qW |S )Nr4   r'   r   r)   r6   )r#   r-   r=   r+   )r/   rS   Zattr_lenr1   r   r   r   rI      s    
rI   )r   r   )r   )r   )r   )7__doc__r   r   r-   r   ro   Z
_dummysockr   r   r	   r   r   errorr   ImportErrorr   ZCDLLr    Z	Structurer   ZNLM_F_REQUESTZNLM_F_MULTIZ	NLM_F_ACKZ
NLM_F_ECHOZ
NLMSG_NOOPrr   Z
NLMSG_DONEZNLMSG_OVERRUNZNLMSG_MIN_TYPEr+   rK   rM   rN   rP   rR   ZNETLINK_ROUTEZNETLINK_UNUSEDZNETLINK_USERSOCKZNETLINK_FIREWALLZNETLINK_INET_DIAGZNETLINK_NFLOGZNETLINK_XFRMZNETLINK_SELINUXZNETLINK_ISCSIZNETLINK_AUDITZNETLINK_FIB_LOOKUPZNETLINK_CONNECTORZNETLINK_NETFILTERZNETLINK_IP6_FWZNETLINK_DNRTMSGZNETLINK_KOBJECT_UEVENTZNETLINK_GENERICrc   rn   rI   r   r   r   r   <module>   sz   

  