2013-03-28 14:32:23 +00:00
/*
* vircgrouppriv . h : methods for managing control cgroups
*
* Copyright ( C ) 2011 - 2013 Red Hat , Inc .
* Copyright IBM Corp . 2008
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2.1 of the License , or ( at your option ) any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library . If not , see
* < http : //www.gnu.org/licenses/>.
*/
2018-12-13 14:53:50 +00:00
# ifndef LIBVIRT_VIRCGROUPPRIV_H_ALLOW
2013-03-28 14:32:23 +00:00
# error "vircgrouppriv.h may only be included by vircgroup.c or its test suite"
2018-12-13 14:53:50 +00:00
# endif /* LIBVIRT_VIRCGROUPPRIV_H_ALLOW */
2013-03-28 14:32:23 +00:00
2019-04-03 17:44:51 -04:00
# pragma once
2013-03-28 14:32:23 +00:00
2019-04-03 17:44:51 -04:00
# include "vircgroup.h"
# include "vircgroupbackend.h"
2013-03-28 14:32:23 +00:00
2018-09-18 17:36:06 +02:00
struct _virCgroupV1Controller {
2013-03-28 14:32:23 +00:00
int type ;
char * mountPoint ;
2013-04-05 11:28:04 +01:00
/* If mountPoint holds several controllers co-mounted,
* then linkPoint is path of the symlink to the mountPoint
* for just the one controller
*/
char * linkPoint ;
2013-03-28 14:32:23 +00:00
char * placement ;
} ;
2018-09-18 17:36:06 +02:00
typedef struct _virCgroupV1Controller virCgroupV1Controller ;
2013-03-28 14:32:23 +00:00
2019-06-24 14:15:31 +02:00
struct _virCgroupV2Devices {
int mapfd ;
int progfd ;
ssize_t count ;
ssize_t max ;
} ;
typedef struct _virCgroupV2Devices virCgroupV2Devices ;
2018-09-18 17:48:33 +02:00
struct _virCgroupV2Controller {
int controllers ;
char * mountPoint ;
char * placement ;
2019-06-24 14:15:31 +02:00
virCgroupV2Devices devices ;
2018-09-18 17:48:33 +02:00
} ;
typedef struct _virCgroupV2Controller virCgroupV2Controller ;
2018-06-12 13:46:04 +02:00
struct _virCgroup {
2021-03-11 08:16:13 +01:00
virCgroupBackend * backends [ VIR_CGROUP_BACKEND_TYPE_LAST ] ;
2018-09-12 13:47:21 +02:00
2018-09-25 01:17:02 +02:00
virCgroupV1Controller legacy [ VIR_CGROUP_CONTROLLER_LAST ] ;
2018-09-18 17:48:33 +02:00
virCgroupV2Controller unified ;
2021-02-05 16:17:35 +01:00
char * unitName ;
2021-03-11 08:16:13 +01:00
virCgroup * nested ;
2013-03-28 14:32:23 +00:00
} ;
2021-02-09 12:33:53 +01:00
# define virCgroupGetNested(cgroup) \
( cgroup - > nested ? cgroup - > nested : cgroup )
2021-02-05 16:17:35 +01:00
int virCgroupSetValueDBus ( const char * unitName ,
const char * key ,
GVariant * value ) ;
2019-06-18 15:01:39 +02:00
int virCgroupSetValueRaw ( const char * path ,
const char * value ) ;
int virCgroupGetValueRaw ( const char * path ,
char * * value ) ;
2021-03-11 08:16:13 +01:00
int virCgroupSetValueStr ( virCgroup * group ,
2018-09-18 16:11:47 +02:00
int controller ,
const char * key ,
const char * value ) ;
2021-03-11 08:16:13 +01:00
int virCgroupGetValueStr ( virCgroup * group ,
2018-09-18 16:11:47 +02:00
int controller ,
const char * key ,
char * * value ) ;
2021-03-11 08:16:13 +01:00
int virCgroupSetValueU64 ( virCgroup * group ,
2018-09-18 16:11:47 +02:00
int controller ,
const char * key ,
unsigned long long int value ) ;
2021-03-11 08:16:13 +01:00
int virCgroupGetValueU64 ( virCgroup * group ,
2018-09-18 16:11:47 +02:00
int controller ,
const char * key ,
unsigned long long int * value ) ;
2021-03-11 08:16:13 +01:00
int virCgroupSetValueI64 ( virCgroup * group ,
2018-09-25 01:14:36 +02:00
int controller ,
const char * key ,
long long int value ) ;
2021-03-11 08:16:13 +01:00
int virCgroupGetValueI64 ( virCgroup * group ,
2018-08-17 16:22:56 +02:00
int controller ,
const char * key ,
long long int * value ) ;
2018-09-14 13:21:19 +02:00
int virCgroupPartitionEscape ( char * * path ) ;
2018-08-17 15:30:21 +02:00
char * virCgroupGetBlockDevString ( const char * path ) ;
2019-06-18 15:24:41 +02:00
int virCgroupGetValueForBlkDev ( const char * str ,
const char * devPath ,
2018-09-24 12:20:19 +02:00
char * * value ) ;
2018-06-13 12:55:27 +02:00
int virCgroupNewPartition ( const char * path ,
bool create ,
int controllers ,
2021-03-11 08:16:13 +01:00
virCgroup * * group )
2018-06-13 12:55:27 +02:00
ATTRIBUTE_NONNULL ( 1 ) ATTRIBUTE_NONNULL ( 4 ) ;
2021-03-11 08:16:13 +01:00
int virCgroupNewDomainPartition ( virCgroup * partition ,
2018-06-13 12:55:27 +02:00
const char * driver ,
const char * name ,
2021-03-11 08:16:13 +01:00
virCgroup * * group )
2020-11-05 23:15:16 +01:00
ATTRIBUTE_NONNULL ( 1 ) ATTRIBUTE_NONNULL ( 2 ) ATTRIBUTE_NONNULL ( 4 ) ;
2018-06-13 12:55:27 +02:00
2018-08-17 10:02:05 +02:00
int virCgroupRemoveRecursively ( char * grppath ) ;
2018-12-10 16:51:14 +08:00
2021-03-11 08:16:13 +01:00
int virCgroupKillRecursiveInternal ( virCgroup * group ,
2018-12-10 16:51:14 +08:00
int signum ,
2020-10-20 17:01:51 +02:00
GHashTable * pids ,
2018-12-10 16:51:14 +08:00
const char * taskFile ,
bool dormdir ) ;