
    8j                        d dl Z d dlZd dlZd dlZd dlmZmZmZmZ  G d de	          Z
eZeeeef         Z G d de	          Z ej                    dk    sd ej                    v r: G d	 d
e j                  Z G d de j                  Z G d de j                  Zn9 G d d
e j                  Z G d de j                  Z G d de j                  Zdddeeeef                  fdZdej        defdZdS )    N)ListOptionalTupleUnionc                   T    e Zd ZdZddededed         dee         ddf
d	Zdefd
Z	dS )Adapteran  
    Represents a network interface device controller (NIC), such as a
    network card. An adapter can have multiple IPs.

    On Linux aliasing (multiple IPs per physical NIC) is implemented
    by creating 'virtual' adapters, each represented by an instance
    of this class. Each of those 'virtual' adapters can have both
    a IPv4 and an IPv6 IP address.
    Nname	nice_nameipsIPindexreturnc                 >    || _         || _        || _        || _        d S Nr	   r
   r   r   )selfr	   r
   r   r   s        D/home/user/adhan/venv/lib/python3.11/site-packages/ifaddr/_shared.py__init__zAdapter.__init__)   s*     	
 #  


    c                     d                     t          | j                  t          | j                  t          | j                  t          | j                            S )NzEAdapter(name={name}, nice_name={nice_name}, ips={ips}, index={index})r   )formatreprr	   r
   r   r   r   s    r   __repr__zAdapter.__repr__=   sP    V]]diD,@,@d48nn\`aeak\l\l ^ 
 
 	
r   r   )
__name__
__module____qualname____doc__strr   r   intr   r    r   r   r   r      s          S S tDz (SV- cg    (
# 
 
 
 
 
 
r   r   c                   ~    e Zd ZdZdeeef         dededdfdZ	e
defd            Ze
defd	            Zdefd
ZdS )r   z1
    Represents an IP address of an adapter.
    ipnetwork_prefixr
   r   Nc                 0    || _         || _        || _        d S r   r#   r$   r
   )r   r#   r$   r
   s       r   r   zIP.__init__O   s"     
 - #r   c                 8    t          | j        t                     S )zl
        Returns `True` if this IP is an IPv4 address and `False`
        if it is an IPv6 address.
        
isinstancer#   tupler   s    r   is_IPv4z
IP.is_IPv4c   s     dgu----r   c                 6    t          | j        t                    S )zl
        Returns `True` if this IP is an IPv6 address and `False`
        if it is an IPv4 address.
        r(   r   s    r   is_IPv6z
IP.is_IPv6k   s     $'5)))r   c                     d                     t          | j                  t          | j                  t          | j                            S )NzCIP(ip={ip}, network_prefix={network_prefix}, nice_name={nice_name})r&   )r   r   r#   r$   r
   r   s    r   r   zIP.__repr__s   sG    T[[DG}}T$2E-F-FRVW[WeRfRf \ 
 
 	
r   )r   r   r   r   r   _IPv4Address_IPv6Addressr    r   r   propertyboolr+   r-   r   r!   r   r   r   r   J   s         #5|!;< #c #^a #fj # # # #( . . . . X. * * * * X*
# 
 
 
 
 
 
r   r   DarwinBSDc                   H    e Zd Zdej        fdej        fdej        dz  fgZdS )sockaddrsa_len
sa_familiysa_data   N)r   r   r   ctypesc_uint8_fields_r!   r   r   r6   r6      s8        v~&6>*+,
r   r6   c                   n    e Zd Zdej        fdej        fdej        fdej        dz  fdej        dz  fgZdS )	sockaddr_inr7   r8   sin_portsin_addr   sin_zero   N)r   r   r   r;   r<   c_uint16r=   r!   r   r   r?   r?      sQ        v~&6>*)!+,!+,
r   r?   c                   x    e Zd Zdej        fdej        fdej        fdej        fdej        dz  fdej        fgZdS )	sockaddr_in6r7   r8   	sin6_portsin6_flowinfo	sin6_addr   sin6_scope_idN)r   r   r   r;   r<   rE   c_uint32r=   r!   r   r   rG   rG      sV        v~&6>*&/*fo.&.2-.fo.
r   rG   c                   8    e Zd Zdej        fdej        dz  fgZdS )r6   r8   r9   r:   Nr   r   r   r;   rE   r<   r=   r!   r   r   r6   r6      s,        !6?3iRTAT5UVr   c                   ^    e Zd Zdej        fdej        fdej        dz  fdej        dz  fgZdS )r?   sin_familiyr@   rA   rB   rC   rD   NrO   r!   r   r   r?   r?      sG        FO,)!+,!+,	
r   c                   h    e Zd Zdej        fdej        fdej        fdej        dz  fdej        fgZdS )rG   sin6_familiyrH   rI   rJ   rK   rL   N)r   r   r   r;   rE   rM   r<   r=   r!   r   r   rG   rG      sL        V_-&/*fo.&.2-.fo.
r   sockaddr_ptrzctypes.pointer[sockaddr]r   c                    | r?| d         j         t          j        k    rvt          j        | t          j        t                              }t          t          |d         j	                            }t          t          j        |                    }|S | d         j         t          j        k    rt          j        | t          j        t                              }|d         j        }t          t          |d         j                            }t          t          j        |                    }|d         j        }|||fS d S )Nr   )r8   socketAF_INETr;   castPOINTERr?   bytes	bytearrayrA   r   	ipaddress
ip_addressAF_INET6rG   rI   rJ   rL   )rT   ipv4ippackedr#   ipv6flowinfoscope_ids          r   sockaddr_to_iprd      s     ,?%77;|V^K-H-HIIDYtAw'78899HY)(3344BI!_'6?::;|V^L-I-IJJDAw,HYtAw'899::HY)(3344BAw,H(++4r   addressc                 l    d}t          | j                  D ]}t          |           |z	  dz  r|dz   }|S )Nr      )rangemax_prefixlenr    )re   prefix_lengthis      r   ipv6_prefixlengthrl      sJ    M7()) . .w<<1q  	.)A-Mr   )r;   rV   r\   platformtypingr   r   r   r   objectr   r   r/   r    r0   r   system	Structurer6   r?   rG   rd   IPv6Addressrl   r!   r   r   <module>rs      si  ,        / / / / / / / / / / / /"
 "
 "
 "
 "
f "
 "
 "
L  S#s]#,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
^ 8?  E_X_->->$>$>
 
 
 
 
6# 
 
 

 
 
 
 
f& 
 
 

 
 
 
 
v' 
 
 
 
W W W W W6# W W W
 
 
 
 
f& 
 
 

 
 
 
 
v' 
 
 
!; |]iOiIj@k    "y4       r   