mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-25 11:44:44 +00:00
Revendor virtsock go library, for vsock.Dial
$ gvt delete github.com/rneugeba/virtsock/go $ gvt fetch --no-recurse https://github.com/rneugeba/virtsock/go virtsock.git: $ git log --oneline 74097e05a883e89c70e6a27b342672c7fe6c846b..650ef8224a0c06b4b20e9bee1600dbf677c8176d -- go/ 0e2f0a8 vsock: Implement vsock.Dial 712714a vsock: include the errno when C.bind_sockaddr_vm 03725fe go: make errors public Signed-off-by: Ian Campbell <ian.campbell@docker.com>
This commit is contained in:
parent
98174da08f
commit
f70ff0aeac
28
alpine/packages/go/vendor/github.com/rneugeba/virtsock/go/hvsock/hvsock.go
generated
vendored
28
alpine/packages/go/vendor/github.com/rneugeba/virtsock/go/hvsock/hvsock.go
generated
vendored
@ -173,13 +173,13 @@ func (v *hvsockListener) Addr() net.Addr {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
var (
|
var (
|
||||||
errSocketClosed = errors.New("HvSocket has already been closed")
|
ErrSocketClosed = errors.New("HvSocket has already been closed")
|
||||||
errSocketWriteClosed = errors.New("HvSocket has been closed for write")
|
ErrSocketWriteClosed = errors.New("HvSocket has been closed for write")
|
||||||
errSocketReadClosed = errors.New("HvSocket has been closed for read")
|
ErrSocketReadClosed = errors.New("HvSocket has been closed for read")
|
||||||
errSocketMsgSize = errors.New("HvSocket message was of wrong size")
|
ErrSocketMsgSize = errors.New("HvSocket message was of wrong size")
|
||||||
errSocketMsgWrite = errors.New("HvSocket writing message")
|
ErrSocketMsgWrite = errors.New("HvSocket writing message")
|
||||||
errSocketNotEnoughData = errors.New("HvSocket not enough data written")
|
ErrSocketNotEnoughData = errors.New("HvSocket not enough data written")
|
||||||
errSocketUnImplemented = errors.New("Function not implemented")
|
ErrSocketUnImplemented = errors.New("Function not implemented")
|
||||||
)
|
)
|
||||||
|
|
||||||
type HVsockConn struct {
|
type HVsockConn struct {
|
||||||
@ -227,7 +227,7 @@ func (v *HVsockConn) Close() error {
|
|||||||
|
|
||||||
func (v *HVsockConn) CloseRead() error {
|
func (v *HVsockConn) CloseRead() error {
|
||||||
if v.readClosed {
|
if v.readClosed {
|
||||||
return errSocketReadClosed
|
return ErrSocketReadClosed
|
||||||
}
|
}
|
||||||
|
|
||||||
prDebug("TX: Shutdown Read\n")
|
prDebug("TX: Shutdown Read\n")
|
||||||
@ -244,7 +244,7 @@ func (v *HVsockConn) CloseRead() error {
|
|||||||
|
|
||||||
func (v *HVsockConn) CloseWrite() error {
|
func (v *HVsockConn) CloseWrite() error {
|
||||||
if v.writeClosed {
|
if v.writeClosed {
|
||||||
return errSocketWriteClosed
|
return ErrSocketWriteClosed
|
||||||
}
|
}
|
||||||
|
|
||||||
prDebug("TX: Shutdown Write\n")
|
prDebug("TX: Shutdown Write\n")
|
||||||
@ -284,7 +284,7 @@ func (v *HVsockConn) Read(buf []byte) (int, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if n != 4 {
|
if n != 4 {
|
||||||
return n, errSocketMsgSize
|
return n, ErrSocketMsgSize
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := int(binary.LittleEndian.Uint32(b))
|
msg := int(binary.LittleEndian.Uint32(b))
|
||||||
@ -333,7 +333,7 @@ func (v *HVsockConn) Read(buf []byte) (int, error) {
|
|||||||
|
|
||||||
func (v *HVsockConn) Write(buf []byte) (int, error) {
|
func (v *HVsockConn) Write(buf []byte) (int, error) {
|
||||||
if v.writeClosed {
|
if v.writeClosed {
|
||||||
return 0, errSocketWriteClosed
|
return 0, ErrSocketWriteClosed
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@ -344,7 +344,7 @@ func (v *HVsockConn) Write(buf []byte) (int, error) {
|
|||||||
|
|
||||||
for toWrite > 0 {
|
for toWrite > 0 {
|
||||||
if v.writeClosed {
|
if v.writeClosed {
|
||||||
return 0, errSocketWriteClosed
|
return 0, ErrSocketWriteClosed
|
||||||
}
|
}
|
||||||
|
|
||||||
// We write batches of MSG + data which need to be
|
// We write batches of MSG + data which need to be
|
||||||
@ -371,7 +371,7 @@ func (v *HVsockConn) Write(buf []byte) (int, error) {
|
|||||||
}
|
}
|
||||||
if n != thisBatch {
|
if n != thisBatch {
|
||||||
prDebug("Write Error 4\n")
|
prDebug("Write Error 4\n")
|
||||||
err = errSocketNotEnoughData
|
err = ErrSocketNotEnoughData
|
||||||
goto ErrOut
|
goto ErrOut
|
||||||
}
|
}
|
||||||
toWrite -= n
|
toWrite -= n
|
||||||
@ -402,7 +402,7 @@ func (v *HVsockConn) sendMsg(msg uint32) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if n != len(b) {
|
if n != len(b) {
|
||||||
return errSocketMsgWrite
|
return ErrSocketMsgWrite
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
1
alpine/packages/go/vendor/github.com/rneugeba/virtsock/go/hvsock/hvsock_darwin.go
generated
vendored
1
alpine/packages/go/vendor/github.com/rneugeba/virtsock/go/hvsock/hvsock_darwin.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
// Dummy implementation to compile on Mac OSX
|
// Dummy implementation to compile on Mac OSX
|
||||||
|
|
||||||
package hvsock
|
package hvsock
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"time"
|
"time"
|
||||||
|
4
alpine/packages/go/vendor/github.com/rneugeba/virtsock/go/hvsock/hvsock_windows.go
generated
vendored
4
alpine/packages/go/vendor/github.com/rneugeba/virtsock/go/hvsock/hvsock_windows.go
generated
vendored
@ -240,7 +240,7 @@ func (v *hvsockConn) closeHandle() {
|
|||||||
func (s *hvsockConn) prepareIo() (*ioOperation, error) {
|
func (s *hvsockConn) prepareIo() (*ioOperation, error) {
|
||||||
s.wg.Add(1)
|
s.wg.Add(1)
|
||||||
if s.closing {
|
if s.closing {
|
||||||
return nil, errSocketClosed
|
return nil, ErrSocketClosed
|
||||||
}
|
}
|
||||||
c := &ioOperation{}
|
c := &ioOperation{}
|
||||||
c.ch = make(chan ioResult)
|
c.ch = make(chan ioResult)
|
||||||
@ -299,7 +299,7 @@ func (v *hvsockConn) asyncIo(c *ioOperation, deadline time.Time, bytes uint32, e
|
|||||||
err = r.err
|
err = r.err
|
||||||
if err == syscall.ERROR_OPERATION_ABORTED {
|
if err == syscall.ERROR_OPERATION_ABORTED {
|
||||||
if v.closing {
|
if v.closing {
|
||||||
err = errSocketClosed
|
err = ErrSocketClosed
|
||||||
} else if timedout {
|
} else if timedout {
|
||||||
err = errTimeout
|
err = errTimeout
|
||||||
}
|
}
|
||||||
|
34
alpine/packages/go/vendor/github.com/rneugeba/virtsock/go/vsock/vsock_linux.go
generated
vendored
34
alpine/packages/go/vendor/github.com/rneugeba/virtsock/go/vsock/vsock_linux.go
generated
vendored
@ -37,11 +37,33 @@ int accept_vm(int fd, struct sockaddr_vm *sa_vm, socklen_t *sa_vm_len) {
|
|||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
const (
|
const (
|
||||||
AF_VSOCK = 40
|
AF_VSOCK = 40
|
||||||
VSOCK_CID_ANY = 4294967295 /* 2^32-1 */
|
VSOCK_CID_ANY = 4294967295 /* 2^32-1 */
|
||||||
VSOCK_CID_SELF = 3
|
VSOCK_CID_HYPERVISOR = 0
|
||||||
|
VSOCK_CID_HOST = 2
|
||||||
|
VSOCK_CID_SELF = 3
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func Dial(cid, port uint) (Conn, error) {
|
||||||
|
fd, err := syscall.Socket(AF_VSOCK, syscall.SOCK_STREAM, 0)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
sa := C.struct_sockaddr_vm{}
|
||||||
|
sa.svm_family = AF_VSOCK
|
||||||
|
sa.svm_port = C.uint(port)
|
||||||
|
sa.svm_cid = C.uint(cid)
|
||||||
|
|
||||||
|
if ret, errno := C.connect_sockaddr_vm(C.int(fd), &sa); ret != 0 {
|
||||||
|
return nil, errors.New(fmt.Sprintf(
|
||||||
|
"failed bind connect to %08x.%08x, returned %d, errno %d: %s",
|
||||||
|
sa.svm_cid, sa.svm_port, ret, errno, errno))
|
||||||
|
}
|
||||||
|
|
||||||
|
return newVsockConn(uintptr(fd), port)
|
||||||
|
}
|
||||||
|
|
||||||
// Listen returns a net.Listener which can accept connections on the given
|
// Listen returns a net.Listener which can accept connections on the given
|
||||||
// vhan port.
|
// vhan port.
|
||||||
func Listen(port uint) (net.Listener, error) {
|
func Listen(port uint) (net.Listener, error) {
|
||||||
@ -55,8 +77,10 @@ func Listen(port uint) (net.Listener, error) {
|
|||||||
sa.svm_port = C.uint(port)
|
sa.svm_port = C.uint(port)
|
||||||
sa.svm_cid = VSOCK_CID_ANY
|
sa.svm_cid = VSOCK_CID_ANY
|
||||||
|
|
||||||
if ret := C.bind_sockaddr_vm(C.int(accept_fd), &sa); ret != 0 {
|
if ret, errno := C.bind_sockaddr_vm(C.int(accept_fd), &sa); ret != 0 {
|
||||||
return nil, errors.New(fmt.Sprintf("failed bind vsock connection to %08x.%08x, returned %d", sa.svm_cid, sa.svm_port, ret))
|
return nil, errors.New(fmt.Sprintf(
|
||||||
|
"failed bind vsock connection to %08x.%08x, returned %d, errno %d: %s",
|
||||||
|
sa.svm_cid, sa.svm_port, ret, errno, errno))
|
||||||
}
|
}
|
||||||
|
|
||||||
err = syscall.Listen(accept_fd, syscall.SOMAXCONN)
|
err = syscall.Listen(accept_fd, syscall.SOMAXCONN)
|
||||||
|
2
alpine/packages/go/vendor/manifest
vendored
2
alpine/packages/go/vendor/manifest
vendored
@ -5,7 +5,7 @@
|
|||||||
"importpath": "github.com/rneugeba/virtsock/go",
|
"importpath": "github.com/rneugeba/virtsock/go",
|
||||||
"repository": "https://github.com/rneugeba/virtsock",
|
"repository": "https://github.com/rneugeba/virtsock",
|
||||||
"vcs": "git",
|
"vcs": "git",
|
||||||
"revision": "74097e05a883e89c70e6a27b342672c7fe6c846b",
|
"revision": "650ef8224a0c06b4b20e9bee1600dbf677c8176d",
|
||||||
"branch": "master",
|
"branch": "master",
|
||||||
"path": "/go",
|
"path": "/go",
|
||||||
"notests": true
|
"notests": true
|
||||||
|
Loading…
Reference in New Issue
Block a user