|  | /* | 
|  | *  Copyright (C) 2000-2012, Parallels, Inc. All rights reserved. | 
|  | * | 
|  | *  This program is free software; you can redistribute it and/or modify | 
|  | *  it under the terms of the GNU General Public License as published by | 
|  | *  the Free Software Foundation; either version 2 of the License, or | 
|  | *  (at your option) any later version. | 
|  | * | 
|  | *  This program 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 General Public License for more details. | 
|  | * | 
|  | *  You should have received a copy of the GNU General Public License | 
|  | *  along with this program; if not, write to the Free Software | 
|  | *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|  | */ | 
|  |  | 
|  | #ifndef _LINUX_VZCALLUSER_H | 
|  | #define _LINUX_VZCALLUSER_H | 
|  |  | 
|  | #include <linux/types.h> | 
|  | #include <linux/ioctl.h> | 
|  |  | 
|  | #define KERN_VZ_PRIV_RANGE 51 | 
|  |  | 
|  | #ifndef __ENVID_T_DEFINED__ | 
|  | typedef unsigned envid_t; | 
|  | #define __ENVID_T_DEFINED__ | 
|  | #endif | 
|  |  | 
|  | #ifndef __KERNEL__ | 
|  | #define __user | 
|  | #endif | 
|  |  | 
|  | /* | 
|  | * CT management ioctls | 
|  | */ | 
|  |  | 
|  | struct vzctl_old_env_create { | 
|  | envid_t veid; | 
|  | unsigned flags; | 
|  | #define VE_CREATE	1	/* Create CT, VE_ENTER added automatically */ | 
|  | #define VE_EXCLUSIVE	2	/* Fail if exists */ | 
|  | #define VE_ENTER	4	/* Enter existing CT */ | 
|  | #define VE_TEST		8	/* Test if CT exists */ | 
|  | #define VE_LOCK		16	/* Do not allow entering created CT */ | 
|  | #define VE_SKIPLOCK	32	/* Allow entering "embryo" CT */ | 
|  | __u32 addr; | 
|  | }; | 
|  |  | 
|  | struct vzctl_mark_env_to_down { | 
|  | envid_t veid; | 
|  | }; | 
|  |  | 
|  | struct vzctl_setdevperms { | 
|  | envid_t veid; | 
|  | unsigned type; | 
|  | #define VE_USE_MAJOR	010	/* Test MAJOR supplied in rule */ | 
|  | #define VE_USE_MINOR	030	/* Test MINOR supplied in rule */ | 
|  | #define VE_USE_MASK	030	/* Testing mask, VE_USE_MAJOR|VE_USE_MINOR */ | 
|  | unsigned dev; | 
|  | unsigned mask; | 
|  | }; | 
|  |  | 
|  | struct vzctl_ve_netdev { | 
|  | envid_t veid; | 
|  | int op; | 
|  | #define VE_NETDEV_ADD  1 | 
|  | #define VE_NETDEV_DEL  2 | 
|  | char __user *dev_name; | 
|  | }; | 
|  |  | 
|  | struct vzctl_ve_pci_dev { | 
|  | int domain; | 
|  | unsigned int bus; | 
|  | unsigned int slot; | 
|  | unsigned int func; | 
|  | }; | 
|  |  | 
|  | struct vzctl_ve_meminfo { | 
|  | envid_t veid; | 
|  | unsigned long val; | 
|  | }; | 
|  |  | 
|  | struct vzctl_ve_configure { | 
|  | unsigned int veid; | 
|  | unsigned int key; | 
|  | #define VE_CONFIGURE_OS_RELEASE		2 | 
|  | #define VE_CONFIGURE_OPEN_TTY		5 | 
|  | unsigned int val; | 
|  | unsigned int size; | 
|  | char data[0]; | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * These masks represent iptables modules. | 
|  | * | 
|  | * Strictly speaking, we use only a small subset | 
|  | * of these bits nowdays, but we MUST RESERVE all of the | 
|  | * bits that were ever used, for the sake of ABI compatibility. | 
|  | * | 
|  | * DON'T EVER DELETE/MODIFY THESE BITS | 
|  | */ | 
|  | #define VE_IPT(name, shift)	name = (1U << shift) | 
|  | enum ve_ipt_mods { | 
|  | VE_IPT(VE_IP_IPTABLES_MOD,		0), | 
|  | VE_IPT(VE_IP_FILTER_MOD,		1), | 
|  | VE_IPT(VE_IP_MANGLE_MOD,		2), | 
|  | VE_IPT(VE_IP_MATCH_LIMIT_MOD,		3), | 
|  | VE_IPT(VE_IP_MATCH_MULTIPORT_MOD,	4), | 
|  | VE_IPT(VE_IP_MATCH_TOS_MOD,		5), | 
|  | VE_IPT(VE_IP_TARGET_TOS_MOD,		6), | 
|  | VE_IPT(VE_IP_TARGET_REJECT_MOD,		7), | 
|  | VE_IPT(VE_IP_TARGET_TCPMSS_MOD,		8), | 
|  | VE_IPT(VE_IP_MATCH_TCPMSS_MOD,		9), | 
|  | VE_IPT(VE_IP_MATCH_TTL_MOD,		10), | 
|  | VE_IPT(VE_IP_TARGET_LOG_MOD,		11), | 
|  | VE_IPT(VE_IP_MATCH_LENGTH_MOD,		12), | 
|  | VE_IPT(VE_IP_CONNTRACK_MOD,		14), | 
|  | VE_IPT(VE_IP_CONNTRACK_FTP_MOD,		15), | 
|  | VE_IPT(VE_IP_CONNTRACK_IRC_MOD,		16), | 
|  | VE_IPT(VE_IP_MATCH_CONNTRACK_MOD,	17), | 
|  | VE_IPT(VE_IP_MATCH_STATE_MOD,		18), | 
|  | VE_IPT(VE_IP_MATCH_HELPER_MOD,		19), | 
|  | VE_IPT(VE_IP_NAT_MOD,			20), | 
|  | VE_IPT(VE_IP_NAT_FTP_MOD,		21), | 
|  | VE_IPT(VE_IP_NAT_IRC_MOD,		22), | 
|  | VE_IPT(VE_IP_TARGET_REDIRECT_MOD,	23), | 
|  | VE_IPT(VE_IP_MATCH_OWNER_MOD,		24), | 
|  | VE_IPT(VE_IP_MATCH_MAC_MOD,		25), | 
|  | VE_IPT(VE_IP_IPTABLES6_MOD,		26), | 
|  | VE_IPT(VE_IP_FILTER6_MOD,		27), | 
|  | VE_IPT(VE_IP_MANGLE6_MOD,		28), | 
|  | VE_IPT(VE_IP_IPTABLE_NAT_MOD,		29), | 
|  | VE_IPT(VE_NF_CONNTRACK_MOD,		30), | 
|  | VE_IPT(VE_IP_MATCH_RECENT_MOD,		31), | 
|  | }; | 
|  | #undef VE_IPT | 
|  |  | 
|  | /* these masks represent modules with their dependencies */ | 
|  | #define VE_IP_IPTABLES		(VE_IP_IPTABLES_MOD) | 
|  | #define VE_IP_FILTER		(VE_IP_FILTER_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_MANGLE		(VE_IP_MANGLE_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_IPTABLES6		(VE_IP_IPTABLES6_MOD) | 
|  | #define VE_IP_FILTER6		(VE_IP_FILTER6_MOD | VE_IP_IPTABLES6) | 
|  | #define VE_IP_MANGLE6		(VE_IP_MANGLE6_MOD | VE_IP_IPTABLES6) | 
|  | #define VE_NF_CONNTRACK		(VE_NF_CONNTRACK_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_CONNTRACK		(VE_IP_CONNTRACK_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_CONNTRACK_FTP	(VE_IP_CONNTRACK_FTP_MOD | VE_IP_CONNTRACK) | 
|  | #define VE_IP_CONNTRACK_IRC	(VE_IP_CONNTRACK_IRC_MOD | VE_IP_CONNTRACK) | 
|  | #define VE_IP_NAT		(VE_IP_NAT_MOD | VE_IP_CONNTRACK) | 
|  | #define VE_IP_NAT_FTP		(VE_IP_NAT_FTP_MOD | VE_IP_NAT | \ | 
|  | VE_IP_CONNTRACK_FTP) | 
|  | #define VE_IP_NAT_IRC		(VE_IP_NAT_IRC_MOD | VE_IP_NAT | \ | 
|  | VE_IP_CONNTRACK_IRC) | 
|  | #define VE_IP_IPTABLE_NAT	(VE_IP_IPTABLE_NAT_MOD | VE_IP_CONNTRACK) | 
|  | #define VE_IP_MATCH_LIMIT	(VE_IP_MATCH_LIMIT_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_MATCH_MULTIPORT	(VE_IP_MATCH_MULTIPORT_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_MATCH_TOS		(VE_IP_MATCH_TOS_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_TARGET_TOS	(VE_IP_TARGET_TOS_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_TARGET_REJECT	(VE_IP_TARGET_REJECT_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_TARGET_TCPMSS	(VE_IP_TARGET_TCPMSS_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_MATCH_TCPMSS	(VE_IP_MATCH_TCPMSS_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_MATCH_TTL		(VE_IP_MATCH_TTL_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_TARGET_LOG	(VE_IP_TARGET_LOG_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_MATCH_LENGTH	(VE_IP_MATCH_LENGTH_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_CONNTRACK		(VE_IP_CONNTRACK_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_CONNTRACK_FTP	(VE_IP_CONNTRACK_FTP_MOD | VE_IP_CONNTRACK) | 
|  | #define VE_IP_CONNTRACK_IRC	(VE_IP_CONNTRACK_IRC_MOD | VE_IP_CONNTRACK) | 
|  | #define VE_IP_MATCH_CONNTRACK	(VE_IP_MATCH_CONNTRACK_MOD | VE_IP_CONNTRACK) | 
|  | #define VE_IP_MATCH_STATE	(VE_IP_MATCH_STATE_MOD | VE_IP_CONNTRACK) | 
|  | #define VE_IP_MATCH_HELPER	(VE_IP_MATCH_HELPER_MOD | VE_IP_CONNTRACK) | 
|  | #define VE_IP_NAT		(VE_IP_NAT_MOD | VE_IP_CONNTRACK) | 
|  | #define VE_IP_NAT_FTP		(VE_IP_NAT_FTP_MOD | VE_IP_NAT | \ | 
|  | VE_IP_CONNTRACK_FTP) | 
|  | #define VE_IP_NAT_IRC		(VE_IP_NAT_IRC_MOD | VE_IP_NAT | \ | 
|  | VE_IP_CONNTRACK_IRC) | 
|  | #define VE_IP_TARGET_REDIRECT	(VE_IP_TARGET_REDIRECT_MOD | VE_IP_NAT) | 
|  | #define VE_IP_MATCH_MAC		(VE_IP_MATCH_MAC_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_MATCH_OWNER	(VE_IP_MATCH_OWNER_MOD | VE_IP_IPTABLES) | 
|  | #define VE_IP_MATCH_RECENT	(VE_IP_MATCH_RECENT_MOD | VE_IP_IPTABLES) | 
|  |  | 
|  | /* safe iptables mask to be used by default */ | 
|  | #define VE_IP_DEFAULT					\ | 
|  | (VE_IP_IPTABLES |				\ | 
|  | VE_IP_FILTER | VE_IP_MANGLE |			\ | 
|  | VE_IP_MATCH_LIMIT | VE_IP_MATCH_MULTIPORT |	\ | 
|  | VE_IP_MATCH_TOS | VE_IP_TARGET_REJECT |		\ | 
|  | VE_IP_TARGET_TCPMSS | VE_IP_MATCH_TCPMSS |	\ | 
|  | VE_IP_MATCH_TTL | VE_IP_MATCH_LENGTH) | 
|  |  | 
|  | /* used by netfilter option */ | 
|  | #define VE_IP_ALL		(~0ULL) | 
|  | #define VE_IP_NONE		(0ULL) | 
|  |  | 
|  | #define VE_IPT_CMP(x,y)		(((x) & (y)) == (y)) | 
|  |  | 
|  | struct vzctl_env_create_cid { | 
|  | envid_t veid; | 
|  | unsigned flags; | 
|  | __u32 class_id; | 
|  | }; | 
|  |  | 
|  | struct vzctl_env_create { | 
|  | envid_t veid; | 
|  | unsigned flags; | 
|  | __u32 class_id; | 
|  | }; | 
|  |  | 
|  | struct env_create_param { | 
|  | __u64 iptables_mask; | 
|  | }; | 
|  |  | 
|  | #define VZCTL_ENV_CREATE_DATA_MINLEN	sizeof(struct env_create_param) | 
|  |  | 
|  | struct env_create_param2 { | 
|  | __u64 iptables_mask; | 
|  | __u64 feature_mask; | 
|  | __u32 total_vcpus;	/* 0 - don't care, same as in host */ | 
|  | }; | 
|  |  | 
|  | struct env_create_param3 { | 
|  | __u64 iptables_mask; | 
|  | __u64 feature_mask; | 
|  | __u32 total_vcpus; | 
|  | __u32 pad; | 
|  | __u64 known_features; | 
|  | }; | 
|  |  | 
|  | #define VE_FEATURE_SYSFS	(1ULL << 0) | 
|  | #define VE_FEATURE_NFS		(1ULL << 1) | 
|  | #define VE_FEATURE_DEF_PERMS	(1ULL << 2) | 
|  | #define VE_FEATURE_SIT		(1ULL << 3) | 
|  | #define VE_FEATURE_IPIP		(1ULL << 4) | 
|  | #define VE_FEATURE_PPP		(1ULL << 5) | 
|  | #define VE_FEATURE_IPGRE	(1ULL << 6) | 
|  | #define VE_FEATURE_BRIDGE	(1ULL << 7) | 
|  | #define VE_FEATURE_NFSD		(1ULL << 8) | 
|  |  | 
|  | #define VE_FEATURES_OLD		(VE_FEATURE_SYSFS) | 
|  | #define VE_FEATURES_DEF		(VE_FEATURE_SYSFS | \ | 
|  | VE_FEATURE_DEF_PERMS) | 
|  |  | 
|  | typedef struct env_create_param3 env_create_param_t; | 
|  | #define VZCTL_ENV_CREATE_DATA_MAXLEN	sizeof(env_create_param_t) | 
|  |  | 
|  | struct vzctl_env_create_data { | 
|  | envid_t veid; | 
|  | unsigned flags; | 
|  | __u32 class_id; | 
|  | env_create_param_t __user *data; | 
|  | int datalen; | 
|  | }; | 
|  |  | 
|  | struct vz_load_avg { | 
|  | int val_int; | 
|  | int val_frac; | 
|  | }; | 
|  |  | 
|  | struct vz_cpu_stat { | 
|  | unsigned long user_jif; | 
|  | unsigned long nice_jif; | 
|  | unsigned long system_jif; | 
|  | unsigned long uptime_jif; | 
|  | __u64 idle_clk; | 
|  | __u64 strv_clk; | 
|  | __u64 uptime_clk; | 
|  | struct vz_load_avg avenrun[3];	/* loadavg data */ | 
|  | }; | 
|  |  | 
|  | struct vzctl_cpustatctl { | 
|  | envid_t veid; | 
|  | struct vz_cpu_stat __user *cpustat; | 
|  | }; | 
|  |  | 
|  | #define VZCTLTYPE '.' | 
|  | #define VZCTL_OLD_ENV_CREATE	_IOW(VZCTLTYPE, 0,			\ | 
|  | struct vzctl_old_env_create) | 
|  | #define VZCTL_MARK_ENV_TO_DOWN	_IOW(VZCTLTYPE, 1,			\ | 
|  | struct vzctl_mark_env_to_down) | 
|  | #define VZCTL_SETDEVPERMS	_IOW(VZCTLTYPE, 2,			\ | 
|  | struct vzctl_setdevperms) | 
|  | #define VZCTL_ENV_CREATE_CID	_IOW(VZCTLTYPE, 4,			\ | 
|  | struct vzctl_env_create_cid) | 
|  | #define VZCTL_ENV_CREATE	_IOW(VZCTLTYPE, 5,			\ | 
|  | struct vzctl_env_create) | 
|  | #define VZCTL_GET_CPU_STAT	_IOW(VZCTLTYPE, 6,			\ | 
|  | struct vzctl_cpustatctl) | 
|  | #define VZCTL_ENV_CREATE_DATA	_IOW(VZCTLTYPE, 10,			\ | 
|  | struct vzctl_env_create_data) | 
|  | #define VZCTL_VE_NETDEV		_IOW(VZCTLTYPE, 11,			\ | 
|  | struct vzctl_ve_netdev) | 
|  | #define VZCTL_VE_MEMINFO	_IOW(VZCTLTYPE, 13,			\ | 
|  | struct vzctl_ve_meminfo) | 
|  | #define VZCTL_VE_CONFIGURE	_IOW(VZCTLTYPE, 15,			\ | 
|  | struct vzctl_ve_configure) | 
|  |  | 
|  | #ifdef __KERNEL__ | 
|  | #include <linux/compat.h> | 
|  | #ifdef CONFIG_COMPAT | 
|  | struct compat_vzctl_ve_netdev { | 
|  | envid_t veid; | 
|  | int op; | 
|  | compat_uptr_t dev_name; | 
|  | }; | 
|  |  | 
|  | struct compat_vzctl_ve_meminfo { | 
|  | envid_t veid; | 
|  | compat_ulong_t val; | 
|  | }; | 
|  |  | 
|  | struct compat_vzctl_env_create_data { | 
|  | envid_t veid; | 
|  | unsigned flags; | 
|  | __u32 class_id; | 
|  | compat_uptr_t data; | 
|  | int datalen; | 
|  | }; | 
|  |  | 
|  | #define VZCTL_COMPAT_ENV_CREATE_DATA _IOW(VZCTLTYPE, 10,		\ | 
|  | struct compat_vzctl_env_create_data) | 
|  | #define VZCTL_COMPAT_VE_NETDEV	_IOW(VZCTLTYPE, 11,			\ | 
|  | struct compat_vzctl_ve_netdev) | 
|  | #define VZCTL_COMPAT_VE_MEMINFO	_IOW(VZCTLTYPE, 13,			\ | 
|  | struct compat_vzctl_ve_meminfo) | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #endif |