aboutsummaryrefslogtreecommitdiff
path: root/src/transport/ipc
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2018-06-12 20:05:34 -0700
committerGarrett D'Amore <garrett@damore.org>2018-06-13 18:01:52 -0700
commitda2aac4a6eb10af88e3938068e24c58aea1832b1 (patch)
treefb0676be5426ed1510945b7e7fe3d09eb45333a7 /src/transport/ipc
parent61ffae5e3649897776c26799ccaaa35d578ba816 (diff)
downloadnng-da2aac4a6eb10af88e3938068e24c58aea1832b1.tar.gz
nng-da2aac4a6eb10af88e3938068e24c58aea1832b1.tar.bz2
nng-da2aac4a6eb10af88e3938068e24c58aea1832b1.zip
fixes #540 nni_ep_opttype serves no purpose
fixes #538 setopt should have an explicit chkopt routine fixes #537 Internal TCP API needs better name separation fixes #524 Option types should be "typed" This is a rework of the option management code, to make it both clearer and to prepare for further work to break up endpoints. This reduces a certain amount of dead or redundant code, and actually saves cycles when setting options, as some loops were not terminated that should have been.
Diffstat (limited to 'src/transport/ipc')
-rw-r--r--src/transport/ipc/ipc.c451
1 files changed, 232 insertions, 219 deletions
diff --git a/src/transport/ipc/ipc.c b/src/transport/ipc/ipc.c
index 6191dea6..c5c7032a 100644
--- a/src/transport/ipc/ipc.c
+++ b/src/transport/ipc/ipc.c
@@ -20,11 +20,11 @@
// Windows named pipes. Other platforms could use other mechanisms,
// but all implementations on the platform must use the same mechanism.
-typedef struct nni_ipc_pipe nni_ipc_pipe;
-typedef struct nni_ipc_ep nni_ipc_ep;
+typedef struct ipc_pipe ipc_pipe;
+typedef struct ipc_ep ipc_ep;
-// nni_ipc_pipe is one end of an IPC connection.
-struct nni_ipc_pipe {
+// ipc_pipe is one end of an IPC connection.
+struct ipc_pipe {
nni_plat_ipc_pipe *ipp;
uint16_t peer;
uint16_t proto;
@@ -48,7 +48,7 @@ struct nni_ipc_pipe {
nni_mtx mtx;
};
-struct nni_ipc_ep {
+struct ipc_ep {
nni_sockaddr sa;
nni_plat_ipc_ep *iep;
uint16_t proto;
@@ -58,28 +58,28 @@ struct nni_ipc_ep {
nni_mtx mtx;
};
-static void nni_ipc_pipe_dosend(nni_ipc_pipe *, nni_aio *);
-static void nni_ipc_pipe_dorecv(nni_ipc_pipe *);
-static void nni_ipc_pipe_send_cb(void *);
-static void nni_ipc_pipe_recv_cb(void *);
-static void nni_ipc_pipe_nego_cb(void *);
-static void nni_ipc_ep_cb(void *);
+static void ipc_pipe_dosend(ipc_pipe *, nni_aio *);
+static void ipc_pipe_dorecv(ipc_pipe *);
+static void ipc_pipe_send_cb(void *);
+static void ipc_pipe_recv_cb(void *);
+static void ipc_pipe_nego_cb(void *);
+static void ipc_ep_cb(void *);
static int
-nni_ipc_tran_init(void)
+ipc_tran_init(void)
{
return (0);
}
static void
-nni_ipc_tran_fini(void)
+ipc_tran_fini(void)
{
}
static void
-nni_ipc_pipe_close(void *arg)
+ipc_pipe_close(void *arg)
{
- nni_ipc_pipe *pipe = arg;
+ ipc_pipe *pipe = arg;
nni_aio_close(pipe->rxaio);
nni_aio_close(pipe->txaio);
@@ -89,9 +89,9 @@ nni_ipc_pipe_close(void *arg)
}
static void
-nni_ipc_pipe_stop(void *arg)
+ipc_pipe_stop(void *arg)
{
- nni_ipc_pipe *pipe = arg;
+ ipc_pipe *pipe = arg;
nni_aio_stop(pipe->rxaio);
nni_aio_stop(pipe->txaio);
@@ -99,9 +99,9 @@ nni_ipc_pipe_stop(void *arg)
}
static void
-nni_ipc_pipe_fini(void *arg)
+ipc_pipe_fini(void *arg)
{
- nni_ipc_pipe *pipe = arg;
+ ipc_pipe *pipe = arg;
nni_aio_fini(pipe->rxaio);
nni_aio_fini(pipe->txaio);
@@ -117,19 +117,19 @@ nni_ipc_pipe_fini(void *arg)
}
static int
-nni_ipc_pipe_init(nni_ipc_pipe **pipep, nni_ipc_ep *ep, void *ipp)
+ipc_pipe_init(ipc_pipe **pipep, ipc_ep *ep, void *ipp)
{
- nni_ipc_pipe *p;
- int rv;
+ ipc_pipe *p;
+ int rv;
if ((p = NNI_ALLOC_STRUCT(p)) == NULL) {
return (NNG_ENOMEM);
}
nni_mtx_init(&p->mtx);
- if (((rv = nni_aio_init(&p->txaio, nni_ipc_pipe_send_cb, p)) != 0) ||
- ((rv = nni_aio_init(&p->rxaio, nni_ipc_pipe_recv_cb, p)) != 0) ||
- ((rv = nni_aio_init(&p->negaio, nni_ipc_pipe_nego_cb, p)) != 0)) {
- nni_ipc_pipe_fini(p);
+ if (((rv = nni_aio_init(&p->txaio, ipc_pipe_send_cb, p)) != 0) ||
+ ((rv = nni_aio_init(&p->rxaio, ipc_pipe_recv_cb, p)) != 0) ||
+ ((rv = nni_aio_init(&p->negaio, ipc_pipe_nego_cb, p)) != 0)) {
+ ipc_pipe_fini(p);
return (rv);
}
nni_aio_list_init(&p->sendq);
@@ -146,9 +146,9 @@ nni_ipc_pipe_init(nni_ipc_pipe **pipep, nni_ipc_ep *ep, void *ipp)
}
static void
-nni_ipc_cancel_start(nni_aio *aio, int rv)
+ipc_cancel_start(nni_aio *aio, int rv)
{
- nni_ipc_pipe *pipe = nni_aio_get_prov_data(aio);
+ ipc_pipe *pipe = nni_aio_get_prov_data(aio);
nni_mtx_lock(&pipe->mtx);
if (pipe->user_negaio != aio) {
@@ -163,11 +163,11 @@ nni_ipc_cancel_start(nni_aio *aio, int rv)
}
static void
-nni_ipc_pipe_nego_cb(void *arg)
+ipc_pipe_nego_cb(void *arg)
{
- nni_ipc_pipe *pipe = arg;
- nni_aio * aio = pipe->negaio;
- int rv;
+ ipc_pipe *pipe = arg;
+ nni_aio * aio = pipe->negaio;
+ int rv;
nni_mtx_lock(&pipe->mtx);
if ((rv = nni_aio_result(aio)) != 0) {
@@ -220,14 +220,14 @@ done:
}
static void
-nni_ipc_pipe_send_cb(void *arg)
+ipc_pipe_send_cb(void *arg)
{
- nni_ipc_pipe *pipe = arg;
- nni_aio * aio;
- nni_aio * txaio = pipe->txaio;
- nni_msg * msg;
- int rv;
- size_t n;
+ ipc_pipe *pipe = arg;
+ nni_aio * aio;
+ nni_aio * txaio = pipe->txaio;
+ nni_msg * msg;
+ int rv;
+ size_t n;
nni_mtx_lock(&pipe->mtx);
aio = nni_list_first(&pipe->sendq);
@@ -255,7 +255,7 @@ nni_ipc_pipe_send_cb(void *arg)
nni_aio_list_remove(aio);
if (!nni_list_empty(&pipe->sendq)) {
// schedule next send
- nni_ipc_pipe_dosend(pipe, nni_list_first(&pipe->sendq));
+ ipc_pipe_dosend(pipe, nni_list_first(&pipe->sendq));
}
nni_mtx_unlock(&pipe->mtx);
@@ -267,14 +267,14 @@ nni_ipc_pipe_send_cb(void *arg)
}
static void
-nni_ipc_pipe_recv_cb(void *arg)
+ipc_pipe_recv_cb(void *arg)
{
- nni_ipc_pipe *pipe = arg;
- nni_aio * aio;
- int rv;
- size_t n;
- nni_msg * msg;
- nni_aio * rxaio = pipe->rxaio;
+ ipc_pipe *pipe = arg;
+ nni_aio * aio;
+ int rv;
+ size_t n;
+ nni_msg * msg;
+ nni_aio * rxaio = pipe->rxaio;
nni_mtx_lock(&pipe->mtx);
aio = nni_list_first(&pipe->recvq);
@@ -346,7 +346,7 @@ nni_ipc_pipe_recv_cb(void *arg)
msg = pipe->rxmsg;
pipe->rxmsg = NULL;
if (!nni_list_empty(&pipe->recvq)) {
- nni_ipc_pipe_dorecv(pipe);
+ ipc_pipe_dorecv(pipe);
}
nni_mtx_unlock(&pipe->mtx);
@@ -367,9 +367,9 @@ recv_error:
}
static void
-nni_ipc_cancel_tx(nni_aio *aio, int rv)
+ipc_cancel_tx(nni_aio *aio, int rv)
{
- nni_ipc_pipe *pipe = nni_aio_get_prov_data(aio);
+ ipc_pipe *pipe = nni_aio_get_prov_data(aio);
nni_mtx_lock(&pipe->mtx);
if (!nni_aio_list_active(aio)) {
@@ -390,7 +390,7 @@ nni_ipc_cancel_tx(nni_aio *aio, int rv)
}
static void
-nni_ipc_pipe_dosend(nni_ipc_pipe *pipe, nni_aio *aio)
+ipc_pipe_dosend(ipc_pipe *pipe, nni_aio *aio)
{
nni_aio *txaio;
nni_msg *msg;
@@ -425,31 +425,31 @@ nni_ipc_pipe_dosend(nni_ipc_pipe *pipe, nni_aio *aio)
}
static void
-nni_ipc_pipe_send(void *arg, nni_aio *aio)
+ipc_pipe_send(void *arg, nni_aio *aio)
{
- nni_ipc_pipe *pipe = arg;
- int rv;
+ ipc_pipe *pipe = arg;
+ int rv;
if (nni_aio_begin(aio) != 0) {
return;
}
nni_mtx_lock(&pipe->mtx);
- if ((rv = nni_aio_schedule(aio, nni_ipc_cancel_tx, pipe)) != 0) {
+ if ((rv = nni_aio_schedule(aio, ipc_cancel_tx, pipe)) != 0) {
nni_mtx_unlock(&pipe->mtx);
nni_aio_finish_error(aio, rv);
return;
}
nni_list_append(&pipe->sendq, aio);
if (nni_list_first(&pipe->sendq) == aio) {
- nni_ipc_pipe_dosend(pipe, aio);
+ ipc_pipe_dosend(pipe, aio);
}
nni_mtx_unlock(&pipe->mtx);
}
static void
-nni_ipc_cancel_rx(nni_aio *aio, int rv)
+ipc_cancel_rx(nni_aio *aio, int rv)
{
- nni_ipc_pipe *pipe = nni_aio_get_prov_data(aio);
+ ipc_pipe *pipe = nni_aio_get_prov_data(aio);
nni_mtx_lock(&pipe->mtx);
if (!nni_aio_list_active(aio)) {
@@ -470,7 +470,7 @@ nni_ipc_cancel_rx(nni_aio *aio, int rv)
}
static void
-nni_ipc_pipe_dorecv(nni_ipc_pipe *pipe)
+ipc_pipe_dorecv(ipc_pipe *pipe)
{
nni_aio *rxaio;
nni_iov iov;
@@ -486,17 +486,17 @@ nni_ipc_pipe_dorecv(nni_ipc_pipe *pipe)
}
static void
-nni_ipc_pipe_recv(void *arg, nni_aio *aio)
+ipc_pipe_recv(void *arg, nni_aio *aio)
{
- nni_ipc_pipe *pipe = arg;
- int rv;
+ ipc_pipe *pipe = arg;
+ int rv;
if (nni_aio_begin(aio) != 0) {
return;
}
nni_mtx_lock(&pipe->mtx);
- if ((rv = nni_aio_schedule(aio, nni_ipc_cancel_rx, pipe)) != 0) {
+ if ((rv = nni_aio_schedule(aio, ipc_cancel_rx, pipe)) != 0) {
nni_mtx_unlock(&pipe->mtx);
nni_aio_finish_error(aio, rv);
return;
@@ -504,24 +504,24 @@ nni_ipc_pipe_recv(void *arg, nni_aio *aio)
nni_list_append(&pipe->recvq, aio);
if (nni_list_first(&pipe->recvq) == aio) {
- nni_ipc_pipe_dorecv(pipe);
+ ipc_pipe_dorecv(pipe);
}
nni_mtx_unlock(&pipe->mtx);
}
static void
-nni_ipc_pipe_start(void *arg, nni_aio *aio)
+ipc_pipe_start(void *arg, nni_aio *aio)
{
- nni_ipc_pipe *pipe = arg;
- nni_aio * negaio;
- nni_iov iov;
- int rv;
+ ipc_pipe *pipe = arg;
+ nni_aio * negaio;
+ nni_iov iov;
+ int rv;
if (nni_aio_begin(aio) != 0) {
return;
}
nni_mtx_lock(&pipe->mtx);
- if ((rv = nni_aio_schedule(aio, nni_ipc_cancel_start, pipe)) != 0) {
+ if ((rv = nni_aio_schedule(aio, ipc_cancel_start, pipe)) != 0) {
nni_mtx_unlock(&pipe->mtx);
nni_aio_finish_error(aio, rv);
return;
@@ -547,72 +547,72 @@ nni_ipc_pipe_start(void *arg, nni_aio *aio)
}
static uint16_t
-nni_ipc_pipe_peer(void *arg)
+ipc_pipe_peer(void *arg)
{
- nni_ipc_pipe *pipe = arg;
+ ipc_pipe *pipe = arg;
return (pipe->peer);
}
static int
-nni_ipc_pipe_get_addr(void *arg, void *buf, size_t *szp, int typ)
+ipc_pipe_get_addr(void *arg, void *buf, size_t *szp, nni_opt_type t)
{
- nni_ipc_pipe *p = arg;
- return (nni_copyout_sockaddr(&p->sa, buf, szp, typ));
+ ipc_pipe *p = arg;
+ return (nni_copyout_sockaddr(&p->sa, buf, szp, t));
}
static int
-nni_ipc_pipe_get_peer_uid(void *arg, void *buf, size_t *szp, int typ)
+ipc_pipe_get_peer_uid(void *arg, void *buf, size_t *szp, nni_opt_type t)
{
- nni_ipc_pipe *p = arg;
- uint64_t id;
- int rv;
+ ipc_pipe *p = arg;
+ uint64_t id;
+ int rv;
if ((rv = nni_plat_ipc_pipe_get_peer_uid(p->ipp, &id)) != 0) {
return (rv);
}
- return (nni_copyout_u64(id, buf, szp, typ));
+ return (nni_copyout_u64(id, buf, szp, t));
}
static int
-nni_ipc_pipe_get_peer_gid(void *arg, void *buf, size_t *szp, int typ)
+ipc_pipe_get_peer_gid(void *arg, void *buf, size_t *szp, nni_opt_type t)
{
- nni_ipc_pipe *p = arg;
- uint64_t id;
- int rv;
+ ipc_pipe *p = arg;
+ uint64_t id;
+ int rv;
if ((rv = nni_plat_ipc_pipe_get_peer_gid(p->ipp, &id)) != 0) {
return (rv);
}
- return (nni_copyout_u64(id, buf, szp, typ));
+ return (nni_copyout_u64(id, buf, szp, t));
}
static int
-nni_ipc_pipe_get_peer_pid(void *arg, void *buf, size_t *szp, int typ)
+ipc_pipe_get_peer_pid(void *arg, void *buf, size_t *szp, nni_opt_type t)
{
- nni_ipc_pipe *p = arg;
- uint64_t id;
- int rv;
+ ipc_pipe *p = arg;
+ uint64_t id;
+ int rv;
if ((rv = nni_plat_ipc_pipe_get_peer_pid(p->ipp, &id)) != 0) {
return (rv);
}
- return (nni_copyout_u64(id, buf, szp, typ));
+ return (nni_copyout_u64(id, buf, szp, t));
}
static int
-nni_ipc_pipe_get_peer_zoneid(void *arg, void *buf, size_t *szp, int typ)
+ipc_pipe_get_peer_zoneid(void *arg, void *buf, size_t *szp, nni_opt_type t)
{
- nni_ipc_pipe *p = arg;
- uint64_t id;
- int rv;
+ ipc_pipe *p = arg;
+ uint64_t id;
+ int rv;
if ((rv = nni_plat_ipc_pipe_get_peer_zoneid(p->ipp, &id)) != 0) {
return (rv);
}
- return (nni_copyout_u64(id, buf, szp, typ));
+ return (nni_copyout_u64(id, buf, szp, t));
}
static void
-nni_ipc_ep_fini(void *arg)
+ipc_ep_fini(void *arg)
{
- nni_ipc_ep *ep = arg;
+ ipc_ep *ep = arg;
nni_aio_stop(ep->aio);
nni_plat_ipc_ep_fini(ep->iep);
@@ -622,11 +622,11 @@ nni_ipc_ep_fini(void *arg)
}
static int
-nni_ipc_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode)
+ipc_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode)
{
- nni_ipc_ep *ep;
- int rv;
- size_t sz;
+ ipc_ep *ep;
+ int rv;
+ size_t sz;
if ((ep = NNI_ALLOC_STRUCT(ep)) == NULL) {
return (NNG_ENOMEM);
@@ -637,17 +637,17 @@ nni_ipc_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode)
ep->sa.s_ipc.sa_family = NNG_AF_IPC;
if (nni_strlcpy(ep->sa.s_ipc.sa_path, url->u_path, sz) >= sz) {
- nni_ipc_ep_fini(ep);
+ ipc_ep_fini(ep);
return (NNG_EADDRINVAL);
}
if ((rv = nni_plat_ipc_ep_init(&ep->iep, &ep->sa, mode)) != 0) {
- nni_ipc_ep_fini(ep);
+ ipc_ep_fini(ep);
return (rv);
}
- if ((rv = nni_aio_init(&ep->aio, nni_ipc_ep_cb, ep)) != 0) {
- nni_ipc_ep_fini(ep);
+ if ((rv = nni_aio_init(&ep->aio, ipc_ep_cb, ep)) != 0) {
+ ipc_ep_fini(ep);
return (rv);
}
ep->proto = nni_sock_proto_id(sock);
@@ -657,9 +657,9 @@ nni_ipc_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode)
}
static void
-nni_ipc_ep_close(void *arg)
+ipc_ep_close(void *arg)
{
- nni_ipc_ep *ep = arg;
+ ipc_ep *ep = arg;
nni_aio_close(ep->aio);
@@ -669,10 +669,10 @@ nni_ipc_ep_close(void *arg)
}
static int
-nni_ipc_ep_bind(void *arg)
+ipc_ep_bind(void *arg)
{
- nni_ipc_ep *ep = arg;
- int rv;
+ ipc_ep *ep = arg;
+ int rv;
nni_mtx_lock(&ep->mtx);
rv = nni_plat_ipc_ep_listen(ep->iep);
@@ -681,11 +681,11 @@ nni_ipc_ep_bind(void *arg)
}
static void
-nni_ipc_ep_finish(nni_ipc_ep *ep)
+ipc_ep_finish(ipc_ep *ep)
{
- nni_aio * aio;
- int rv;
- nni_ipc_pipe *pipe = NULL;
+ nni_aio * aio;
+ int rv;
+ ipc_pipe *pipe = NULL;
if ((rv = nni_aio_result(ep->aio)) != 0) {
goto done;
@@ -694,7 +694,7 @@ nni_ipc_ep_finish(nni_ipc_ep *ep)
// Attempt to allocate the parent pipe. If this fails we'll
// drop the connection (ENOMEM probably).
- rv = nni_ipc_pipe_init(&pipe, ep, nni_aio_get_output(ep->aio, 0));
+ rv = ipc_pipe_init(&pipe, ep, nni_aio_get_output(ep->aio, 0));
done:
aio = ep->user_aio;
@@ -708,7 +708,7 @@ done:
}
if (pipe != NULL) {
- nni_ipc_pipe_fini(pipe);
+ ipc_pipe_fini(pipe);
}
if (aio != NULL) {
NNI_ASSERT(rv != 0);
@@ -717,19 +717,19 @@ done:
}
static void
-nni_ipc_ep_cb(void *arg)
+ipc_ep_cb(void *arg)
{
- nni_ipc_ep *ep = arg;
+ ipc_ep *ep = arg;
nni_mtx_lock(&ep->mtx);
- nni_ipc_ep_finish(ep);
+ ipc_ep_finish(ep);
nni_mtx_unlock(&ep->mtx);
}
static void
-nni_ipc_cancel_ep(nni_aio *aio, int rv)
+ipc_cancel_ep(nni_aio *aio, int rv)
{
- nni_ipc_ep *ep = nni_aio_get_prov_data(aio);
+ ipc_ep *ep = nni_aio_get_prov_data(aio);
NNI_ASSERT(rv != 0);
nni_mtx_lock(&ep->mtx);
@@ -745,10 +745,10 @@ nni_ipc_cancel_ep(nni_aio *aio, int rv)
}
static void
-nni_ipc_ep_accept(void *arg, nni_aio *aio)
+ipc_ep_accept(void *arg, nni_aio *aio)
{
- nni_ipc_ep *ep = arg;
- int rv;
+ ipc_ep *ep = arg;
+ int rv;
if (nni_aio_begin(aio) != 0) {
return;
@@ -756,7 +756,7 @@ nni_ipc_ep_accept(void *arg, nni_aio *aio)
nni_mtx_lock(&ep->mtx);
NNI_ASSERT(ep->user_aio == NULL);
- if ((rv = nni_aio_schedule(aio, nni_ipc_cancel_ep, ep)) != 0) {
+ if ((rv = nni_aio_schedule(aio, ipc_cancel_ep, ep)) != 0) {
nni_mtx_unlock(&ep->mtx);
nni_aio_finish_error(aio, rv);
return;
@@ -768,10 +768,10 @@ nni_ipc_ep_accept(void *arg, nni_aio *aio)
}
static void
-nni_ipc_ep_connect(void *arg, nni_aio *aio)
+ipc_ep_connect(void *arg, nni_aio *aio)
{
- nni_ipc_ep *ep = arg;
- int rv;
+ ipc_ep *ep = arg;
+ int rv;
if (nni_aio_begin(aio) != 0) {
return;
@@ -779,7 +779,7 @@ nni_ipc_ep_connect(void *arg, nni_aio *aio)
nni_mtx_lock(&ep->mtx);
NNI_ASSERT(ep->user_aio == NULL);
- if ((rv = nni_aio_schedule(aio, nni_ipc_cancel_ep, ep)) != 0) {
+ if ((rv = nni_aio_schedule(aio, ipc_cancel_ep, ep)) != 0) {
nni_mtx_unlock(&ep->mtx);
nni_aio_finish_error(aio, rv);
return;
@@ -791,14 +791,13 @@ nni_ipc_ep_connect(void *arg, nni_aio *aio)
}
static int
-nni_ipc_ep_setopt_recvmaxsz(void *arg, const void *data, size_t sz, int typ)
+ipc_ep_set_recvmaxsz(void *arg, const void *data, size_t sz, nni_opt_type t)
{
- nni_ipc_ep *ep = arg;
- size_t val;
- int rv;
+ ipc_ep *ep = arg;
+ size_t val;
+ int rv;
- rv = nni_copyin_size(&val, data, sz, 0, NNI_MAXSZ, typ);
- if ((rv == 0) && (ep != NULL)) {
+ if ((rv = nni_copyin_size(&val, data, sz, 0, NNI_MAXSZ, t)) == 0) {
nni_mtx_lock(&ep->mtx);
ep->rcvmax = val;
nni_mtx_unlock(&ep->mtx);
@@ -807,30 +806,35 @@ nni_ipc_ep_setopt_recvmaxsz(void *arg, const void *data, size_t sz, int typ)
}
static int
-nni_ipc_ep_getopt_recvmaxsz(void *arg, void *data, size_t *szp, int typ)
+ipc_ep_chk_recvmaxsz(const void *data, size_t sz, nni_opt_type t)
{
- nni_ipc_ep *ep = arg;
- return (nni_copyout_size(ep->rcvmax, data, szp, typ));
+ return (nni_copyin_size(NULL, data, sz, 0, NNI_MAXSZ, t));
}
static int
-nni_ipc_ep_get_addr(void *arg, void *data, size_t *szp, int typ)
+ipc_ep_get_recvmaxsz(void *arg, void *data, size_t *szp, nni_opt_type t)
{
- nni_ipc_ep *ep = arg;
- return (nni_copyout_sockaddr(&ep->sa, data, szp, typ));
+ ipc_ep *ep = arg;
+ return (nni_copyout_size(ep->rcvmax, data, szp, t));
}
static int
-nni_ipc_ep_setopt_permissions(void *arg, const void *data, size_t sz, int typ)
+ipc_ep_get_addr(void *arg, void *data, size_t *szp, nni_opt_type t)
{
- nni_ipc_ep *ep = arg;
- int val;
- int rv;
+ ipc_ep *ep = arg;
+ return (nni_copyout_sockaddr(&ep->sa, data, szp, t));
+}
+
+static int
+ipc_ep_set_perms(void *arg, const void *data, size_t sz, nni_opt_type t)
+{
+ ipc_ep *ep = arg;
+ int val;
+ int rv;
// Probably we could further limit this -- most systems don't have
// meaningful chmod beyond the lower 9 bits.
- rv = nni_copyin_int(&val, data, sz, 0, 0x7FFFFFFF, typ);
- if ((rv == 0) && (ep != NULL)) {
+ if ((rv = nni_copyin_int(&val, data, sz, 0, 0x7FFFFFFF, t)) == 0) {
nni_mtx_lock(&ep->mtx);
rv = nni_plat_ipc_ep_set_permissions(ep->iep, val);
nni_mtx_unlock(&ep->mtx);
@@ -839,123 +843,132 @@ nni_ipc_ep_setopt_permissions(void *arg, const void *data, size_t sz, int typ)
}
static int
-nni_ipc_ep_setopt_security_desc(
- void *arg, const void *data, size_t sz, int typ)
+ipc_ep_chk_perms(const void *data, size_t sz, nni_opt_type t)
{
- nni_ipc_ep *ep = arg;
- void * ptr;
- int rv;
+ return (nni_copyin_int(NULL, data, sz, 0, 0x7FFFFFFF, t));
+}
- if ((rv = nni_copyin_ptr((void **) &ptr, data, sz, typ)) != 0) {
- return (rv);
- }
+static int
+ipc_ep_set_sec_desc(void *arg, const void *data, size_t sz, nni_opt_type t)
+{
+ ipc_ep *ep = arg;
+ void * ptr;
+ int rv;
- if (ep == NULL) {
- return (0);
+ if ((rv = nni_copyin_ptr(&ptr, data, sz, t)) == 0) {
+ rv = nni_plat_ipc_ep_set_security_descriptor(ep->iep, ptr);
}
- return (nni_plat_ipc_ep_set_security_descriptor(ep->iep, ptr));
+ return (rv);
+}
+
+static int
+ipc_ep_chk_sec_desc(const void *data, size_t sz, nni_opt_type t)
+{
+ return (nni_copyin_ptr(NULL, data, sz, t));
}
-static nni_tran_pipe_option nni_ipc_pipe_options[] = {
+static nni_tran_option ipc_pipe_options[] = {
{
- .po_name = NNG_OPT_REMADDR,
- .po_type = NNI_TYPE_SOCKADDR,
- .po_getopt = nni_ipc_pipe_get_addr,
+ .o_name = NNG_OPT_REMADDR,
+ .o_type = NNI_TYPE_SOCKADDR,
+ .o_get = ipc_pipe_get_addr,
},
{
- .po_name = NNG_OPT_LOCADDR,
- .po_type = NNI_TYPE_SOCKADDR,
- .po_getopt = nni_ipc_pipe_get_addr,
+ .o_name = NNG_OPT_LOCADDR,
+ .o_type = NNI_TYPE_SOCKADDR,
+ .o_get = ipc_pipe_get_addr,
},
{
- .po_name = NNG_OPT_IPC_PEER_UID,
- .po_type = NNI_TYPE_UINT64,
- .po_getopt = nni_ipc_pipe_get_peer_uid,
+ .o_name = NNG_OPT_IPC_PEER_UID,
+ .o_type = NNI_TYPE_UINT64,
+ .o_get = ipc_pipe_get_peer_uid,
},
{
- .po_name = NNG_OPT_IPC_PEER_GID,
- .po_type = NNI_TYPE_UINT64,
- .po_getopt = nni_ipc_pipe_get_peer_gid,
+ .o_name = NNG_OPT_IPC_PEER_GID,
+ .o_type = NNI_TYPE_UINT64,
+ .o_get = ipc_pipe_get_peer_gid,
},
{
- .po_name = NNG_OPT_IPC_PEER_PID,
- .po_type = NNI_TYPE_UINT64,
- .po_getopt = nni_ipc_pipe_get_peer_pid,
+ .o_name = NNG_OPT_IPC_PEER_PID,
+ .o_type = NNI_TYPE_UINT64,
+ .o_get = ipc_pipe_get_peer_pid,
},
{
- .po_name = NNG_OPT_IPC_PEER_ZONEID,
- .po_type = NNI_TYPE_UINT64,
- .po_getopt = nni_ipc_pipe_get_peer_zoneid,
+ .o_name = NNG_OPT_IPC_PEER_ZONEID,
+ .o_type = NNI_TYPE_UINT64,
+ .o_get = ipc_pipe_get_peer_zoneid,
},
// terminate list
{
- .po_name = NULL,
+ .o_name = NULL,
},
};
-static nni_tran_pipe_ops nni_ipc_pipe_ops = {
- .p_fini = nni_ipc_pipe_fini,
- .p_start = nni_ipc_pipe_start,
- .p_stop = nni_ipc_pipe_stop,
- .p_send = nni_ipc_pipe_send,
- .p_recv = nni_ipc_pipe_recv,
- .p_close = nni_ipc_pipe_close,
- .p_peer = nni_ipc_pipe_peer,
- .p_options = nni_ipc_pipe_options,
+static nni_tran_pipe_ops ipc_pipe_ops = {
+ .p_fini = ipc_pipe_fini,
+ .p_start = ipc_pipe_start,
+ .p_stop = ipc_pipe_stop,
+ .p_send = ipc_pipe_send,
+ .p_recv = ipc_pipe_recv,
+ .p_close = ipc_pipe_close,
+ .p_peer = ipc_pipe_peer,
+ .p_options = ipc_pipe_options,
};
-static nni_tran_ep_option nni_ipc_ep_options[] = {
+static nni_tran_option ipc_ep_options[] = {
{
- .eo_name = NNG_OPT_RECVMAXSZ,
- .eo_type = NNI_TYPE_SIZE,
- .eo_getopt = nni_ipc_ep_getopt_recvmaxsz,
- .eo_setopt = nni_ipc_ep_setopt_recvmaxsz,
+ .o_name = NNG_OPT_RECVMAXSZ,
+ .o_type = NNI_TYPE_SIZE,
+ .o_get = ipc_ep_get_recvmaxsz,
+ .o_set = ipc_ep_set_recvmaxsz,
+ .o_chk = ipc_ep_chk_recvmaxsz,
},
{
- .eo_name = NNG_OPT_LOCADDR,
- .eo_type = NNI_TYPE_SOCKADDR,
- .eo_getopt = nni_ipc_ep_get_addr,
- .eo_setopt = NULL,
+ .o_name = NNG_OPT_LOCADDR,
+ .o_type = NNI_TYPE_SOCKADDR,
+ .o_get = ipc_ep_get_addr,
},
{
- .eo_name = NNG_OPT_IPC_SECURITY_DESCRIPTOR,
- .eo_type = NNI_TYPE_POINTER,
- .eo_getopt = NULL,
- .eo_setopt = nni_ipc_ep_setopt_security_desc,
+ .o_name = NNG_OPT_IPC_SECURITY_DESCRIPTOR,
+ .o_type = NNI_TYPE_POINTER,
+ .o_get = NULL,
+ .o_set = ipc_ep_set_sec_desc,
+ .o_chk = ipc_ep_chk_sec_desc,
},
{
- .eo_name = NNG_OPT_IPC_PERMISSIONS,
- .eo_type = NNI_TYPE_INT32,
- .eo_getopt = NULL,
- .eo_setopt = nni_ipc_ep_setopt_permissions,
+ .o_name = NNG_OPT_IPC_PERMISSIONS,
+ .o_type = NNI_TYPE_INT32,
+ .o_get = NULL,
+ .o_set = ipc_ep_set_perms,
+ .o_chk = ipc_ep_chk_perms,
},
// terminate list
{
- .eo_name = NULL,
+ .o_name = NULL,
},
};
-static nni_tran_ep_ops nni_ipc_ep_ops = {
- .ep_init = nni_ipc_ep_init,
- .ep_fini = nni_ipc_ep_fini,
- .ep_connect = nni_ipc_ep_connect,
- .ep_bind = nni_ipc_ep_bind,
- .ep_accept = nni_ipc_ep_accept,
- .ep_close = nni_ipc_ep_close,
- .ep_options = nni_ipc_ep_options,
+static nni_tran_ep_ops ipc_ep_ops = {
+ .ep_init = ipc_ep_init,
+ .ep_fini = ipc_ep_fini,
+ .ep_connect = ipc_ep_connect,
+ .ep_bind = ipc_ep_bind,
+ .ep_accept = ipc_ep_accept,
+ .ep_close = ipc_ep_close,
+ .ep_options = ipc_ep_options,
};
-static nni_tran nni_ipc_tran = {
+static nni_tran ipc_tran = {
.tran_version = NNI_TRANSPORT_VERSION,
.tran_scheme = "ipc",
- .tran_ep = &nni_ipc_ep_ops,
- .tran_pipe = &nni_ipc_pipe_ops,
- .tran_init = nni_ipc_tran_init,
- .tran_fini = nni_ipc_tran_fini,
+ .tran_ep = &ipc_ep_ops,
+ .tran_pipe = &ipc_pipe_ops,
+ .tran_init = ipc_tran_init,
+ .tran_fini = ipc_tran_fini,
};
int
nng_ipc_register(void)
{
- return (nni_tran_register(&nni_ipc_tran));
+ return (nni_tran_register(&ipc_tran));
}