]> git.ipfire.org Git - thirdparty/libcgroup.git/commit
api.c: support for setting multiline values in control files
authorJan Chaloupka <jchaloup@redhat.com>
Mon, 15 Sep 2014 11:29:39 +0000 (13:29 +0200)
committerJan Safranek <jsafrane@redhat.com>
Mon, 15 Sep 2014 13:32:52 +0000 (15:32 +0200)
commit691430206f1104b752b0e52386f317e639137788
treee95b93ea4cc8fedc37125038acee2b0d1930a036
parent204bc8c27e50fb7a43d7a9b9ccb3b91a8eda563e
api.c: support for setting multiline values in control files

As of now, libcgroup does not support multiline values setting from configuration files. i.e. values in a form:

net_prio.ifpriomap="lo 7
eth0 66
eth1 5
eth2 4
eth3 3";

Thus, setting of more network interfaces can not be done from configuration file. Or

devices.allow="a *:* w
c 8:* r";

thus setting list of allow devices can not be set as well. The only way is to set it from userspace, e.g.:
# echo "lo 7" > /sys/fs/cgroup/net_prio/testGroup/net_prio.ifpriomap
# echo "eth 0" > /sys/fs/cgroup/net_prio/testGroup/net_prio.ifpriomap
# echo "eth 1" > /sys/fs/cgroup/net_prio/testGroup/net_prio.ifpriomap
# echo "eth 2" > /sys/fs/cgroup/net_prio/testGroup/net_prio.ifpriomap
# echo "eth 3" > /sys/fs/cgroup/net_prio/testGroup/net_prio.ifpriomap

This patch allows setting of multiline variables.

How this support works:
Multiline value is broken in lines and each line is set by write (man 2 write) syscall (without bufferring).
This implies change of fopen with open, fclose with close.
There is no control on multiline value, thus "eth0\n  \t\n" can be set. However, setting
of "  \t" will fail as write command returns -1. Thus administrator has to set correct
multiline values.

Tested on virtual machine with fedora and rhel with network interface lo, eth0-eth3. Configuration file:

# cat /etc/cgconfig.conf
group testGroup {
        net_prio {
                net_prio.ifpriomap="lo 7
eth0    66
eth1 5
eth2 4
eth3 3";
        }
}

net_prio has to be created before:
# modprobe netprio_cgroup
# mkdir /sys/fs/cgroup/net_prio
# mount -t cgroup -onet_prio none /sys/fs/cgroup/net_prio

Changelog:
test of success of strdup call
free str_val before return (str_val is changing in while cycle,
thus str_start_val points to the start of str_val before while)

Signed-off-by: Jan Chaloupka <jchaloup@redhat.com>
src/api.c