HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/landscape/lib/__pycache__/network.cpython-38.pyc
U

��f]&�@s�ddlmZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZddgZdZ
dZdZd	d
�Zdd�Zd
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd*dd �Zd+d#d�Zd,d%d�Zd&d'�Zd(d)�ZdS)-�)�absolute_importN)�long�_PY3�get_active_device_info�get_network_traffici�iF��cCst�d�dkS)z>Returns C{True} if the platform is 64-bit, otherwise C{False}.�l�)�structZcalcsize�rr�7/usr/lib/python3/dist-packages/landscape/lib/network.py�is_64sr
cCs|d@S)z�Returns C{True} if the interface is up, otherwise C{False}.

    @param flags: the integer value of an interface's flags.
    @see /usr/include/linux/if.h for the meaning of the flags.
    rr)�flagsrrr�is_upsrcCs@|�tjig�d�d�}|�tjig�d�d�}t|p<|�S)zChecks if interface address data has an IP address

    @param ifaddresses: a dict as returned by L{netifaces.ifaddresses}
    r�addr)�get�	netifaces�AF_INET�AF_INET6�bool)�ifaddressesZ	inet_addrZ
inet6_addrrrr�	is_active&srcCsNi}tj|kr|tj|tj<tj|krJdd�|tjD�}|rJ||tj<|S)z�Return all IP addresses of an interfaces.

    Returns the same structure as L{ifaddresses}, but filtered to keep
    IP addresses only.

    @param ifaddresses: a dict as returned by L{netifaces.ifaddresses}
    cSsg|]}|d�d�s|�qS)rzfe80:��
startswith)�.0rrrr�
<listcomp>=s�z$get_ip_addresses.<locals>.<listcomp>)rrr)r�resultsZglobal_addrsrrr�get_ip_addresses0s


rcCs|tjd�dd�S)z�Return the broadcast address associated to an interface.

    @param ifaddresses: a dict as returned by L{netifaces.ifaddresses}
    rZ	broadcast�0.0.0.0�rrr�rrrr�get_broadcast_addressEsr!cCs|tjd�dd�S)z�Return the network mask associated to an interface.

    @param ifaddresses: a dict as returned by L{netifaces.ifaddresses}
    r�netmask�rr rrr�get_netmaskMsr$cCs|tjddS)z�Return the first IPv4 address associated to the interface.

    @param ifaddresses: a dict as returned by L{netifaces.ifaddresses}
    rr)rrr rrr�get_ip_addressUsr%cCs$tj|kr |tjd�dd�SdS)a
    Return the hardware MAC address for an interface in human friendly form,
    ie. six colon separated groups of two hexadecimal digits, if available;
    otherwise an empty string.

    @param ifaddresses: a dict as returned by L{netifaces.ifaddresses}
    rrr#)r�AF_LINKrr rrr�get_mac_address]s
r'c
Cs:t�|��tt�d|dd���}t�d|dd��dS)z�Return the integer value of the interface flags for the given interface.

    @param sock: a socket instance.
    @param interface: The name of the interface.
    @see /usr/include/linux/if.h for the meaning of the flags.
    Z256sN��H��r)�fcntl�ioctl�fileno�SIOCGIFFLAGSr
�pack�unpack)�sock�	interface�datarrr�	get_flagsjs�r5cCs"t��d}dd�|��D�}|S)z:
    Returns a list of interfaces with default routes
    �defaultcSsg|]}|d�qS)rr)rZgatewayrrrr{sz*get_default_interfaces.<locals>.<listcomp>)rZgateways�values)Z
default_table�
interfacesrrr�get_default_interfacesvsr9rFc	s<g}�z&t�tjtjtj�}t��D�]�t�fdd�|D��rBq$t���}t	|�s`tj
|kr`q$���}t||�}t
|�}d�i}||d<t||�\|d<|d<|r�||d<tj|kr�t|�|d<t|�|d	<t|�|d
<t|�|d<n6tj
|k�r|�sd|d<t|�|d	<d|d
<d|d<|�|�q$W5|��X|S)
z�
    Returns a dictionary containing info on each active network
    interface that passes all `filters`.

    A filter is a callable that returns True if the interface should be
    skipped.
    c3s|]}|��VqdS�Nr)r�f�r3rr�	<genexpr>�sz'get_filtered_if_info.<locals>.<genexpr>r3r�speed�duplex�ip_addressesZ
