containerd / containerd/cgroups
net_cls cgroup mounting
- Dominant language
- Go
- Stars
- 1.2k
- Forks
- 252
- PR merge metrics
- No merged PRs in 30d
Description
Hello,
this code is not working
```
package main
import (
"github.com/containerd/cgroups/v3/cgroup1"
"github.com/opencontainers/runtime-spec/specs-go"
)
func uint32Ptr(v uint32) *uint32 {
return &v
}
func main() {
netClsController := cgroup1.NewNetCls("/sys/fs/cgroup")
err := netClsController.Create("foobar", &specs.LinuxResources{
Network: &specs.LinuxNetwork{
ClassID: uint32Ptr(0x00100010), //10:10
},
})
if err != nil {
panic(err)
}
}
```
but I think is equivalent of this:
```
mkdir /sys/fs/cgroup/net_cls
#mount -t cgroup -onet_cls net_cls /sys/fs/cgroup/net_cls
mkdir /sys/fs/cgroup/net_cls/foobar
echo 0x100010 > /sys/fs/cgroup/net_cls/foobar/net_cls.classid
```
except mounting part. We need mounting to get net_cls cgroup and to put classid into net_cls.classid.
I could not figure out if the package supports mounting, but if so, then how to force it to do that? If not, then I think it's an issue because `Create` creates and writes to `net_cls.classid` file so there is no place to put own mounting code between `NewNetCls` and `Create`.
To make Create work, the code should look something like this:
```
func (n *netclsController) Create(path string, resources *specs.LinuxResources) error {
if err := os.MkdirAll(path, defaultDirPerm); err != nil {
return err
}
if err := syscall.Mount("cgroup", n.root, "cgroup", 0, NetCls); err != nil {
if !errors.Is(err, syscall.EBUSY) { //could be already mounted and it's ok
// some other error
return err
}
}
if resources.Network != nil && resources.Network.ClassID != nil && *resources.Network.ClassID > 0 {
return os.WriteFile(
filepath.Join(n.Path(path), "net_cls.classid"),
[]byte(strconv.FormatUint(uint64(*resources.Network.ClassID), 10)),
defaultFilePerm,
)
}
return nil
}
```
version: github.com/containerd/cgroups/v3 v3.0.2
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.