aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2023-09-08 16:45:25 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2023-09-12 00:01:00 +0200
commit745c0e2a0f8ba46e55eb7958998672bf72c09e9f (patch)
tree52fc10c6462aba59ea57a0c4179ff8e25d4cafdb
parentefd56fb2a2795c05a061ed348375820c66070949 (diff)
stream: Add new stream_{cli,srv_link} parameters to set SCTP_INITMSG sockopt values
This will allow osmo_stream users (like libosmo-sccp) to set SCTP_INITMSG related parameters, like number on inbound/outbound streams, connect attempts, connect timeout. Related: SYS#6558 Change-Id: I5343c7659881b29e0201e72badbc2d07e1ef2dca
-rw-r--r--include/osmocom/netif/stream.h6
-rw-r--r--src/stream_cli.c28
-rw-r--r--src/stream_srv.c14
3 files changed, 48 insertions, 0 deletions
diff --git a/include/osmocom/netif/stream.h b/include/osmocom/netif/stream.h
index f78df8a..6ee5820 100644
--- a/include/osmocom/netif/stream.h
+++ b/include/osmocom/netif/stream.h
@@ -45,6 +45,8 @@ void osmo_stream_srv_link_close(struct osmo_stream_srv_link *link);
enum osmo_stream_srv_link_param {
OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
+ OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_NUM_OSTREAMS, /* uint16_t: amount of streams */
+ OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_MAX_INSTREAMS, /* uint16_t: amount of streams */
};
int osmo_stream_srv_link_set_param(struct osmo_stream_srv_link *link, enum osmo_stream_srv_link_param par,
@@ -117,6 +119,10 @@ void osmo_stream_cli_clear_tx_queue(struct osmo_stream_cli *cli);
enum osmo_stream_cli_param {
OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
+ OSMO_STREAM_CLI_PAR_SCTP_INIT_NUM_OSTREAMS, /* uint16_t: amount of streams */
+ OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_INSTREAMS, /* uint16_t: amount of streams */
+ OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_ATTEMPTS, /* uint16_t: amount of attempts */
+ OSMO_STREAM_CLI_PAR_SCTP_INIT_TIMEOUT, /* uint16_t: milliseconds */
};
int osmo_stream_cli_set_param(struct osmo_stream_cli *cli, enum osmo_stream_cli_param par,
diff --git a/src/stream_cli.c b/src/stream_cli.c
index 16d033e..23e1900 100644
--- a/src/stream_cli.c
+++ b/src/stream_cli.c
@@ -1023,6 +1023,34 @@ int osmo_stream_cli_set_param(struct osmo_stream_cli *cli, enum osmo_stream_cli_
cli->ma_pars.sctp.sockopt_asconf_supported.abort_on_failure = val8 > 1;
cli->ma_pars.sctp.sockopt_asconf_supported.value = (val8 == 1 || val8 == 3) ? 1 : 0;
break;
+ case OSMO_STREAM_CLI_PAR_SCTP_INIT_NUM_OSTREAMS:
+ if (!val || val_len != sizeof(uint16_t))
+ return -EINVAL;
+ cli->ma_pars.sctp.sockopt_initmsg.set = true;
+ cli->ma_pars.sctp.sockopt_initmsg.num_ostreams_present = true;
+ cli->ma_pars.sctp.sockopt_initmsg.num_ostreams_value = *(uint16_t *)val;
+ break;
+ case OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_INSTREAMS:
+ if (!val || val_len != sizeof(uint16_t))
+ return -EINVAL;
+ cli->ma_pars.sctp.sockopt_initmsg.set = true;
+ cli->ma_pars.sctp.sockopt_initmsg.max_instreams_present = true;
+ cli->ma_pars.sctp.sockopt_initmsg.max_instreams_value = *(uint16_t *)val;
+ break;
+ case OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_ATTEMPTS:
+ if (!val || val_len != sizeof(uint16_t))
+ return -EINVAL;
+ cli->ma_pars.sctp.sockopt_initmsg.set = true;
+ cli->ma_pars.sctp.sockopt_initmsg.max_attempts_present = true;
+ cli->ma_pars.sctp.sockopt_initmsg.max_attempts_value = *(uint16_t *)val;
+ break;
+ case OSMO_STREAM_CLI_PAR_SCTP_INIT_TIMEOUT:
+ if (!val || val_len != sizeof(uint16_t))
+ return -EINVAL;
+ cli->ma_pars.sctp.sockopt_initmsg.set = true;
+ cli->ma_pars.sctp.sockopt_initmsg.max_init_timeo_present = true;
+ cli->ma_pars.sctp.sockopt_initmsg.max_init_timeo_value = *(uint16_t *)val;
+ break;
default:
return -ENOENT;
};
diff --git a/src/stream_srv.c b/src/stream_srv.c
index 186ec02..b404604 100644
--- a/src/stream_srv.c
+++ b/src/stream_srv.c
@@ -488,6 +488,20 @@ int osmo_stream_srv_link_set_param(struct osmo_stream_srv_link *link, enum osmo_
link->ma_pars.sctp.sockopt_asconf_supported.abort_on_failure = val8 > 1;
link->ma_pars.sctp.sockopt_asconf_supported.value = (val8 == 1 || val8 == 3) ? 1 : 0;
break;
+ case OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_NUM_OSTREAMS:
+ if (!val || val_len != sizeof(uint16_t))
+ return -EINVAL;
+ link->ma_pars.sctp.sockopt_initmsg.set = true;
+ link->ma_pars.sctp.sockopt_initmsg.num_ostreams_present = true;
+ link->ma_pars.sctp.sockopt_initmsg.num_ostreams_value = *(uint16_t *)val;
+ break;
+ case OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_MAX_INSTREAMS:
+ if (!val || val_len != sizeof(uint16_t))
+ return -EINVAL;
+ link->ma_pars.sctp.sockopt_initmsg.set = true;
+ link->ma_pars.sctp.sockopt_initmsg.max_instreams_present = true;
+ link->ma_pars.sctp.sockopt_initmsg.max_instreams_value = *(uint16_t *)val;
+ break;
default:
return -ENOENT;
};