pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmo-abis/+/39042?usp=email )


Change subject: ipaccess: Use new osmo_ipa_ka_fsm_inst APIs from libosmo-netif
......................................................................

ipaccess: Use new osmo_ipa_ka_fsm_inst APIs from libosmo-netif

Change-Id: I6164a44847fcd88d08c77f977d928c2fdf657719
Related: OS#5896
Depends: libosmo-netif.git Change-Id I5c36e06e0dc29ec4679b20ad6c426f051b659acd
---
M TODO-RELEASE
M include/osmocom/abis/e1_input.h
M src/input/ipaccess.c
3 files changed, 43 insertions(+), 32 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmo-abis refs/changes/42/39042/1

diff --git a/TODO-RELEASE b/TODO-RELEASE
index bcd3c56..4cf9cea 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -12,3 +12,4 @@
 libosmo-netif >1.5.0  use osmo_stream_cli_set_priority(), 
osmo_stream_cli_set_ip_dscp()
 libosmocore   >1.10.0  bigger iofd tx_queue.max_length default value
 libosmo-abis API break Remove ipaccess_fd_cb()
+libosmo-netif >1.5.1  osmo_ipa_ka_fsm_inst APIs
diff --git a/include/osmocom/abis/e1_input.h b/include/osmocom/abis/e1_input.h
index 13008f8..c3f7da9 100644
--- a/include/osmocom/abis/e1_input.h
+++ b/include/osmocom/abis/e1_input.h
@@ -9,6 +9,7 @@
 #include <osmocom/core/timer.h>
 #include <osmocom/core/msgb.h>
 #include <osmocom/core/select.h>
+#include <osmocom/netif/ipa.h>
 #include <osmocom/gsm/i460_mux.h>
 #include <osmocom/abis/subchan_demux.h>
 #include <osmocom/abis/lapd.h>
@@ -130,7 +131,7 @@
                        /* ip.access driver has one fd for each ts */
                        struct osmo_fd fd;
                        /* ipa keep-alive */
