o
    nj-                     @   s   d dl mZ ddlmZmZ ddlmZmZ G dd dZG dd dZ	G d	d
 d
Z
G dd dZG dd dZG dd dZeddG dd dZG dd dZdS )    )	dataclass   )ffilib)_string_realloc_call_no_errorNetplanExceptionc                	   @   s  e Zd Zdd Zdd defddZd=ded	ed
edefddZed>ddZ	edefddZ
edefddZed?ddZed@ddZedAddZedefddZedefdd Zedefd!d"Zedefd#d$Zedefd%d&Zedefd'd(Zedefd)d*Zedefd+d,Zedefd-d.Zedefd/d0Zedefd1d2Zedefd3d4Zedefd5d6Zedefd7d8Zedefd9d:Zedefd;d<Z dS )BNetDefinitionc                 C   s   || _ || _d S N)_ptr_parent)selfnp_stateptr r   0/usr/lib/python3/dist-packages/netplan/netdef.py__init__   s   
zNetDefinition.__init__otherreturnc                 C   s   t |dsdS | j|jkS )Nr
   F)hasattrr
   )r   r   r   r   r   __eq__   s   
zNetDefinition.__eq__N
iface_nameiface_driver	iface_macc              	   C   sJ   t t| j|r|dntj|r|dntj|r |dS tjS Nutf-8)boolr   netplan_netdef_match_interfacer
   encoder   NULL)r   r   r   r   r   r   r   _match_interface"   s   zNetDefinition._match_interface_NetdefAddressIteratorc                 C   
   t | jS r	   )r    r
   r   r   r   r   	addresses)      
zNetDefinition.addressesc                 C      t t| jS r	   )r   r   netplan_netdef_get_dhcp4r
   r"   r   r   r   dhcp4-      zNetDefinition.dhcp4c                 C   r%   r	   )r   r   netplan_netdef_get_dhcp6r
   r"   r   r   r   dhcp61   r(   zNetDefinition.dhcp6_NetdefNameserverIteratorc                 C   r!   r	   )r+   r
   r"   r   r   r   nameserver_addresses5   r$   z"NetDefinition.nameserver_addresses_NetdefSearchDomainIteratorc                 C   r!   r	   )r-   r
   r"   r   r   r   nameserver_search9   r$   zNetDefinition.nameserver_search_NetdefRouteIteratorc                 C   r!   r	   )r/   r
   r"   r   r   r   routes=   r$   zNetDefinition.routesc                       t  fddS )Nc                       t  j| t| S r	   )r   netplan_netdef_get_macaddressr
   lenbr"   r   r   <lambda>C       z*NetDefinition.macaddress.<locals>.<lambda>r   r"   r   r"   r   
macaddressA   r(   zNetDefinition.macaddressc                 C   r%   r	   )r   r   netplan_netdef_has_matchr
   r"   r   r   r   
_has_matchE   r(   zNetDefinition._has_matchc                    r1   )Nc                    r2   r	   )r   netplan_netdef_get_set_namer
   r4   r5   r"   r   r   r7   K   r8   z(NetDefinition.set_name.<locals>.<lambda>r9   r"   r   r"   r   set_nameI   r(   zNetDefinition.set_namec                 C   r%   r	   )r   r   _netplan_netdef_get_criticalr
   r"   r   r   r   criticalM   r(   zNetDefinition.criticalc                 C   s   t  }t| j }rt| j||d< t| j }r#t| j||d< t| j }r3t| j||d< t| j }rCt| j||d< t	| j }rSt| j||d< |S )Nsriovvlanbridgebondpeer)
dictr   netplan_netdef_get_sriov_linkr
   r   r   netplan_netdef_get_vlan_linknetplan_netdef_get_bridge_linknetplan_netdef_get_bond_linknetplan_netdef_get_peer_link)r   d
sriov_link	vlan_linkbridge_link	bond_link	peer_linkr   r   r   linksQ   s   zNetDefinition.linksc                 C   s   t | j}|t jkrd S |S r	   )r   _netplan_netdef_get_vlan_idr
   UINT_MAX)r   vlan_idr   r   r   _vlan_ide   s   
