aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bts-virtual
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-02-22 10:14:16 +0100
committerHarald Welte <laforge@gnumonks.org>2018-02-22 12:11:28 +0100
commit04719d19b94b52a915d149ff553385e857ec8441 (patch)
tree39d932634ca5582154b8c11f8ec1ac17c1ceb373 /src/osmo-bts-virtual
parenta4bca115557feb0268e6cfda30238ded16328ae6 (diff)
osmo-bts-virtual: Shut down gracefully on socket creation failure
Don't simply crash if creation of the multicast socket fails Change-Id: Ie87b6684b3aa7f21742e4cf21533e980485c1230
Diffstat (limited to 'src/osmo-bts-virtual')
-rw-r--r--src/osmo-bts-virtual/l1_if.c4
-rw-r--r--src/osmo-bts-virtual/virtual_um.c5
2 files changed, 7 insertions, 2 deletions
diff --git a/src/osmo-bts-virtual/l1_if.c b/src/osmo-bts-virtual/l1_if.c
index e7478a02..290e0978 100644
--- a/src/osmo-bts-virtual/l1_if.c
+++ b/src/osmo-bts-virtual/l1_if.c
@@ -193,12 +193,12 @@ int bts_model_phy_link_open(struct phy_link *plink)
plink->u.virt.virt_um = virt_um_init(plink, plink->u.virt.ms_mcast_group, plink->u.virt.ms_mcast_port,
plink->u.virt.bts_mcast_group, plink->u.virt.bts_mcast_port,
virt_um_rcv_cb);
- /* set back reference to plink */
- plink->u.virt.virt_um->priv = plink;
if (!plink->u.virt.virt_um) {
phy_link_state_set(plink, PHY_LINK_SHUTDOWN);
return -1;
}
+ /* set back reference to plink */
+ plink->u.virt.virt_um->priv = plink;
/* iterate over list of PHY instances and initialize the scheduler */
llist_for_each_entry(pinst, &plink->instances, list) {
diff --git a/src/osmo-bts-virtual/virtual_um.c b/src/osmo-bts-virtual/virtual_um.c
index e8d42529..fd0940f0 100644
--- a/src/osmo-bts-virtual/virtual_um.c
+++ b/src/osmo-bts-virtual/virtual_um.c
@@ -66,6 +66,11 @@ struct virt_um_inst *virt_um_init(void *ctx, char *tx_mcast_group, uint16_t tx_m
struct virt_um_inst *vui = talloc_zero(ctx, struct virt_um_inst);
vui->mcast_sock = mcast_bidir_sock_setup(ctx, tx_mcast_group, tx_mcast_port,
rx_mcast_group, rx_mcast_port, 1, virt_um_fd_cb, vui);
+ if (!vui->mcast_sock) {
+ perror("Unable to create VirtualUm multicast socket");
+ talloc_free(vui);
+ return NULL;
+ }
vui->recv_cb = recv_cb;
return vui;