-                       struct osmo_fsm_inst *ka_fsm;
+                       struct osmo_ipa_ka_fsm_inst *ka_fsm;
                } ipaccess;
                struct {
                        /* DAHDI driver has one fd for each ts */
diff --git a/src/input/ipaccess.c b/src/input/ipaccess.c
index c47c6fb..d2b8fe8 100644
--- a/src/input/ipaccess.c
+++ b/src/input/ipaccess.c
@@ -80,52 +80,58 @@

 static inline void ipaccess_keepalive_fsm_cleanup(struct e1inp_ts *e1i_ts)
 {
-       struct osmo_fsm_inst *ka_fsm;
+       struct osmo_ipa_ka_fsm_inst *ka_fsm;

        ka_fsm = e1i_ts->driver.ipaccess.ka_fsm;
        if (ka_fsm) {
-               osmo_fsm_inst_term(ka_fsm, OSMO_FSM_TERM_REQUEST, NULL);
                e1i_ts->driver.ipaccess.ka_fsm = NULL;
+               osmo_ipa_ka_fsm_stop(ka_fsm);
+               osmo_ipa_ka_fsm_free(ka_fsm);
        }
 }

-static void ipa_bsc_keepalive_write_server_cb(struct osmo_fsm_inst *fi, void 
*conn, struct msgb *msg)
+static int ipa_bsc_keepalive_send_cb(struct osmo_ipa_ka_fsm_inst *ka_fi, 
struct msgb *msg)
 {
-       struct osmo_stream_srv *srv = (struct osmo_stream_srv *)conn;
+       struct osmo_stream_srv *srv = osmo_ipa_ka_fsm_get_data(ka_fi);
        osmo_stream_srv_send(srv, msg);
+       return 0;
 }

-static int ipa_bsc_keepalive_timeout_cb(struct osmo_fsm_inst *fi, void *data)
+static int ipa_bsc_keepalive_timeout_cb(struct osmo_ipa_ka_fsm_inst *ka_fi)
 {
-       struct osmo_stream_srv *srv = (struct osmo_stream_srv *)data;
+       struct osmo_stream_srv *srv = osmo_ipa_ka_fsm_get_data(ka_fi);
        osmo_stream_srv_destroy(srv);
-       return 1;
+       return 0;
 }

 static void ipaccess_bsc_keepalive_fsm_alloc(struct e1inp_ts *e1i_ts, struct 
osmo_stream_srv *conn, const char *id)
 {
        struct e1inp_line *line = e1i_ts->line;
-       struct osmo_fsm_inst *ka_fsm;
+       struct osmo_ipa_ka_fsm_inst *ka_fsm;

        ipaccess_keepalive_fsm_cleanup(e1i_ts);
        if (!line->ipa_kap)
                return;

-       ka_fsm = ipa_generic_conn_alloc_keepalive_fsm(conn, conn, 
line->ipa_kap, id);
+       ka_fsm = osmo_ipa_ka_fsm_alloc(conn, id);
        e1i_ts->driver.ipaccess.ka_fsm = ka_fsm;
        if (!ka_fsm) {
                LOGPITS(e1i_ts, DLINP, LOGL_ERROR, "Failed to allocate IPA 
keepalive FSM\n");
                return;
        }
-
-       ipa_keepalive_fsm_set_timeout_cb(ka_fsm, ipa_bsc_keepalive_timeout_cb);
-       ipa_keepalive_fsm_set_send_cb(ka_fsm, 
ipa_bsc_keepalive_write_server_cb);
-       ipa_keepalive_fsm_start(ka_fsm);
+       osmo_ipa_ka_fsm_set_ping_interval(ka_fsm, line->ipa_kap->interval);
+       osmo_ipa_ka_fsm_set_pong_timeout(ka_fsm, line->ipa_kap->wait_for_resp);
+       osmo_ipa_ka_fsm_set_data(ka_fsm, conn);
+       osmo_ipa_ka_fsm_set_send_cb(ka_fsm, ipa_bsc_keepalive_send_cb);
+       osmo_ipa_ka_fsm_set_timeout_cb(ka_fsm, ipa_bsc_keepalive_timeout_cb);
+       osmo_ipa_ka_fsm_start(ka_fsm);
 }

-static void ipa_bts_keepalive_write_client_cb(struct osmo_fsm_inst *fi, void 
*conn, struct msgb *msg) {
-       struct osmo_stream_cli *cli = (struct osmo_stream_cli *)conn;
+static int ipa_bts_keepalive_send_cb(struct osmo_ipa_ka_fsm_inst *ka_fi, 
struct msgb *msg)
+{
+       struct osmo_stream_cli *cli = osmo_ipa_ka_fsm_get_data(ka_fi);
        osmo_stream_cli_send(cli, msg);
+       return 0;
 }

 static void _ipaccess_bts_down_cb(struct osmo_stream_cli *cli)
@@ -138,30 +144,33 @@
                line->ops->sign_link_down(line);
 }

-static int ipa_bts_keepalive_timeout_cb(struct osmo_fsm_inst *fi, void *conn) {
-       struct osmo_stream_cli *cli = (struct osmo_stream_cli *)conn;
+static int ipa_bts_keepalive_timeout_cb(struct osmo_ipa_ka_fsm_inst *ka_fi)
+{
+       struct osmo_stream_cli *cli = osmo_ipa_ka_fsm_get_data(ka_fi);
        _ipaccess_bts_down_cb(cli);
-       return 1;
+       return 0;
 }

 static void ipaccess_bts_keepalive_fsm_alloc(struct e1inp_ts *e1i_ts, struct 
osmo_stream_cli *client, const char *id)
 {
        struct e1inp_line *line = e1i_ts->line;
-       struct osmo_fsm_inst *ka_fsm;
+       struct osmo_ipa_ka_fsm_inst *ka_fsm;

        OSMO_ASSERT(e1i_ts->driver.ipaccess.ka_fsm == NULL);
        if (!line->ipa_kap)
                return;

-       ka_fsm = ipa_generic_conn_alloc_keepalive_fsm(client, client, 
line->ipa_kap, id);
+       ka_fsm = osmo_ipa_ka_fsm_alloc(client, id);
        e1i_ts->driver.ipaccess.ka_fsm = ka_fsm;
        if (!ka_fsm) {
                LOGPITS(e1i_ts, DLINP, LOGL_ERROR, "Failed to allocate IPA 
keepalive FSM\n");
                return;
        }
-
-       ipa_keepalive_fsm_set_timeout_cb(ka_fsm, ipa_bts_keepalive_timeout_cb);
-       ipa_keepalive_fsm_set_send_cb(ka_fsm, 
ipa_bts_keepalive_write_client_cb);
+       osmo_ipa_ka_fsm_set_ping_interval(ka_fsm, line->ipa_kap->interval);
+       osmo_ipa_ka_fsm_set_pong_timeout(ka_fsm, line->ipa_kap->wait_for_resp);
+       osmo_ipa_ka_fsm_set_data(ka_fsm, client);
+       osmo_ipa_ka_fsm_set_send_cb(ka_fsm, ipa_bts_keepalive_send_cb);
+       osmo_ipa_ka_fsm_set_timeout_cb(ka_fsm, ipa_bts_keepalive_timeout_cb);
 }

 /* See how ts->num is assigned in e1inp_line_create: line->ts[i].num = i+1;
@@ -224,12 +233,12 @@
        struct e1inp_sign_link *sign_link;
        char *unitid;
        int len, ret;
-       struct osmo_fsm_inst *ka_fsm;
+       struct osmo_ipa_ka_fsm_inst *ka_fsm;

        /* peek the pong for our keepalive fsm */
        ka_fsm = e1i_ts->driver.ipaccess.ka_fsm;
        if (ka_fsm && msg_type == IPAC_MSGT_PONG)
-               ipa_keepalive_fsm_pong_received(ka_fsm);
+               osmo_ipa_ka_fsm_pong_received(ka_fsm);

        /* Handle IPA PING, PONG and ID_ACK messages. */
        ret = ipa_ccm_rcvmsg_base(msg, bfd);
@@ -364,13 +373,13 @@
        struct e1inp_ts *e1i_ts = sign_link->ts;
        struct osmo_fd *bfd = &e1i_ts->driver.ipaccess.fd;
        struct e1inp_line *line = e1i_ts->line;
-       struct osmo_fsm_inst *ka_fsm = e1i_ts->driver.ipaccess.ka_fsm;
+       struct osmo_ipa_ka_fsm_inst *ka_fsm = e1i_ts->driver.ipaccess.ka_fsm;
        struct osmo_stream_cli *cli;
        struct osmo_stream_srv *conn;

        /* depending on caller the fsm might be dead */
        if (ka_fsm)
-               ipa_keepalive_fsm_stop(ka_fsm);
+               osmo_ipa_ka_fsm_stop(ka_fsm);

        e1inp_int_snd_event(e1i_ts, sign_link, S_L_INP_TEI_DN);
        /* the first e1inp_sign_link_destroy call closes the socket. */
@@ -804,8 +813,8 @@

        /* peek the pong for our keepalive fsm */
        if (line && msg_type == IPAC_MSGT_PONG) {
-               struct osmo_fsm_inst *ka_fsm = e1i_ts->driver.ipaccess.ka_fsm;
-               ipa_keepalive_fsm_pong_received(ka_fsm);
+               struct osmo_ipa_ka_fsm_inst *ka_fsm = 
e1i_ts->driver.ipaccess.ka_fsm;
+               osmo_ipa_ka_fsm_pong_received(ka_fsm);
        }

        /* ping, pong and acknowledgment cases. */
@@ -922,11 +931,11 @@
 {
        struct e1inp_ts *e1i_ts = osmo_stream_cli_get_data(cli);
        struct e1inp_line *line = e1i_ts->line;
-       struct osmo_fsm_inst *ka_fsm = e1i_ts->driver.ipaccess.ka_fsm;
+       struct osmo_ipa_ka_fsm_inst *ka_fsm = e1i_ts->driver.ipaccess.ka_fsm;

        update_fd_settings(line, osmo_stream_cli_get_fd(cli));
        if (ka_fsm && line->ipa_kap)
-               ipa_keepalive_fsm_start(ka_fsm);
+               osmo_ipa_ka_fsm_start(ka_fsm);
        return 0;
 }


--
To view, visit https://gerrit.osmocom.org/c/libosmo-abis/+/39042?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: libosmo-abis
Gerrit-Branch: master
Gerrit-Change-Id: I6164a44847fcd88d08c77f977d928c2fdf657719
Gerrit-Change-Number: 39042
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>

Reply via email to