HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/landscape/lib/__pycache__/network.cpython-310.pyc
o

�1Db�%�@s�ddlmZ	ddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZddgZdZ
dZdZd	d
�Zdd�Zd
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Z		d%dd�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�)�struct�calcsize�rr�7/usr/lib/python3/dist-packages/landscape/lib/network.py�is_64srcCs|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)�flagsrrr
�is_upsrccsd�t��D]*}t�|�}|�tjig�d�d�}|�tjig�d�d�}|s*|r/||fVqdS)a}Generator yields (active network interface name, address data) tuples.

    Address data is formatted exactly like L{netifaces.ifaddresses}, e.g.::

        ('eth0', {
            AF_LINK: [
                {'addr': '...', 'broadcast': '...'}, ],
            AF_INET: [
                {'addr': '...', 'broadcast': '...', 'netmask': '...'},
                {'addr': '...', 'broadcast': '...', 'netmask': '...'},
                ...],
            AF_INET6: [
                {'addr': '...', 'netmask': '...'},
                {'addr': '...', 'netmask': '...'},
                ...], })

    Interfaces with no IP address are ignored.
    r�addrN)�	netifaces�
interfaces�ifaddresses�get�AF_INET�AF_INET6)�	interfacer�	inet_addr�
inet6_addrrrr
�get_active_interfaces&s�

��rcCsNi}tj|vr|tj|tj<tj|vr%dd�|tjD�}|r%||tj<|S)aReturn 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} or
        the address data in L{get_active_interfaces}'s output.
    cSsg|]}|d�d�s|�qS)rzfe80:)�
startswith)�.0rrrr
�
<listcomp>Ps
�z$get_ip_addresses.<locals>.<listcomp>)rrr)r�results�global_addrsrrr
�get_ip_addressesBs	


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

    @param ifaddresses: a dict as returned by L{netifaces.ifaddresses} or
        the address data in L{get_active_interfaces}'s output.
    r�	broadcastz0.0.0.0�rrr�rrrr
�get_broadcast_addressX�r&cCr")z�Return the network mask associated to an interface.

    @param ifaddresses: a dict as returned by L{netifaces.ifaddresses} or
        the address data in L{get_active_interfaces}'s output.
    r�netmask�r$r%rrr
�get_netmaskar'r*cCs|tjddS)z�Return the first IPv4 address associated to the interface.

    @param ifaddresses: a dict as returned by L{netifaces.ifaddresses} or
        the address data in L{get_active_interfaces}'s output.
    rr)rrr%rrr
�get_ip_addressjsr+cCs$tj|vr|tjd�dd�SdS)aG
    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} or
        the address data in L{get_active_interfaces}'s output.
    rrr))r�AF_LINKrr%rrr
�get_mac_addressss
	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.
    �256sN��H��r)�fcntl�ioctl�fileno�SIOCGIFFLAGSr
�pack�unpack)�sockr�datarrr
�	get_flags�s�r;��loTFc
Csg}z�t�tjtjtj�}t�D]o\}}||vrq|r d|vr q|r'd|vr'qt||���}t|�s3qd|i}	||	d<t||���\}
}|
|	d<||	d<t	|�}|rV||	d<t
j|vrst|�|	d<t|�|	d	<t
|�|	d
<t|�|	d<t
j|vsz|r|�|	�qW~|S~w)zp
    Returns a dictionary containing information on each active network
    interface present on a machine.
    �.�:rr�speed�duplex�ip_addresses�
ip_address�mac_address�broadcast_addressr()�socketr�
SOCK_DGRAM�
IPPROTO_IPrr;�encoder�get_network_interface_speedr!rr+r-r&r*�append)
�skipped_interfaces�	skip_vlan�
skip_alias�extendedrr9rrr�interface_infor@rArBrrr
r�sN��
�
����
/proc/net/devcCs�t|d��}|��}Wd�n1swY|d�d�\}}}dd�|��D�}|�dd�|��D��i}|dd�D] }d	|vrGq@|�d	�\}	}
|	��}	tt|tt|
�����||	<q@|S)
ze
    Retrieves an array of information regarding the network activity per
    network interface.
    �rNr�|cS�g|]}d|�qS)zrecv_%sr�r�columnrrr
r��z'get_network_traffic.<locals>.<listcomp>cSrT)zsend_%srrUrrr
r�rW�r?)	�open�	readlines�split�extend�strip�dict�zip�mapr)�source_file�netdev�lines�_�receive_columns�transmit_columns�columns�devices�line�devicer:rrr
r�s
�cCsLt��}d|vr$t�t��dtjtjtjtj�dd}d|vr$t��}|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.
    �	localhostNr�)rF�getfqdn�getaddrinfo�gethostnamerrGrH�AI_CANONNAME)�fqdnrrr
�get_fqdn�s	���rrc	
Cs�t�dtd�}t�d|�}t�d||��d�}d}zt�|t|�tr)|�	�}n|�
�}t�d|�\}}Wn2tt
fyh}z$|jtjkrLt�d�n|jtjkrZ|jtjkrZ|�d}d	}WYd
}~nd
}~ww|dkrod}|dkrud	}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.
    �I39ss'�B�16sPr����12xHB28xzECould not determine network interface speed, operation not permitted.FNi���)r
r7�ETHTOOL_GSET�array�buffer_infor3r4�SIOCETHTOOLr�tobytes�tostringr8�IOError�OSError�errno�EPERM�logging�warn�
EOPNOTSUPP�EINVAL�bool)	r9�interface_name�
cmd_struct�
status_cmd�packedr@�resrA�errr
rJ�s2
��rJ)r<TTF)rQ)�
__future__rrzr3rFr
r�r�r�landscape.lib.compatrr�__all__r6r|ryrrrr!r&r*r+r-r;rrrrrJrrrr
�<module>s:				
�
-