§ ?r5j.ãó`—dZddlmZddlmZ ddlZn #e$rdZYnwxYwd„Zd„Zd„Z d „Z dS) z2Kernel-side LVP/LVE operations via pylve bindings.é)ÚPyLveé)ÚLvdErrorNcóÈ—t€td¦«‚tt¦«}| ¦«| ¦«std¦«‚|S)z'Initialize and return a PyLve instance.Nzpylve module not availablezDkernel does not support per-domain limits (requires lve_lvp_create2))ÚpylverrÚ initializeÚdomains_supported)Úpys úpy/websiteisolation/limits.pyÚ get_pylver s^€å €}ÝÐ3Ñ4Ô4Ð4Ý �u‰Œ€B؇M‚M�O„O€OØ × Ò Ñ !Ô !ð5Ýð4ñ5ô5ð 5à €IócóZ—| ¦«}d|vrt|d¦«|_d|vrt|d¦«|_d|vrt|d¦«|_d|vrt|d¦«|_d|vrt|d¦«|_|S)z*Create liblve_settings from a limits dict.ÚcpuÚpmemÚioÚnprocÚiops)Úliblve_settingsÚintÚls_cpuÚ ls_memory_phyÚls_ioÚls_nprocÚls_iops)r ÚlimitsÚsettingss r Úsettings_from_limitsrs­€à×!Ò!Ñ#Ô#€HØ �€€Ý˜f UœmÑ,Ô,ˆŒØ �ÐÐÝ!$ V¨F¤^Ñ!4Ô!4ˆÔØ ˆv€~€~ݘV Dœ\Ñ*Ô*ˆŒØ�&ÐÐÝ  w¤Ñ0Ô0ˆÔØ �ÐÐݘv fœ~Ñ.Ô.ˆÔØ €Or cóD—|j|j|j|j|jdœS)z2Convert liblve_settings to a dict of limit fields.)rrrrr)rrrrr)rs r Úsettings_to_dictr.s/€ðŒØÔ&ØŒnØÔ"ØÔ ð  ð ðr có0—tj||¦«}|S)zÀCall pylve.lve_lvp_setup directly, bypassing the lveapi wrapper. The lveapi wrapper iterates /proc/lve/resellers/ which doesn't exist for nested domain LVPs (they are leaf containers).)rÚ lve_lvp_setup)Ú domain_idrÚrcs r Úlvp_setup_directr$9s€õ Ô ˜Y¨Ñ 1Ô 1€BØ €Ir ) Ú__doc__Úlve_utils.pylve_wrapperrÚ exceptionsrrÚ ImportErrorr rrr$©r r úr*s«ðð 9Ð8à)Ð)Ð)Ð)Ð)Ð)à Ð Ð Ð Ð Ð ðØ€L€L€L€LøØðððØ €E€E€Eðøøøð ð ð ð ð ð ð ðððððððs �•ž