o c&&@sddlmZ ddlZddlZddlZddlZddlZddlZddlZddl m Z m Z ddgZ dZ dZdZd d Zd d Zd dZddZddZddZddZddZddZddZd*dd Z ! " d+d#dZd,d%dZd&d'Zd(d)ZdS)-)absolute_importN)long_PY3get_active_device_infoget_network_trafficiiFcCstddkS)z>Returns C{True} if the platform is 64-bit, otherwise C{False}.l)structcalcsizer r 7/usr/lib/python3/dist-packages/landscape/lib/network.pyis_64srcCs|d@S)zReturns 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_upsrcCs@|tjigdd}|tjigdd}t|p|S)zChecks if interface address data has an IP address @param ifaddresses: a dict as returned by L{netifaces.ifaddresses} raddr)get netifacesAF_INETAF_INET6bool) ifaddresses inet_addr inet6_addrr r r is_active&s rcCsNi}tj|vr|tj|tj<tj|vr%dd|tjD}|r%||tj<|S)zReturn 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|] }|dds|qS)rzfe80: startswith).0rr r r =s  z$get_ip_addresses..)rrr)rresults global_addrsr r r get_ip_addresses0s   r!cC|tjdddS)zReturn the broadcast address associated to an interface. @param ifaddresses: a dict as returned by L{netifaces.ifaddresses} r broadcastz0.0.0.0rrrrr r r get_broadcast_addressEr&cCr")zReturn the network mask associated to an interface. @param ifaddresses: a dict as returned by L{netifaces.ifaddresses} rnetmaskr$r%r r r get_netmaskMr'r*cCs|tjddS)zReturn the first IPv4 address associated to the interface. @param ifaddresses: a dict as returned by L{netifaces.ifaddresses} rr)rrr%r r r get_ip_addressUsr+cCs$tj|vr|tjdddSdS)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))rAF_LINKrr%r r r get_mac_address]s r-c Cs:t|ttd|dd}td|dddS)zReturn 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. 256sNHr)fcntlioctlfileno SIOCGIFFLAGSr packunpack)sock interfacedatar r r get_flagsjsr<cCs"td}dd|D}|S)z: Returns a list of interfaces with default routes defaultcSsg|]}|dqS)rr )rgatewayr r r r{z*get_default_interfaces..)rgatewaysvalues) default_table interfacesr r r get_default_interfacesvs rDr Fc sg}zttjtjtj}tD]mtfdd|Drqt}t|s)q }t ||}t |s7qt |}|sCtj|vrCqdi}||d<t ||\|d<|d<|r\||d<tj|vryt||d<t||d <t||d <t||d <||qW||S|w) 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|]}|VqdSNr )rfr:r r sz'get_filtered_if_info..r:rspeedduplex ip_addresses ip_address mac_addressbroadcast_addressr()socketr SOCK_DGRAM IPPROTO_IPrrCanyrrencoder<rr!get_network_interface_speedr+r-r&r*appendclose) filtersextendedrr9r ifencodedrrKifinfor rGr get_filtered_if_infosJ         % r[loTc sNfdd}dd}dd}tfdd}d d } t| ||||f|d S) Ncs|vSrEr rG)skipped_interfacesr r filter_localz,get_active_device_info..filter_localcSd|vS)N.r rGr r r filter_vlanr`z+get_active_device_info..filter_vlancSra)N:r rGr r r filter_aliasr`z,get_active_device_info..filter_aliascs o|vSrEr rG) default_ifs default_onlyr r filter_defaults z.get_active_device_info..filter_defaultcSs |dS)NtaprrGr r r filter_taps z*get_active_device_info..filter_tap)rWrX)rDr[) r^ skip_vlan skip_aliasrXrgr_rcrerhrjr )rfrgr^r rs  /proc/net/devc Cst|d }|}Wdn1swY|dd\}}}dd|D}|dd|Di}|ddD] }d |vrGq@|d \} } | } tt|tt| || <q@|S) ze Retrieves an array of information regarding the network activity per network interface. rNr|cSg|]}d|qS)zrecv_%sr rcolumnr r r rr?z'get_network_traffic..cSrp)zsend_%sr rqr r r rr?rd) open readlinessplitextendstripdictzipmapr) source_filenetdevlines_receive_columnstransmit_columnscolumnsdeviceslinedevicer;r r r rs  cCsLt}d|vr$ttdtjtjtjtjdd}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)rOgetfqdn getaddrinfo gethostnamerrPrQ AI_CANONNAME)fqdnr r r get_fqdns rc Cstdtd}td|}td||d}d}zt|t|tr)| }n| }t d|\}}Wn2t t fyh}z$|jtjkrLtdn|jtjkrZ|jtjkrZ|d}d }WYd }~nd }~ww|d krod}|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'B16sPr12xHB28xzECould not determine network interface speed, operation not permitted.FNi)r r7 ETHTOOL_GSETarray buffer_infor3r4 SIOCETHTOOLrtobytestostringr8IOErrorOSErrorerrnoEPERMloggingwarning EOPNOTSUPPEINVALr) r9interface_name cmd_struct status_cmdpackedrIresrJer r r rTs2     rT)r F)r\TTFF)rm) __future__rrr3rOr rrrlandscape.lib.compatrr__all__r6rrrrrr!r&r*r+r-r<rDr[rrrrTr r r r s@     8 !