ÿØÿà JFIF      ÿÛ C      

!"$"$ÿÛ C  ÿÂ p " ÿÄ              ÿÄ             ÿÚ    ÕÔË®
(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

  ..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ C      

!"$"$ÿÛ C  ÿÂ p " ÿÄ              ÿÄ             ÿÚ    ÕÔË®
(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

  ..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     o
    )b$                     @   s  d dl Z d dlZ d dl mZmZmZ G dd deZG dd de jZG dd de jZ	G d	d
 d
e jZ
G dd de jZe e jdZe je e egej_e jej_e jgej_e jej_e e eZe e
Ze e	Ze eZe jej_dd Zdd Z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eZ!dd Z"eeeegej#_eej#_d d! Z$dS )"    N)c_char_pc_void_pc_intc                   @      e Zd ZdS )LibNetplanExceptionN__name__
__module____qualname__ r   r   (/usr/share/netplan/netplan/libnetplan.pyr          r   c                   @   s$   e Zd ZdejfdefdefgZdS )_GErrordomaincodemessageN)r   r	   r
   ctypesZc_uint32r   r   Z_fields_r   r   r   r   r      s    r   c                   @   r   )_netplan_stateNr   r   r   r   r   r       r   r   c                   @   r   )_netplan_parserNr   r   r   r   r   r   $   r   r   c                   @   r   )_netplan_net_definitionNr   r   r   r   r   r   (   r   r   netplanc                 C   sn   t   tt }tt |  t|}|s"t	|j
jdt t| |r5t	|j
jddS )Nutf-8T)libnetplan_clear_netdefsr   POINTERr   boolnetplan_parse_yamlencodebyref	Exceptioncontentsr   decodenetplan_finish_parse)patherrretr   r   r   netplan_parse:   s   r&   c                 G   sB   t t }t| g |t |R  }|st|jjdd S Nr   )	r   r   r   r   r   r   r    r   r!   )fnargsr$   r%   r   r   r   _checked_lib_callG   s
   r*   c                 C   s&   t |  | }|r|dS d S r'   )r   netplan_get_filename_by_idr   r!   )	netdef_idrootdirresr   r   r   r+   N   s   r+   c                   @   <   e Zd ZdZedd Zdd Zdd Zdd	 Zd
d Z	dS )ParserFc                 C   sB   | j rd S ttj_ttgtj_tt	t
gtj_ttj_d| _ d S NT)_abi_loaded_NetplanParserPr   netplan_parser_newrestyper   r   netplan_parser_clearargtypesr   	_GErrorPPnetplan_parser_load_yamlr   clsr   r   r   	_load_abiV   s   
zParser._load_abic                 C      |    t | _d S N)r<   r   r4   _ptrselfr   r   r   __init__c      zParser.__init__c                 C      t t| j d S r>   )r   r6   r   r   r?   r@   r   r   r   __del__g      zParser.__del__c                 C      t tj| j|d d S r'   )r*   r   r9   r?   r   )rA   filenamer   r   r   	load_yamlj      zParser.load_yamlc                 C   rG   r'   )r*   r   Z"netplan_parser_load_yaml_hierarchyr?   r   )rA   r-   r   r   r   load_yaml_hierarchym   rJ   zParser.load_yaml_hierarchyN)
r   r	   r
   r2   classmethodr<   rB   rE   rI   rK   r   r   r   r   r0   S   s    
r0   c                   @   sL   e Zd ZdZedd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd ZdS )StateFc                 C   s   | j rd S ttj_ttgtj_tt	t
gtj_ttj_tgtj_ttj_ttgtj_ttj_ttt
gtj_ttj_tgtj_ttj_tgtj_ttj_d| _ d S r1   )r2   _NetplanStatePr   netplan_state_newr5   r   r   netplan_state_clearr7   r3   r8   #netplan_state_import_parser_resultsr   netplan_state_get_netdefs_sizer   netplan_state_get_netdef_NetplanNetDefinitionPnetplan_state_dump_yaml'netplan_netdef_get_embedded_switch_mode1netplan_netdef_get_delay_virtual_functions_rebindr:   r   r   r   r<   t   s"   



zState._load_abic                 C   r=   r>   )r<   r   rO   r?   r@   r   r   r   rB      rC   zState.__init__c                 C   rD   r>   )r   rP   r   r   r?   r@   r   r   r   rE      rF   zState.__del__c                 C   s   t tj| j|j d S r>   )r*   r   rQ   r?   )rA   parserr   r   r   import_parser_results   rF   zState.import_parser_resultsc                 C   s   |  }ttj| j| d S r>   )filenor*   r   rU   r?   )rA   output_filefdr   r   r   	dump_yaml   s   zState.dump_yamlc                 C   s   t | jS r>   )r   rR   r?   r@   r   r   r   __len__   s   zState.__len__c                 C   s(   t | j|d}|st t| |S r'   )r   rS   r?   r   
IndexErrorNetDefinition)rA   Zdef_idptrr   r   r   __getitem__   s   
zState.__getitem__N)r   r	   r
   r2   rL   r<   rB   rE   rY   r]   r^   rb   r   r   r   r   rM   q   s    
