-- GENERATED by C->Haskell Compiler, version 0.16.4 Crystal Seed, 24 Jan 2009 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "./System/LibVirt/Foreign.chs" #-}{-# LANGUAGE ForeignFunctionInterface, StandaloneDeriving, DeriveDataTypeable, EmptyDataDecls #-}


{-# LINE 3 "./System/LibVirt/Foreign.chs" #-}


module System.LibVirt.Foreign
  (-- * Types
   Connection, Domain, Network,
   DomainID,
   DomainInfo (..),
   DomainState (..),
   Stream,
   DomainCreateFlags (..),
   DomainXMLFlags (..),
   SecurityLabel (..),
   SecurityModel (..),
   NodeInfo (..),
   SchedParameterType (..),
   ConnectCredential (..),

   -- * Connection management functions
   initialize,
   openConnection, closeConnection,

   -- * Domains management functions
   runningDomainsCount, definedDomainsCount,
   runningDomainsIDs, definedDomainsNames,
   lookupDomainID, lookupDomainName,
   getDomainInfo, getDomainXML,
   defineDomainXML, undefineDomain,
   getDomainID, getDomainName,

   -- * Domains control
   createDomain, createDomainXML,
   destroyDomain, 
   shutdownDomain, rebootDomain,
   suspendDomain, resumeDomain,
   saveDomain, restoreDomain,
   refDomain, freeDomain,

   -- * Networks management
   getNetworkConnection,
   runningNetworksCount, definedNetworksCount,
   runningNetworksNames, definedNetworksNames,
   lookupNetworkName, lookupNetworkUUID,
   createNetworkXML, defineNetworkXML,
   undefineNetwork, destroyNetwork,
   createNetwork,
   refNetwork, freeNetwork,
   getNetworkName,
   getNetworkXML
  ) where

import Data.Bits
import Data.Generics
import Foreign
import Foreign.C.Types
import Foreign.C.String

import System.LibVirt.Internal
{-# LINE 61 "./System/LibVirt/Foreign.chs" #-}
import System.LibVirt.Errors
{-# LINE 62 "./System/LibVirt/Foreign.chs" #-}

cIntConv = fromIntegral

cuchar2state :: CUChar -> DomainState
cuchar2state c = toEnum (fromIntegral c)

flags2int :: (Enum f, Num a) => [f] -> a
flags2int list = fromIntegral $ foldr (.|.) 0 (map fromEnum list)

data DomainInfo = DomainInfo {
  diState :: DomainState,
  diMaxMem :: Integer,
  diMemory :: Integer,
  diNrVirtCPU :: Int,
  diCPUTime :: Integer }
  deriving (Eq, Show)

type DomainInfoPtr = Ptr (DomainInfo)
{-# LINE 80 "./System/LibVirt/Foreign.chs" #-}

data DomainState = DomainNostate
                 | DomainRunning
                 | DomainBlocked
                 | DomainPaused
                 | DomainShutdown
                 | DomainShutoff
                 | DomainCrashed
                 | DomainPmsuspended
                 deriving (Eq,Show)
instance Enum DomainState where
  fromEnum DomainNostate = 0
  fromEnum DomainRunning = 1
  fromEnum DomainBlocked = 2
  fromEnum DomainPaused = 3
  fromEnum DomainShutdown = 4
  fromEnum DomainShutoff = 5
  fromEnum DomainCrashed = 6
  fromEnum DomainPmsuspended = 7

  toEnum 0 = DomainNostate
  toEnum 1 = DomainRunning
  toEnum 2 = DomainBlocked
  toEnum 3 = DomainPaused
  toEnum 4 = DomainShutdown
  toEnum 5 = DomainShutoff
  toEnum 6 = DomainCrashed
  toEnum 7 = DomainPmsuspended
  toEnum unmatched = error ("DomainState.toEnum: Cannot match " ++ show unmatched)

{-# LINE 82 "./System/LibVirt/Foreign.chs" #-}
data DomainCreateFlags = DomainNone
                       | DomainStartPaused
                       | DomainStartAutodestroy
                       | DomainStartBypassCache
                       | DomainStartForceBoot
                       deriving (Eq,Show)
instance Enum DomainCreateFlags where
  fromEnum DomainNone = 0
  fromEnum DomainStartPaused = 1
  fromEnum DomainStartAutodestroy = 2
  fromEnum DomainStartBypassCache = 4
  fromEnum DomainStartForceBoot = 8

  toEnum 0 = DomainNone
  toEnum 1 = DomainStartPaused
  toEnum 2 = DomainStartAutodestroy
  toEnum 4 = DomainStartBypassCache
  toEnum 8 = DomainStartForceBoot
  toEnum unmatched = error ("DomainCreateFlags.toEnum: Cannot match " ++ show unmatched)

{-# LINE 83 "./System/LibVirt/Foreign.chs" #-}
data DomainXMLFlags = DomainXmlSecure
                    | DomainXmlInactive
                    | DomainXmlUpdateCpu
                    deriving (Eq,Show)
instance Enum DomainXMLFlags where
  fromEnum DomainXmlSecure = 1
  fromEnum DomainXmlInactive = 2
  fromEnum DomainXmlUpdateCpu = 4

  toEnum 1 = DomainXmlSecure
  toEnum 2 = DomainXmlInactive
  toEnum 4 = DomainXmlUpdateCpu
  toEnum unmatched = error ("DomainXMLFlags.toEnum: Cannot match " ++ show unmatched)

{-# LINE 84 "./System/LibVirt/Foreign.chs" #-}

data NetworkXMLFlags = NetworkXML
  deriving (Eq, Show, Enum)

newtype Stream = Stream (Ptr (Stream))
{-# LINE 89 "./System/LibVirt/Foreign.chs" #-}

data SecurityLabel = SecurityLabel {
  slLabel :: String,
  slEnforcing :: Int }
  deriving (Eq, Show)

type SecurityLabelPtr = Ptr (SecurityLabel)
{-# LINE 96 "./System/LibVirt/Foreign.chs" #-}

data SecurityModel = SecurityModel {
  smModel :: String,
  smDOI :: String }
  deriving (Eq, Show)

type SecurityModelPtr = Ptr (SecurityModel)
{-# LINE 103 "./System/LibVirt/Foreign.chs" #-}

data NodeInfo = NodeInfo {
  niModel :: String,
  niMemory :: CULong,
  niCPUs :: CUInt,
  niMHz :: CUInt,
  niNodes :: CUInt,
  niSockets :: CUInt,
  niCores :: CUInt,
  niThreads :: CUInt }
  deriving (Eq, Show)

type NodeInfoPtr = Ptr (NodeInfo)
{-# LINE 116 "./System/LibVirt/Foreign.chs" #-}

data SchedParameterType = DomainSchedFieldInt
                        | DomainSchedFieldUint
                        | DomainSchedFieldLlong
                        | DomainSchedFieldUllong
                        | DomainSchedFieldDouble
                        | DomainSchedFieldBoolean
                        deriving (Eq,Show)
instance Enum SchedParameterType where
  fromEnum DomainSchedFieldInt = 1
  fromEnum DomainSchedFieldUint = 2
  fromEnum DomainSchedFieldLlong = 3
  fromEnum DomainSchedFieldUllong = 4
  fromEnum DomainSchedFieldDouble = 5
  fromEnum DomainSchedFieldBoolean = 6

  toEnum 1 = DomainSchedFieldInt
  toEnum 2 = DomainSchedFieldUint
  toEnum 3 = DomainSchedFieldLlong
  toEnum 4 = DomainSchedFieldUllong
  toEnum 5 = DomainSchedFieldDouble
  toEnum 6 = DomainSchedFieldBoolean
  toEnum unmatched = error ("SchedParameterType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 118 "./System/LibVirt/Foreign.chs" #-}

data ConnectCredential = ConnectCredential {
  ccType :: Int,
  ccPrompt :: String,
  ccChallenge :: String,
  ccDefresult :: String,
  ccResult :: String,
  ccResultLen :: Integer }
  deriving (Eq, Show)

type ConnectCredentialPtr = Ptr (ConnectCredential)
{-# LINE 129 "./System/LibVirt/Foreign.chs" #-}

initialize :: IO (Int)
initialize =
  initialize'_ >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 131 "./System/LibVirt/Foreign.chs" #-}

openConnection :: String -> IO (Connection)
openConnection a1 =
  withCString a1 $ \a1' -> 
  openConnection'_ a1' >>= \res ->
  ptrToConnection res >>= \res' ->
  return (res')
{-# LINE 134 "./System/LibVirt/Foreign.chs" #-}

closeConnection :: Connection -> IO (Int)
closeConnection a1 =
  let {a1' = connectionToPtr a1} in 
  closeConnection'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 137 "./System/LibVirt/Foreign.chs" #-}

runningDomainsCount :: Connection -> IO (Int)
runningDomainsCount a1 =
  let {a1' = connectionToPtr a1} in 
  runningDomainsCount'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 140 "./System/LibVirt/Foreign.chs" #-}

type DomainID = CInt

runningDomainsIDs :: Connection -> IO [DomainID]
runningDomainsIDs conn = do
  cn <- virConnectNumOfDomains (connectionToPtr conn)
  let n = fromIntegral cn
  r <- allocaArray n $ \arr -> do
          r <- virConnectListDomains
{-# LINE 149 "./System/LibVirt/Foreign.chs" #-}
                  (connectionToPtr conn) arr cn
          peekArray n arr
  return r

definedDomainsNames :: Connection -> IO [String]
definedDomainsNames conn = do
  cn <- virConnectNumOfDefinedDomains (connectionToPtr conn)
  let n = fromIntegral cn
  allocaArray n $ \nptr -> do
    virConnectListDefinedDomains
{-# LINE 159 "./System/LibVirt/Foreign.chs" #-}
        (connectionToPtr conn) nptr cn
    mapM peekCString =<< peekArray n nptr

lookupDomainID :: Connection -> DomainID -> IO (Domain)
lookupDomainID a1 a2 =
  let {a1' = connectionToPtr a1} in 
  let {a2' = id a2} in 
  lookupDomainID'_ a1' a2' >>= \res ->
  ptrToDomain res >>= \res' ->
  return (res')
{-# LINE 165 "./System/LibVirt/Foreign.chs" #-}

getDomainID :: Domain -> IO (DomainID)
getDomainID a1 =
  let {a1' = domainToPtr a1} in 
  getDomainID'_ a1' >>= \res ->
  let {res' = cIntConv res} in
  return (res')
{-# LINE 168 "./System/LibVirt/Foreign.chs" #-}

getDomainName :: Domain -> IO (String)
getDomainName a1 =
  let {a1' = domainToPtr a1} in 
  getDomainName'_ a1' >>= \res ->
  peekCString res >>= \res' ->
  return (res')
{-# LINE 171 "./System/LibVirt/Foreign.chs" #-}

lookupDomainName :: Connection -> String -> IO (Domain)
lookupDomainName a1 a2 =
  let {a1' = connectionToPtr a1} in 
  withCString a2 $ \a2' -> 
  lookupDomainName'_ a1' a2' >>= \res ->
  ptrToDomain res >>= \res' ->
  return (res')
{-# LINE 175 "./System/LibVirt/Foreign.chs" #-}

definedDomainsCount :: Connection -> IO (Int)
definedDomainsCount a1 =
  let {a1' = connectionToPtr a1} in 
  definedDomainsCount'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 178 "./System/LibVirt/Foreign.chs" #-}

getDomainInfo :: Domain -> IO DomainInfo
getDomainInfo dptr = do
  allocaBytes 24 $ \iptr -> do
         i <- virDomainGetInfo (domainToPtr dptr) iptr
         state   <- (\ptr -> do {peekByteOff ptr 0 ::IO CUChar})     iptr
         maxmem  <- (\ptr -> do {peekByteOff ptr 4 ::IO CULong})    iptr
         memory  <- (\ptr -> do {peekByteOff ptr 8 ::IO CULong})    iptr
         ncpus   <- (\ptr -> do {peekByteOff ptr 12 ::IO CUShort}) iptr
         cputime <- (\ptr -> do {peekByteOff ptr 16 ::IO CULLong})   iptr
         return $ DomainInfo {
                    diState     = cuchar2state state,
                    diMaxMem    = fromIntegral maxmem,
                    diMemory    = fromIntegral memory,
                    diNrVirtCPU = fromIntegral ncpus,
                    diCPUTime   = fromIntegral cputime }

defineDomainXML :: Connection -> String -> IO (Domain)
defineDomainXML a1 a2 =
  let {a1' = connectionToPtr a1} in 
  withCString a2 $ \a2' -> 
  defineDomainXML'_ a1' a2' >>= \res ->
  ptrToDomain res >>= \res' ->
  return (res')
{-# LINE 198 "./System/LibVirt/Foreign.chs" #-}

undefineDomain :: Domain -> IO (Int)
undefineDomain a1 =
  let {a1' = domainToPtr a1} in 
  undefineDomain'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 201 "./System/LibVirt/Foreign.chs" #-}

createDomain :: Domain -> IO (Int)
createDomain a1 =
  let {a1' = domainToPtr a1} in 
  createDomain'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 204 "./System/LibVirt/Foreign.chs" #-}

createDomainXML :: Connection -> String -> [DomainCreateFlags] -> IO (Domain)
createDomainXML a1 a2 a3 =
  let {a1' = connectionToPtr a1} in 
  withCString a2 $ \a2' -> 
  let {a3' = flags2int a3} in 
  createDomainXML'_ a1' a2' a3' >>= \res ->
  ptrToDomain res >>= \res' ->
  return (res')
{-# LINE 209 "./System/LibVirt/Foreign.chs" #-}

getDomainXML :: Domain -> [DomainXMLFlags] -> IO (String)
getDomainXML a1 a2 =
  let {a1' = domainToPtr a1} in 
  let {a2' = flags2int a2} in 
  getDomainXML'_ a1' a2' >>= \res ->
  peekCString res >>= \res' ->
  return (res')
{-# LINE 213 "./System/LibVirt/Foreign.chs" #-}

shutdownDomain :: Domain -> IO (Int)
shutdownDomain a1 =
  let {a1' = domainToPtr a1} in 
  shutdownDomain'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 216 "./System/LibVirt/Foreign.chs" #-}

rebootDomain :: Domain -> CUInt -> IO (Int)
rebootDomain a1 a2 =
  let {a1' = domainToPtr a1} in 
  let {a2' = id a2} in 
  rebootDomain'_ a1' a2' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 220 "./System/LibVirt/Foreign.chs" #-}

destroyDomain :: Domain -> IO (Int)
destroyDomain a1 =
  let {a1' = domainToPtr a1} in 
  destroyDomain'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 223 "./System/LibVirt/Foreign.chs" #-}

refDomain :: Domain -> IO (Int)
refDomain a1 =
  let {a1' = domainToPtr a1} in 
  refDomain'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 226 "./System/LibVirt/Foreign.chs" #-}

freeDomain :: Domain -> IO (Int)
freeDomain a1 =
  let {a1' = domainToPtr a1} in 
  freeDomain'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 229 "./System/LibVirt/Foreign.chs" #-}

suspendDomain :: Domain -> IO (Int)
suspendDomain a1 =
  let {a1' = domainToPtr a1} in 
  suspendDomain'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 232 "./System/LibVirt/Foreign.chs" #-}

resumeDomain :: Domain -> IO (Int)
resumeDomain a1 =
  let {a1' = domainToPtr a1} in 
  resumeDomain'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 235 "./System/LibVirt/Foreign.chs" #-}

saveDomain :: Domain -> String -> IO (Int)
saveDomain a1 a2 =
  let {a1' = domainToPtr a1} in 
  withCString a2 $ \a2' -> 
  saveDomain'_ a1' a2' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 239 "./System/LibVirt/Foreign.chs" #-}

restoreDomain :: Connection -> String -> IO (Int)
restoreDomain a1 a2 =
  let {a1' = connectionToPtr a1} in 
  withCString a2 $ \a2' -> 
  restoreDomain'_ a1' a2' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 243 "./System/LibVirt/Foreign.chs" #-}

getNetworkConnection :: Network -> IO (Connection)
getNetworkConnection a1 =
  let {a1' = networkToPtr a1} in 
  getNetworkConnection'_ a1' >>= \res ->
  ptrToConnection res >>= \res' ->
  return (res')
{-# LINE 246 "./System/LibVirt/Foreign.chs" #-}

runningNetworksCount :: Connection -> IO (Int)
runningNetworksCount a1 =
  let {a1' = connectionToPtr a1} in 
  runningNetworksCount'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 249 "./System/LibVirt/Foreign.chs" #-}

runningNetworksNames :: Connection -> IO [String]
runningNetworksNames conn = do
  cn <- virConnectNumOfNetworks (connectionToPtr conn)
  let n = fromIntegral cn
  allocaArray n $ \nptr -> do
    virConnectListNetworks (connectionToPtr conn) nptr cn
    mapM peekCString =<< peekArray n nptr

definedNetworksCount :: Connection -> IO (Int)
definedNetworksCount a1 =
  let {a1' = connectionToPtr a1} in 
  definedNetworksCount'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 260 "./System/LibVirt/Foreign.chs" #-}

definedNetworksNames :: Connection -> IO [String]
definedNetworksNames conn = do
  cn <- virConnectNumOfDefinedNetworks (connectionToPtr conn)
  let n = fromIntegral cn
  allocaArray n $ \nptr -> do
    virConnectListDefinedNetworks (connectionToPtr conn) nptr cn
    mapM peekCString =<< peekArray n nptr

lookupNetworkName :: Connection -> String -> IO (Network)
lookupNetworkName a1 a2 =
  let {a1' = connectionToPtr a1} in 
  withCString a2 $ \a2' -> 
  lookupNetworkName'_ a1' a2' >>= \res ->
  ptrToNetwork res >>= \res' ->
  return (res')
{-# LINE 271 "./System/LibVirt/Foreign.chs" #-}

withCUString :: String -> (Ptr CUChar -> IO a) -> IO a
withCUString str fn = withCString str (fn . castPtr)

lookupNetworkUUID :: Connection -> String -> IO (Network)
lookupNetworkUUID a1 a2 =
  let {a1' = connectionToPtr a1} in 
  withCUString a2 $ \a2' -> 
  lookupNetworkUUID'_ a1' a2' >>= \res ->
  ptrToNetwork res >>= \res' ->
  return (res')
{-# LINE 277 "./System/LibVirt/Foreign.chs" #-}

createNetworkXML :: Connection -> String -> IO (Network)
createNetworkXML a1 a2 =
  let {a1' = connectionToPtr a1} in 
  withCString a2 $ \a2' -> 
  createNetworkXML'_ a1' a2' >>= \res ->
  ptrToNetwork res >>= \res' ->
  return (res')
{-# LINE 280 "./System/LibVirt/Foreign.chs" #-}

defineNetworkXML :: Connection -> String -> IO (Network)
defineNetworkXML a1 a2 =
  let {a1' = connectionToPtr a1} in 
  withCString a2 $ \a2' -> 
  defineNetworkXML'_ a1' a2' >>= \res ->
  ptrToNetwork res >>= \res' ->
  return (res')
{-# LINE 283 "./System/LibVirt/Foreign.chs" #-}

undefineNetwork :: Network -> IO (Int)
undefineNetwork a1 =
  let {a1' = networkToPtr a1} in 
  undefineNetwork'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 286 "./System/LibVirt/Foreign.chs" #-}

createNetwork :: Network -> IO (Int)
createNetwork a1 =
  let {a1' = networkToPtr a1} in 
  createNetwork'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 289 "./System/LibVirt/Foreign.chs" #-}

destroyNetwork :: Network -> IO (Int)
destroyNetwork a1 =
  let {a1' = networkToPtr a1} in 
  destroyNetwork'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 292 "./System/LibVirt/Foreign.chs" #-}

refNetwork :: Network -> IO (Int)
refNetwork a1 =
  let {a1' = networkToPtr a1} in 
  refNetwork'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 295 "./System/LibVirt/Foreign.chs" #-}

freeNetwork :: Network -> IO (Int)
freeNetwork a1 =
  let {a1' = networkToPtr a1} in 
  freeNetwork'_ a1' >>= \res ->
  exceptionOnMinusOne res >>= \res' ->
  return (res')
{-# LINE 298 "./System/LibVirt/Foreign.chs" #-}

getNetworkName :: Network -> IO (String)
getNetworkName a1 =
  let {a1' = networkToPtr a1} in 
  getNetworkName'_ a1' >>= \res ->
  peekCString res >>= \res' ->
  return (res')
{-# LINE 301 "./System/LibVirt/Foreign.chs" #-}

getNetworkXML :: Network -> [NetworkXMLFlags] -> IO (String)
getNetworkXML a1 a2 =
  let {a1' = networkToPtr a1} in 
  let {a2' = flags2int a2} in 
  getNetworkXML'_ a1' a2' >>= \res ->
  peekCString res >>= \res' ->
  return (res')
{-# LINE 305 "./System/LibVirt/Foreign.chs" #-}


foreign import ccall safe "System/LibVirt/Foreign.chs.h virInitialize"
  initialize'_ :: (IO CInt)

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectOpen"
  openConnection'_ :: ((Ptr CChar) -> (IO (Ptr ())))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectClose"
  closeConnection'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectNumOfDomains"
  runningDomainsCount'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectNumOfDomains"
  virConnectNumOfDomains :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectListDomains"
  virConnectListDomains :: ((Ptr ()) -> ((Ptr CInt) -> (CInt -> (IO CInt))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectNumOfDefinedDomains"
  virConnectNumOfDefinedDomains :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectListDefinedDomains"
  virConnectListDefinedDomains :: ((Ptr ()) -> ((Ptr (Ptr CChar)) -> (CInt -> (IO CInt))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainLookupByID"
  lookupDomainID'_ :: ((Ptr ()) -> (CInt -> (IO (Ptr ()))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainGetID"
  getDomainID'_ :: ((Ptr ()) -> (IO CUInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainGetName"
  getDomainName'_ :: ((Ptr ()) -> (IO (Ptr CChar)))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainLookupByName"
  lookupDomainName'_ :: ((Ptr ()) -> ((Ptr CChar) -> (IO (Ptr ()))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectNumOfDefinedDomains"
  definedDomainsCount'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainGetInfo"
  virDomainGetInfo :: ((Ptr ()) -> ((DomainInfoPtr) -> (IO CInt)))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainDefineXML"
  defineDomainXML'_ :: ((Ptr ()) -> ((Ptr CChar) -> (IO (Ptr ()))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainUndefine"
  undefineDomain'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainCreate"
  createDomain'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainCreateXML"
  createDomainXML'_ :: ((Ptr ()) -> ((Ptr CChar) -> (CUInt -> (IO (Ptr ())))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainGetXMLDesc"
  getDomainXML'_ :: ((Ptr ()) -> (CUInt -> (IO (Ptr CChar))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainShutdown"
  shutdownDomain'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainReboot"
  rebootDomain'_ :: ((Ptr ()) -> (CUInt -> (IO CInt)))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainDestroy"
  destroyDomain'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainRef"
  refDomain'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainFree"
  freeDomain'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainSuspend"
  suspendDomain'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainResume"
  resumeDomain'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainSave"
  saveDomain'_ :: ((Ptr ()) -> ((Ptr CChar) -> (IO CInt)))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virDomainRestore"
  restoreDomain'_ :: ((Ptr ()) -> ((Ptr CChar) -> (IO CInt)))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkGetConnect"
  getNetworkConnection'_ :: ((Ptr ()) -> (IO (Ptr ())))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectNumOfNetworks"
  runningNetworksCount'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectNumOfNetworks"
  virConnectNumOfNetworks :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectListNetworks"
  virConnectListNetworks :: ((Ptr ()) -> ((Ptr (Ptr CChar)) -> (CInt -> (IO CInt))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectNumOfDefinedNetworks"
  definedNetworksCount'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectNumOfDefinedNetworks"
  virConnectNumOfDefinedNetworks :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virConnectListDefinedNetworks"
  virConnectListDefinedNetworks :: ((Ptr ()) -> ((Ptr (Ptr CChar)) -> (CInt -> (IO CInt))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkLookupByName"
  lookupNetworkName'_ :: ((Ptr ()) -> ((Ptr CChar) -> (IO (Ptr ()))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkLookupByUUID"
  lookupNetworkUUID'_ :: ((Ptr ()) -> ((Ptr CUChar) -> (IO (Ptr ()))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkCreateXML"
  createNetworkXML'_ :: ((Ptr ()) -> ((Ptr CChar) -> (IO (Ptr ()))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkDefineXML"
  defineNetworkXML'_ :: ((Ptr ()) -> ((Ptr CChar) -> (IO (Ptr ()))))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkUndefine"
  undefineNetwork'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkCreate"
  createNetwork'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkDestroy"
  destroyNetwork'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkRef"
  refNetwork'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkFree"
  freeNetwork'_ :: ((Ptr ()) -> (IO CInt))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkGetName"
  getNetworkName'_ :: ((Ptr ()) -> (IO (Ptr CChar)))

foreign import ccall safe "System/LibVirt/Foreign.chs.h virNetworkGetXMLDesc"
  getNetworkXML'_ :: ((Ptr ()) -> (CUInt -> (IO (Ptr CChar))))