[Libct] [PATCH 7/7] go: add support of process descriptors
Andrey Vagin
avagin at openvz.org
Thu Oct 30 01:55:14 PDT 2014
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
go/libct.go | 25 +++++++++++++++++++------
go/libct_test.go | 7 ++++++-
2 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/go/libct.go b/go/libct.go
index edd343f..5a74b55 100644
--- a/go/libct.go
+++ b/go/libct.go
@@ -25,6 +25,10 @@ type Container struct {
ct C.ct_handler_t
}
+type ProcessDesc struct {
+ p C.ct_process_desc_t
+}
+
type NetDev struct {
dev C.ct_net_t
}
@@ -65,6 +69,15 @@ func (s *Session) ContainerCreate(name string) (*Container, error) {
return &Container{ct}, nil
}
+func (s *Session) ProcessCreateDesc() (*ProcessDesc, error) {
+ p := C.libct_process_desc_create_desc(s.s)
+ if p == nil {
+ return nil, LibctError{-1}
+ }
+
+ return &ProcessDesc{p}, nil
+}
+
func (ct *Container) SetNsMask(nsmask uint64) error {
ret := C.libct_container_set_nsmask(ct.ct, C.ulong(nsmask))
@@ -95,7 +108,7 @@ func (ct *Container) SetConsoleFd(f *os.File) error {
return nil
}
-func (ct *Container) SpawnExecve(path string, argv []string, env []string, fds *[3]uintptr) (int, error) {
+func (ct *Container) SpawnExecve(p *ProcessDesc, path string, argv []string, env []string, fds *[3]uintptr) (int, error) {
var cfdsp *C.int
cargv := make([]*C.char, len(argv)+1)
@@ -116,7 +129,7 @@ func (ct *Container) SpawnExecve(path string, argv []string, env []string, fds *
cfdsp = &cfds[0]
}
- ret := int(C.libct_container_spawn_execvefds(ct.ct, C.CString(path), &cargv[0], &cenv[0], cfdsp))
+ ret := int(C.libct_container_spawn_execvefds(ct.ct, p.p, C.CString(path), &cargv[0], &cenv[0], cfdsp))
if ret < 0 {
return -1, LibctError{int(ret)}
}
@@ -199,8 +212,8 @@ func (ct *Container) SetOption(opt int32) error {
return nil
}
-func (ct *Container) SetCaps(mask uint64, apply_to int) error {
- ret := C.libct_container_set_caps(ct.ct, C.ulong(mask), C.uint(apply_to))
+func (p *ProcessDesc) SetCaps(mask uint64, apply_to int) error {
+ ret := C.libct_process_desc_set_caps(p.p, C.ulong(mask), C.uint(apply_to))
if ret != 0 {
return LibctError{int(ret)}
}
@@ -208,8 +221,8 @@ func (ct *Container) SetCaps(mask uint64, apply_to int) error {
return nil
}
-func (ct *Container) SetParentDeathSignal(sig syscall.Signal) error {
- if ret := C.libct_container_set_pdeathsig(ct.ct, C.int(sig)); ret != 0 {
+func (p *ProcessDesc) SetParentDeathSignal(sig syscall.Signal) error {
+ if ret := C.libct_process_desc_set_pdeathsig(p.p, C.int(sig)); ret != 0 {
return LibctError{int(ret)}
}
diff --git a/go/libct_test.go b/go/libct_test.go
index c6b40b4..3047386 100644
--- a/go/libct_test.go
+++ b/go/libct_test.go
@@ -11,6 +11,11 @@ func TestSpawnExecv(t *testing.T) {
t.Fail()
}
+ p, err :=s.ProcessCreateDesc();
+ if err != nil {
+ t.Fail()
+ }
+
ct, err := s.ContainerCreate("test")
if err != nil {
t.Fail()
@@ -18,7 +23,7 @@ func TestSpawnExecv(t *testing.T) {
ct.SetNsMask(syscall.CLONE_NEWNS | syscall.CLONE_NEWPID)
- _, err = ct.SpawnExecve("sleep",
+ _, err = ct.SpawnExecve(p, "sleep",
[]string{"sleep", "1"},
[]string{"PATH=/bin:/usr/bin"}, nil)
if err != nil {
--
1.9.1
More information about the Libct
mailing list