ip_addressZmac_addressZbroadcast_addressr"r)�close�socketr�
SOCK_DGRAM�
IPPROTO_IPrr8�anyrrr&�encoder5r�get_network_interface_speedr%r'r!r$�append)	�filters�extendedrr2rZ	ifencodedrr@Zifinforr<r�get_filtered_if_infosP�
��
�
�
rK��loTc
sN�fdd�}dd�}dd�}t����fdd�}d	d
�}	t|	||||f|d�S)Ncs|�kSr:rr<)�skipped_interfacesrr�filter_local�sz,get_active_device_info.<locals>.filter_localcSsd|kS)N�.rr<rrr�filter_vlan�sz+get_active_device_info.<locals>.filter_vlancSsd|kS)N�:rr<rrr�filter_alias�sz,get_active_device_info.<locals>.filter_aliascs�o
|�kSr:rr<)�default_ifs�default_onlyrr�filter_default�sz.get_active_device_info.<locals>.filter_defaultcSs
|�d�S)NZtaprr<rrr�
filter_tap�sz*get_active_device_info.<locals>.filter_tap)rIrJ)r9rK)
rNZ	skip_vlanZ
skip_aliasrJrUrOrQrSrVrWr)rTrUrNrr�s���
/proc/net/devc	Cs�t|d��}|��}W5QRX|d�d�\}}}dd�|��D�}|�dd�|��D��i}|dd�D]@}d	|krzql|�d	�\}	}
|	��}	tt|tt|
�����||	<ql|S)
ze
    Retrieves an array of information regarding the network activity per
    network interface.
    �rr�|cSsg|]}d|�qS)zrecv_%sr�r�columnrrrr�sz'get_network_traffic.<locals>.<listcomp>cSsg|]}d|�qS)zsend_%srr[rrrr�s�NrR)	�open�	readlines�split�extend�strip�dict�zip�mapr)Zsource_fileZnetdev�lines�_Zreceive_columnsZtransmit_columns�columnsZdevices�lineZdevicer4rrrr�scCsLt��}d|krHt�t��dtjtjtjtj�dd}d|krHt��}|S)a
    Return the current fqdn of the machine, trying hard to return a meaningful
    name.

    In particular, it means working against a NetworkManager bug which seems to
    make C{getfqdn} return localhost6.localdomain6 for machine without a domain
    since Maverick.
    Z	localhostNr�)rBZgetfqdnZgetaddrinfoZgethostnamerrCrDZAI_CANONNAME)Zfqdnrrr�get_fqdn�s	���rkc	
Cs�t�dtd�}t�d|�}t�d||��d�}d}z8t�|t|�trR|�	�}n|�
�}t�d|�\}}Wnbtt
fk
r�}z@|jtjkr�t�d�n|jtjkr�|jtjkr�|�d}d	}W5d
}~XYnX|dkr�d}|dkr�d	}t|�}||fS)
a�
    Return the ethernet device's advertised link speed.

    The return value can be one of:
        * 10, 100, 1000, 2500, 10000: The interface speed in Mbps
        * -1: The interface does not support querying for max speed, such as
          virtio devices for instance.
        * 0: The cable is not connected to the interface. We cannot measure
          interface speed, but could if it was plugged in.
    ZI39ss'�BZ16sPr���Z12xHB28xzECould not determine network interface speed, operation not permitted.FNi���)r
r0�ETHTOOL_GSET�arrayZbuffer_infor,r-�SIOCETHTOOLr�tobytesZtostringr1�IOError�OSError�errnoZEPERM�loggingZwarningZ
EOPNOTSUPPZEINVALr)	r2Zinterface_nameZ
cmd_structZ
status_cmdZpackedr>�resr?�errrrGs.
rG)rF)rLTTFF)rX)Z
__future__rrpr,rBr
rurvrZlandscape.lib.compatrr�__all__r/rqror
rrrr!r$r%r'r5r9rKrrrkrGrrrr�<module>s@	

	
8�
!