laforge has uploaded this change for review.

View Change

octoi: Reset FIFO/RIFO when entering ACCEPTED state

For both OCTOI client + server FSM, whenever we enter the ACCEPTED
state (we disconnect), let's reset the RIFO/FIFO state. This makes
sure no left-over frames from some earlier connection are present,
and also ensures our initial frame number expectations are correct.

Change-Id: I9e721b5dbf22728cb2361ed121d12def7016dcc2
---
M src/octoi/e1oip.c
M src/octoi/e1oip.h
M src/octoi/octoi_clnt_fsm.c
M src/octoi/octoi_srv_fsm.c
4 files changed, 19 insertions(+), 5 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-e1d refs/changes/33/27833/1
diff --git a/src/octoi/e1oip.c b/src/octoi/e1oip.c
index 9461818..5dd3bbf 100644
--- a/src/octoi/e1oip.c
+++ b/src/octoi/e1oip.c
@@ -288,11 +288,7 @@
iline->cfg.batching_factor = 32;
iline->cfg.prefill_frame_count = 400; /* 50ms */

- frame_fifo_init(&iline->e1o.fifo, iline->cfg.batching_factor, fifo_threshold_cb, iline);
- memset(&iline->e1o.last_frame, 0xff, sizeof(iline->e1o.last_frame));
-
- frame_rifo_init(&iline->e1t.rifo);
- memset(&iline->e1t.last_frame, 0xff, sizeof(iline->e1o.last_frame));
+ e1oip_line_reset(iline);

iline->peer = peer;
peer->iline = iline;
@@ -300,6 +296,17 @@
return iline;
}

+void e1oip_line_reset(struct e1oip_line *iline)
+{
+ frame_fifo_init(&iline->e1o.fifo, iline->cfg.batching_factor, fifo_threshold_cb, iline);
+ memset(&iline->e1o.last_frame, 0xff, sizeof(iline->e1o.last_frame));
+ iline->e1o.next_seq = 0;
+
+ frame_rifo_init(&iline->e1t.rifo);
+ memset(&iline->e1t.last_frame, 0xff, sizeof(iline->e1t.last_frame));
+ iline->e1t.next_fn32 = 0;
+}
+
void e1oip_line_destroy(struct e1oip_line *iline)
{
if (!iline)
diff --git a/src/octoi/e1oip.h b/src/octoi/e1oip.h
index 233e8ee..70e1bbb 100644
--- a/src/octoi/e1oip.h
+++ b/src/octoi/e1oip.h
@@ -60,6 +60,7 @@

struct e1oip_line *e1oip_line_alloc(struct octoi_peer *peer);
void e1oip_line_set_name(struct e1oip_line *line, const char *name);
+void e1oip_line_reset(struct e1oip_line *iline);
void e1oip_line_destroy(struct e1oip_line *iline);

int e1oip_rcvmsg_tdm_data(struct e1oip_line *iline, struct msgb *msg);
diff --git a/src/octoi/octoi_clnt_fsm.c b/src/octoi/octoi_clnt_fsm.c
index 1c38bc8..f2fe989 100644
--- a/src/octoi/octoi_clnt_fsm.c
+++ b/src/octoi/octoi_clnt_fsm.c
@@ -115,6 +115,9 @@
{
struct clnt_state *st = fi->priv;

+ /* reset RIFO/FIFO etc. */
+ e1oip_line_reset(st->peer->iline);
+
st->peer->tdm_permitted = true;
osmo_timer_schedule(&st->rx_alive_timer, 3, 0);
}
diff --git a/src/octoi/octoi_srv_fsm.c b/src/octoi/octoi_srv_fsm.c
index 9f1019a..3990a16 100644
--- a/src/octoi/octoi_srv_fsm.c
+++ b/src/octoi/octoi_srv_fsm.c
@@ -169,6 +169,9 @@
{
struct srv_state *st = fi->priv;

+ /* reset RIFO/FIFO etc. */
+ e1oip_line_reset(st->peer->iline);
+
st->peer->tdm_permitted = true;
osmo_timer_schedule(&st->rx_alive_timer, 3, 0);
}

To view, visit change 27833. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmo-e1d
Gerrit-Branch: master
Gerrit-Change-Id: I9e721b5dbf22728cb2361ed121d12def7016dcc2
Gerrit-Change-Number: 27833
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge@osmocom.org>
Gerrit-MessageType: newchange