arehbein has submitted this change. (
https://gerrit.osmocom.org/c/libosmo-netif/+/32975
)
Change subject: stream: Add IPA send function/IPA-mode read to cli
......................................................................
stream: Add IPA send function/IPA-mode read to cli
- Also: Adapt ipa-stream-client example to work alongside new change
Related: OS#5753
Change-Id: I042700af6614dd1879514dca0482e05b5ff22cb7
---
M examples/ipa-stream-client.c
M include/osmocom/netif/stream.h
M src/stream.c
3 files changed, 39 insertions(+), 9 deletions(-)
diff --git a/examples/ipa-stream-client.c b/examples/ipa-stream-client.c
index c3bb2a3..6aa7d5f 100644
--- a/examples/ipa-stream-client.c
+++ b/examples/ipa-stream-client.c
@@ -93,10 +93,8 @@
msg_sent->num = i;
llist_add(&msg_sent->head, &msg_sent_list);
- ipa_prepend_header_ext(msg, IPAC_PROTO_EXT_MGCP);
- osmo_ipa_msg_push_header(msg, IPAC_PROTO_OSMO);
-
- osmo_stream_cli_send(conn, msg);
+ osmo_stream_cli_send_ipa(conn, IPAC_PROTO_OSMO,
+ IPAC_PROTO_EXT_MGCP, msg);
LOGP(DIPATEST, LOGL_DEBUG, "enqueueing msg %d of "
"%d bytes to be sent\n", i, msg->len);
@@ -106,7 +104,7 @@
static int read_cb(struct osmo_stream_cli *conn, struct msgb *msg)
{
- LOGP(DIPATEST, LOGL_DEBUG, "received message from stream (len=%d)\n",
msgb_length(msg));
+ LOGP(DIPATEST, LOGL_DEBUG, "received message from stream (payload len=%d)\n",
msgb_length(msg));
if (osmo_ipa_process_msg(msg) < 0) {
LOGP(DIPATEST, LOGL_ERROR, "bad IPA message\n");
@@ -116,7 +114,7 @@
int num;
struct msg_sent *cur, *tmp, *found = NULL;
- num = ntohl(*((int *)(msg->data + sizeof(struct ipa_head) + sizeof(struct
ipa_head_ext))));
+ num = ntohl(*((int *)(msg->data)));
LOGP(DLINP, LOGL_DEBUG, "received msg number %d\n", num);
llist_for_each_entry_safe(cur, tmp, &msg_sent_list, head) {
diff --git a/include/osmocom/netif/stream.h b/include/osmocom/netif/stream.h
index 16940dc..5c8cea3 100644
--- a/include/osmocom/netif/stream.h
+++ b/include/osmocom/netif/stream.h
@@ -113,6 +113,8 @@
void osmo_stream_cli_close(struct osmo_stream_cli *cli);
void osmo_stream_cli_send(struct osmo_stream_cli *cli, struct msgb *msg);
+void osmo_stream_cli_send_ipa(struct osmo_stream_cli *cli, int ipaccess_proto,
+ enum ipaccess_proto_ext pe, struct msgb *msg);
int osmo_stream_cli_recv(struct osmo_stream_cli *cli, struct msgb *msg);
void osmo_stream_cli_clear_tx_queue(struct osmo_stream_cli *cli);
diff --git a/src/stream.c b/src/stream.c
index d1682c2..00ea33d 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -689,8 +689,8 @@
if (res == 0)
osmo_stream_cli_reconnect(cli);
else if (cli->iofd_read_cb) {
- // if (cli->stream_proto == OSMO_STREAM_IPAC)
- // ipa_check_pull_headers(
+ if (cli->stream_proto == OSMO_STREAM_IPAC)
+ ipa_check_pull_headers(msg, cli);
cli->iofd_read_cb(cli, msg);
}
break;
@@ -868,7 +868,6 @@
client_ops.segmentation_cb = segmentation_cbs[osp];
osmo_iofd_set_ioops(cli->iofd, &client_ops);
cli->flags |= OSMO_STREAM_CLI_F_RECONF;
- osmo_iofd_set_ioops(cli->iofd, &osmo_stream_cli_ioops);
}
/*! \brief Set the socket type for the stream server link
@@ -1207,6 +1206,25 @@
/*! \brief Enqueue data to be sent via an Osmocom stream client
* \param[in] cli Stream Client through which we want to send
+ * \param[in] p Protocol transported by IPA. When set to IPAC_PROTO_UNSPECIFIED, the
protocol will be
+ * read from the msgb structure's l1 and possibly l2 headers.
+ * \param[in] pe Ignored, unless p == IPAC_PROTO_OSMO, in which case this specifies
the
+ * Osmocom protocol extension
+ * \param[in] msg Message buffer to enqueue in transmit queue */
+void osmo_stream_cli_send_ipa(struct osmo_stream_cli *cli, int ipaccess_proto,
+ enum ipaccess_proto_ext pe, struct msgb *msg)
+{
+ OSMO_ASSERT(msg);
+ if (ipaccess_proto == IPAC_PROTO_UNSPECIFIED) {
+ ipaccess_proto = msg_get_ipa_proto(msg);
+ pe = msg_get_ipa_proto_ext(msg);
+ }
+ ipa_push_headers(ipaccess_proto, pe, msg);
+ osmo_stream_cli_send(cli, msg);
+}
+
+/*! \brief Enqueue data to be sent via an Osmocom stream client
+ * \param[in] cli Stream Client through which we want to send
* \param[in] msg Message buffer to enqueue in transmit queue */
void osmo_stream_cli_send(struct osmo_stream_cli *cli, struct msgb *msg)
{
--
To view, visit
https://gerrit.osmocom.org/c/libosmo-netif/+/32975
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-netif
Gerrit-Branch: arehbein/osmo_io_ipa
Gerrit-Change-Id: I042700af6614dd1879514dca0482e05b5ff22cb7
Gerrit-Change-Number: 32975
Gerrit-PatchSet: 2
Gerrit-Owner: arehbein <arehbein(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-MessageType: merged