iVcZ@sdZddklZlZlZlZlZlZlZl Z l Z l Z l Z l Z lZlZlZlZlZlZlZlZlZlZlZlZlZlZlZlZlZlZlZddk l!Z!l"Z"l#Z#ddk$Z$ddk%Z%ddk&Z&ddk'Z'ddk(Z(ddk)Z)ddk*Z*ye$i+ddde,i$Z-Wn6yddk.Z/e/i0i$Z-WqdZ-qXnXe1d \Z2he-d e26Z3d Z4d Z5e5Z6ed de,Z7e&i8dd Z9ee7i:_;ege7i<_=de7i<_;e e ege7i?_=eee ge7i@_=de9djodndZAeBe7eAZCdZDdefdYZEdefdYZFdefdYZGe eeGge7iH_=e e7iH_;dZHe eeFdge7iI_=e e7iI_;dZIdZJdZKd efd!YZLd"ZMd#efd$YZNd%efd&YZOd'ZPd(d)ZQd*ZRd+ZSd,ZTeUd-ZVd.ZWd/ZXd0efd1YZYd2efd3YZZd4efd5YZ[ed6de,Z\e eee[ge\i]_=d7Z^d8Z_d9efd:YZ`d;efd<YZad=efd>YZbd?e`dfd@efdAefdBefdCefdDefdEe fdFeebfdGeebfg eb_cdHZddIefdJYZed ZfyedKde,Zgeeeee ee`e gegih_=eeeegegii_=eeee eeeeeegegij_=Wnekj o dZgnXdLZledMde,Zmeemin_;e e gemin_=e emio_;egemio_=ee eeZpee e e eepgemiq_=e eegemir_=e emir_;egemis_=e emis_;egemit_=demit_;d Zud ZvdZwdZxdNZydOZrdPZsdQZtdddRZndSZodTZqdUZzee eeeZ{eemi|_;demi|_=eemi}_;e e gemi}_=demi~_;egemi~_=demi_;egemi_=eemi_;egemi_=egemi_=egemi_=e emi_;egemi_=eemi_;eegemi_=ee e ee{gemi_=eee egemi_=eee eeegemi_=dVefdWYZeeeZe eegemi_=egemi_=demi_;ee gemi_=egemi_=eemi_;egemi_=e emi_;egemi_=e emi_;egemi_=eemi_;d ZdZdXZdYZdZZdZed BZedBZedXBZed\BZed]BZeeBeBZhd^d6d_d`6dadN6dbdc6ddde6dfdg6dhdi6Zd ZdZdXZd`ZdZdjZd ZdkZdlZ|dmednZ}doZdpZdqZddrZddsZdtZ~duZdvZddwZdxZdyZdzZd{Zd|Zd}Zd~ZdZdZdZdZdZdZdme,dZdZdZdZdZe,dZdadmdZedde,Ze ee egei_=ee egei_=egei_=ee gei_=e ei_;dddZddZdZdZdZdZdZdZe e ege7i_=e e7i_;dadZdadZdadZdadZdZedde,Ze gei_=eei_;e e gei_=e ei_;dei_=e ei_;e gei_=e ei_;defdYZdZddZd Zedde,Zeei_;egei_=dei_;egei_=e ei_;eei_;ee e gei_=egei_=dei_;ee eeZeeegei_=egei_=e ei_;egei_=e e gei_=eei_;ee gei_=dei_;egei_=ee e gei_=ee e e ee gei_=ee e gei_=ee e e ee e e e gei_=d ZdZdXZd\Zd ZdHZd ZdZdXZd\Ze1d\IZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ Z Z Z Z ZZZZZZZZZZZZZZZZZZZ Z!Z"Z#Z$Z%Z&Z'Z(Z)Z*Z+Z,Z-Z.Z/Z0Z1Z2e1d\Z3Z4Z5Z6Z7Z8Z9Z:Z;Z<Z=Z>Z?Z@ZAZBZCZDZEZFZGdZdZedZdZdZdZdZdZdZdZeUdZdZeUdZHdZdZIdZJdZKdZLeLZMdeLee ZNeLeNee ZOePdd\>ZQeQd BZReQdBZSeQdBZTeQdXBZUeQdBZVeQdBZWeQdBZXeQd\BZYeQdBZZeQdBZ[eQd BZ\dXZ]d\Z^da_defdYZ`defdYZadZbdZcdZddZedZfdZgdZhdZidZjdZkdZldZmdZndZodZpdZqdZrdZsdZtdZudZvewevd Zxd Zyd ZzePdd>ePdd >BePdd\>BdBZ{defdYZ|dZ}dZ~dZedBZdefdYZdZege7i<_=de7i<_;e e eege7i_=ee7i_;dZd ZdZdZddddddddddddddddddddddddddddddddddddddddd d d d d ddddddddddddddddg=ZdS( s/Solaris-specific library wrappers and functionsi(tCDLLtc_void_ptc_ulongt c_ulonglongtc_chartcastt Structuretpointertc_intt get_errnotc_char_ptc_uinttbyreftsizeoftc_ushorttmemmovetcreate_string_bufferRtc_uint32t CFUNCTYPEtc_uint64tc_longtc_ubytetc_bytetPOINTERtc_int32tc_int64tUniontc_shortt addressoft set_errno(t#BootmgmtMalformedPropertyValueErrort"BootmgmtMalformedPropertyNameErrortBootmgmtNotSupportedErrorNtSUNW_OST_OSLIBs/usr/lib/localetfallbackcCs|S(((tx((s../../common/bootmgmt/pysol.pyt#sislibzfs initialization failureiislibc.sot use_errnoiitstatvfst32t64tcCsRh}xEg}|iD]\}}||q~D]}t|||||djodS|djodS|djodSdSdS( sDecodes the following error codes from mnttab.h: #define MNT_TOOLONG 1 /* entry exceeds MNT_LINE_MAX */ #define MNT_TOOMANY 2 /* too many fields in line */ #define MNT_TOOFEW 3 /* too few fields in line */ isEntry exceeds 1024 charactersisToo many fields in lineisToo few fields in linesUnknown mnttab errorN((tcode((s../../common/bootmgmt/pysol.pytmnttab_err_decodes   s /etc/mnttabcCsVtti|datidjo*tt|dti tndS(Ntrs: ( RRLtfopent _mnttab_FILEtvaluetNoneRNR RORP(tmtab((s../../common/bootmgmt/pysol.pyt mnttab_open-scCsct}titt|}|djodS|djot|t|nt|S(sReturns the next mnttab entry as a dictionary whose keys are: mnt_special mnt_mountp mnt_fstype mnt_mntopts mnt_time or None if there are no more entries iN( RuRLt getmntentRR RRNRR0(tmntentR((s../../common/bootmgmt/pysol.pyR5s   cKst}t}x(|iD]}|i|||qWtitt|t|}|djodS|djot|t |nt |S(s_Returns a mnttab entry matching the attributes passed in, or None if no entry matches. iN( Rutkeyst __setattr__RLt getmntanyRR RRNRR0(tattrsRtmntmatchR#R((s../../common/bootmgmt/pysol.pyRIs   !  cCslt}titt|t|}|djodS|djot|t|nt |S(sReturns the next extmnttab entry as a dictionary whose keys are: mnt_special mnt_mountp mnt_fstype mnt_mntopts mnt_time mnt_major mnt_minor or None if there are no more entries. iN( R{RLt getextmntentRR R RRNRR0(textmntR((s../../common/bootmgmt/pysol.pyRZs !  cCs0|tjottntitdS(smRewinds the mnttab file to the beginning if reopen is True, the mnttab file is closed, then reopened N(R\t mnttab_closeRRLtrewindR(treopen((s../../common/bootmgmt/pysol.pyt resetmnttabps  cCstitdS(N(RLtfcloseR(((s../../common/bootmgmt/pysol.pyR{si$tSol_uuidcBsleZdefdefdefdefdefdedfgZdZdZd Zd Z RS( ttime_lowttime_midttime_hi_and_versiontclock_seq_hi_and_reservedt clock_seq_lowt node_addricCstt|iy|i|Wndtj oXd|_d|_d|_d|_d|_ x&t dD]}d|i |R?RG( R`trootR"tpropvalRRt stringvaluet stringlenR@((s../../common/bootmgmt/pysol.pyR_s6            cCsKti||||}|djo"tttitn|S(s i(Rtdi_prom_prop_lookup_bytesRNR RORP(tphdltnodehdlR`tcharppR((s../../common/bootmgmt/pysol.pyRhs "cCsti|}t|S(s (Rt di_child_nodeR(R;R((s../../common/bootmgmt/pysol.pyRlscCsti|}t|S(s (Rtdi_sibling_nodeR(R;R((s../../common/bootmgmt/pysol.pyRmscCsti|}|S(s (Rt di_node_name(R;R((s../../common/bootmgmt/pysol.pyRnscCsti|}|S(s (Rt di_bus_addr(R;R((s../../common/bootmgmt/pysol.pyRoscCsCt|}x0|o(|t|jo|St|}qWdS(s N(RlRnRmR(R;R`tchild((s../../common/bootmgmt/pysol.pyt_di_locate_child$s c Cs0tdt}t}d}|id}|}d}d}zyx1|D])} | djoqLnt|| }qLWtt}t|||t |}|djo8t|} | i t |t i }| i|}nd}Wntj o} d}nXWdt|t|X||fS(s R4R)iiN(R5RbR3RRRqRRRhR t from_addressRRRtfrom_buffer_copyRNRHRG( R`RdR"RiRetprop_componentsR;RRt componenttRSBAR@((s../../common/bootmgmt/pysol.pytdi_find_prom_prop/s4       cCs+t||\}}|djotStS(Ni(RwR\R[(R`RdRR((s../../common/bootmgmt/pysol.pytdi_find_prom_prop_boolPscCs@t||\}}|djodStt|idS(Nit(RwRtstrt bytearraytrstrip(R`RdRR((s../../common/bootmgmt/pysol.pytdi_find_prom_prop_stringUs cCsY|iddjotS|id}x(|d D]}|ddjotSq5WtS(NR4it@(tfindR\RR[(Rst split_pathtelement((s../../common/bootmgmt/pysol.pyt di_uap_path\s  cCs t|to |g}ntdjodSg}x|D]}|ddjo$t|}|djoq?qn|}yt|}|pw?nWn/tj o#}|itijoq?qnXt ||}|pq?n|i |q?Wt ||S(NiR4( Rt basestringtprom_get_versionRtprom_alias_to_devtprom_path_to_devfs_pathRNR>tEINVALtdi_process_minor_nameRLtdi_devfs_phys_to_logical(tdisklistt default_roottoptimizetpathlisttdiskt prom_patht devfs_pathtioerr((s../../common/bootmgmt/pysol.pyt(di_prom_disklist_to_devfs_logical_tupleshs0       ccsit|}zKt|}x8|dj o*tii||}|Vt|}qWWdt|XdS(sReturn a generator that yields directory entries from devfs in a way that avoids inducing device attaches. THIS IS A PRIVATE UNSTABLE ORACLE INTERFACE. N(RRRRORsRVR(RsRtentrytfullpath((s../../common/bootmgmt/pysol.pytlistdevs   cCsg}td}zdt|}xQ|dj oC|djo&tiid|}|i|nt|}q$WWdt|X|S(sReturn a list of files/directories under /dev that has been scrubbed of any troublemakers. THIS IS A PRIVATE UNSTABLE ORACLE INTERFACE. s/devtfdtptsttermtlofitrlofitvttzvoltzconstusbtnettmdtcfgtchassistcputcuatdtracetipnettkzt infinibandsremovable-mediat hotpluggableN(sfdRRRRRRRRRRRRRRRRRRsremovable-mediaR(RRRRORsRVRLR(ttoplevel_pathsRRR((s../../common/bootmgmt/pysol.pytlistdev_toplevels     c Csyti|}Wntj o }tSXti|iojti|}|iti oti i |}n"ti i ti i ||}|i |n3ti|io||jo|i |tStS(sIInvoke lstat on the path argument passed in, and if path is a symlink, determines the link target, converts it to a canonical path, and stores it to linklist[0]. If path is a directory, it is appended to newdirlist iff it's not in the visited list. Returns True if path is a directory, and False otherwise. (ROtlstattOSErrorR[tstattS_ISLNKR<treadlinkt startswithtsepRstabspathRVRLtS_ISDIRR\( tdirRst newdirlisttvisitedtlinklistRRtoserrt link_targettreal_link_fullpath((s../../common/bootmgmt/pysol.pyt lstat_and_adds !  ccst}g}g}x|og}x|D]}ttii|||||tjoq,n|i|x_t|D]Q}tii||}t||||||o|d|fVng}q~Wq,W|}qWdS(s[Returns a generator that produces tuples of the form: (link-target, /dev-pathname) iN( RRRORstdirnameR[RLRRV(tdirlistRRRtpathitemR#Rs((s../../common/bootmgmt/pysol.pytfindalldevlinkss(   c Csh}xtD]\}}|id}|djoqn||td}y|i|}Wntj o qnX|i|g}|i||||RP(Rterrcodet errstring((s../../common/bootmgmt/pysol.pyRs (R4R5RJR(((s../../common/bootmgmt/pysol.pyRscCsMtti|}|idjodSt|ii}ti||S(s2Returns the current state of the specified serviceiN(Rt_libscft smf_get_stateRRR RLR(tsvct alloced_strRt((s../../common/bootmgmt/pysol.pyRs  cCsOti||}|djo(ti}t|ti|n|SdS(s6Enables the given smf service with the specified flagsiN(Rtsmf_enable_instancet scf_errorRt scf_strerror(RR!trettscferr((s../../common/bootmgmt/pysol.pyRs   s libzfs.so.1iIicCs:ti}|djotdttnt|S(Ni(t_libzfst libzfs_initRRNt_msgstLIBZFS_INIT_FAILURER(R"((s../../common/bootmgmt/pysol.pyRs  cCs ti|S(N(Rtlibzfs_error_description(tlzfsh((s../../common/bootmgmt/pysol.pyR scCsEti|||}|djotdt|nt|S(Ni(Rtzfs_openRRNR R(R tzfsnamettypeR"((s../../common/bootmgmt/pysol.pyR s cCsti|dS(N(Rt zfs_close(tzfsh((s../../common/bootmgmt/pysol.pyRscCs ti|S(N(Rt zfs_get_type(R((s../../common/bootmgmt/pysol.pyRscCs ti|S(N(Rt zfs_get_name(R((s../../common/bootmgmt/pysol.pyRscCs(ti||}|djotStS(Ni(Rtzfs_name_validR[R\(tbeNameR R((s../../common/bootmgmt/pysol.pyRscCsBti||}|djotdt|nt|S(Ni(Rt zpool_openRRNR R(R tpoolnameR"((s../../common/bootmgmt/pysol.pyRs cCsti|dS(N(Rt zpool_close(tzph((s../../common/bootmgmt/pysol.pyRscCsTtt}ti||t}|dj otdt|n|iiS(Ni(RtMAX_PATHRtzpool_get_physpathRNR RR(R RtbufR((s../../common/bootmgmt/pysol.pyRs   cCstt}|tjot}t|}nd}ti|||t|}|dj otdt |n|tjo|i |i gS|i SdS(Ni( RtLIBZFS_PROPLEN_MAXR\RRRRtzpool_get_propRNR R(R Rtpropidt get_sourceRRWtsrcpR((s../../common/bootmgmt/pysol.pyRs      cCsti|||S(N(Rtzpool_set_prop(RR`Re((s../../common/bootmgmt/pysol.pyR sc Cstt}|tjot}t|}nd}ti|||t|tddd}|dj ot dt |n|tjo|i |i gS|i SdS(Nii( RRR\RRRRt zfs_prop_getR RNR R(R tzfs_hdlRRRRWRR((s../../common/bootmgmt/pysol.pytzfs_get_prop_strings     cCsti|dS(N(Rt libzfs_fini(R((s../../common/bootmgmt/pysol.pyR$sc Cs`yQtd}titi|dtid|i\}}|i|SWndSXdS(Ns /dev/nulltstdouttstderrR)(Rt subprocesstPopentshlexRtPIPEt communicateR(tcmdtnulltoutputterror((s../../common/bootmgmt/pysol.pyt_virtinfo_commands  cCstdiS(Ns-/usr/sbin/virtinfo -c current list -H -o name(R0R(((s../../common/bootmgmt/pysol.pytvirtinfo_current_environmentss /dev/openpromii tOiii itOpenPromIoUnioncBs$eZdeefdefgZRS(RRP(R4R5RtPROM_MAXVALSIZERR*(((s../../common/bootmgmt/pysol.pyR3s t OpenPromIocBs eZdefdefgZRS(t oprom_sizetopio_u(R4R5R R3R*(((s../../common/bootmgmt/pysol.pyR5"s cCsVxOtoGytt|SWqtj o#}|itijoqMqXqWdS(N(R\RtPROMDEVRNR>tEAGAIN(RR((s../../common/bootmgmt/pysol.pyt _promopen'sc Cstdj otSt}t|_tdii}zE|~}ti |i t t |}|djo t anWdQXtS(NRi(t obp_versionRR5R4R6R:t__exit__t __enter__RLtioctltfilenotOPROMGETVERSIONRtOBP_OF(tpromioR.tpromfileR((s../../common/bootmgmt/pysol.pyR0s   #! cCs[t}t|_||i_ti|i|t|}|djodS|iiS(Ni( R5R4R6R7RPRLR>R?R(RCtnode_idtnodeopRBR((s../../common/bootmgmt/pysol.pyt _prom_node_opAs   ! cCst||tS(N(RFt OPROMNEXT(RCRD((s../../common/bootmgmt/pysol.pytprom_next_nodeOscCst||tS(N(RFt OPROMCHILD(RCRD((s../../common/bootmgmt/pysol.pytprom_child_nodeSscCst}t|_d|i_tdti|it t |}|djp|idjo7t }|djodSt |ti|nx|ii|jot|_tdti|it t |}|djp|idjo7t }|djodSt |ti|qqWt|_tdti|itt |}|djp|idjo%t }t |ti|n|iiS(Ni(R5tPROM_MAXPROPSIZER6R7RPRRLR>R?t OPROMNXTPROPRR RRNRORPRR4t OPROMGETPROP(RCR]RBRterrnum((s../../common/bootmgmt/pysol.pytprom_srch_nodeWs6    !    !  !  ! cCst|d}|djodSt||}|djodSxI|djo;t|d}|o||jodSt||}qEWdS(NiiiR(RHRJRO(RCtnodenametchild_idR((s../../common/bootmgmt/pysol.pyt_prom_find_node_commonys   cCs t|dS(Ntaliases(RR(RC((s../../common/bootmgmt/pysol.pytprom_find_aliases_nodescCsUtdii}z5|~}t|ddjodSt||SWdQXdS(NRtchoseni(R:R<R=RRRRO(R`R.RC((s../../common/bootmgmt/pysol.pytprom_get_chosen_props#cCs|iddjpt|tdjodS|idd}t|djo|\}}n d}|}tdii}z|~}t|djodSxt ddD]}}t ||}|pPn|ddjoPn|djo9|idd}t|djo|\}}q;qqWWdQX|oD|i d}|djo|| d|}q|d|}n|S( NR4iiRiRii ( RRt MAXNAMELENRRR:R<R=RTtxrangeROR(taliast alias_splitt alias_defRYR.RCRPtrindex((s../../common/bootmgmt/pysol.pyRs6-#  c Cs~tdt}|}|}td|id}x+|D]#}|id}|djo|| }||d}nd}|id}|djo|| }||d} n |}d} t|}x|ot|} |o || jot|}qnt|} | o| o| | joPn| o | oPnt|}qWq=Wt |} t || S(NR4cSst|djS(i(R(R#((s../../common/bootmgmt/pysol.pyR$sRiiR)R~( R5RbtfilterRRRlRnRmRoR9RG( RR"R;RpRtelemRt argumentsRtaddrtnnametbaddrtpth((s../../common/bootmgmt/pysol.pytdi_uap_to_devfssB          c Cst|tjp|ddjodS|iddjot|}|o|Snt}t|_||i_ t di i }zg|~}t i|itt|}|djo"tttitn|ii SWdQXdS(NiR4s/@iR(Rt MAXPATHLENRRRdR5R4R6R7RR:R<R=RLR>R?tOPROMPROM2DEVNAMERRNR RORP(RRRBR.RCR((s../../common/bootmgmt/pysol.pyRs$     #! "c CsTt|tjp|ddjodSt}t|_||i_tdi i }z|~}t i |i tt|}|djo"tttitn|i}d}t|i}g}xe|djoWt||i} |t| d7}|t| d8}| o|i| qqW|SWdQXdS(NiR4Ri(RReRR5R4R6R7RR:R<R=RLR>R?tOPROMDEV2PROMNAMERRNR RORPRR RRL( RRBR.RCRtsizeRtptrt prompathsRs((s../../common/bootmgmt/pysol.pytprom_devfs_to_prom_pathss*$   #! "  c Cst}t|_t|tjo|dt!n||i_tdii }zU|~}t i |i t t|}|djo|idjodS|SWdQXtttitdS(NiR(R5R4R6RtPROM_MAXNAMESIZER7RR:R<R=RLR>R?t OPROMGETOPTRRRNR RORP(toptnameRBR.RCR((s../../common/bootmgmt/pysol.pytprom_getoptions  ! #!  cCs,|id}|djo|S|d|!S(NRyii(R(tcstrtlength((s../../common/bootmgmt/pysol.pyt_pysol_cstring0sc Csst}t|}t|}t|tjpt|tjottidnt|}t|}||d|_t t t |i t i tii}ti|t||dti|i |dt||dtdii}z]|~} ti| itt |} | djo"tttitnWdQX|S(NsProperty name or value too longiisr+i(R5RrRRlR4RNR>tE2BIGR6RRRR7RR3RRRLtmemcpyR R:R<R=R>R?t OPROMSETOPTR RORP( RntoptvalueRBR`t propvaluet propname_lent propvalue_lentpropbufR.RCR((s../../common/bootmgmt/pysol.pytprom_setoption5s&      #! (c cst}t}tdii}z~|~}xntoft|_ti|i t t |}|djo"t t tit n|idjoPnt|_|ii}t|tjo|dt!n||i_ti|i tt |}|djo|idjoPqen0|djo"t t tit n|idjo|iidfVq8|ii|iifVq8WWdQXdS(NRi(R5R:R<R=R\RKR6RLR>R?t OPROMNXTOPTRRNR RORPR4R7RRRlRmR(RBtgetprop_promioR.RCRR`((s../../common/bootmgmt/pysol.pytprom_nextoptionVs2  # ! "  !    "cCs)yt|SWntj odSXdS(N(RoRNR(topt((s../../common/bootmgmt/pysol.pyt__prom_getoption_noexception}scCstd}|dj o|iidjodStd}|dj o|iidjodSdddg}x2|D]*}t|}|dj o |iiSqxWdS(s sdiagnostic-mode?ttrues diag-switch?s boot-devicetbootdevs boot-fromN(RRR7R(RBtpromvarstpromvar((s../../common/bootmgmt/pysol.pyt__get_boot_dev_vars      cCst}|djodSg}h}xe|idD]T}|}|idp+t|}|o|}|||R?tWANBOOT_SETKEYRNR RORP(R`RwtwkioRBt wk_valuepR.RCR((s../../common/bootmgmt/pysol.pytprom_wankey_sets*     %#! c Cs t}t}t|tdjotd|n||_d|_tiit |jpt t ||_ t i t|it||i tdii}z]|~}t i|itt|}|djo"tttitnWdQXdS(Niskey too long `%s'isr+(RR5RRRRRR7RhR RR6RLRtRR:R<R=R>R?RRNR RORP(R`RRBR.RCR((s../../common/bootmgmt/pysol.pytprom_wankey_deletes     %#! i*tDk_MinfocBs)eZdefdefdefgZRS(tdki_media_typet dki_lbsizet dki_capacity(R4R5R RR*(((s../../common/bootmgmt/pysol.pyR s  c Cst}t|dii}zn|~}ti|itt|}|djo%t }t |t i |n|i |iSWdQXdS(swReturns the size of the character device (if it's a disk device) or raises IOError if it cannot be determined. RiN(RRR<R=RLR>R?tDKIOCGMEDIAINFORR RNRORPRR(tchardevtminfoR.t chardev_fileRRN((s../../common/bootmgmt/pysol.pytraw_device_size s &  icCs|tjotdnt}ti||t|tt}|djo%t}t|t i |n|i S(s sBad zone_getattr attri( tZONE_ATTR_FLAGSR RRLt zone_getattrR R R RNRORPR(tzoneidtattrR!RRN((s../../common/bootmgmt/pysol.pyR- s  $  cCstdtt@dj}|S(Ni(RRt ZF_LOCKDOWN(tis_imgz((s../../common/bootmgmt/pysol.pyt zone_is_imgz= sRRRRRRt DI_MAKE_LINKtDI_PRIMARY_LINKtDI_SECONDARY_LINKtDI_WALK_CONTINUEtDI_WALK_TERMINATERR#R&R+R}Rt DDI_NT_BLOCKt DINFOPATHt DINFOCPYALLRbR5R7R8R9R=RBRGRJRRRRRRRRoR{R~RRRtZFS_TYPE_FILESYSTEMt ZFS_TYPE_POOLtZPOOL_PROP_BOOTFSRR$R RRRRRRRRR R1RRii(RJtctypesRRRRRRRRRR R R R R RRRRRRRRRRRRRRRRtbootmgmtRRR tgettextR>RROR)RR't translationR\t_t solaris.misctsolaristmiscRRRRqRR RLt architecturet _platwidthRtrestypeRtargtypesRR>Rtt_statvfs_syscallR+RrR0R1R6R8RMRTRZRaRbR&RuR{RRRRRR[RRRRRRRRRRRRRR*R RR R R RRRRRRR#R%R&RRRRRRRRR+RAR3R5RGRHR9R:R0R8R=RBR[RhR,RIRJRNRWRlRnRoRmtBOOTDEV_LITERALtBOOTDEV_PROMDEVtBOOTDEV_OVERWRITER6RtDIIOCt DINFOSUBTREEt DINFOMINORt DINFOPROPRRbRtlibdevinfo_errdictRctDDI_DEV_T_NONERWReR2R7RaR_RqRwRxR}RRRRRRRRRRRRRRRRRRRRRRRRRRRRtSCF_STATE_STRING_ONLINERRRRRt ExceptionRRRRR$R R Rt zif_callbacktzfs_iter_filesystemsRRRRRRRR R!tZPROP_SRC_NONEtZPROP_SRC_DEFAULTtZPROP_SRC_TEMPORARYtZPROP_SRC_LOCALtZPROP_SRC_INHERITEDtZPROP_SRC_RECEIVEDRtZFS_TYPE_SNAPSHOTtZFS_TYPE_VOLUMERt ZFS_PROP_TYPEtZFS_PROP_CREATIONt ZFS_PROP_USEDtZFS_PROP_AVAILABLEtZFS_PROP_REFERENCEDtZFS_PROP_COMPRESSRATIOtZFS_PROP_MOUNTEDtZFS_PROP_ORIGINtZFS_PROP_QUOTAtZFS_PROP_RESERVATIONtZFS_PROP_VOLSIZEtZFS_PROP_VOLBLOCKSIZEtZFS_PROP_RECORDSIZEtZFS_PROP_MOUNTPOINTtZFS_PROP_SHARENFStZFS_PROP_CHECKSUMtZFS_PROP_COMPRESSIONtZFS_PROP_ATIMEtZFS_PROP_DEVICESt ZFS_PROP_EXECtZFS_PROP_SETUIDtZFS_PROP_READONLYtZFS_PROP_ZONEDtZFS_PROP_SNAPDIRtZFS_PROP_ACLMODEtZFS_PROP_ACLINHERITtZFS_PROP_CREATETXGt ZFS_PROP_NAMEtZFS_PROP_CANMOUNTtZFS_PROP_ISCSIOPTIONStZFS_PROP_XATTRtZFS_PROP_NUMCLONEStZFS_PROP_COPIEStZFS_PROP_VERSIONtZFS_PROP_UTF8ONLYtZFS_PROP_NORMALIZEt ZFS_PROP_CASEtZFS_PROP_VSCANtZFS_PROP_NBMANDtZFS_PROP_SHARESMBtZFS_PROP_REFQUOTAtZFS_PROP_REFRESERVATIONt ZFS_PROP_GUIDtZFS_PROP_PRIMARYCACHEtZFS_PROP_SECONDARYCACHEtZFS_PROP_USEDSNAPtZFS_PROP_USEDDStZFS_PROP_USEDCHILDtZFS_PROP_USEDREFRESERVtZFS_PROP_USERACCOUNTINGtZFS_PROP_STMF_SHAREINFOtZFS_PROP_DEFER_DESTROYtZFS_PROP_USERREFStZFS_PROP_LOGBIAStZFS_PROP_UNIQUEtZFS_PROP_OBJSETIDtZFS_PROP_DEDUPtZFS_PROP_MLSLABELt ZFS_PROP_SYNCtZFS_PROP_HASRECVDtZFS_PROP_ENCRYPTIONtZFS_PROP_KEYSOURCEtZFS_PROP_KEYSTATUSt ZFS_PROP_SALTtZFS_PROP_REKEYDATEtZFS_PROP_RSTCHOWNtZFS_PROP_TMPMOUNTEDtZFS_PROP_SHARE2tZFS_PROP_SHADOWtZFS_PROP_USERUSEDtZFS_PROP_USERQUOTAtZFS_PROP_GROUPUSEDtZFS_PROP_GROUPQUOTAtZPOOL_PROP_NAMEtZPOOL_PROP_SIZEtZPOOL_PROP_CAPACITYtZPOOL_PROP_ALTROOTtZPOOL_PROP_HEALTHtZPOOL_PROP_GUIDtZPOOL_PROP_VERSIONRtZPOOL_PROP_DELEGATIONtZPOOL_PROP_AUTOREPLACEtZPOOL_PROP_CACHEFILEtZPOOL_PROP_FAILUREMODEtZPOOL_PROP_LISTSNAPStZPOOL_PROP_AUTOEXPANDtZPOOL_PROP_DEDUPDITTOtZPOOL_PROP_DEDUPRATIOtZPOOL_PROP_FREEtZPOOL_PROP_ALLOCATEDtZPOOL_PROP_READONLYtZPOOL_PROP_LISTSHAREStZPOOL_PROP_REALNAMER#R0R1R8RKRlR4t PROM_BUFSIZEtordtOIOCRmRuR|t OPROMSETOPT2RGRIRMRLR@RgRfRAtOBP_NO_ALIAS_NODER;R3R5R:RRFRHRJRORRRTRVRRdRRkRoRrR{R~RRRtWANBOOT_HMAC_SHA1_KEY_NAMERRRtWANBOOT_MAXBLOCKLENRRRRtDKIOCRRRRRRRt__all__(((s../../common/bootmgmt/pysol.pytsb           @     /        >   %            ,                                          (     !    "      E                        KK                               "   & -     ! '   0 '