Compare commits

...

8 Commits

Author SHA1 Message Date
Holger Hans Peter Freyther
2727909dba Make a release with the bugfix of the bugfix 2010-03-24 11:25:13 +01:00
Holger Hans Peter Freyther
ad9856ec15 ipa: Fix the previous patch and initialize the fds to -1
The code in 354ef81d80 checked
for fd >= 0 but on startup the struct is memset to 0 so this
test is true. Initialize the fds to -1 to make the code work
and be able to handle all ranges of the fd.
2010-03-24 11:23:39 +01:00
Holger Hans Peter Freyther
9d53a8ad2a Release 0.3.3 with the proposed BFD fix. 2010-03-24 04:14:26 +01:00
Holger Hans Peter Freyther
058956e8ee ipaccess: Handle the case of replacing RSL connections
Fix a infinite loop when establishing a new RSL connection and the
BSC is identifying itself with a unit id of an already established
RSL connection. The infinite loops happens because we are corrupting
the the linuxlist inside the bsc_fd when registering the bfd twice.

Due the lack of proper authentication favor the new RSL connection
as the real one and close the previous one.
2010-03-24 04:02:55 +01:00
Holger Hans Peter Freyther
a34bb9167f Bump version to 0.3.2 with the two memleak fixes. 2010-02-21 13:08:19 +01:00
Holger Hans Peter Freyther
b8ac7ffd7c [msc/nat] It is better to use msgb_free to free the msgb
msgb_free is currently calling talloc_free but this might
change in the future and then this code would break..
2010-02-21 13:08:12 +01:00
Holger Hans Peter Freyther
b13cf829da [nat/bsc] Fix memory leak of IPA messages...
* The read_msg method is allocating the msgb and we will
  need to free it once we are done with it.
2010-02-21 12:56:02 +01:00
Holger Hans Peter Freyther
fdc64f6806 [bsc_msc_ip] Fix the re-queuing of packets...
* The MSC is sending us the next 04.08 packet before we have
  received the answer for the cipher model complete. The code was
  supposed to copy all packets from the current queue, to a new
  queue and then send the packets again.
* This would (re)establish the different SAPIs. Now the requeuing
  code was grabbing the packet from the empty queue (NULL pointer)
  and we were dereferencing it. It appears that we need to use
  "head" until the queue is empty.
2010-02-08 20:14:53 +01:00
5 changed files with 18 additions and 2 deletions

View File

@@ -1,7 +1,7 @@
dnl Process this file with autoconf to produce a configure script
AC_INIT
AM_INIT_AUTOMAKE(openbsc, 0.3onwaves)
AM_INIT_AUTOMAKE(openbsc, 0.3.4onwaves)
dnl kernel style compile messages
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])

View File

@@ -641,6 +641,7 @@ static int ipaccess_a_fd_cb(struct bsc_fd *bfd, unsigned int what)
else if (hh->proto == IPAC_PROTO_SCCP)
sccp_system_incoming(msg);
msgb_free(msg);
return 0;
}

View File

@@ -1260,7 +1260,7 @@ void bts_unblock_queue(struct bss_sccp_connection_data *data)
/* now queue them again to send RSL establish and such */
while (!llist_empty(&head)) {
msg = msgb_dequeue(&data->gsm_queue);
msg = msgb_dequeue(&head);
bts_queue_send(msg, (int) msg->smsh);
}
}

View File

@@ -242,6 +242,14 @@ static int ipaccess_rcvmsg(struct e1inp_line *line, struct msgb *msg,
trx->rsl_link = e1inp_sign_link_create(e1i_ts,
E1INP_SIGN_RSL, trx,
trx->rsl_tei, 0);
if (newbfd->fd >= 0) {
LOGP(DINP, LOGL_ERROR, "BTS is still registered. Closing old connection.\n");
bsc_unregister_fd(newbfd);
close(newbfd->fd);
newbfd->fd = -1;
}
/* get rid of our old temporary bfd */
memcpy(newbfd, bfd, sizeof(*newbfd));
newbfd->priv_nr = 2+trx_id;
@@ -484,6 +492,7 @@ static int listen_fd_cb(struct bsc_fd *listen_bfd, unsigned int what)
{
int ret;
int idx = 0;
int i;
struct e1inp_line *line;
struct e1inp_ts *e1i_ts;
struct bsc_fd *bfd;
@@ -510,6 +519,10 @@ static int listen_fd_cb(struct bsc_fd *listen_bfd, unsigned int what)
/* create virrtual E1 timeslots for signalling */
e1inp_ts_config(&line->ts[1-1], line, E1INP_TS_TYPE_SIGN);
/* initialize the fds */
for (i = 0; i < ARRAY_SIZE(line->ts); ++i)
line->ts[i].driver.ipaccess.fd.fd = -1;
e1i_ts = &line->ts[idx];
bfd = &e1i_ts->driver.ipaccess.fd;

View File

@@ -148,6 +148,7 @@ static int ipaccess_msc_cb(struct bsc_fd *bfd, unsigned int what)
else if (hh->proto == IPAC_PROTO_SCCP)
forward_sccp_to_bts(msg);
msgb_free(msg);
return 0;
}
@@ -203,6 +204,7 @@ static int ipaccess_bsc_cb(struct bsc_fd *bfd, unsigned int what)
/* FIXME: Currently no PONG is sent to the BSC */
/* FIXME: Currently no ID ACK is sent to the BSC */
forward_sccp_to_msc(msg);
msgb_free(msg);
return 0;
}