ss7_asp: Update stream_cli read_cb2 functions to accommodate for new API param

libosmo-netif (not yet released) stream_cli osmo_io read_cb API was
updated to provide read result status. Hence, now API users (ss7_asp)
can account for lower layer errors and act properly, like it used to
do with the previous ofd backend.

This commit partially reverts some error code paths removed in
9257cd896e when converting code to use
osmo_io stream_cli backend.

Change-Id: I579f4101a9e2874e310ff78e4571f38cfe8dfab0
Depends: libosmo-netif.git Change-Id I395c75ff1e9904757ce1d767a9ac2f779593c4c8
This commit is contained in:
Pau Espin 2024-04-16 19:24:58 +02:00
parent 513e937a11
commit 7688b0965e
1 changed files with 28 additions and 7 deletions

View File

@ -602,9 +602,9 @@ void osmo_ss7_asp_destroy(struct osmo_ss7_asp *asp)
talloc_free(asp);
}
static int xua_cli_read_cb(struct osmo_stream_cli *conn, struct msgb *msg);
static int ipa_cli_read_cb(struct osmo_stream_cli *conn, struct msgb *msg);
static int m3ua_tcp_cli_read_cb(struct osmo_stream_cli *conn, struct msgb *msg);
static int xua_cli_read_cb(struct osmo_stream_cli *conn, int res, struct msgb *msg);
static int ipa_cli_read_cb(struct osmo_stream_cli *conn, int res, struct msgb *msg);
static int m3ua_tcp_cli_read_cb(struct osmo_stream_cli *conn, int res, struct msgb *msg);
static int xua_cli_connect_cb(struct osmo_stream_cli *cli);
static int xua_cli_close_and_reconnect(struct osmo_stream_cli *cli);
@ -953,11 +953,21 @@ static int xua_cli_close_and_reconnect(struct osmo_stream_cli *cli)
}
/* read call-back for IPA/SCCPlite socket */
static int ipa_cli_read_cb(struct osmo_stream_cli *conn, struct msgb *msg)
static int ipa_cli_read_cb(struct osmo_stream_cli *conn, int res, struct msgb *msg)
{
int fd = osmo_stream_cli_get_fd(conn);
struct osmo_ss7_asp *asp = osmo_stream_cli_get_data(conn);
if (res <= 0) {
if (res == -EAGAIN) {
msgb_free(msg);
return 0;
}
xua_cli_close_and_reconnect(conn);
msgb_free(msg);
return res;
}
msg->dst = asp;
rate_ctr_inc2(asp->ctrg, SS7_ASP_CTR_PKT_RX_TOTAL);
/* we can use the 'fd' return value of osmo_stream_srv_get_fd() here unverified as all we do
@ -966,7 +976,7 @@ static int ipa_cli_read_cb(struct osmo_stream_cli *conn, struct msgb *msg)
}
/* read call-back for M3UA-over-TCP socket */
static int m3ua_tcp_cli_read_cb(struct osmo_stream_cli *conn, struct msgb *msg)
static int m3ua_tcp_cli_read_cb(struct osmo_stream_cli *conn, int res, struct msgb *msg)
{
const struct xua_common_hdr *hdr;
@ -980,10 +990,10 @@ static int m3ua_tcp_cli_read_cb(struct osmo_stream_cli *conn, struct msgb *msg)
else
msgb_sctp_stream(msg) = 0;
return xua_cli_read_cb(conn, msg);
return xua_cli_read_cb(conn, res, msg);
}
static int xua_cli_read_cb(struct osmo_stream_cli *conn, struct msgb *msg)
static int xua_cli_read_cb(struct osmo_stream_cli *conn, int res, struct msgb *msg)
{
struct osmo_ss7_asp *asp = osmo_stream_cli_get_data(conn);
unsigned int ppid;
@ -1008,6 +1018,17 @@ static int xua_cli_read_cb(struct osmo_stream_cli *conn, struct msgb *msg)
default:
break;
}
if (rc == 0)
xua_cli_close_and_reconnect(conn);
rc = 0;
goto out;
}
if (rc < 0) {
xua_cli_close_and_reconnect(conn);
goto out;
} else if (rc == 0) {
xua_cli_close_and_reconnect(conn);
goto out;
}