aboutsummaryrefslogtreecommitdiffstats
path: root/src/input/ipaccess.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/ipaccess.c')
-rw-r--r--src/input/ipaccess.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/input/ipaccess.c b/src/input/ipaccess.c
index 48a427c..a370c77 100644
--- a/src/input/ipaccess.c
+++ b/src/input/ipaccess.c
@@ -92,13 +92,23 @@ static int ipaccess_drop(struct osmo_fd *bfd, struct e1inp_line *line)
osmo_fd_unregister(bfd);
close(bfd->fd);
bfd->fd = -1;
- /* This is BSC code, ipaccess_drop() is only called for
- accepted() sockets, hence the bfd holds a reference to
- e1inp_line in ->data that needs to be released */
- OSMO_ASSERT(bfd->data == line);
- bfd->data = NULL;
- e1inp_line_put2(line, "ipa_bfd");
-
+ switch (line->ops->cfg.ipa.role) {
+ case E1INP_LINE_R_BSC:
+ /* This is BSC code, ipaccess_drop() is only called for
+ accepted() sockets, hence the bfd holds a reference to
+ e1inp_line in ->data that needs to be released */
+ OSMO_ASSERT(bfd->data == line);
+ bfd->data = NULL;
+ e1inp_line_put2(line, "ipa_bfd");
+ break;
+ case E1INP_LINE_R_BTS:
+ /* BTS code: bfd->data contains pointer to struct
+ * ipa_client_conn. Leave it alive so it reconnects.
+ */
+ break;
+ default:
+ break;
+ }
ret = -ENOENT;
} else {
LOGPITS(e1i_ts, DLINP, LOGL_ERROR,