o edPH@sddlZddlZddlZddlZddlmZmZmZmZmZm Z ddl m Z m Z m Z GdddeZGdddejZGdd d ejZGd d d ejZGd d d ejZeejdZeeeZeeZeeZeeZejej_ddZ ddZ!GdddZ"GdddZ#GdddZ$GdddZ%eeeegej&_'eej&_eeeegej(_'eej(_de e)de)fddZ*dd Z+dS)!N)c_char_pc_void_pc_intc_uintc_size_t c_ssize_t)ListUnionIOc@ eZdZdS)LibNetplanExceptionN__name__ __module__ __qualname__rr(/usr/share/netplan/netplan/libnetplan.pyr r c@s$eZdZdejfdefdefgZdS)_GErrordomaincodemessageN)rrrctypesc_uint32rr_fields_rrrrrsrc@r )_netplan_stateNr rrrrr#rrc@r )_netplan_parserNr rrrrr'rrc@r )_netplan_net_definitionNr rrrrr+rrnetplancCsdd}|dkr.t|}||}|dkr|d}q|dkr"td||dkr(dS|jdStd) NirzUnknown error: %dutf-8z&Halting due to string buffer size > 1M)rcreate_string_bufferr valuedecode)functionsizebufferrrrr_string_realloc_call_no_error9s   r)cGsBtt}t|g|t|R}|st|jjddSNr") rPOINTERrboolbyrefr contentsrr%)fnargserrretrrr_checked_lib_callKs r3c@sjeZdZdZeddZddZddZdee e ffd d Z d d Z de fd dZ de de fddZdS)ParserFcCs|jrdSttj_ttgtj_tt t gtj _t tj _tt t gtj _t tj _tt t gtj_t tj_tt t t gtj_t tj_d|_dSNT) _abi_loaded_NetplanParserPlibnetplan_parser_newrestyperr+netplan_parser_clearargtypesr _GErrorPPnetplan_parser_load_yamlr netplan_parser_load_yaml_from_fd#netplan_parser_load_nullable_fields&netplan_parser_load_nullable_overridesclsrrr _load_abiUs  zParser._load_abicC|t|_dSN)rDr8r9_ptrselfrrr__init__lzParser.__init__cCtt|jdSrF)r8r;rr-rGrHrrr__del__pzParser.__del__ input_filecCs<t|trttj|j|ddSttj|j|dSr*) isinstancestrr3r8r>rGencoder?filenorIrOrrr load_yamlss zParser.load_yamlcCsttj|j|ddSr*)r3r8"netplan_parser_load_yaml_hierarchyrGrR)rIrootdirrrrload_yaml_hierarchyyszParser.load_yaml_hierarchycCsttj|j|dSrF)r3r8r@rGrSrTrrrload_nullable_fields|szParser.load_nullable_fields constraintcCs ttj|j||ddSr*)r3r8rArGrSrR)rIrOrZrrrload_nullable_overridesszParser.load_nullable_overridesN)rrrr6 classmethodrDrJrMr rQr rUrXrYr[rrrrr4Rs r4c@seZdZdZeddZddZddZdd Zd d Z d d Z ddZ ddZ ddZ eddZeddZeddZeddZeddZeddZed d!Zed"d#Zed$d%Zed&d'Zed(d)Zed*d+Zd,d-Zd.S)/StateFcCs|jrdSttj_ttgtj_tt t gtj _t tj _tgtj _t tj _ttgtj_ttj_tttt gtj_t tj_tttt gtj_t tj_tt t gtj_t tj_tgtj_ttj_tgtj_t tj_tgtj_t tj_d|_dSr5)r6_NetplanStatePr8netplan_state_newr:rr+netplan_state_clearr<r7r=#netplan_state_import_parser_resultsrnetplan_state_get_netdefs_sizernetplan_state_get_netdef_NetplanNetDefinitionPnetplan_state_write_yaml_file#netplan_state_update_yaml_hierarchynetplan_state_dump_yaml'netplan_netdef_get_embedded_switch_mode1netplan_netdef_get_delay_virtual_functions_rebindnetplan_state_get_backendrBrrrrDs.      zState._load_abicCrErF)rDr8r_rGrHrrrrJrKzState.__init__cCrLrF)r8r`rr-rGrHrrrrMrNz State.__del__cCsttj|j|jdSrF)r3r8rarG)rIparserrrrimport_parser_resultsrNzState.import_parser_resultscCs:|r|dnd}|r|dnd}ttj|j||dSr*)rRr3r8rerG)rIfilenamerWnamerootrrrwrite_yaml_fileszState.write_yaml_filecCs2|d}|r |dnd}ttj|j||dSr*)rRr3r8rfrG)rIdefault_filenamerWrnrorrrupdate_yaml_hierarchys zState.update_yaml_hierarchycCs|}ttj|j|dSrF)rSr3r8rgrG)rI output_filefdrrr dump_yamlszState.dump_yamlcCs t|jSrF)r8rbrGrHrrr__len__s z State.__len__cCs(t|j|d}|stt||Sr*)r8rcrGrR IndexError NetDefinition)rIdef_idptrrrr __getitem__s zState.__getitem__cCstddt|dDS)Ncs|]}|j|fVqdSrFid.0ndrrr z!State.all_defs..dict_NetdefIteratorrHrrrall_defszState.all_defscCtddt|dDS)Ncsr|rFr}rrrrrrz"State.ethernets.. ethernetsrrHrrrrrzState.ethernetscCr)Ncsr|rFr}rrrrrrzState.modems..modemsrrHrrrrrz State.modemscCr)Ncsr|rFr}rrrrrrzState.wifis..wifisrrHrrrrrz State.wifiscCr)Ncsr|rFr}rrrrrrzState.vlans..vlansrrHrrrrrz State.vlanscCr)Ncsr|rFr}rrrrrrz State.bridges..bridgesrrHrrrrrz State.bridgescCr)Ncsr|rFr}rrrrrrzState.bonds..bondsrrHrrrrrz State.bondscCr)Ncsr|rFr}rrrrrrz State.tunnels..tunnelsrrHrrrrrz State.tunnelscCr)Ncsr|rFr}rrrrrrzState.vrfs..vrfsrrHrrrrrz State.vrfscCr)Ncsr|rFr}rrrrrrz"State.ovs_ports..z _ovs-portsrrHrrr ovs_portsrzState.ovs_portscCr)Ncsr|rFr}rrrrrrz#State.nm_devices..z nm-devicesrrHrrr nm_devicesrzState.nm_devicescCtt|jdSr*)r8netplan_backend_namerjrGr%rHrrrbackendrz State.backendcCsNt}|j|dtd|WddS1s wYdS)N)rszMerged config: {})tempfile TemporaryFileruloggingdebugformatread)rItmprrr dump_to_logss  "zState.dump_to_logsN)rrrr6r\rDrJrMrlrprrrurvr{propertyrrrrrrrrrrrrrrrrrr]sJ $             r]c@seZdZdZeddZddZddZedd Z ed d Z ed d Z eddZ eddZ eddZeddZeddZeddZeddZeddZeddZed d!Zed"d#Zed$d%Zed&d'Zd/d)d*Zed+d,Zed-d.Zd(S)0rxFcCsz|jrdStgtj_ttj_tttgtj _t tj _tttgtj _t tj _tgtj _ttj _tgtj _ttj _tttgtj_t tj_tgtj_ttj_tgtj_ttj_tgtj_ttj_tgtj_ttj_tgtj_ttj_tgtj_ttj_tgtj_ttj_tgtj_ttj_tgtj_ttj_tgtj_ttj_tgtj_ttj_tttgtj_ttj_tgtj_ttj_d|_dSr5)r6rdr8netplan_netdef_has_matchr<rr:rrnetplan_netdef_get_idrnetplan_netdef_get_filepathnetplan_netdef_get_backendnetplan_netdef_get_typenetplan_netdef_get_set_name_netplan_netdef_get_criticalnetplan_netdef_get_sriov_linknetplan_netdef_get_vlan_linknetplan_netdef_get_bridge_linknetplan_netdef_get_bond_linknetplan_netdef_get_peer_link_netplan_netdef_get_vlan_idr%_netplan_netdef_get_sriov_vlan_filternetplan_netdef_match_interfacernetplan_def_type_namer^r=#_netplan_state_get_vf_count_for_def'_netplan_netdef_is_trivial_compound_itfrBrrrrDsR                zNetDefinition._load_abicCs*t|dsdSt|jjt|jjkS)NrGF)hasattrr addressofrGr.)rIotherrrr__eq__Gs zNetDefinition.__eq__cCs|||_||_dSrF)rDrG_parent)rInp_staterzrrrrJLs zNetDefinition.__init__cCtt|jSrF)r,r8rrGrHrrr has_matchSzNetDefinition.has_matchctfddS)Nctj|t|SrF)r8rrGlenbrHrrYz(NetDefinition.set_name..r)rHrrHrset_nameWrzNetDefinition.set_namecCrrF)r,r8rrGrHrrrcritical[rzNetDefinition.criticalcC t|j}|rt|j|SdSrF)r8rrGrxrrIlink_ptrrrr sriov_link_  zNetDefinition.sriov_linkcCrrF)r8rrGrxrrrrr vlan_linkfrzNetDefinition.vlan_linkcCrrF)r8rrGrxrrrrr bridge_linkmrzNetDefinition.bridge_linkcCrrF)r8rrGrxrrrrr bond_linktrzNetDefinition.bond_linkcCrrF)r8rrGrxrrrrr peer_link{rzNetDefinition.peer_linkcCs"t|j}|tdjkrdS|S)N)r8rrGrr$)rIvlan_idrrrrs zNetDefinition.vlan_idcCrrF)r,r8rrGrHrrrhas_sriov_vlan_filterrz#NetDefinition.has_sriov_vlan_filtercCrr*)r8rrrGr%rHrrrrrzNetDefinition.backendcCrr*)r8rrrGr%rHrrrtyperzNetDefinition.typecr)NcrrF)r8rrGrrrHrrrrz"NetDefinition.id..rrHrrHrr~rzNetDefinition.idcr)NcrrF)r8rrGrrrHrrrrz(NetDefinition.filepath..rrHrrHrfilepathrzNetDefinition.filepathcCst|j}|o |dSr*)r8rhrGr%)rImoderrrembedded_switch_modes z"NetDefinition.embedded_switch_modecCrrF)r,r8rirGrHrrrdelay_virtual_functions_rebindrz,NetDefinition.delay_virtual_functions_rebindNc Cs4tt|j|o |d|o|d|o|dSr*)r,r8rrGrR)rIitf_name itf_driveritf_macrrrmatch_interfaces    zNetDefinition.match_interfacecCsDtt}t|jj|jt|}|dkr t|j j d|S)Nrr") rr+rr8rrrGr-r r.rr%)rIr1countrrrvf_counts zNetDefinition.vf_countcCr)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,r8rrGrHrrris_trivial_compound_itfsz%NetDefinition.is_trivial_compound_itf)NNN)rrrr6r\rDrrJrrrrrrrrrrrrrr~rrrrrrrrrrrxsV ?                  rxc@s<eZdZdZeddZddZddZdd Zd d Z d S) rFcCsp|jrdSttdstdttgtj_ttj_ tgtj _t tj _ tgtj _dtj _ tgtj _ttj _ d|_dS)N#_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)r6rr8r r^r&_netplan_state_new_netdef_pertype_iterr<rr:#_netplan_iter_defs_per_devtype_nextrd#_netplan_iter_defs_per_devtype_free_netplan_netdef_idrBrrrrDs      z_NetdefIterator._load_abicCs,|||_t|j|o|d|_dSr*)rDrr8rrGrRiterator)rIrdevtyperrrrJsz_NetdefIterator.__init__cCst|jdSrF)r8rrrHrrrrMsz_NetdefIterator.__del__cCs|SrFrrHrrr__iter__sz_NetdefIterator.__iter__cCs t|j}|s tt|j|SrF)r8rr StopIterationrxr)rI next_valuerrr__next__s  z_NetdefIterator.__next__N) rrrr6r\rDrJrMrrrrrrrs  rpatch_object_path patch_payloadcCs*ttjd|d|d|dS)N r")r3r8netplan_util_create_yaml_patchjoinrRrS)rr patch_outputrrrcreate_yaml_patchs rcCs"ttj|d||dSr*)r3r8netplan_util_dump_yaml_subtreerRrS)prefixrOrsrrrdump_yaml_subtrees r),rrr ctypes.utilrrrrrrtypingrr r Exceptionr StructurerrrrCDLLutil find_libraryr8r+r=r7r^rdnetplan_get_id_from_nm_filenamer:r)r3r4r]rxrrr<rrQrrrrrrs>     2<.