&qa8* ` d Z ddlmZ ddlmZ ddlZn
# e$ r dZY nw xY wd Zd Zd Z d Z
dS )
z2Kernel-side LVP/LVE operations via pylve bindings. )PyLve )LvdErrorNc t t d t t } | | st d | S )z'Initialize and return a PyLve instance.Nzpylve module not availablezDkernel does not support per-domain limits (requires lve_lvp_create2))pylver r
initializedomains_supported)pys py/websiteisolation/limits.py get_pylver s^ }3444 uBMMOOO
!! 5 4 5 5 5
I c Z | }d|v rt |d |_ d|v rt |d |_ d|v rt |d |_ d|v rt |d |_ d|v rt |d |_ |S )z*Create liblve_settings from a limits dict.cpupmemionprociops)liblve_settingsintls_cpu
ls_memory_phyls_iols_nprocls_iops)r
limitssettingss r settings_from_limitsr s !!##HfUm,,
!$VF^!4!4v~~VD\**&w00
vf~..Or
c D | j | j | j | j | j dS )z2Convert liblve_settings to a dict of limit fields.)r r r r r )r r r r r )r s r settings_to_dictr . s/ &n" r
c 0 t j | | }|S )zCall 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$ 9 s
Y 1 1B
Ir
)__doc__lve_utils.pylve_wrapperr
exceptionsr r ImportErrorr r r r$ r
r