
    |;i                        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n? 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y)    N)ListOptionalTupleUnionc                   F    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	y)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                 <    || _         || _        || _        || _        y Nr	   r
   r   r   )selfr	   r
   r   r   s        A/home/ubuntu/myenv/lib/python3.12/site-packages/ifaddr/_shared.py__init__zAdapter.__init__)   s&     	
 #  
    c                     dj                  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__=   sJ    V]]diiD,@d488n\`aeakak\l ^ 
 	
r   r   )
__name__
__module____qualname____doc__strr   r   intr   r    r   r   r   r      sE    S S tDz (SV- cg (
# 
r   r   c                   j    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y)r   z1
    Represents an IP address of an adapter.
    ipnetwork_prefixr
   r   Nc                 .    || _         || _        || _        y 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     dggu---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j                  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   sB    T[[DGG}T$2E2E-FRVW[WeWeRf \ 
 	
r   )r   r   r   r   r   _IPv4Address_IPv6Addressr    r   r   propertyboolr+   r-   r   r!   r   r   r   r   J   sv    #5|!;< #c #^a #fj #( . . . * * *
# 
r   r   DarwinBSDc                   d    e Zd Zdej                  fdej                  fdej                  dz  fgZy)sockaddrsa_len
sa_familiysa_data   N)r   r   r   ctypesc_uint8_fields_r!   r   r   r6   r6      s2    v~~&6>>*+,
r   r6   c                       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y)	sockaddr_inr7   r8   sin_portsin_addr   sin_zero   N)r   r   r   r;   r<   c_uint16r=   r!   r   r   r?   r?      sO    v~~&6>>*)!+,!+,
r   r?   c                       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y)	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>>*&//*foo.&..2-.foo.
r   rG   c                   J    e Zd Zdej                  fdej
                  dz  fgZy)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y)r?   sin_familiyr@   rA   rB   rC   rD   NrO   r!   r   r   r?   r?      sC    FOO,)!+,!+,	
r   c                       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y)rG   sin6_familiyrH   rI   rJ   rK   rL   N)r   r   r   r;   rE   rM   r<   r=   r!   r   r   rG   rG      sJ    V__-&//*foo.&..2-.foo.
r   sockaddr_ptrzctypes.pointer[sockaddr]r   c                    | r=| d   j                   t        j                  k(  rnt        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 y )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;;|V^^K-HIDYtAw'7'789HY))(34BI!_''6??:;;|V^^L-IJDAw,,HYtAw'8'89:HY))(34BAw,,H(++r   addressc                 l    d}t        | j                        D ]  }t        |       |z	  dz  s|dz   } |S )Nr      )rangemax_prefixlenr    )re   prefix_lengthis      r   ipv6_prefixlengthrl      sD    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      s  ,     / /"
f "
L  S#s]#,
 ,
^ 8?? E_X__->$>
6## 

f&& 

v'' 
W6## W
f&& 

v'' 
!; |]iOiIj@k "y44  r   