[zxsocket] switch to fuchsia.posix.socket
NET-2364 #progress step 3
Change-Id: I8ed9fcf948b8617eb4589bd2c0bea789f8d9154b
diff --git a/regen-fidl b/regen-fidl
index 5af2592..e777b93 100755
--- a/regen-fidl
+++ b/regen-fidl
@@ -21,27 +21,20 @@
# Parameters:
# $1 = directory where fidl file is found.
# $2 = output of subdirectory of syscall/zx
-# $3..n = additional fidl dependencies needed to generate this target.
+# $3..n = additional arguments needed to generate this target.
function generate_file {
local source_dir=$1
shift
local package_dir=$1
shift
- local additional_files=""
- local additional_files_prefix="--files"
- while (( "$#" )); do
- additional_files+="${additional_files_prefix} $1"
- additional_files_prefix=""
- shift
- done
out_file=third_party/go/src/syscall/zx/"${package_dir}"/impl.go
copyright_line=$(grep -E "^// Copyright [0-9]+" "${out_file}" || \
echo "// Copyright $(date +%Y) The Fuchsia Authors. All rights reserved.")
- ./out/default/host_x64/fidlc \
+ ./out/default.zircon/tools/fidlc \
--json "${ir_file}" \
- ${additional_files} \
+ $@ \
--files "${source_dir}"/*.fidl
- ./out/default/host_x64/fidlgen \
+ fx fidlgen \
--json "${ir_file}" \
--generators go \
--include-base notused \
@@ -61,14 +54,17 @@
EOF
cat "${tmpout}"/impl.go >> "${tmpfile}"
perl -pi -e 's|^// WARNING: This file is machine generated by fidlgen.\n$||' "${tmpfile}"
- perl -pi -e 's|fidl/fuchsia/mem|syscall/zx/mem|' "${tmpfile}"
- ./out/default/tools/goroot/bin/gofmt -s -w "${tmpfile}"
+ perl -pi -e 's|fidl/fuchsia/|syscall/zx/|' "${tmpfile}"
+ perl -pi -e 's|package socket|package net|' "${tmpfile}"
+ ./buildtools/linux-x64/go/bin/gofmt -s -w "${tmpfile}"
mv -- "${tmpfile}" "${out_file}"
}
generate_file third_party/go/src/syscall/zx/fidl/bindingstest/ fidl/bindingstest
generate_file tools/fidl/gidl-conformance-suite/ fidl/conformance
-generate_file zircon/system/fidl/fuchsia-net net
generate_file zircon/system/fidl/fuchsia-mem mem
generate_file zircon/system/fidl/fuchsia-io io \
- zircon/system/fidl/fuchsia-mem/*.fidl
+ --files zircon/system/fidl/fuchsia-mem/*.fidl
+generate_file zircon/system/fidl/fuchsia-posix-socket net \
+ --files zircon/system/fidl/fuchsia-mem/*.fidl \
+ --files zircon/system/fidl/fuchsia-io/*.fidl
diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go
index 792ee71..2a72e31 100644
--- a/src/go/build/deps_test.go
+++ b/src/go/build/deps_test.go
@@ -168,7 +168,7 @@
"syscall/zx/mem": {"L0"},
"syscall/zx/mxnet": {"L0"},
"syscall/zx/net": {"L0"},
- "syscall/zx/zxsocket": {"L0", "syscall"},
+ "syscall/zx/zxsocket": {"L0", "strconv", "syscall"},
"syscall/zx/zxwait": {"L0"},
"internal/syscall/unix": {"L0", "syscall"},
diff --git a/src/internal/poll/fd_fuchsia.go b/src/internal/poll/fd_fuchsia.go
index 89b703d..c455dc2 100644
--- a/src/internal/poll/fd_fuchsia.go
+++ b/src/internal/poll/fd_fuchsia.go
@@ -211,7 +211,7 @@
}
if s, ok := syscall.FDIOForFD(fd.Sysfd).(*zxsocket.Socket); ok {
- code, err := s.Accept(0)
+ code, control, err := s.Accept(0)
if code == syscall.EAGAIN {
// TODO: non-blocking support, pass this to the poller
if obs, err := s.Wait(mxnet.MXSIO_SIGNAL_INCOMING|zx.SignalSocketPeerClosed, zx.TimensecInfinite); err != nil {
@@ -223,7 +223,7 @@
} else {
panic("unreachable")
}
- code, err = s.Accept(0)
+ code, control, err = s.Accept(0)
}
if err != nil {
return nil, err
@@ -231,11 +231,7 @@
if code != 0 {
return nil, syscall.Errno(code)
}
- var h zx.Handle
- if err := s.Socket.Accept(&h); err != nil {
- return nil, err
- }
- return zxsocket.NewSocket(zx.Socket(h)), nil
+ return zxsocket.NewSocket(control)
}
return nil, syscall.EBADF
}
diff --git a/src/net/ipsock_fuchsia.go b/src/net/ipsock_fuchsia.go
index 2fd6775..3f67a1d 100644
--- a/src/net/ipsock_fuchsia.go
+++ b/src/net/ipsock_fuchsia.go
@@ -64,12 +64,12 @@
h zx.Handle
}
-func getSocketProvider() zx.Handle {
+func getProvider() zx.Handle {
socketProvider.mu.Lock()
defer socketProvider.mu.Unlock()
if socketProvider.h == zx.HandleInvalid {
if c0, c1, err := zx.NewChannel(0); err == nil {
- if err := fdio.ServiceConnect("/svc/"+zxnet.SocketProviderName, zx.Handle(c0)); err == nil {
+ if err := fdio.ServiceConnect("/svc/"+zxnet.ProviderName, zx.Handle(c0)); err == nil {
socketProvider.h = zx.Handle(c1)
}
}
@@ -85,26 +85,26 @@
sotype = syscall.SOCK_DGRAM
}
- var sp zxnet.SocketProviderInterface
+ var sp zxnet.ProviderInterface
// Wait for the network stack to publish the socket device.
// See similar logic in zircon/system/ulib/fdio/bsdsocket.c.
for i := 0; i < 40; i++ {
- if h := getSocketProvider(); h.IsValid() {
- sp = zxnet.SocketProviderInterface(fidl.ChannelProxy{Channel: zx.Channel(h)})
+ if h := getProvider(); h.IsValid() {
+ sp = zxnet.ProviderInterface(fidl.ChannelProxy{Channel: zx.Channel(h)})
break
}
time.Sleep(250 * time.Millisecond)
}
- code, s, err := sp.Socket(int16(family), int16(sotype), syscall.IPPROTO_IP)
+ code, control, err := sp.Socket(int16(family), int16(sotype), syscall.IPPROTO_IP)
if err != nil {
return nil, err
}
if code != 0 {
return nil, syscall.Errno(code)
}
- sock := zxsocket.NewSocket(s)
- if sotype == syscall.SOCK_DGRAM {
- sock.SetDgram()
+ sock, err := zxsocket.NewSocket(control)
+ if err != nil {
+ return nil, err
}
fd = newFD(sock, family, sotype, net)
diff --git a/src/syscall/zx/handle.go b/src/syscall/zx/handle.go
index 150c3c6..5a9b3c4 100644
--- a/src/syscall/zx/handle.go
+++ b/src/syscall/zx/handle.go
@@ -168,22 +168,17 @@
return nil
}
-func (h *Handle) GetInfo(topic uint32, data []byte) (actual, avail uint, _ error) {
- dataBytes := uint(len(data))
- if status := Sys_object_get_info(*h, topic, bytesPtr(data), dataBytes, &actual, &avail); status != ErrOk {
- return 0, 0, &Error{Status: status, Text: "zx.Handle.GetInfo"}
+func (h *Handle) GetInfo(topic uint32, buffer unsafe.Pointer, bufferSize uint) error {
+ if status := Sys_object_get_info(*h, topic, buffer, bufferSize, nil, nil); status != ErrOk {
+ return &Error{Status: status, Text: "zx.Handle.GetInfo"}
}
- return actual, avail, nil
+ return nil
}
func (h *Handle) GetInfoHandleBasic() (InfoHandleBasic, error) {
var info InfoHandleBasic
- dataBytes := uint(unsafe.Sizeof(info))
- dataPtr := unsafe.Pointer(&info)
- if status := Sys_object_get_info(*h, ObjectInfoHandleBasic, dataPtr, dataBytes, nil, nil); status != ErrOk {
- return info, &Error{Status: status, Text: "zx.Handle.GetInfoHandleBasic"}
- }
- return info, nil
+ err := h.GetInfo(ObjectInfoHandleBasic, unsafe.Pointer(&info), uint(unsafe.Sizeof(info)))
+ return info, err
}
func (h *Handle) GetProperty(property uint32, data []byte) error {
diff --git a/src/syscall/zx/net/impl.go b/src/syscall/zx/net/impl.go
index 4661b55..a72a621 100644
--- a/src/syscall/zx/net/impl.go
+++ b/src/syscall/zx/net/impl.go
@@ -13,1050 +13,598 @@
import (
_zx "syscall/zx"
_bindings "syscall/zx/fidl"
+ fuchsiaio "syscall/zx/io"
)
const (
- MaxHostnameSize uint64 = 255
- MaxAddr uint64 = 128
- MaxBuffer uint64 = 900
+ ControlCloneOrdinal uint64 = 402549324 << 32
+ ControlCloneGenOrdinal uint64 = 402549324 << 32
+ ControlCloseOrdinal uint64 = 1387878023 << 32
+ ControlCloseGenOrdinal uint64 = 1387878023 << 32
+ ControlDescribeOrdinal uint64 = 526573406 << 32
+ ControlDescribeGenOrdinal uint64 = 526573406 << 32
+ ControlOnOpenOrdinal uint64 = 1191225277 << 32
+ ControlOnOpenGenOrdinal uint64 = 1191225277 << 32
+ ControlSyncOrdinal uint64 = 1648508842 << 32
+ ControlSyncGenOrdinal uint64 = 1648508842 << 32
+ ControlGetAttrOrdinal uint64 = 1166403528 << 32
+ ControlGetAttrGenOrdinal uint64 = 1166403528 << 32
+ ControlSetAttrOrdinal uint64 = 198530458 << 32
+ ControlSetAttrGenOrdinal uint64 = 198530458 << 32
+ ControlIoctlOrdinal uint64 = 905161895 << 32
+ ControlIoctlGenOrdinal uint64 = 905161895 << 32
+ ControlBindOrdinal uint64 = 343163373 << 32
+ ControlBindGenOrdinal uint64 = 343163373 << 32
+ ControlConnectOrdinal uint64 = 595514168 << 32
+ ControlConnectGenOrdinal uint64 = 595514168 << 32
+ ControlListenOrdinal uint64 = 778265222 << 32
+ ControlListenGenOrdinal uint64 = 778265222 << 32
+ ControlAcceptOrdinal uint64 = 300755315 << 32
+ ControlAcceptGenOrdinal uint64 = 300755315 << 32
+ ControlGetSockNameOrdinal uint64 = 1673606786 << 32
+ ControlGetSockNameGenOrdinal uint64 = 1673606786 << 32
+ ControlGetPeerNameOrdinal uint64 = 1484290998 << 32
+ ControlGetPeerNameGenOrdinal uint64 = 1484290998 << 32
+ ControlSetSockOptOrdinal uint64 = 1268914087 << 32
+ ControlSetSockOptGenOrdinal uint64 = 1268914087 << 32
+ ControlGetSockOptOrdinal uint64 = 914699896 << 32
+ ControlGetSockOptGenOrdinal uint64 = 914699896 << 32
+ ControlIoctlPosixOrdinal uint64 = 1353250461 << 32
+ ControlIoctlPosixGenOrdinal uint64 = 1353250461 << 32
)
-type LookupError uint32
-
-const (
- LookupErrorNotFound LookupError = 1
- LookupErrorTransient LookupError = 2
- LookupErrorInvalidArgs LookupError = 3
- LookupErrorInternalError LookupError = 4
-)
-
-func (x LookupError) String() string {
- switch x {
- case 1:
- return "NotFound"
- case 2:
- return "Transient"
- case 3:
- return "InvalidArgs"
- case 4:
- return "InternalError"
- }
- return "Unknown"
+type controlCloneRequest struct {
+ _ struct{} `fidl2:"s,8,0"`
+ Flags uint32
+ Object fuchsiaio.NodeInterfaceRequest `fidl2:"0"`
}
-type AddrInfoStatus uint32
+var _mcontrolCloneRequest = _bindings.CreateLazyMarshaler(controlCloneRequest{})
-const (
- AddrInfoStatusOk AddrInfoStatus = 0
- AddrInfoStatusBadFlags AddrInfoStatus = 1
- AddrInfoStatusNoName AddrInfoStatus = 2
- AddrInfoStatusAgain AddrInfoStatus = 3
- AddrInfoStatusFail AddrInfoStatus = 4
- AddrInfoStatusNoData AddrInfoStatus = 5
- AddrInfoStatusBufferOverflow AddrInfoStatus = 6
- AddrInfoStatusSystemError AddrInfoStatus = 7
-)
-
-func (x AddrInfoStatus) String() string {
- switch x {
- case 0:
- return "Ok"
- case 1:
- return "BadFlags"
- case 2:
- return "NoName"
- case 3:
- return "Again"
- case 4:
- return "Fail"
- case 5:
- return "NoData"
- case 6:
- return "BufferOverflow"
- case 7:
- return "SystemError"
- }
- return "Unknown"
-}
-
-type LookupIpOptions uint8
-
-const (
- LookupIpOptionsV4Addrs LookupIpOptions = 1
- LookupIpOptionsV6Addrs LookupIpOptions = 2
- LookupIpOptionsCnameLookup LookupIpOptions = 4
-)
-
-func (x LookupIpOptions) String() string {
- switch x {
- case 1:
- return "V4Addrs"
- case 2:
- return "V6Addrs"
- case 4:
- return "CnameLookup"
- }
- return "Unknown"
+func (msg *controlCloneRequest) Marshaler() _bindings.Marshaler {
+ return _mcontrolCloneRequest
}
-type NameLookupLookupIpResponse struct {
- _ struct{} `fidl2:"s,48,8"`
- Addr IpAddressInfo
+type controlCloseResponse struct {
+ _ struct{} `fidl2:"s,8,0"`
+ S int32
}
-var _mNameLookupLookupIpResponse = _bindings.CreateLazyMarshaler(NameLookupLookupIpResponse{})
+var _mcontrolCloseResponse = _bindings.CreateLazyMarshaler(controlCloseResponse{})
-func (msg *NameLookupLookupIpResponse) Marshaler() _bindings.Marshaler {
- return _mNameLookupLookupIpResponse
+func (msg *controlCloseResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolCloseResponse
}
-type NameLookupLookupHostnameResponse struct {
- _ struct{} `fidl2:"s,16,8"`
- Hostname string `fidl:"255" fidl2:"255"`
+type controlDescribeResponse struct {
+ _ struct{} `fidl2:"s,32,0"`
+ Info fuchsiaio.NodeInfo
}
-var _mNameLookupLookupHostnameResponse = _bindings.CreateLazyMarshaler(NameLookupLookupHostnameResponse{})
+var _mcontrolDescribeResponse = _bindings.CreateLazyMarshaler(controlDescribeResponse{})
-func (msg *NameLookupLookupHostnameResponse) Marshaler() _bindings.Marshaler {
- return _mNameLookupLookupHostnameResponse
+func (msg *controlDescribeResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolDescribeResponse
}
-type IpAddressInfo struct {
- _ struct{} `fidl2:"s,48,8"`
- // All of the IPv4 addresses for the requested hostname.
- Ipv4Addrs []Ipv4Address
- // All of the IPv6 addresses for the requested hostname.
- Ipv6Addrs []Ipv6Address
- // The canonical name of the requested hostname (usually the DNS CNAME record, if one exists).
- CanonicalName *string
+type controlOnOpenResponse struct {
+ _ struct{} `fidl2:"s,16,0"`
+ S int32
+ Info *fuchsiaio.NodeInfo
}
-var _mIpAddressInfo = _bindings.CreateLazyMarshaler(IpAddressInfo{})
+var _mcontrolOnOpenResponse = _bindings.CreateLazyMarshaler(controlOnOpenResponse{})
-func (msg *IpAddressInfo) Marshaler() _bindings.Marshaler {
- return _mIpAddressInfo
+func (msg *controlOnOpenResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolOnOpenResponse
}
-// Ipv4Address is expressed in network byte order, so the most significant byte
-// ("127" in the address "127.0.0.1") will be at index 0.
-type Ipv4Address struct {
- _ struct{} `fidl2:"s,4,1"`
- Addr [4]uint8
+type controlSyncResponse struct {
+ _ struct{} `fidl2:"s,8,0"`
+ S int32
}
-var _mIpv4Address = _bindings.CreateLazyMarshaler(Ipv4Address{})
+var _mcontrolSyncResponse = _bindings.CreateLazyMarshaler(controlSyncResponse{})
-func (msg *Ipv4Address) Marshaler() _bindings.Marshaler {
- return _mIpv4Address
+func (msg *controlSyncResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolSyncResponse
}
-// Ipv6Address is expressed in network byte order, so the most significant byte
-// ("ff" in the address "ff02::1") will be at index 0.
-type Ipv6Address struct {
- _ struct{} `fidl2:"s,16,1"`
- Addr [16]uint8
+type controlGetAttrResponse struct {
+ _ struct{} `fidl2:"s,64,0"`
+ S int32
+ Attributes fuchsiaio.NodeAttributes
}
-var _mIpv6Address = _bindings.CreateLazyMarshaler(Ipv6Address{})
+var _mcontrolGetAttrResponse = _bindings.CreateLazyMarshaler(controlGetAttrResponse{})
-func (msg *Ipv6Address) Marshaler() _bindings.Marshaler {
- return _mIpv6Address
+func (msg *controlGetAttrResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolGetAttrResponse
}
-// Endpoint describes an IP address and port. The network protocol associated
-// with the Endpoint will be known from context or communicated through
-// additional structures.
-type Endpoint struct {
- _ struct{} `fidl2:"s,24,4"`
- // The IP address of the endpoint.
- Addr IpAddress
- // The port number of the endpoint.
- Port uint16
+type controlSetAttrRequest struct {
+ _ struct{} `fidl2:"s,64,0"`
+ Flags uint32
+ Attributes fuchsiaio.NodeAttributes
}
-var _mEndpoint = _bindings.CreateLazyMarshaler(Endpoint{})
+var _mcontrolSetAttrRequest = _bindings.CreateLazyMarshaler(controlSetAttrRequest{})
-func (msg *Endpoint) Marshaler() _bindings.Marshaler {
- return _mEndpoint
+func (msg *controlSetAttrRequest) Marshaler() _bindings.Marshaler {
+ return _mcontrolSetAttrRequest
}
-// Subnet describes an IP subnetwork, where all host IP addresses share the same most significant
-// bits.
-type Subnet struct {
- _ struct{} `fidl2:"s,24,4"`
- // The Ipv4 or Ipv6 address. Only the `prefix_len` most significant bits may be set in `addr`;
- // all bits in the host portion of the address must be zero.
- Addr IpAddress
- // The prefix length of the netmask. E.g. for 192.168.1.0/24, the prefix
- // length is 24, corresponding to a netmask of 255.255.255.0.
- // For Ipv4, prefix_len must be in the range [0, 32].
- // For Ipv6, prefix_len must be in the range [0, 128].
- PrefixLen uint8
+type controlSetAttrResponse struct {
+ _ struct{} `fidl2:"s,8,0"`
+ S int32
}
-var _mSubnet = _bindings.CreateLazyMarshaler(Subnet{})
+var _mcontrolSetAttrResponse = _bindings.CreateLazyMarshaler(controlSetAttrResponse{})
-func (msg *Subnet) Marshaler() _bindings.Marshaler {
- return _mSubnet
+func (msg *controlSetAttrResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolSetAttrResponse
}
-// A MAC address used to identify a network interface on the data link layer within the network.
-type MacAddress struct {
- _ struct{} `fidl2:"s,6,1"`
- Octets [6]uint8
+type controlIoctlRequest struct {
+ _ struct{} `fidl2:"s,48,0"`
+ Opcode uint32
+ MaxOut uint64
+ Handles []_zx.Handle `fidl:"2" fidl2:"2,0"`
+ In []uint8 `fidl:"8192" fidl2:"8192"`
}
-var _mMacAddress = _bindings.CreateLazyMarshaler(MacAddress{})
+var _mcontrolIoctlRequest = _bindings.CreateLazyMarshaler(controlIoctlRequest{})
-func (msg *MacAddress) Marshaler() _bindings.Marshaler {
- return _mMacAddress
+func (msg *controlIoctlRequest) Marshaler() _bindings.Marshaler {
+ return _mcontrolIoctlRequest
}
-type AddrInfoHints struct {
- _ struct{} `fidl2:"s,16,4"`
- Flags int32
- Family int32
- SockType int32
- Protocol int32
-}
-
-var _mAddrInfoHints = _bindings.CreateLazyMarshaler(AddrInfoHints{})
-
-func (msg *AddrInfoHints) Marshaler() _bindings.Marshaler {
- return _mAddrInfoHints
-}
-
-type AddrStorage struct {
- _ struct{} `fidl2:"s,20,4"`
- Val [16]uint8
- Len uint32
-}
-
-var _mAddrStorage = _bindings.CreateLazyMarshaler(AddrStorage{})
-
-func (msg *AddrStorage) Marshaler() _bindings.Marshaler {
- return _mAddrStorage
-}
-
-type AddrInfo struct {
- _ struct{} `fidl2:"s,40,4"`
- Flags int32
- Family int32
- SockType int32
- Protocol int32
- Addr AddrStorage
- Port uint16
-}
-
-var _mAddrInfo = _bindings.CreateLazyMarshaler(AddrInfo{})
-
-func (msg *AddrInfo) Marshaler() _bindings.Marshaler {
- return _mAddrInfo
-}
-
-type NameLookupLookupIpResultTag uint32
-
-const (
- _ NameLookupLookupIpResultTag = iota
- NameLookupLookupIpResultResponse
- NameLookupLookupIpResultErr
-)
-
-type NameLookupLookupIpResult struct {
- NameLookupLookupIpResultTag `fidl:"tag" fidl2:"u,56,8"`
- Response NameLookupLookupIpResponse
- Err LookupError
-}
-
-func (u *NameLookupLookupIpResult) Which() NameLookupLookupIpResultTag {
- return u.NameLookupLookupIpResultTag
-}
-
-func (u *NameLookupLookupIpResult) SetResponse(response NameLookupLookupIpResponse) {
- u.NameLookupLookupIpResultTag = NameLookupLookupIpResultResponse
- u.Response = response
-}
-
-func (u *NameLookupLookupIpResult) SetErr(err LookupError) {
- u.NameLookupLookupIpResultTag = NameLookupLookupIpResultErr
- u.Err = err
-}
-
-type NameLookupLookupHostnameResultTag uint32
-
-const (
- _ NameLookupLookupHostnameResultTag = iota
- NameLookupLookupHostnameResultResponse
- NameLookupLookupHostnameResultErr
-)
-
-type NameLookupLookupHostnameResult struct {
- NameLookupLookupHostnameResultTag `fidl:"tag" fidl2:"u,24,8"`
- Response NameLookupLookupHostnameResponse
- Err LookupError
-}
-
-func (u *NameLookupLookupHostnameResult) Which() NameLookupLookupHostnameResultTag {
- return u.NameLookupLookupHostnameResultTag
-}
-
-func (u *NameLookupLookupHostnameResult) SetResponse(response NameLookupLookupHostnameResponse) {
- u.NameLookupLookupHostnameResultTag = NameLookupLookupHostnameResultResponse
- u.Response = response
-}
-
-func (u *NameLookupLookupHostnameResult) SetErr(err LookupError) {
- u.NameLookupLookupHostnameResultTag = NameLookupLookupHostnameResultErr
- u.Err = err
-}
-
-type IpAddressTag uint32
-
-const (
- _ IpAddressTag = iota
- IpAddressIpv4
- IpAddressIpv6
-)
-
-// Represents an IP address that may be either v4 or v6.
-type IpAddress struct {
- IpAddressTag `fidl:"tag" fidl2:"u,20,4"`
- Ipv4 Ipv4Address
- Ipv6 Ipv6Address
-}
-
-func (u *IpAddress) Which() IpAddressTag {
- return u.IpAddressTag
-}
-
-func (u *IpAddress) SetIpv4(ipv4 Ipv4Address) {
- u.IpAddressTag = IpAddressIpv4
- u.Ipv4 = ipv4
-}
-
-func (u *IpAddress) SetIpv6(ipv6 Ipv6Address) {
- u.IpAddressTag = IpAddressIpv6
- u.Ipv6 = ipv6
-}
-
-const (
- ConnectivityOnNetworkReachableOrdinal uint64 = 1703348424 << 32
- ConnectivityOnNetworkReachableGenOrdinal uint64 = 1703348424 << 32
-)
-
-type connectivityOnNetworkReachableResponse struct {
- _ struct{} `fidl2:"s,8,0"`
- Reachable bool
-}
-
-var _mconnectivityOnNetworkReachableResponse = _bindings.CreateLazyMarshaler(connectivityOnNetworkReachableResponse{})
-
-func (msg *connectivityOnNetworkReachableResponse) Marshaler() _bindings.Marshaler {
- return _mconnectivityOnNetworkReachableResponse
-}
-
-type ConnectivityInterface _bindings.ChannelProxy
-
-// This is triggered on a state change in network reachability. Clients
-// should expect that network requests will succeed when `reachable` is
-// true.
-func (p *ConnectivityInterface) ExpectOnNetworkReachable() (bool, error) {
- resp_ := &connectivityOnNetworkReachableResponse{}
- err := ((*_bindings.ChannelProxy)(p)).Recv(ConnectivityOnNetworkReachableOrdinal, resp_)
- return resp_.Reachable, err
-}
-
-type Connectivity interface {
- // This is triggered on a state change in network reachability. Clients
- // should expect that network requests will succeed when `reachable` is
- // true.
-}
-
-type ConnectivityTransitionalBase struct{}
-
-type ConnectivityInterfaceRequest _bindings.InterfaceRequest
-
-func NewConnectivityInterfaceRequest() (ConnectivityInterfaceRequest, *ConnectivityInterface, error) {
- req, cli, err := _bindings.NewInterfaceRequest()
- return ConnectivityInterfaceRequest(req), (*ConnectivityInterface)(cli), err
-}
-
-// Implements ServiceRequest.
-func (_ ConnectivityInterfaceRequest) Name() string {
- return "fuchsia.net.Connectivity"
-}
-func (c ConnectivityInterfaceRequest) ToChannel() _zx.Channel {
- return c.Channel
-}
-
-const ConnectivityName = "fuchsia.net.Connectivity"
-
-type ConnectivityStub struct {
- Impl Connectivity
-}
-
-func (s_ *ConnectivityStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
- switch ordinal_ {
- }
- return nil, _bindings.ErrUnknownOrdinal
-}
-
-type ConnectivityService struct {
- _bindings.BindingSet
-}
-
-func (s *ConnectivityService) Add(impl Connectivity, c _zx.Channel, onError func(error)) (_bindings.BindingKey, error) {
- return s.BindingSet.Add(&ConnectivityStub{Impl: impl}, c, onError)
-}
-
-func (s *ConnectivityService) EventProxyFor(key _bindings.BindingKey) (*ConnectivityEventProxy, bool) {
- pxy, err := s.BindingSet.ProxyFor(key)
- return (*ConnectivityEventProxy)(pxy), err
-}
-
-type ConnectivityEventProxy _bindings.ChannelProxy
-
-func (p *ConnectivityEventProxy) OnNetworkReachable(reachable bool) error {
- event_ := &connectivityOnNetworkReachableResponse{
- Reachable: reachable,
- }
- return ((*_bindings.ChannelProxy)(p)).Send(ConnectivityOnNetworkReachableOrdinal, event_)
-}
-
-const (
- NameLookupLookupIpOrdinal uint64 = 818031436 << 32
- NameLookupLookupIpGenOrdinal uint64 = 818031436 << 32
- NameLookupLookupHostnameOrdinal uint64 = 391654548 << 32
- NameLookupLookupHostnameGenOrdinal uint64 = 391654548 << 32
-)
-
-type nameLookupLookupIpRequest struct {
- _ struct{} `fidl2:"s,24,0"`
- Hostname string `fidl:"255" fidl2:"255"`
- Options LookupIpOptions
-}
-
-var _mnameLookupLookupIpRequest = _bindings.CreateLazyMarshaler(nameLookupLookupIpRequest{})
-
-func (msg *nameLookupLookupIpRequest) Marshaler() _bindings.Marshaler {
- return _mnameLookupLookupIpRequest
-}
-
-type nameLookupLookupIpResponse struct {
- _ struct{} `fidl2:"s,56,0"`
- Result NameLookupLookupIpResult
-}
-
-var _mnameLookupLookupIpResponse = _bindings.CreateLazyMarshaler(nameLookupLookupIpResponse{})
-
-func (msg *nameLookupLookupIpResponse) Marshaler() _bindings.Marshaler {
- return _mnameLookupLookupIpResponse
-}
-
-type nameLookupLookupHostnameRequest struct {
- _ struct{} `fidl2:"s,24,0"`
- Addr IpAddress
-}
-
-var _mnameLookupLookupHostnameRequest = _bindings.CreateLazyMarshaler(nameLookupLookupHostnameRequest{})
-
-func (msg *nameLookupLookupHostnameRequest) Marshaler() _bindings.Marshaler {
- return _mnameLookupLookupHostnameRequest
-}
-
-type nameLookupLookupHostnameResponse struct {
- _ struct{} `fidl2:"s,24,0"`
- Result NameLookupLookupHostnameResult
-}
-
-var _mnameLookupLookupHostnameResponse = _bindings.CreateLazyMarshaler(nameLookupLookupHostnameResponse{})
-
-func (msg *nameLookupLookupHostnameResponse) Marshaler() _bindings.Marshaler {
- return _mnameLookupLookupHostnameResponse
-}
-
-type NameLookupInterface _bindings.ChannelProxy
-
-// Look up a list of IP addresses by hostname.
-//
-// If `hostname` is an Internationalized Domain Name, it must be encoded as per RFC 3490.
-func (p *NameLookupInterface) LookupIp(hostname string, options LookupIpOptions) (NameLookupLookupIpResult, error) {
- req_ := &nameLookupLookupIpRequest{
- Hostname: hostname,
- Options: options,
- }
- resp_ := &nameLookupLookupIpResponse{}
- err := ((*_bindings.ChannelProxy)(p)).Call(NameLookupLookupIpOrdinal, req_, resp_)
- return resp_.Result, err
-}
-
-// Look up a hostname by IP address.
-func (p *NameLookupInterface) LookupHostname(addr IpAddress) (NameLookupLookupHostnameResult, error) {
- req_ := &nameLookupLookupHostnameRequest{
- Addr: addr,
- }
- resp_ := &nameLookupLookupHostnameResponse{}
- err := ((*_bindings.ChannelProxy)(p)).Call(NameLookupLookupHostnameOrdinal, req_, resp_)
- return resp_.Result, err
-}
-
-type NameLookup interface {
- // Look up a list of IP addresses by hostname.
- //
- // If `hostname` is an Internationalized Domain Name, it must be encoded as per RFC 3490.
- LookupIp(hostname string, options LookupIpOptions) (NameLookupLookupIpResult, error)
- // Look up a hostname by IP address.
- LookupHostname(addr IpAddress) (NameLookupLookupHostnameResult, error)
-}
-
-type NameLookupTransitionalBase struct{}
-
-type NameLookupInterfaceRequest _bindings.InterfaceRequest
-
-func NewNameLookupInterfaceRequest() (NameLookupInterfaceRequest, *NameLookupInterface, error) {
- req, cli, err := _bindings.NewInterfaceRequest()
- return NameLookupInterfaceRequest(req), (*NameLookupInterface)(cli), err
-}
-
-// Implements ServiceRequest.
-func (_ NameLookupInterfaceRequest) Name() string {
- return "fuchsia.net.NameLookup"
-}
-func (c NameLookupInterfaceRequest) ToChannel() _zx.Channel {
- return c.Channel
-}
-
-const NameLookupName = "fuchsia.net.NameLookup"
-
-type NameLookupStub struct {
- Impl NameLookup
-}
-
-func (s_ *NameLookupStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
- switch ordinal_ {
- case NameLookupLookupIpOrdinal:
- in_ := nameLookupLookupIpRequest{}
- if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
- }
- result, err_ := s_.Impl.LookupIp(in_.Hostname, in_.Options)
- out_ := nameLookupLookupIpResponse{}
- out_.Result = result
- return &out_, err_
- case NameLookupLookupHostnameOrdinal:
- in_ := nameLookupLookupHostnameRequest{}
- if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
- }
- result, err_ := s_.Impl.LookupHostname(in_.Addr)
- out_ := nameLookupLookupHostnameResponse{}
- out_.Result = result
- return &out_, err_
- }
- return nil, _bindings.ErrUnknownOrdinal
-}
-
-type NameLookupService struct {
- _bindings.BindingSet
-}
-
-func (s *NameLookupService) Add(impl NameLookup, c _zx.Channel, onError func(error)) (_bindings.BindingKey, error) {
- return s.BindingSet.Add(&NameLookupStub{Impl: impl}, c, onError)
-}
-
-func (s *NameLookupService) EventProxyFor(key _bindings.BindingKey) (*NameLookupEventProxy, bool) {
- pxy, err := s.BindingSet.ProxyFor(key)
- return (*NameLookupEventProxy)(pxy), err
-}
-
-type NameLookupEventProxy _bindings.ChannelProxy
-
-const (
- SocketProviderSocketOrdinal uint64 = 316444173 << 32
- SocketProviderSocketGenOrdinal uint64 = 316444173 << 32
- SocketProviderGetAddrInfoOrdinal uint64 = 498796293 << 32
- SocketProviderGetAddrInfoGenOrdinal uint64 = 498796293 << 32
-)
-
-type socketProviderSocketRequest struct {
- _ struct{} `fidl2:"s,8,0"`
- Domain int16
- Type int16
- Protocol int16
-}
-
-var _msocketProviderSocketRequest = _bindings.CreateLazyMarshaler(socketProviderSocketRequest{})
-
-func (msg *socketProviderSocketRequest) Marshaler() _bindings.Marshaler {
- return _msocketProviderSocketRequest
-}
-
-type socketProviderSocketResponse struct {
- _ struct{} `fidl2:"s,8,0"`
- Code int16
- S _zx.Socket `fidl:"*" fidl2:"1"`
-}
-
-var _msocketProviderSocketResponse = _bindings.CreateLazyMarshaler(socketProviderSocketResponse{})
-
-func (msg *socketProviderSocketResponse) Marshaler() _bindings.Marshaler {
- return _msocketProviderSocketResponse
-}
-
-type socketProviderGetAddrInfoRequest struct {
+type controlIoctlResponse struct {
_ struct{} `fidl2:"s,40,0"`
- Node *string `fidl:"256" fidl2:"256"`
- Service *string `fidl:"256" fidl2:"256"`
- Hints *AddrInfoHints
+ S int32
+ Handles []_zx.Handle `fidl:"2" fidl2:"2,0"`
+ Out []uint8 `fidl:"8192" fidl2:"8192"`
}
-var _msocketProviderGetAddrInfoRequest = _bindings.CreateLazyMarshaler(socketProviderGetAddrInfoRequest{})
+var _mcontrolIoctlResponse = _bindings.CreateLazyMarshaler(controlIoctlResponse{})
-func (msg *socketProviderGetAddrInfoRequest) Marshaler() _bindings.Marshaler {
- return _msocketProviderGetAddrInfoRequest
+func (msg *controlIoctlResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolIoctlResponse
}
-type socketProviderGetAddrInfoResponse struct {
- _ struct{} `fidl2:"s,168,0"`
- Status AddrInfoStatus
- Nres uint32
- Res [4]AddrInfo
-}
-
-var _msocketProviderGetAddrInfoResponse = _bindings.CreateLazyMarshaler(socketProviderGetAddrInfoResponse{})
-
-func (msg *socketProviderGetAddrInfoResponse) Marshaler() _bindings.Marshaler {
- return _msocketProviderGetAddrInfoResponse
-}
-
-type SocketProviderInterface _bindings.ChannelProxy
-
-// Requests a socket with the specified parameters. Values for `code` are defined in
-// errno.h.
-func (p *SocketProviderInterface) Socket(domain int16, type_ int16, protocol int16) (int16, _zx.Socket, error) {
- req_ := &socketProviderSocketRequest{
- Domain: domain,
- Type: type_,
- Protocol: protocol,
- }
- resp_ := &socketProviderSocketResponse{}
- err := ((*_bindings.ChannelProxy)(p)).Call(SocketProviderSocketOrdinal, req_, resp_)
- return resp_.Code, resp_.S, err
-}
-
-// Retrieves information about the address of a node and/or service. The number of valid
-// results in `res` is given by the `count` return value.
-func (p *SocketProviderInterface) GetAddrInfo(node *string, service *string, hints *AddrInfoHints) (AddrInfoStatus, uint32, [4]AddrInfo, error) {
- req_ := &socketProviderGetAddrInfoRequest{
- Node: node,
- Service: service,
- Hints: hints,
- }
- resp_ := &socketProviderGetAddrInfoResponse{}
- err := ((*_bindings.ChannelProxy)(p)).Call(SocketProviderGetAddrInfoOrdinal, req_, resp_)
- return resp_.Status, resp_.Nres, resp_.Res, err
-}
-
-// SocketProvider implements the POSIX sockets API.
-type SocketProvider interface {
- // Requests a socket with the specified parameters. Values for `code` are defined in
- // errno.h.
- Socket(domain int16, type_ int16, protocol int16) (int16, _zx.Socket, error)
- // Retrieves information about the address of a node and/or service. The number of valid
- // results in `res` is given by the `count` return value.
- GetAddrInfo(node *string, service *string, hints *AddrInfoHints) (AddrInfoStatus, uint32, [4]AddrInfo, error)
-}
-
-type SocketProviderTransitionalBase struct{}
-
-type SocketProviderInterfaceRequest _bindings.InterfaceRequest
-
-func NewSocketProviderInterfaceRequest() (SocketProviderInterfaceRequest, *SocketProviderInterface, error) {
- req, cli, err := _bindings.NewInterfaceRequest()
- return SocketProviderInterfaceRequest(req), (*SocketProviderInterface)(cli), err
-}
-
-// Implements ServiceRequest.
-func (_ SocketProviderInterfaceRequest) Name() string {
- return "fuchsia.net.SocketProvider"
-}
-func (c SocketProviderInterfaceRequest) ToChannel() _zx.Channel {
- return c.Channel
-}
-
-const SocketProviderName = "fuchsia.net.SocketProvider"
-
-type SocketProviderStub struct {
- Impl SocketProvider
-}
-
-func (s_ *SocketProviderStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
- switch ordinal_ {
- case SocketProviderSocketOrdinal:
- in_ := socketProviderSocketRequest{}
- if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
- }
- code, s, err_ := s_.Impl.Socket(in_.Domain, in_.Type, in_.Protocol)
- out_ := socketProviderSocketResponse{}
- out_.Code = code
- out_.S = s
- return &out_, err_
- case SocketProviderGetAddrInfoOrdinal:
- in_ := socketProviderGetAddrInfoRequest{}
- if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
- return nil, err_
- }
- status, nres, res, err_ := s_.Impl.GetAddrInfo(in_.Node, in_.Service, in_.Hints)
- out_ := socketProviderGetAddrInfoResponse{}
- out_.Status = status
- out_.Nres = nres
- out_.Res = res
- return &out_, err_
- }
- return nil, _bindings.ErrUnknownOrdinal
-}
-
-type SocketProviderService struct {
- _bindings.BindingSet
-}
-
-func (s *SocketProviderService) Add(impl SocketProvider, c _zx.Channel, onError func(error)) (_bindings.BindingKey, error) {
- return s.BindingSet.Add(&SocketProviderStub{Impl: impl}, c, onError)
-}
-
-func (s *SocketProviderService) EventProxyFor(key _bindings.BindingKey) (*SocketProviderEventProxy, bool) {
- pxy, err := s.BindingSet.ProxyFor(key)
- return (*SocketProviderEventProxy)(pxy), err
-}
-
-type SocketProviderEventProxy _bindings.ChannelProxy
-
-const (
- SocketControlBindOrdinal uint64 = 2092731140 << 32
- SocketControlBindGenOrdinal uint64 = 2092731140 << 32
- SocketControlConnectOrdinal uint64 = 345505709 << 32
- SocketControlConnectGenOrdinal uint64 = 345505709 << 32
- SocketControlListenOrdinal uint64 = 1117818704 << 32
- SocketControlListenGenOrdinal uint64 = 1117818704 << 32
- SocketControlAcceptOrdinal uint64 = 796734679 << 32
- SocketControlAcceptGenOrdinal uint64 = 796734679 << 32
- SocketControlCloseOrdinal uint64 = 506040350 << 32
- SocketControlCloseGenOrdinal uint64 = 506040350 << 32
- SocketControlGetSockNameOrdinal uint64 = 764939941 << 32
- SocketControlGetSockNameGenOrdinal uint64 = 764939941 << 32
- SocketControlGetPeerNameOrdinal uint64 = 472396488 << 32
- SocketControlGetPeerNameGenOrdinal uint64 = 472396488 << 32
- SocketControlSetSockOptOrdinal uint64 = 1365685084 << 32
- SocketControlSetSockOptGenOrdinal uint64 = 1365685084 << 32
- SocketControlGetSockOptOrdinal uint64 = 2132650507 << 32
- SocketControlGetSockOptGenOrdinal uint64 = 2132650507 << 32
- SocketControlIoctlOrdinal uint64 = 1157859964 << 32
- SocketControlIoctlGenOrdinal uint64 = 1157859964 << 32
-)
-
-type socketControlBindRequest struct {
+type controlBindRequest struct {
_ struct{} `fidl2:"s,16,0"`
- Addr []uint8 `fidl:"128" fidl2:"128"`
+ Addr []uint8
}
-var _msocketControlBindRequest = _bindings.CreateLazyMarshaler(socketControlBindRequest{})
+var _mcontrolBindRequest = _bindings.CreateLazyMarshaler(controlBindRequest{})
-func (msg *socketControlBindRequest) Marshaler() _bindings.Marshaler {
- return _msocketControlBindRequest
+func (msg *controlBindRequest) Marshaler() _bindings.Marshaler {
+ return _mcontrolBindRequest
}
-type socketControlBindResponse struct {
+type controlBindResponse struct {
_ struct{} `fidl2:"s,8,0"`
Code int16
}
-var _msocketControlBindResponse = _bindings.CreateLazyMarshaler(socketControlBindResponse{})
+var _mcontrolBindResponse = _bindings.CreateLazyMarshaler(controlBindResponse{})
-func (msg *socketControlBindResponse) Marshaler() _bindings.Marshaler {
- return _msocketControlBindResponse
+func (msg *controlBindResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolBindResponse
}
-type socketControlConnectRequest struct {
+type controlConnectRequest struct {
_ struct{} `fidl2:"s,16,0"`
- Addr []uint8 `fidl:"128" fidl2:"128"`
+ Addr []uint8
}
-var _msocketControlConnectRequest = _bindings.CreateLazyMarshaler(socketControlConnectRequest{})
+var _mcontrolConnectRequest = _bindings.CreateLazyMarshaler(controlConnectRequest{})
-func (msg *socketControlConnectRequest) Marshaler() _bindings.Marshaler {
- return _msocketControlConnectRequest
+func (msg *controlConnectRequest) Marshaler() _bindings.Marshaler {
+ return _mcontrolConnectRequest
}
-type socketControlConnectResponse struct {
+type controlConnectResponse struct {
_ struct{} `fidl2:"s,8,0"`
Code int16
}
-var _msocketControlConnectResponse = _bindings.CreateLazyMarshaler(socketControlConnectResponse{})
+var _mcontrolConnectResponse = _bindings.CreateLazyMarshaler(controlConnectResponse{})
-func (msg *socketControlConnectResponse) Marshaler() _bindings.Marshaler {
- return _msocketControlConnectResponse
+func (msg *controlConnectResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolConnectResponse
}
-type socketControlListenRequest struct {
+type controlListenRequest struct {
_ struct{} `fidl2:"s,8,0"`
Backlog int16
}
-var _msocketControlListenRequest = _bindings.CreateLazyMarshaler(socketControlListenRequest{})
+var _mcontrolListenRequest = _bindings.CreateLazyMarshaler(controlListenRequest{})
-func (msg *socketControlListenRequest) Marshaler() _bindings.Marshaler {
- return _msocketControlListenRequest
+func (msg *controlListenRequest) Marshaler() _bindings.Marshaler {
+ return _mcontrolListenRequest
}
-type socketControlListenResponse struct {
+type controlListenResponse struct {
_ struct{} `fidl2:"s,8,0"`
Code int16
}
-var _msocketControlListenResponse = _bindings.CreateLazyMarshaler(socketControlListenResponse{})
+var _mcontrolListenResponse = _bindings.CreateLazyMarshaler(controlListenResponse{})
-func (msg *socketControlListenResponse) Marshaler() _bindings.Marshaler {
- return _msocketControlListenResponse
+func (msg *controlListenResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolListenResponse
}
-type socketControlAcceptRequest struct {
+type controlAcceptRequest struct {
_ struct{} `fidl2:"s,8,0"`
Flags int16
}
-var _msocketControlAcceptRequest = _bindings.CreateLazyMarshaler(socketControlAcceptRequest{})
+var _mcontrolAcceptRequest = _bindings.CreateLazyMarshaler(controlAcceptRequest{})
-func (msg *socketControlAcceptRequest) Marshaler() _bindings.Marshaler {
- return _msocketControlAcceptRequest
+func (msg *controlAcceptRequest) Marshaler() _bindings.Marshaler {
+ return _mcontrolAcceptRequest
}
-type socketControlAcceptResponse struct {
+type controlAcceptResponse struct {
_ struct{} `fidl2:"s,8,0"`
Code int16
+ S ControlInterface `fidl:"*"`
}
-var _msocketControlAcceptResponse = _bindings.CreateLazyMarshaler(socketControlAcceptResponse{})
+var _mcontrolAcceptResponse = _bindings.CreateLazyMarshaler(controlAcceptResponse{})
-func (msg *socketControlAcceptResponse) Marshaler() _bindings.Marshaler {
- return _msocketControlAcceptResponse
+func (msg *controlAcceptResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolAcceptResponse
}
-type socketControlCloseResponse struct {
- _ struct{} `fidl2:"s,8,0"`
- Code int16
-}
-
-var _msocketControlCloseResponse = _bindings.CreateLazyMarshaler(socketControlCloseResponse{})
-
-func (msg *socketControlCloseResponse) Marshaler() _bindings.Marshaler {
- return _msocketControlCloseResponse
-}
-
-type socketControlGetSockNameResponse struct {
+type controlGetSockNameResponse struct {
_ struct{} `fidl2:"s,24,0"`
Code int16
- Addr []uint8 `fidl:"128" fidl2:"128"`
+ Addr []uint8
}
-var _msocketControlGetSockNameResponse = _bindings.CreateLazyMarshaler(socketControlGetSockNameResponse{})
+var _mcontrolGetSockNameResponse = _bindings.CreateLazyMarshaler(controlGetSockNameResponse{})
-func (msg *socketControlGetSockNameResponse) Marshaler() _bindings.Marshaler {
- return _msocketControlGetSockNameResponse
+func (msg *controlGetSockNameResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolGetSockNameResponse
}
-type socketControlGetPeerNameResponse struct {
+type controlGetPeerNameResponse struct {
_ struct{} `fidl2:"s,24,0"`
Code int16
- Addr []uint8 `fidl:"128" fidl2:"128"`
+ Addr []uint8
}
-var _msocketControlGetPeerNameResponse = _bindings.CreateLazyMarshaler(socketControlGetPeerNameResponse{})
+var _mcontrolGetPeerNameResponse = _bindings.CreateLazyMarshaler(controlGetPeerNameResponse{})
-func (msg *socketControlGetPeerNameResponse) Marshaler() _bindings.Marshaler {
- return _msocketControlGetPeerNameResponse
+func (msg *controlGetPeerNameResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolGetPeerNameResponse
}
-type socketControlSetSockOptRequest struct {
+type controlSetSockOptRequest struct {
_ struct{} `fidl2:"s,24,0"`
Level int16
Optname int16
- Optval []uint8 `fidl:"900" fidl2:"900"`
+ Optval []uint8
}
-var _msocketControlSetSockOptRequest = _bindings.CreateLazyMarshaler(socketControlSetSockOptRequest{})
+var _mcontrolSetSockOptRequest = _bindings.CreateLazyMarshaler(controlSetSockOptRequest{})
-func (msg *socketControlSetSockOptRequest) Marshaler() _bindings.Marshaler {
- return _msocketControlSetSockOptRequest
+func (msg *controlSetSockOptRequest) Marshaler() _bindings.Marshaler {
+ return _mcontrolSetSockOptRequest
}
-type socketControlSetSockOptResponse struct {
+type controlSetSockOptResponse struct {
_ struct{} `fidl2:"s,8,0"`
Code int16
}
-var _msocketControlSetSockOptResponse = _bindings.CreateLazyMarshaler(socketControlSetSockOptResponse{})
+var _mcontrolSetSockOptResponse = _bindings.CreateLazyMarshaler(controlSetSockOptResponse{})
-func (msg *socketControlSetSockOptResponse) Marshaler() _bindings.Marshaler {
- return _msocketControlSetSockOptResponse
+func (msg *controlSetSockOptResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolSetSockOptResponse
}
-type socketControlGetSockOptRequest struct {
+type controlGetSockOptRequest struct {
_ struct{} `fidl2:"s,8,0"`
Level int16
Optname int16
}
-var _msocketControlGetSockOptRequest = _bindings.CreateLazyMarshaler(socketControlGetSockOptRequest{})
+var _mcontrolGetSockOptRequest = _bindings.CreateLazyMarshaler(controlGetSockOptRequest{})
-func (msg *socketControlGetSockOptRequest) Marshaler() _bindings.Marshaler {
- return _msocketControlGetSockOptRequest
+func (msg *controlGetSockOptRequest) Marshaler() _bindings.Marshaler {
+ return _mcontrolGetSockOptRequest
}
-type socketControlGetSockOptResponse struct {
+type controlGetSockOptResponse struct {
_ struct{} `fidl2:"s,24,0"`
Code int16
- Optval []uint8 `fidl:"900" fidl2:"900"`
+ Optval []uint8
}
-var _msocketControlGetSockOptResponse = _bindings.CreateLazyMarshaler(socketControlGetSockOptResponse{})
+var _mcontrolGetSockOptResponse = _bindings.CreateLazyMarshaler(controlGetSockOptResponse{})
-func (msg *socketControlGetSockOptResponse) Marshaler() _bindings.Marshaler {
- return _msocketControlGetSockOptResponse
+func (msg *controlGetSockOptResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolGetSockOptResponse
}
-type socketControlIoctlRequest struct {
+type controlIoctlPosixRequest struct {
_ struct{} `fidl2:"s,24,0"`
Req int16
- In []uint8 `fidl:"900" fidl2:"900"`
+ In []uint8
}
-var _msocketControlIoctlRequest = _bindings.CreateLazyMarshaler(socketControlIoctlRequest{})
+var _mcontrolIoctlPosixRequest = _bindings.CreateLazyMarshaler(controlIoctlPosixRequest{})
-func (msg *socketControlIoctlRequest) Marshaler() _bindings.Marshaler {
- return _msocketControlIoctlRequest
+func (msg *controlIoctlPosixRequest) Marshaler() _bindings.Marshaler {
+ return _mcontrolIoctlPosixRequest
}
-type socketControlIoctlResponse struct {
+type controlIoctlPosixResponse struct {
_ struct{} `fidl2:"s,24,0"`
Code int16
- Out []uint8 `fidl:"900" fidl2:"900"`
+ Out []uint8
}
-var _msocketControlIoctlResponse = _bindings.CreateLazyMarshaler(socketControlIoctlResponse{})
+var _mcontrolIoctlPosixResponse = _bindings.CreateLazyMarshaler(controlIoctlPosixResponse{})
-func (msg *socketControlIoctlResponse) Marshaler() _bindings.Marshaler {
- return _msocketControlIoctlResponse
+func (msg *controlIoctlPosixResponse) Marshaler() _bindings.Marshaler {
+ return _mcontrolIoctlPosixResponse
}
-type SocketControlInterface _bindings.SocketControlProxy
+type ControlInterface _bindings.ChannelProxy
+
+// Create another connection to the same remote object.
+//
+// `flags` may be any of:
+// - OPEN_RIGHT_*
+// - OPEN_FLAG_APPEND
+// - OPEN_FLAG_NO_REMOTE
+// - OPEN_FLAG_DESCRIBE
+// - CLONE_FLAG_SAME_RIGHTS
+//
+// All other flags are ignored.
+//
+// The OPEN_RIGHT_* bits in `flags` request corresponding rights over the resulting
+// cloned object.
+// The cloned object must have rights less than or equal to the original object.
+// Alternatively, pass CLONE_FLAG_SAME_RIGHTS to inherit the rights on the source connection.
+// It is invalid to pass any of the OPEN_RIGHT_* flags together with CLONE_FLAG_SAME_RIGHTS.
+func (p *ControlInterface) Clone(flags uint32, object fuchsiaio.NodeInterfaceRequest) error {
+ req_ := &controlCloneRequest{
+ Flags: flags,
+ Object: object,
+ }
+ err := ((*_bindings.ChannelProxy)(p)).Send(ControlCloneOrdinal, req_)
+ return err
+}
+
+// Terminates connection with object.
+//
+// This method does not require any rights.
+func (p *ControlInterface) Close() (int32, error) {
+ var req_ _bindings.Message
+ resp_ := &controlCloseResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlCloseOrdinal, req_, resp_)
+ return resp_.S, err
+}
+
+// Returns extra information about the type of the object.
+// If the `Describe` operation fails, the connection is closed.
+//
+// This method does not require any rights.
+func (p *ControlInterface) Describe() (fuchsiaio.NodeInfo, error) {
+ var req_ _bindings.Message
+ resp_ := &controlDescribeResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlDescribeOrdinal, req_, resp_)
+ return resp_.Info, err
+}
+
+// An event produced eagerly by a FIDL server if requested by `OPEN_FLAG_DESCRIBE`.
+//
+// Indicates the success or failure of the open operation, and optionally describes the
+// object. If the status is `ZX_OK`, `info` contains descriptive information about the object
+// (the same as would be returned by `Describe`).
+func (p *ControlInterface) ExpectOnOpen() (int32, *fuchsiaio.NodeInfo, error) {
+ resp_ := &controlOnOpenResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Recv(ControlOnOpenOrdinal, resp_)
+ return resp_.S, resp_.Info, err
+}
+
+// Synchronizes updates to the node to the underlying media, if it exists.
+//
+// This method does not require any rights.
+func (p *ControlInterface) Sync() (int32, error) {
+ var req_ _bindings.Message
+ resp_ := &controlSyncResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlSyncOrdinal, req_, resp_)
+ return resp_.S, err
+}
+
+// Acquires information about the node.
+//
+// This method does not require any rights.
+func (p *ControlInterface) GetAttr() (int32, fuchsiaio.NodeAttributes, error) {
+ var req_ _bindings.Message
+ resp_ := &controlGetAttrResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlGetAttrOrdinal, req_, resp_)
+ return resp_.S, resp_.Attributes, err
+}
+
+// Updates information about the node.
+// `flags` may be any of NODE_ATTRIBUTE_FLAG_*.
+//
+// This method requires following rights: OPEN_RIGHT_WRITABLE.
+func (p *ControlInterface) SetAttr(flags uint32, attributes fuchsiaio.NodeAttributes) (int32, error) {
+ req_ := &controlSetAttrRequest{
+ Flags: flags,
+ Attributes: attributes,
+ }
+ resp_ := &controlSetAttrResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlSetAttrOrdinal, req_, resp_)
+ return resp_.S, err
+}
+
+// Deprecated. Only for use with compatibility with devhost.
+func (p *ControlInterface) Ioctl(opcode uint32, maxOut uint64, handles []_zx.Handle, in []uint8) (int32, []_zx.Handle, []uint8, error) {
+ req_ := &controlIoctlRequest{
+ Opcode: opcode,
+ MaxOut: maxOut,
+ Handles: handles,
+ In: in,
+ }
+ resp_ := &controlIoctlResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlIoctlOrdinal, req_, resp_)
+ return resp_.S, resp_.Handles, resp_.Out, err
+}
// Sets the local address used for the socket.
-func (p *SocketControlInterface) Bind(addr []uint8) (int16, error) {
- req_ := &socketControlBindRequest{
+func (p *ControlInterface) Bind(addr []uint8) (int16, error) {
+ req_ := &controlBindRequest{
Addr: addr,
}
- resp_ := &socketControlBindResponse{}
- err := ((*_bindings.SocketControlProxy)(p)).Call(SocketControlBindOrdinal, req_, resp_)
+ resp_ := &controlBindResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlBindOrdinal, req_, resp_)
return resp_.Code, err
}
// Initiates a connection to a network endpoint.
-func (p *SocketControlInterface) Connect(addr []uint8) (int16, error) {
- req_ := &socketControlConnectRequest{
+func (p *ControlInterface) Connect(addr []uint8) (int16, error) {
+ req_ := &controlConnectRequest{
Addr: addr,
}
- resp_ := &socketControlConnectResponse{}
- err := ((*_bindings.SocketControlProxy)(p)).Call(SocketControlConnectOrdinal, req_, resp_)
+ resp_ := &controlConnectResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlConnectOrdinal, req_, resp_)
return resp_.Code, err
}
// Begin listening for new connections from network endpoints. At most `backlog` connections
// will be buffered.
-func (p *SocketControlInterface) Listen(backlog int16) (int16, error) {
- req_ := &socketControlListenRequest{
+func (p *ControlInterface) Listen(backlog int16) (int16, error) {
+ req_ := &controlListenRequest{
Backlog: backlog,
}
- resp_ := &socketControlListenResponse{}
- err := ((*_bindings.SocketControlProxy)(p)).Call(SocketControlListenOrdinal, req_, resp_)
+ resp_ := &controlListenResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlListenOrdinal, req_, resp_)
return resp_.Code, err
}
// Accepts an incoming connection from a network endpoint.
-func (p *SocketControlInterface) Accept(flags int16) (int16, error) {
- req_ := &socketControlAcceptRequest{
+func (p *ControlInterface) Accept(flags int16) (int16, ControlInterface, error) {
+ req_ := &controlAcceptRequest{
Flags: flags,
}
- resp_ := &socketControlAcceptResponse{}
- err := ((*_bindings.SocketControlProxy)(p)).Call(SocketControlAcceptOrdinal, req_, resp_)
- return resp_.Code, err
-}
-
-// Closes the socket.
-func (p *SocketControlInterface) Close() (int16, error) {
- var req_ _bindings.Message
- resp_ := &socketControlCloseResponse{}
- err := ((*_bindings.SocketControlProxy)(p)).Call(SocketControlCloseOrdinal, req_, resp_)
- return resp_.Code, err
+ resp_ := &controlAcceptResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlAcceptOrdinal, req_, resp_)
+ return resp_.Code, resp_.S, err
}
// Retrieves the local socket address.
-func (p *SocketControlInterface) GetSockName() (int16, []uint8, error) {
+func (p *ControlInterface) GetSockName() (int16, []uint8, error) {
var req_ _bindings.Message
- resp_ := &socketControlGetSockNameResponse{}
- err := ((*_bindings.SocketControlProxy)(p)).Call(SocketControlGetSockNameOrdinal, req_, resp_)
+ resp_ := &controlGetSockNameResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlGetSockNameOrdinal, req_, resp_)
return resp_.Code, resp_.Addr, err
}
// Retrieves the remote socket address.
-func (p *SocketControlInterface) GetPeerName() (int16, []uint8, error) {
+func (p *ControlInterface) GetPeerName() (int16, []uint8, error) {
var req_ _bindings.Message
- resp_ := &socketControlGetPeerNameResponse{}
- err := ((*_bindings.SocketControlProxy)(p)).Call(SocketControlGetPeerNameOrdinal, req_, resp_)
+ resp_ := &controlGetPeerNameResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlGetPeerNameOrdinal, req_, resp_)
return resp_.Code, resp_.Addr, err
}
// Sets a socket option. TODO(NET-1699): link to description of supported socket options.
-func (p *SocketControlInterface) SetSockOpt(level int16, optname int16, optval []uint8) (int16, error) {
- req_ := &socketControlSetSockOptRequest{
+func (p *ControlInterface) SetSockOpt(level int16, optname int16, optval []uint8) (int16, error) {
+ req_ := &controlSetSockOptRequest{
Level: level,
Optname: optname,
Optval: optval,
}
- resp_ := &socketControlSetSockOptResponse{}
- err := ((*_bindings.SocketControlProxy)(p)).Call(SocketControlSetSockOptOrdinal, req_, resp_)
+ resp_ := &controlSetSockOptResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlSetSockOptOrdinal, req_, resp_)
return resp_.Code, err
}
-// Retrieves the current value of a socket option. TODO(NET-1699): link to description of
-// supported socket options.
-func (p *SocketControlInterface) GetSockOpt(level int16, optname int16) (int16, []uint8, error) {
- req_ := &socketControlGetSockOptRequest{
+// Retrieves the current value of a socket option.
+func (p *ControlInterface) GetSockOpt(level int16, optname int16) (int16, []uint8, error) {
+ req_ := &controlGetSockOptRequest{
Level: level,
Optname: optname,
}
- resp_ := &socketControlGetSockOptResponse{}
- err := ((*_bindings.SocketControlProxy)(p)).Call(SocketControlGetSockOptOrdinal, req_, resp_)
+ resp_ := &controlGetSockOptResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlGetSockOptOrdinal, req_, resp_)
return resp_.Code, resp_.Optval, err
}
// Runs operations (e.g., get the receive timestamp of the last packet) on the socket.
-func (p *SocketControlInterface) Ioctl(req int16, in []uint8) (int16, []uint8, error) {
- req_ := &socketControlIoctlRequest{
+func (p *ControlInterface) IoctlPosix(req int16, in []uint8) (int16, []uint8, error) {
+ req_ := &controlIoctlPosixRequest{
Req: req,
In: in,
}
- resp_ := &socketControlIoctlResponse{}
- err := ((*_bindings.SocketControlProxy)(p)).Call(SocketControlIoctlOrdinal, req_, resp_)
+ resp_ := &controlIoctlPosixResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ControlIoctlPosixOrdinal, req_, resp_)
return resp_.Code, resp_.Out, err
}
// The control plane for a network socket. Once a socket has been retrieved from a
-// `SocketProvider`, this interface is then used to further configure and use the socket.
+// `Provider`, this interface is then used to further configure and use the socket.
// This interface is essentially POSIX. Its implementation must support Linux-specific arguments
// to {Get,Set}SockOpt.
-type SocketControl interface {
+type Control interface {
+ // Create another connection to the same remote object.
+ //
+ // `flags` may be any of:
+ // - OPEN_RIGHT_*
+ // - OPEN_FLAG_APPEND
+ // - OPEN_FLAG_NO_REMOTE
+ // - OPEN_FLAG_DESCRIBE
+ // - CLONE_FLAG_SAME_RIGHTS
+ //
+ // All other flags are ignored.
+ //
+ // The OPEN_RIGHT_* bits in `flags` request corresponding rights over the resulting
+ // cloned object.
+ // The cloned object must have rights less than or equal to the original object.
+ // Alternatively, pass CLONE_FLAG_SAME_RIGHTS to inherit the rights on the source connection.
+ // It is invalid to pass any of the OPEN_RIGHT_* flags together with CLONE_FLAG_SAME_RIGHTS.
+ Clone(flags uint32, object fuchsiaio.NodeInterfaceRequest) error
+ // Terminates connection with object.
+ //
+ // This method does not require any rights.
+ Close() (int32, error)
+ // Returns extra information about the type of the object.
+ // If the `Describe` operation fails, the connection is closed.
+ //
+ // This method does not require any rights.
+ Describe() (fuchsiaio.NodeInfo, error)
+ // An event produced eagerly by a FIDL server if requested by `OPEN_FLAG_DESCRIBE`.
+ //
+ // Indicates the success or failure of the open operation, and optionally describes the
+ // object. If the status is `ZX_OK`, `info` contains descriptive information about the object
+ // (the same as would be returned by `Describe`).
+ // Synchronizes updates to the node to the underlying media, if it exists.
+ //
+ // This method does not require any rights.
+ Sync() (int32, error)
+ // Acquires information about the node.
+ //
+ // This method does not require any rights.
+ GetAttr() (int32, fuchsiaio.NodeAttributes, error)
+ // Updates information about the node.
+ // `flags` may be any of NODE_ATTRIBUTE_FLAG_*.
+ //
+ // This method requires following rights: OPEN_RIGHT_WRITABLE.
+ SetAttr(flags uint32, attributes fuchsiaio.NodeAttributes) (int32, error)
+ // Deprecated. Only for use with compatibility with devhost.
+ Ioctl(opcode uint32, maxOut uint64, handles []_zx.Handle, in []uint8) (int32, []_zx.Handle, []uint8, error)
// Sets the local address used for the socket.
Bind(addr []uint8) (int16, error)
// Initiates a connection to a network endpoint.
@@ -1065,109 +613,157 @@
// will be buffered.
Listen(backlog int16) (int16, error)
// Accepts an incoming connection from a network endpoint.
- Accept(flags int16) (int16, error)
- // Closes the socket.
- Close() (int16, error)
+ Accept(flags int16) (int16, ControlInterface, error)
// Retrieves the local socket address.
GetSockName() (int16, []uint8, error)
// Retrieves the remote socket address.
GetPeerName() (int16, []uint8, error)
// Sets a socket option. TODO(NET-1699): link to description of supported socket options.
SetSockOpt(level int16, optname int16, optval []uint8) (int16, error)
- // Retrieves the current value of a socket option. TODO(NET-1699): link to description of
- // supported socket options.
+ // Retrieves the current value of a socket option.
GetSockOpt(level int16, optname int16) (int16, []uint8, error)
// Runs operations (e.g., get the receive timestamp of the last packet) on the socket.
- Ioctl(req int16, in []uint8) (int16, []uint8, error)
+ IoctlPosix(req int16, in []uint8) (int16, []uint8, error)
}
-type SocketControlTransitionalBase struct{}
+type ControlTransitionalBase struct{}
-type SocketControlStub struct {
- Impl SocketControl
+type ControlInterfaceRequest _bindings.InterfaceRequest
+
+func NewControlInterfaceRequest() (ControlInterfaceRequest, *ControlInterface, error) {
+ req, cli, err := _bindings.NewInterfaceRequest()
+ return ControlInterfaceRequest(req), (*ControlInterface)(cli), err
}
-func (s_ *SocketControlStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+type ControlStub struct {
+ Impl Control
+}
+
+func (s_ *ControlStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
switch ordinal_ {
- case SocketControlBindOrdinal:
- in_ := socketControlBindRequest{}
+ case ControlCloneOrdinal:
+ in_ := controlCloneRequest{}
+ if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+ return nil, err_
+ }
+ err_ := s_.Impl.Clone(in_.Flags, in_.Object)
+ return nil, err_
+ case ControlCloseOrdinal:
+ s, err_ := s_.Impl.Close()
+ out_ := controlCloseResponse{}
+ out_.S = s
+ return &out_, err_
+ case ControlDescribeOrdinal:
+ info, err_ := s_.Impl.Describe()
+ out_ := controlDescribeResponse{}
+ out_.Info = info
+ return &out_, err_
+ case ControlSyncOrdinal:
+ s, err_ := s_.Impl.Sync()
+ out_ := controlSyncResponse{}
+ out_.S = s
+ return &out_, err_
+ case ControlGetAttrOrdinal:
+ s, attributes, err_ := s_.Impl.GetAttr()
+ out_ := controlGetAttrResponse{}
+ out_.S = s
+ out_.Attributes = attributes
+ return &out_, err_
+ case ControlSetAttrOrdinal:
+ in_ := controlSetAttrRequest{}
+ if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+ return nil, err_
+ }
+ s, err_ := s_.Impl.SetAttr(in_.Flags, in_.Attributes)
+ out_ := controlSetAttrResponse{}
+ out_.S = s
+ return &out_, err_
+ case ControlIoctlOrdinal:
+ in_ := controlIoctlRequest{}
+ if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+ return nil, err_
+ }
+ s, handles, out, err_ := s_.Impl.Ioctl(in_.Opcode, in_.MaxOut, in_.Handles, in_.In)
+ out_ := controlIoctlResponse{}
+ out_.S = s
+ out_.Handles = handles
+ out_.Out = out
+ return &out_, err_
+ case ControlBindOrdinal:
+ in_ := controlBindRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
return nil, err_
}
code, err_ := s_.Impl.Bind(in_.Addr)
- out_ := socketControlBindResponse{}
+ out_ := controlBindResponse{}
out_.Code = code
return &out_, err_
- case SocketControlConnectOrdinal:
- in_ := socketControlConnectRequest{}
+ case ControlConnectOrdinal:
+ in_ := controlConnectRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
return nil, err_
}
code, err_ := s_.Impl.Connect(in_.Addr)
- out_ := socketControlConnectResponse{}
+ out_ := controlConnectResponse{}
out_.Code = code
return &out_, err_
- case SocketControlListenOrdinal:
- in_ := socketControlListenRequest{}
+ case ControlListenOrdinal:
+ in_ := controlListenRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
return nil, err_
}
code, err_ := s_.Impl.Listen(in_.Backlog)
- out_ := socketControlListenResponse{}
+ out_ := controlListenResponse{}
out_.Code = code
return &out_, err_
- case SocketControlAcceptOrdinal:
- in_ := socketControlAcceptRequest{}
+ case ControlAcceptOrdinal:
+ in_ := controlAcceptRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
return nil, err_
}
- code, err_ := s_.Impl.Accept(in_.Flags)
- out_ := socketControlAcceptResponse{}
+ code, s, err_ := s_.Impl.Accept(in_.Flags)
+ out_ := controlAcceptResponse{}
out_.Code = code
+ out_.S = s
return &out_, err_
- case SocketControlCloseOrdinal:
- code, err_ := s_.Impl.Close()
- out_ := socketControlCloseResponse{}
- out_.Code = code
- return &out_, err_
- case SocketControlGetSockNameOrdinal:
+ case ControlGetSockNameOrdinal:
code, addr, err_ := s_.Impl.GetSockName()
- out_ := socketControlGetSockNameResponse{}
+ out_ := controlGetSockNameResponse{}
out_.Code = code
out_.Addr = addr
return &out_, err_
- case SocketControlGetPeerNameOrdinal:
+ case ControlGetPeerNameOrdinal:
code, addr, err_ := s_.Impl.GetPeerName()
- out_ := socketControlGetPeerNameResponse{}
+ out_ := controlGetPeerNameResponse{}
out_.Code = code
out_.Addr = addr
return &out_, err_
- case SocketControlSetSockOptOrdinal:
- in_ := socketControlSetSockOptRequest{}
+ case ControlSetSockOptOrdinal:
+ in_ := controlSetSockOptRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
return nil, err_
}
code, err_ := s_.Impl.SetSockOpt(in_.Level, in_.Optname, in_.Optval)
- out_ := socketControlSetSockOptResponse{}
+ out_ := controlSetSockOptResponse{}
out_.Code = code
return &out_, err_
- case SocketControlGetSockOptOrdinal:
- in_ := socketControlGetSockOptRequest{}
+ case ControlGetSockOptOrdinal:
+ in_ := controlGetSockOptRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
return nil, err_
}
code, optval, err_ := s_.Impl.GetSockOpt(in_.Level, in_.Optname)
- out_ := socketControlGetSockOptResponse{}
+ out_ := controlGetSockOptResponse{}
out_.Code = code
out_.Optval = optval
return &out_, err_
- case SocketControlIoctlOrdinal:
- in_ := socketControlIoctlRequest{}
+ case ControlIoctlPosixOrdinal:
+ in_ := controlIoctlPosixRequest{}
if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
return nil, err_
}
- code, out, err_ := s_.Impl.Ioctl(in_.Req, in_.In)
- out_ := socketControlIoctlResponse{}
+ code, out, err_ := s_.Impl.IoctlPosix(in_.Req, in_.In)
+ out_ := controlIoctlPosixResponse{}
out_.Code = code
out_.Out = out
return &out_, err_
@@ -1175,4 +771,131 @@
return nil, _bindings.ErrUnknownOrdinal
}
-type SocketControlEventProxy _bindings.SocketControlProxy
+type ControlService struct {
+ _bindings.BindingSet
+}
+
+func (s *ControlService) Add(impl Control, c _zx.Channel, onError func(error)) (_bindings.BindingKey, error) {
+ return s.BindingSet.Add(&ControlStub{Impl: impl}, c, onError)
+}
+
+func (s *ControlService) EventProxyFor(key _bindings.BindingKey) (*ControlEventProxy, bool) {
+ pxy, err := s.BindingSet.ProxyFor(key)
+ return (*ControlEventProxy)(pxy), err
+}
+
+type ControlEventProxy _bindings.ChannelProxy
+
+func (p *ControlEventProxy) OnOpen(s int32, info *fuchsiaio.NodeInfo) error {
+ event_ := &controlOnOpenResponse{
+ S: s,
+ Info: info,
+ }
+ return ((*_bindings.ChannelProxy)(p)).Send(ControlOnOpenOrdinal, event_)
+}
+
+const (
+ ProviderSocketOrdinal uint64 = 1292318594 << 32
+ ProviderSocketGenOrdinal uint64 = 1292318594 << 32
+)
+
+type providerSocketRequest struct {
+ _ struct{} `fidl2:"s,8,0"`
+ Domain int16
+ Type int16
+ Protocol int16
+}
+
+var _mproviderSocketRequest = _bindings.CreateLazyMarshaler(providerSocketRequest{})
+
+func (msg *providerSocketRequest) Marshaler() _bindings.Marshaler {
+ return _mproviderSocketRequest
+}
+
+type providerSocketResponse struct {
+ _ struct{} `fidl2:"s,8,0"`
+ Code int16
+ S ControlInterface `fidl:"*"`
+}
+
+var _mproviderSocketResponse = _bindings.CreateLazyMarshaler(providerSocketResponse{})
+
+func (msg *providerSocketResponse) Marshaler() _bindings.Marshaler {
+ return _mproviderSocketResponse
+}
+
+type ProviderInterface _bindings.ChannelProxy
+
+// Requests a socket with the specified parameters. Values for `code` are defined in
+// errno.h.
+func (p *ProviderInterface) Socket(domain int16, type_ int16, protocol int16) (int16, ControlInterface, error) {
+ req_ := &providerSocketRequest{
+ Domain: domain,
+ Type: type_,
+ Protocol: protocol,
+ }
+ resp_ := &providerSocketResponse{}
+ err := ((*_bindings.ChannelProxy)(p)).Call(ProviderSocketOrdinal, req_, resp_)
+ return resp_.Code, resp_.S, err
+}
+
+// Provider implements the POSIX sockets API.
+type Provider interface {
+ // Requests a socket with the specified parameters. Values for `code` are defined in
+ // errno.h.
+ Socket(domain int16, type_ int16, protocol int16) (int16, ControlInterface, error)
+}
+
+type ProviderTransitionalBase struct{}
+
+type ProviderInterfaceRequest _bindings.InterfaceRequest
+
+func NewProviderInterfaceRequest() (ProviderInterfaceRequest, *ProviderInterface, error) {
+ req, cli, err := _bindings.NewInterfaceRequest()
+ return ProviderInterfaceRequest(req), (*ProviderInterface)(cli), err
+}
+
+// Implements ServiceRequest.
+func (_ ProviderInterfaceRequest) Name() string {
+ return "fuchsia.posix.socket.Provider"
+}
+func (c ProviderInterfaceRequest) ToChannel() _zx.Channel {
+ return c.Channel
+}
+
+const ProviderName = "fuchsia.posix.socket.Provider"
+
+type ProviderStub struct {
+ Impl Provider
+}
+
+func (s_ *ProviderStub) Dispatch(ordinal_ uint64, data_ []byte, handles_ []_zx.Handle) (_bindings.Message, error) {
+ switch ordinal_ {
+ case ProviderSocketOrdinal:
+ in_ := providerSocketRequest{}
+ if _, _, err_ := _bindings.Unmarshal(data_, handles_, &in_); err_ != nil {
+ return nil, err_
+ }
+ code, s, err_ := s_.Impl.Socket(in_.Domain, in_.Type, in_.Protocol)
+ out_ := providerSocketResponse{}
+ out_.Code = code
+ out_.S = s
+ return &out_, err_
+ }
+ return nil, _bindings.ErrUnknownOrdinal
+}
+
+type ProviderService struct {
+ _bindings.BindingSet
+}
+
+func (s *ProviderService) Add(impl Provider, c _zx.Channel, onError func(error)) (_bindings.BindingKey, error) {
+ return s.BindingSet.Add(&ProviderStub{Impl: impl}, c, onError)
+}
+
+func (s *ProviderService) EventProxyFor(key _bindings.BindingKey) (*ProviderEventProxy, bool) {
+ pxy, err := s.BindingSet.ProxyFor(key)
+ return (*ProviderEventProxy)(pxy), err
+}
+
+type ProviderEventProxy _bindings.ChannelProxy
diff --git a/src/syscall/zx/types.go b/src/syscall/zx/types.go
index 2ced54e..c365761 100644
--- a/src/syscall/zx/types.go
+++ b/src/syscall/zx/types.go
@@ -62,6 +62,15 @@
Props uint32
} // zx_info_handle_basic_t
+type InfoSocket struct {
+ Options uint32
+ RXBufMax int
+ RXBufSize int
+ RXBufAvailable int
+ TXBufMax int
+ TXBufSize int
+} // zx_info_socket_t
+
type RrecSelf struct {
Type uint16 // ZX_RREC_SELF
Subtype uint16
@@ -377,6 +386,21 @@
ObjectInfoResourceChildren
ObjectInfoResourceRecords
ObjectInfoVMAR
+ ObjectInfoJobChildren
+ ObjectInfoJobProcesses
+ ObjectInfoThread
+ ObjectInfoThreadExceptionReport
+ ObjectInfoTaskStats
+ ObjectInfoProcessMaps
+ ObjectInfoProcessVMOs
+ ObjectInfoThreadStats
+ ObjectInfoCpUStats
+ ObjectInfoKMemStats
+ ObjectInfoResource
+ ObjectInfoHandleCount
+ ObjectInfoBTI
+ ObjectInfoProcessHandleStats
+ ObjectInfoSocket
)
const (
diff --git a/src/syscall/zx/zxsocket/socket.go b/src/syscall/zx/zxsocket/socket.go
index 2c1b8b7..c02f29b 100644
--- a/src/syscall/zx/zxsocket/socket.go
+++ b/src/syscall/zx/zxsocket/socket.go
@@ -8,6 +8,7 @@
import (
"io"
+ "strconv"
"syscall"
"syscall/zx"
"syscall/zx/fdio"
@@ -15,31 +16,50 @@
"syscall/zx/mxnet"
"syscall/zx/net"
"syscall/zx/zxwait"
+ "unsafe"
)
// Socket is an fdio.FDIO socket.
type Socket struct {
- net.SocketControlInterface
+ net.ControlInterface
+ socket zx.Socket
dgram bool
flags uint32
}
-func NewSocket(s zx.Socket) *Socket {
- return &Socket{
- SocketControlInterface: net.SocketControlInterface{
- Socket: s,
- },
+func NewSocket(control net.ControlInterface) (*Socket, error) {
+ info, err := control.Describe()
+ if err != nil {
+ return nil, err
+ }
+ switch w := info.Which(); w {
+ case fidlIo.NodeInfoService, fidlIo.NodeInfoFile, fidlIo.NodeInfoDirectory, fidlIo.NodeInfoPipe, fidlIo.NodeInfoVmofile, fidlIo.NodeInfoDevice, fidlIo.NodeInfoTty:
+ return nil, &zx.Error{Status: zx.ErrInternal, Text: "zxsocket.NewSocket"}
+ case fidlIo.NodeInfoSocket:
+ socket := info.Socket.Socket
+
+ var info zx.InfoSocket
+ if err := socket.Handle().GetInfo(zx.ObjectInfoSocket, unsafe.Pointer(&info), uint(unsafe.Sizeof(info))); err != nil {
+ return nil, err
+ }
+ return &Socket{
+ ControlInterface: control,
+ socket: socket,
+ dgram: info.Options&zx.SocketDatagram != 0,
+ }, nil
+ default:
+ panic("unknown node info tag " + strconv.FormatInt(int64(w), 10))
}
}
func (s *Socket) Wait(signals zx.Signals, timeout zx.Time) (zx.Signals, error) {
- return zxwait.Wait(zx.Handle(s.Socket), signals, timeout)
+ return zxwait.Wait(*s.socket.Handle(), signals, timeout)
}
// Handles returns the underlying handles for this Socket.
func (s *Socket) Handles() []zx.Handle {
- return []zx.Handle{zx.Handle(s.Socket)}
+ return []zx.Handle{*s.ControlInterface.Handle(), *s.socket.Handle()}
}
// Clone makes a clone of the object.
@@ -49,13 +69,13 @@
// Close closes the object.
func (s *Socket) Close() error {
- if code, err := s.SocketControlInterface.Close(); err != nil {
+ if code, err := s.ControlInterface.Close(); err != nil {
return err
} else if code != 0 {
return syscall.Errno(code)
}
- return s.Socket.Close()
+ return s.socket.Close()
}
// Sync implements fdio.FDIO for Socket.
@@ -75,7 +95,7 @@
// Ioctl implements fdio.FDIO for Socket.
func (s *Socket) Ioctl(op uint32, max uint64, in []byte, _ []zx.Handle) ([]byte, []zx.Handle, error) {
- code, out, err := s.SocketControlInterface.Ioctl(int16(op), in)
+ code, out, err := s.IoctlPosix(int16(op), in)
if err != nil {
return nil, nil, err
}
@@ -94,7 +114,7 @@
}
// c.f. zxs_recvmsg_stream in zircon/system/ulib/zxs/zxs.cpp
for {
- n, err := s.Socket.Read(data, 0)
+ n, err := s.socket.Read(data, 0)
if err != nil {
if err, ok := err.(*zx.Error); ok {
switch err.Status {
@@ -140,7 +160,7 @@
// c.f. zxsio_sendmsg_stream
var total int
for {
- n, err := s.Socket.Write(data, 0)
+ n, err := s.socket.Write(data, 0)
total += n
if err != nil {
if err, ok := err.(*zx.Error); ok {
@@ -229,7 +249,7 @@
func (s *Socket) recvMsg(data []byte) (int, error) {
for {
- n, err := s.Socket.Read(data, 0)
+ n, err := s.socket.Read(data, 0)
if err != nil {
if err, ok := err.(*zx.Error); ok {
switch err.Status {
@@ -265,7 +285,7 @@
copy(data[mxnet.SockmsgHdrLen:], b)
for {
- n, err := s.Socket.Write(data, 0)
+ n, err := s.socket.Write(data, 0)
if err != nil {
if err, ok := err.(*zx.Error); ok {
switch err.Status {
@@ -295,9 +315,3 @@
return len(b), nil
}
}
-
-// SetDgram marks a *Socket as a datagram (UDP) socket.
-// A different protocol is used internally.
-func (s *Socket) SetDgram() {
- s.dgram = true
-}