rM   c                   @   sP   e Zd ZdZedd Zdd Zdd Zedd	 Z	ed
d Z
edd ZdS )r`   Fc                 C   s&   | j rd S tgtj_ttj_d| _ d S r1   )r2   rT   r   netplan_netdef_get_idr7   r   r5   r:   r   r   r   r<      s
   

zNetDefinition._load_abic                 C   s*   t |dsdS t| jjt|jjkS )Nr?   F)hasattrr   Z	addressofr?   r    )rA   otherr   r   r   __eq__   s   
zNetDefinition.__eq__c                 C   s   |    || _|| _d S r>   )r<   r?   Z_parent)rA   np_statera   r   r   r   rB      s   
zNetDefinition.__init__c                 C   s   t | jdS r'   )r   rc   r?   r!   r@   r   r   r   id   s   zNetDefinition.idc                 C   s   t | j}|o|dS r'   )r   rV   r?   r!   )rA   moder   r   r   embedded_switch_mode   s   z"NetDefinition.embedded_switch_modec                 C   s   t t| jS r>   )r   r   rW   r?   r@   r   r   r   delay_virtual_functions_rebind   s   z,NetDefinition.delay_virtual_functions_rebindN)r   r	   r
   r2   rL   r<   rf   rB   propertyrh   rj   rk   r   r   r   r   r`      s    
	

r`   c                   @   r/   )_NetdefIteratorFc                 C   sp   | j rd S ttdstdttgtj_ttj_	tgtj
_ttj
_	tgtj_d tj_	tgtj_ttj_	d| _ d S )NZ#_netplan_iter_defs_per_devtype_initz
                The current version of libnetplan does not allow iterating by devtype.
                Please ensure that both the netplan CLI package and its library are up to date.
            T)r2   rd   r   r   rN   r   &_netplan_state_new_netdef_pertype_iterr7   r   r5   #_netplan_iter_defs_per_devtype_nextrT   #_netplan_iter_defs_per_devtype_freeZ_netplan_netdef_idr:   r   r   r   r<      s   




z_NetdefIterator._load_abic                 C   s,   |    || _t|j|o|d| _d S r'   )r<   rg   r   rn   r?   r   iterator)rA   rg   devtyper   r   r   rB      s   z_NetdefIterator.__init__c                 C   s   t | j d S r>   )r   rp   rq   r@   r   r   r   rE      s   z_NetdefIterator.__del__c                 C   s   | S r>   r   r@   r   r   r   __iter__      z_NetdefIterator.__iter__c                 C   s    t | j}|s
tt| j|S r>   )r   ro   rq   StopIterationr`   rg   )rA   Z
next_valuer   r   r   __next__   s   z_NetdefIterator.__next__N)
r   r	   r
   r2   rL   r<   rB   rE   rs   rv   r   r   r   r   rm      s    
rm   c                   @   s   e Zd Zdd Zdd ZdS )__GlobalStatec                 C   s   t tjt| _d S r>   )r   castr   Zglobal_staterN   r?   r@   r   r   r   rB      s   z__GlobalState.__init__c                 C   s   d S r>   r   r@   r   r   r   rE     rt   z__GlobalState.__del__N)r   r	   r
   rB   rE   r   r   r   r   rw      s    rw   c                 C   sh   t t }t  t|d tt | |r%t	|j
jdttt | }dd |D S )Nr   c                 S   s   g | ]}|j qS r   )rh   ).0Zndr   r   r   
<listcomp>  s    z/netplan_get_ids_for_devtype.<locals>.<listcomp>)r   r   r   r   r   process_yaml_hierarchyr   r"   r   r   r    r   r!   listrm   rw   )rr   r-   r$   Zndsr   r   r   netplan_get_ids_for_devtype  s   r}   c                 C   s"   t tj| d| |  d S r'   )r*   r   netplan_util_dump_yaml_subtreer   rZ   )prefixZ
input_filer[   r   r   r   dump_yaml_subtree  s
   r   )%r   Zctypes.utilr   r   r   r   r   Z	Structurer   r   r   r   ZCDLLutilZfind_libraryr   r   r   r7   r+   r5   r{   r8   r3   rN   rT   Znetplan_get_id_from_nm_filenamer&   r*   r0   rM   r`   rm   rw   r}   r~   r   r   r   r   r   <module>   s<   





7'.