o
    ]i                     @   s&  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 de	Z
eZeeeef ZG dd de	Ze dksAde v r]G d	d
 d
e jZG dd de jZG dd de jZnG dd
 d
e jZG dd de jZG dd de jZdddeeeef  fddZdejdefddZdS )    N)ListOptionalTupleUnionc                   @   sF   e Zd ZdZddededed dee ddf
d	d
Zdefd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                 C   s   || _ || _|| _|| _d S Nr   r   r	   r   )selfr   r   r	   r    r   B/home/ubuntu/.local/lib/python3.10/site-packages/ifaddr/_shared.py__init__)   s   
zAdapter.__init__c                 C   s*   dj t| jt| jt| jt| jdS )NzEAdapter(name={name}, nice_name={nice_name}, ips={ips}, index={index})r   )formatreprr   r   r	   r   r   r   r   r   __repr__=   s    zAdapter.__repr__r   )
__name__
__module____qualname____doc__strr   r   intr   r   r   r   r   r   r      s    (
r   c                   @   sd   e Zd ZdZdeeef dededdfddZ	e
defd	d
Ze
defddZdefddZdS )r
   z1
    Represents an IP address of an adapter.
    ipnetwork_prefixr   r   Nc                 C   s   || _ || _|| _d S r   r   r   r   )r   r   r   r   r   r   r   r   O   s   
zIP.__init__c                 C   s   t | jt S )zl
        Returns `True` if this IP is an IPv4 address and `False`
        if it is an IPv6 address.
        
isinstancer   tupler   r   r   r   is_IPv4c   s   z
IP.is_IPv4c                 C   s   t | jtS )zl
        Returns `True` if this IP is an IPv6 address and `False`
        if it is an IPv4 address.
        r    r   r   r   r   is_IPv6k   s   z
IP.is_IPv6c                 C   s"   dj t| jt| jt| jdS )NzCIP(ip={ip}, network_prefix={network_prefix}, nice_name={nice_name})r   )r   r   r   r   r   r   r   r   r   r   s   s   zIP.__repr__)r   r   r   r   r   _IPv4Address_IPv6Addressr   r   r   propertyboolr#   r$   r   r   r   r   r   r
   J   s    "r
   DarwinBSDc                   @   s,   e Zd Zdejfdejfdejd fgZdS )sockaddrsa_len
sa_familiysa_data   N)r   r   r   ctypesc_uint8_fields_r   r   r   r   r+      s
    r+   c                   @   s@   e Zd Zdejfdejfdejfdejd fdejd fgZdS )	sockaddr_inr,   r-   sin_portsin_addr   sin_zero   N)r   r   r   r0   r1   c_uint16r2   r   r   r   r   r3      s    r3   c                   @   sD   e Zd Zdejfdejfdejfdejfdejd fdejfgZdS )	sockaddr_in6r,   r-   	sin6_portsin6_flowinfo	sin6_addr   sin6_scope_idN)r   r   r   r0   r1   r9   c_uint32r2   r   r   r   r   r:      s    r:   c                   @   s$   e Zd Zdejfdejd fgZdS )r+   r-   r.   r/   Nr   r   r   r0   r9   r1   r2   r   r   r   r   r+      s    c                   @   s8   e Zd Zdejfdejfdejd fdejd fgZdS )r3   sin_familiyr4   r5   r6   r7   r8   NrA   r   r   r   r   r3      s    c                   @   s<   e Zd Zdejfdejfdejfdejd fdejfgZdS )r:   sin6_familiyr;   r<   r=   r>   r?   N)r   r   r   r0   r9   r@   r1   r2   r   r   r   r   r:      s    sockaddr_ptrzctypes.pointer[sockaddr]r   c                 C   s   | rU| d j tjkr%t| tt}tt|d j	}t
t|}|S | d j tjkrUt| tt}|d j}tt|d j}t
t|}|d j}|||fS d S )Nr   )r-   socketAF_INETr0   castPOINTERr3   bytes	bytearrayr5   r   	ipaddress
ip_addressAF_INET6r:   r<   r=   r?   )rD   ipv4ippackedr   ipv6flowinfoscope_idr   r   r   sockaddr_to_ip   s   


rS   addressc                 C   s0   d}t | jD ]}t| |? d@ r|d }q|S )Nr      )rangemax_prefixlenr   )rT   prefix_lengthir   r   r   ipv6_prefixlength   s   rZ   )r0   rE   rK   platformtypingr   r   r   r   objectr   r   r%   r   r&   r
   system	Structurer+   r3   r:   rS   IPv6AddressrZ   r   r   r   r   <module>   s$   &/	
