diff options
Diffstat (limited to 'src/input/ipaccess.c')
-rw-r--r-- | src/input/ipaccess.c | 24 |
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, |