From 04719d19b94b52a915d149ff553385e857ec8441 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Thu, 22 Feb 2018 10:14:16 +0100 Subject: [PATCH] osmo-bts-virtual: Shut down gracefully on socket creation failure Don't simply crash if creation of the multicast socket fails Change-Id: Ie87b6684b3aa7f21742e4cf21533e980485c1230 --- src/osmo-bts-virtual/l1_if.c | 4 ++-- src/osmo-bts-virtual/virtual_um.c | 5 +++++ 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 e7478a026..290e09783 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 e8d425292..fd0940f0a 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;