o
    ]i                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z G dd dejZdeefdejfdejfdeejfd	eejfge_ejeje  d  d
krYdndddZddedeej fddZdS )    N)IterableOptionalc                   @   s   e Zd ZdS )ifaddrsN)__name__
__module____qualname__ r   r   A/home/ubuntu/.local/lib/python3.10/site-packages/ifaddr/_posix.pyr   #   s    r   ifa_nextifa_name	ifa_flagsifa_addrifa_netmaskSunOSsocketcT)	use_errnoFinclude_unconfiguredreturnc                    s~  t t  }}tt |}|dkr t  }t|t	|t
  dtdttj dd f fdd}|r|d jjdd}t|d j}|r|d jrd|d jd jsd|d jd j|d jd _t|d j}t|trt|d }	tt|	}
n|d usJ d	|d j d
td| }	t|	j}
t||
|}||| n| r||d  |d j}|s6t|   S )Nr   adapter_nameipr   c              	      sh   |  vr$d }zt | }W n ttfy   Y nw tj| | g |d | < |d ur2 |  j| d S d S )N)index)r   if_nametoindexOSErrorAttributeErrorsharedAdapteripsappend)r   r   r   r   r   r	   add_ip<   s   zget_adapters.<locals>.add_ipzUTF-8)encodingzsockaddr_to_ip(z) returned Nonez0.0.0.0/) ctypesPOINTERr   libc
getifaddrsbyref	get_errnor   osstrerrorcollectionsOrderedDictstrr   r   IPr   decodesockaddr_to_ipr   r   
sa_familiy
isinstancetupleipv6_prefixlength	ipaddressIPv6AddressIPv4Network	prefixlenr
   freeifaddrsvalues)r   addr0addrretvalenor    nameip_addrnetmask
netmaskStrr7   r   r   r   r	   get_adapters2   s8    



rB   )F)r(   ctypes.utilr"   r4   r*   r   typingr   r   ifaddr._shared_sharedr   	Structurer   r#   c_char_pc_uintsockaddr_fields_CDLLutilfind_libraryunamer$   boolr   rB   r   r   r   r	   <module>   s    *