zNetDefinition._vlan_idc                 C   r%   r	   )r   r   %_netplan_netdef_get_sriov_vlan_filterr
   r"   r   r   r   _has_sriov_vlan_filterl   r(   z$NetDefinition._has_sriov_vlan_filterc                 C      t tt| jdS r   )r   stringr   netplan_backend_namenetplan_netdef_get_backendr
   decoder"   r   r   r   backendp      zNetDefinition.backendc                 C   rY   r   )r   rZ   r   netplan_def_type_namenetplan_netdef_get_typer
   r]   r"   r   r   r   typet   r_   zNetDefinition.typec                    r1   )Nc                    r2   r	   )r   netplan_netdef_get_idr
   r4   r5   r"   r   r   r7   z   r8   z"NetDefinition.id.<locals>.<lambda>r9   r"   r   r"   r   idx   r(   zNetDefinition.idc                    r1   )Nc                    r2   r	   )r   netplan_netdef_get_filepathr
   r4   r5   r"   r   r   r7   ~   r8   z(NetDefinition.filepath.<locals>.<lambda>r9   r"   r   r"   r   filepath|   r(   zNetDefinition.filepathc                    r1   )Nc                    r2   r	   )r   (_netplan_netdef_get_embedded_switch_moder
   r4   r5   r"   r   r   r7      r8   z5NetDefinition._embedded_switch_mode.<locals>.<lambda>r9   r"   r   r"   r   _embedded_switch_mode   r(   z#NetDefinition._embedded_switch_modec                 C   r%   r	   )r   r   1netplan_netdef_get_delay_virtual_functions_rebindr
   r"   r   r   r   _delay_virtual_functions_rebind   r(   z-NetDefinition._delay_virtual_functions_rebindc                    sJ   t d}t| jj| j|}|dk r#|d  t fdd}t||S )NzNetplanError **r   c                    s   t  | t| S r	   )r   netplan_error_messager4   r5   errr   r   r7      s    z)NetDefinition._vf_count.<locals>.<lambda>)r   newr   #_netplan_state_get_vf_count_for_defr   r
   r   r   )r   refcountmsgr   rl   r   	_vf_count   s   
zNetDefinition._vf_countc                    r1   )Nc                    r2   r	   )r   _netplan_netdef_get_bond_moder
   r4   r5   r"   r   r   r7      r8   z*NetDefinition._bond_mode.<locals>.<lambda>r9   r"   r   r"   r   
_bond_mode   r(   zNetDefinition._bond_modec                 C   r%   )z
        Returns True if the interface is a compound interface (bond or bridge),
        and its configuration is trivial, without any variation from the defaults.
        )r   r   '_netplan_netdef_is_trivial_compound_itfr
   r"   r   r   r   _is_trivial_compound_itf   s   z&NetDefinition._is_trivial_compound_itf)NNN)r   r    )r   r+   )r   r-   )r   r/   )!__name__
__module____qualname__r   r   r   strr   propertyr#   r'   r*   r,   r.   r0   r:   r<   r>   r@   rF   rR   intrV   rX   r^   rb   rd   rf   rh   rj   rs   ru   rw   r   r   r   r   r      s`    	r   c                   @   s4   e Zd ZddefddZdd Zdd Zd	d
 ZdS )NetDefinitionIteratorNdev_typec                 C   s.   || _ |r
|dntj}t|j|| _d S r   )r   r   r   r   r   &_netplan_state_new_netdef_pertype_iterr
   iterator)r   r   r   np_typer   r   r   r      s   zNetDefinitionIterator.__init__c                 C      t | j d S r	   )r   !_netplan_netdef_pertype_iter_freer   r"   r   r   r   __del__      zNetDefinitionIterator.__del__c                 C      | S r	   r   r"   r   r   r   __iter__      zNetDefinitionIterator.__iter__c                 C   s    t | j}|s
tt| j|S r	   )r   !_netplan_netdef_pertype_iter_nextr   StopIterationr   r   r   
next_valuer   r   r   __next__   s   zNetDefinitionIterator.__next__r	   )rx   ry   rz   r{   r   r   r   r   r   r   r   r   r~      s
    r~   c                   @   s0   e Zd ZdededefddZdefddZd	S )
