o
    b                     @   sX   d dl Z d dlZddlmZmZmZ dd Zdd ZG dd	 d	eZG d
d deZ	dS )    N   )
XMLBuilderXMLPropertyXMLChildPropertyc                 C   s(   dd }|| } ||}| |kp|dkS )Nc                 S   s<   zdt | v rt| pddW S t| W S  ty   Y dS w )N0x0x00   )strint	Exception)val r   +/usr/share/virt-manager/virtinst/nodedev.py_intify   s   
z_compare_int.<locals>._intifyr	   r   )nodedev_valhostdev_valr   r   r   r   _compare_int   s   	r   c                 C   s4   zt | } t |}W | |kS  ty   Y dS w )Nr	   )uuidUUIDr   )r   r   r   r   r   _compare_uuid   s   
r   c                   @   s    e Zd ZdZedZedZdS )DevNodedevnodez./@type.N)__name__
__module____qualname__XML_NAMEr   	node_typepathr   r   r   r   r   &   s    r   c                   @   sF  e Zd ZdZdZdZdZdZdZdZ	dZ
ed	d
 ZdZdZedZedZedZdd Zdd Zdd Zdd Zdd Zdd ZedZedZedZedZed Zed!Zed"Zed#Z ed$Z!ed%Z"ed&Z#ed'Z$ed(Z%ed)Z&ed*Z'ed+Z(ed,Z)ed-dd.Z*ed/Z+e,e-Z.d6d1d2Z/ed3Z0ed4Z1d5S )7
NodeDevicenetpci
usb_devicestorage	scsi_hostscsidrmmdevc                 C   s$   |   D ]}|j|kr|  S qdS )z
        Search the nodedev list cache for a matching name, and return the
        result.

        :param conn: libvirt.virConnect instance to perform the lookup on
        :param conn: nodedev name
        :returns: NodeDevice instance
        N)fetch_all_nodedevsname)connr*   nodedevr   r   r   lookupNodedevByName7   s
   

zNodeDevice.lookupNodedevByNamedeviceTz./namez./parentz./capability/@typec                 C   s&   | j d ur| j S | jdd  ddS )N   _-)r   r*   replaceselfr   r   r   get_mdev_uuidP   s   
zNodeDevice.get_mdev_uuidc                 C   s   | j dkr(|jdkrdS t| j|jo't| j|jo't| j|jo't| j|jS | j dkrP|jdkr4dS t| j|joOt| j	|j
oOt| j|joOt| j|jS | j dkrd|jdkr\dS t|  |jS dS )Nr"   Fr#   usbr(   )device_typetyper   domainbusslotfunction
product_idproduct	vendor_idvendorr.   r   r5   r   )r4   hostdevr   r   r   compare_to_hostdevY   s2   





zNodeDevice.compare_to_hostdevc                 C   
   | j dkS )Nvirt_functions_capability_typer3   r   r   r   is_pci_sriovy      
zNodeDevice.is_pci_sriovc                 C   rC   )Nz
pci-bridgerE   r3   r   r   r   is_pci_bridge{   rH   zNodeDevice.is_pci_bridgec                 C   s   | j dko	| jdv S )N0x1d6b)0x00010x00020x0003)r?   r=   r3   r   r   r   is_usb_linux_root_hub~   s   
z NodeDevice.is_usb_linux_root_hubc                 C   s   | j dko	| jdkS )Nr'   render)r7   drm_typer3   r   r   r   is_drm_render   s   zNodeDevice.is_drm_renderz./capability/interfacez./capability/domainz./capability/busz./capability/slotz./capability/functionz./capability/productz./capability/vendorz./capability/capability/@typez./capability/devicez./capability/product/@idz./capability/vendor/@idz./capability/hostz./capability/targetz./capability/lunz./capability/blockz./capability/drive_typez6./capability/capability[@type='removable']/media_labelz:./capability/capability[@type='removable']/media_available)is_intz./capability/typeby-pathc                 C   sV   | j D ]}|jtj}t|dkr|d |kr|  S qt| j dkr)| j d S d S )N   r   )devnodesr   splitosseplen)r4   parentdpathsr   r   r   get_devnode   s   

zNodeDevice.get_devnodez./capability/type/@idz./capability/uuidN)rS   )2r   r   r   CAPABILITY_TYPE_NETCAPABILITY_TYPE_PCICAPABILITY_TYPE_USBDEVCAPABILITY_TYPE_STORAGECAPABILITY_TYPE_SCSIBUSCAPABILITY_TYPE_SCSIDEVCAPABILITY_TYPE_DRMCAPABILITY_TYPE_MDEVstaticmethodr-   r   _XML_SANITIZEr   r*   r[   r7   r5   rB   rG   rI   rN   rQ   	interfacer9   r:   r;   r<   product_namevendor_namerF   r.   r=   r?   hosttargetlunblock
drive_typemedia_labelmedia_availablerP   r   r   rV   r^   type_idr   r   r   r   r   r    -   sd    
	 	
	r    )
rX   r   
xmlbuilderr   r   r   r   r   r   r    r   r   r   r   <module>   s   
