diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/pipe.c | 20 | ||||
| -rw-r--r-- | src/core/transport.h | 6 | ||||
| -rw-r--r-- | src/transport/zerotier/zerotier.c | 85 |
3 files changed, 51 insertions, 60 deletions
diff --git a/src/core/pipe.c b/src/core/pipe.c index 664dd3c2..6ad62fa4 100644 --- a/src/core/pipe.c +++ b/src/core/pipe.c @@ -1,6 +1,7 @@ // // Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> // Copyright 2018 Capitar IT Group BV <info@capitar.com> +// Copyright 2018 Devolutions <info@devolutions.net> // // This software is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this @@ -289,20 +290,11 @@ int nni_pipe_getopt( nni_pipe *p, const char *name, void *val, size_t *szp, nni_opt_type t) { - nni_option *o; - - if (p->p_tran_ops.p_getopt != NULL) { - int rv; - rv = p->p_tran_ops.p_getopt(p->p_tran_data, name, val, szp, t); - if (rv != NNG_ENOTSUP) { - return (rv); - } - } - for (o = p->p_tran_ops.p_options; o && o->o_name; o++) { - if (strcmp(o->o_name, name) != 0) { - continue; - } - return (o->o_get(p->p_tran_data, val, szp, t)); + int rv; + + rv = p->p_tran_ops.p_getopt(p->p_tran_data, name, val, szp, t); + if (rv != NNG_ENOTSUP) { + return (rv); } // Maybe the endpoint knows? The guarantees on pipes ensure that the diff --git a/src/core/transport.h b/src/core/transport.h index 338b3f67..f3d252c4 100644 --- a/src/core/transport.h +++ b/src/core/transport.h @@ -1,6 +1,7 @@ // // Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> // Copyright 2018 Capitar IT Group BV <info@capitar.com> +// Copyright 2018 Devolutions <info@devolutions.net> // // This software is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this @@ -153,11 +154,6 @@ struct nni_tran_pipe_ops { // p_getopt is used to obtain an option. Pipes don't implement // option setting. int (*p_getopt)(void *, const char *, void *, size_t *, nni_type); - - // p_options is an array of pipe options. The final element - // must have a NULL name. If this member is NULL, then no - // transport specific options are available. - nni_option *p_options; }; // Transport implementation details. Transports must implement the diff --git a/src/transport/zerotier/zerotier.c b/src/transport/zerotier/zerotier.c index 47dc4af8..1754a322 100644 --- a/src/transport/zerotier/zerotier.c +++ b/src/transport/zerotier/zerotier.c @@ -1982,8 +1982,7 @@ zt_get_nw_status(zt_node *ztn, uint64_t nwid, int *statusp) } static int -zt_get_nw_name( - zt_node *ztn, uint64_t nwid, void *buf, size_t *szp, nni_opt_type t) +zt_get_nw_name(zt_node *ztn, uint64_t nwid, void *buf, size_t *szp, nni_type t) { ZT_VirtualNetworkConfig *vcfg; int rv; @@ -2000,21 +1999,21 @@ zt_get_nw_name( } static int -zt_pipe_get_recvmaxsz(void *arg, void *buf, size_t *szp, nni_opt_type t) +zt_pipe_get_recvmaxsz(void *arg, void *buf, size_t *szp, nni_type t) { zt_pipe *p = arg; return (nni_copyout_size(p->zp_rcvmax, buf, szp, t)); } static int -zt_pipe_get_nwid(void *arg, void *buf, size_t *szp, nni_opt_type t) +zt_pipe_get_nwid(void *arg, void *buf, size_t *szp, nni_type t) { zt_pipe *p = arg; return (nni_copyout_u64(p->zp_nwid, buf, szp, t)); } static int -zt_pipe_get_node(void *arg, void *buf, size_t *szp, nni_opt_type t) +zt_pipe_get_node(void *arg, void *buf, size_t *szp, nni_type t) { zt_pipe *p = arg; return (nni_copyout_u64(p->zp_laddr >> 24, buf, szp, t)); @@ -2536,7 +2535,7 @@ zt_ep_connect(void *arg, nni_aio *aio) } static int -zt_ep_set_recvmaxsz(void *arg, const void *data, size_t sz, nni_opt_type t) +zt_ep_set_recvmaxsz(void *arg, const void *data, size_t sz, nni_type t) { zt_ep *ep = arg; size_t val; @@ -2552,7 +2551,7 @@ zt_ep_set_recvmaxsz(void *arg, const void *data, size_t sz, nni_opt_type t) } static int -zt_ep_get_recvmaxsz(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_ep_get_recvmaxsz(void *arg, void *data, size_t *szp, nni_type t) { zt_ep *ep = arg; int rv; @@ -2563,7 +2562,7 @@ zt_ep_get_recvmaxsz(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_check_string(const void *data, size_t sz, nni_opt_type t) +zt_check_string(const void *data, size_t sz, nni_type t) { size_t len; @@ -2578,7 +2577,7 @@ zt_check_string(const void *data, size_t sz, nni_opt_type t) } static int -zt_ep_set_home(void *arg, const void *data, size_t sz, nni_opt_type t) +zt_ep_set_home(void *arg, const void *data, size_t sz, nni_type t) { int rv; zt_ep *ep = arg; @@ -2600,7 +2599,7 @@ zt_ep_set_home(void *arg, const void *data, size_t sz, nni_opt_type t) } static int -zt_ep_get_home(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_ep_get_home(void *arg, void *data, size_t *szp, nni_type t) { zt_ep *ep = arg; int rv; @@ -2612,7 +2611,7 @@ zt_ep_get_home(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_ep_get_url(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_ep_get_url(void *arg, void *data, size_t *szp, nni_type t) { char ustr[64]; // more than plenty zt_ep * ep = arg; @@ -2629,7 +2628,7 @@ zt_ep_get_url(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_ep_set_orbit(void *arg, const void *data, size_t sz, nni_opt_type t) +zt_ep_set_orbit(void *arg, const void *data, size_t sz, nni_type t) { uint64_t moonid; uint64_t peerid; @@ -2666,7 +2665,7 @@ zt_ep_set_orbit(void *arg, const void *data, size_t sz, nni_opt_type t) } static int -zt_ep_set_deorbit(void *arg, const void *data, size_t sz, nni_opt_type t) +zt_ep_set_deorbit(void *arg, const void *data, size_t sz, nni_type t) { uint64_t moonid; zt_ep * ep = arg; @@ -2689,8 +2688,7 @@ zt_ep_set_deorbit(void *arg, const void *data, size_t sz, nni_opt_type t) } static int -zt_ep_set_add_local_addr( - void *arg, const void *data, size_t sz, nni_opt_type t) +zt_ep_set_add_local_addr(void *arg, const void *data, size_t sz, nni_type t) { nng_sockaddr sa; zt_ep * ep = arg; @@ -2738,8 +2736,7 @@ zt_ep_set_add_local_addr( } static int -zt_ep_set_clear_local_addrs( - void *arg, const void *data, size_t sz, nni_opt_type t) +zt_ep_set_clear_local_addrs(void *arg, const void *data, size_t sz, nni_type t) { zt_ep *ep = arg; NNI_ARG_UNUSED(data); @@ -2762,7 +2759,7 @@ zt_ep_set_clear_local_addrs( } static int -zt_ep_get_node(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_ep_get_node(void *arg, void *data, size_t *szp, nni_type t) { zt_ep *ep = arg; int rv; @@ -2780,7 +2777,7 @@ zt_ep_get_node(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_ep_get_nwid(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_ep_get_nwid(void *arg, void *data, size_t *szp, nni_type t) { zt_ep *ep = arg; int rv; @@ -2796,7 +2793,7 @@ zt_ep_get_nwid(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_ep_get_nw_name(void *arg, void *buf, size_t *szp, nni_opt_type t) +zt_ep_get_nw_name(void *arg, void *buf, size_t *szp, nni_type t) { zt_ep *ep = arg; int rv; @@ -2812,7 +2809,7 @@ zt_ep_get_nw_name(void *arg, void *buf, size_t *szp, nni_opt_type t) } static int -zt_ep_get_nw_status(void *arg, void *buf, size_t *szp, nni_opt_type t) +zt_ep_get_nw_status(void *arg, void *buf, size_t *szp, nni_type t) { zt_ep *ep = arg; int rv; @@ -2832,7 +2829,7 @@ zt_ep_get_nw_status(void *arg, void *buf, size_t *szp, nni_opt_type t) } static int -zt_ep_set_ping_time(void *arg, const void *data, size_t sz, nni_opt_type t) +zt_ep_set_ping_time(void *arg, const void *data, size_t sz, nni_type t) { zt_ep * ep = arg; nng_duration val; @@ -2847,7 +2844,7 @@ zt_ep_set_ping_time(void *arg, const void *data, size_t sz, nni_opt_type t) } static int -zt_ep_get_ping_time(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_ep_get_ping_time(void *arg, void *data, size_t *szp, nni_type t) { zt_ep *ep = arg; int rv; @@ -2859,7 +2856,7 @@ zt_ep_get_ping_time(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_ep_set_ping_tries(void *arg, const void *data, size_t sz, nni_opt_type t) +zt_ep_set_ping_tries(void *arg, const void *data, size_t sz, nni_type t) { zt_ep *ep = arg; int val; @@ -2875,7 +2872,7 @@ zt_ep_set_ping_tries(void *arg, const void *data, size_t sz, nni_opt_type t) } static int -zt_ep_get_ping_tries(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_ep_get_ping_tries(void *arg, void *data, size_t *szp, nni_type t) { zt_ep *ep = arg; int rv; @@ -2887,7 +2884,7 @@ zt_ep_get_ping_tries(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_ep_set_conn_time(void *arg, const void *data, size_t sz, nni_opt_type t) +zt_ep_set_conn_time(void *arg, const void *data, size_t sz, nni_type t) { zt_ep * ep = arg; nng_duration val; @@ -2902,7 +2899,7 @@ zt_ep_set_conn_time(void *arg, const void *data, size_t sz, nni_opt_type t) } static int -zt_ep_get_conn_time(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_ep_get_conn_time(void *arg, void *data, size_t *szp, nni_type t) { zt_ep *ep = arg; int rv; @@ -2914,7 +2911,7 @@ zt_ep_get_conn_time(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_ep_set_conn_tries(void *arg, const void *data, size_t sz, nni_opt_type t) +zt_ep_set_conn_tries(void *arg, const void *data, size_t sz, nni_type t) { zt_ep *ep = arg; int val; @@ -2930,7 +2927,7 @@ zt_ep_set_conn_tries(void *arg, const void *data, size_t sz, nni_opt_type t) } static int -zt_ep_get_conn_tries(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_ep_get_conn_tries(void *arg, void *data, size_t *szp, nni_type t) { zt_ep *ep = arg; int rv; @@ -2942,7 +2939,7 @@ zt_ep_get_conn_tries(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_ep_get_locaddr(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_ep_get_locaddr(void *arg, void *data, size_t *szp, nni_type t) { zt_ep * ep = arg; nng_sockaddr sa; @@ -2958,7 +2955,7 @@ zt_ep_get_locaddr(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_pipe_get_locaddr(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_pipe_get_locaddr(void *arg, void *data, size_t *szp, nni_type t) { zt_pipe * p = arg; nng_sockaddr sa; @@ -2972,7 +2969,7 @@ zt_pipe_get_locaddr(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_pipe_get_remaddr(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_pipe_get_remaddr(void *arg, void *data, size_t *szp, nni_type t) { zt_pipe * p = arg; nng_sockaddr sa; @@ -2986,13 +2983,13 @@ zt_pipe_get_remaddr(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_pipe_get_mtu(void *arg, void *data, size_t *szp, nni_opt_type t) +zt_pipe_get_mtu(void *arg, void *data, size_t *szp, nni_type t) { zt_pipe *p = arg; return (nni_copyout_size(p->zp_mtu, data, szp, t)); } -static nni_option zt_pipe_options[] = { +static const nni_option zt_pipe_options[] = { { .o_name = NNG_OPT_LOCADDR, .o_get = zt_pipe_get_locaddr, @@ -3023,14 +3020,20 @@ static nni_option zt_pipe_options[] = { }, }; +static int +zt_pipe_getopt(void *arg, const char *name, void *buf, size_t *szp, nni_type t) +{ + return (nni_getopt(zt_pipe_options, name, buf, szp, t)); +} + static nni_tran_pipe_ops zt_pipe_ops = { - .p_init = zt_pipe_init, - .p_fini = zt_pipe_fini, - .p_send = zt_pipe_send, - .p_recv = zt_pipe_recv, - .p_close = zt_pipe_close, - .p_peer = zt_pipe_peer, - .p_options = zt_pipe_options, + .p_init = zt_pipe_init, + .p_fini = zt_pipe_fini, + .p_send = zt_pipe_send, + .p_recv = zt_pipe_recv, + .p_close = zt_pipe_close, + .p_peer = zt_pipe_peer, + .p_getopt = zt_pipe_getopt, }; static nni_option zt_dialer_options[] = { |