NetplanAddressaddresslifetimelabelc                 C   s   || _ || _|| _d S r	   )r   r   r   )r   r   r   r   r   r   r   r      s   
zNetplanAddress.__init__r   c                 C   s   | j S r	   )r   r"   r   r   r   __str__   s   zNetplanAddress.__str__N)rx   ry   rz   r{   r   r   r   r   r   r   r      s    r   c                   @   2   e Zd ZdefddZdd Zdd Zdd	 Zd
S )r    netdefc                 C      || _ t|| _d S r	   )r   r    _netplan_netdef_new_address_iterr   r   r   r   r   r   r         z_NetdefAddressIterator.__init__c                 C   r   r	   )r   _netplan_address_iter_freer   r"   r   r   r   r      r   z_NetdefAddressIterator.__del__c                 C   r   r	   r   r"   r   r   r   r      r   z_NetdefAddressIterator.__iter__c                 C   sx   t | j}|s
t|}|jrt|jdnd }|jr&t|jdnd }|j	r4t|j	dnd }t
|||S r   )r   _netplan_address_iter_nextr   r   r   r   rZ   r]   r   r   r   )r   r   contentr   r   r   r   r   r   r      s   z_NetdefAddressIterator.__next__Nrx   ry   rz   r   r   r   r   r   r   r   r   r   r       
    r    c                   @   r   )r+   r   c                 C   r   r	   )r   r   #_netplan_netdef_new_nameserver_iterr   r   r   r   r   r      r   z"_NetdefNameserverIterator.__init__c                 C   r   r	   )r   _netplan_nameserver_iter_freer   r"   r   r   r   r      r   z!_NetdefNameserverIterator.__del__c                 C   r   r	   r   r"   r   r   r   r      r   z"_NetdefNameserverIterator.__iter__c                 C   $   t | j}|s
tt|dS r   )r   _netplan_nameserver_iter_nextr   r   r   rZ   r]   r   r   r   r   r         z"_NetdefNameserverIterator.__next__Nr   r   r   r   r   r+      r   r+   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r-   c                 C   r   r	   )r   r   &_netplan_netdef_new_search_domain_iterr   r   r   r   r   r      r   z$_NetdefSearchDomainIterator.__init__c                 C   r   r	   )r    _netplan_search_domain_iter_freer   r"   r   r   r   r      r   z#_NetdefSearchDomainIterator.__del__c                 C   r   r	   r   r"   r   r   r   r      r   z$_NetdefSearchDomainIterator.__iter__c                 C   r   r   )r    _netplan_search_domain_iter_nextr   r   r   rZ   r]   r   r   r   r   r      r   z$_NetdefSearchDomainIterator.__next__Nrx   ry   rz   r   r   r   r   r   r   r   r   r-      
    r-   T)unsafe_hashc                   @   s   e Zd ZU ejZdZdZee	d< dZ
ee	d< dZee	d< dZee	d< dZee	d	< dZee	d
< eZee	d< dZee	d< eZee	d< dZee	d< dZee	d< dZee	d< dZee	d< dd Zdd ZdS )NetplanRouter   Ntovia	from_addrunicastrb   globalscopeprotocoltablefamilymetricmtubytescongestion_windowadvertised_receive_windowFonlinkc                 C   s   d}| j r
|| j  }| jr|d| j  }| jr |d| j  }| jr+|d| j  }| jr6|d| j  }| j| jk rD|d| j  }| j| jkrR|d| j  }|	 S )N z via z type z scope z src z metric z table )
r   r   rb   r   r   r   _METRIC_UNSPEC_r   _TABLE_UNSPEC_stripr   router   r   r   r     s    
zNetplanRoute.__str__c                 C   s   i }| j dkr| j |d< | jr| j|d< | jr| j|d< | jr$| j|d< | j| jk r/| j|d< | j| jkr:| j|d< | j|d< |S )	Nr   r   r   r   fromr   r   rb   )	r   r   r   r   r   r   r   r   rb   r   r   r   r   to_dict  s   







zNetplanRoute.to_dict)rx   ry   rz   r   rT   r   r   r   r{   __annotations__r   r   rb   r   r   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s$   
 r   c                   @   r   )
r/   c                 C   r   r	   )r   r   _netplan_netdef_new_route_iterr   r   r   r   r   r   3  r   z_NetdefRouteIterator.__init__c                 C   r   r	   )r   _netplan_route_iter_freer   r"   r   r   r   r   7  r   z_NetdefRouteIterator.__del__c                 C   r   r	   r   r"   r   r   r   r   :  r   z_NetdefRouteIterator.__iter__c                 C   s   t | j}|s
tt|d}|jrt|jdnd |j	r(t|j	dnd |r3t|dnd |j
r@t|j
dnd |jrMt|jdnd d |j|j|j|j|j|j|jd}tdi |S )Nr   r   )r   r   r   rb   r   r   r   r   r   r   r   r   r   r   )r   _netplan_route_iter_nextr   r   getattrr   r   rZ   r]   r   rb   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   =  s&   
z_NetdefRouteIterator.__next__Nr   r   r   r   r   r/   2  r   r/   N)dataclassesr   _netplan_cffir   r   _utilsr   r   r   r~   r   r    r+   r-   r   r/   r   r   r   r   <module>   s    

8