int l23_app_init(struct osmocom_ms *ms) { /* don't do layer3_init() as we don't want an actualy L3 */ g_ms = ms; lapdm_channel_set_l3(&ms->lapdm_channel, &rcv_rsl, ms); l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL); /* FIXME: L1CTL_RES_T_FULL doesn't reset dedicated mode * (if previously set), so we release it here. */ l1ctl_tx_dm_rel_req(ms); return osmo_signal_register_handler(SS_L1CTL, &signal_cb, NULL); }
int meas_feed_cfg_set(const char *dst_host, uint16_t dst_port) { int rc; int already_initialized = 0; if (g_mfs.wqueue.bfd.fd) already_initialized = 1; if (already_initialized && !strcmp(dst_host, g_mfs.dst_host) && dst_port == g_mfs.dst_port) return 0; if (!already_initialized) { osmo_wqueue_init(&g_mfs.wqueue, 10); g_mfs.wqueue.write_cb = feed_write_cb; g_mfs.wqueue.read_cb = feed_read_cb; osmo_signal_register_handler(SS_LCHAN, meas_feed_sig_cb, NULL); } if (already_initialized) { osmo_wqueue_clear(&g_mfs.wqueue); osmo_fd_unregister(&g_mfs.wqueue.bfd); close(g_mfs.wqueue.bfd.fd); /* don't set to zero, as that would mean 'not yet initialized' */ g_mfs.wqueue.bfd.fd = -1; } rc = osmo_sock_init_ofd(&g_mfs.wqueue.bfd, AF_UNSPEC, SOCK_DGRAM, IPPROTO_UDP, dst_host, dst_port, OSMO_SOCK_F_CONNECT); if (rc < 0) return rc; g_mfs.wqueue.bfd.when &= ~BSC_FD_READ; if (g_mfs.dst_host) talloc_free(g_mfs.dst_host); g_mfs.dst_host = talloc_strdup(NULL, dst_host); g_mfs.dst_port = dst_port; return 0; }
struct paging_state *paging_init(struct gsm_bts *bts, unsigned int num_paging_max, unsigned int paging_lifetime) { struct paging_state *ps; unsigned int i; ps = talloc_zero(bts, struct paging_state); if (!ps) return NULL; ps->bts = bts; ps->paging_lifetime = paging_lifetime; ps->num_paging_max = num_paging_max; for (i = 0; i < ARRAY_SIZE(ps->paging_queue); i++) INIT_LLIST_HEAD(&ps->paging_queue[i]); if (!initialized) { osmo_signal_register_handler(SS_GLOBAL, paging_signal_cbfn, NULL); initialized = 1; } return ps; }
int scan_init(struct osmocom_ms *_ms) { ms = _ms; osmo_signal_register_handler(SS_L1CTL, &signal_cb, NULL); memset(&timer, 0, sizeof(timer)); lapdm_channel_set_l3(&ms->lapdm_channel, &rcv_rsl, ms); g.enable = 1; osmo_gps_init(); if (osmo_gps_open()) g.enable = 0; if (!strcmp(logname, "-")) logfp = stdout; else logfp = fopen(logname, "a"); if (!logfp) { fprintf(stderr, "Failed to open logfile '%s'\n", logname); scan_exit(); return -errno; } LOGP(DSUM, LOGL_INFO, "Scanner initialized\n"); return 0; }
int fps_init(void) { return osmo_signal_register_handler(SS_L1CTL, &bscan_sig_cb, NULL); }
void on_dso_load_ho_dec(void) { osmo_signal_register_handler(SS_LCHAN, ho_dec_sig_cb, NULL); }
void on_dso_load_rrlp(void) { osmo_signal_register_handler(SS_SUBSCR, subscr_sig_cb, NULL); osmo_signal_register_handler(SS_PAGING, paging_sig_cb, NULL); }
static __attribute__((constructor)) void on_dso_load_bsc(void) { osmo_signal_register_handler(SS_LCHAN, bsc_handle_lchan_signal, NULL); }
int main(int argc, char **argv) { struct gsm_network dummy_network; int rc; tall_bsc_ctx = talloc_named_const(NULL, 0, "nsip_proxy"); tall_msgb_ctx = talloc_named_const(tall_bsc_ctx, 0, "msgb"); signal(SIGINT, &signal_handler); signal(SIGABRT, &signal_handler); signal(SIGUSR1, &signal_handler); signal(SIGUSR2, &signal_handler); osmo_init_ignore_signals(); osmo_init_logging(&gprs_log_info); vty_info.copyright = openbsc_copyright; vty_init(&vty_info); logging_vty_add_cmds(&gprs_log_info); gbproxy_vty_init(); handle_options(argc, argv); rate_ctr_init(tall_bsc_ctx); rc = telnet_init(tall_bsc_ctx, &dummy_network, 4246); if (rc < 0) exit(1); bssgp_nsi = gprs_ns_instantiate(&proxy_ns_cb, tall_bsc_ctx); if (!bssgp_nsi) { LOGP(DGPRS, LOGL_ERROR, "Unable to instantiate NS\n"); exit(1); } gbcfg.nsi = bssgp_nsi; gprs_ns_vty_init(bssgp_nsi); gprs_ns_set_log_ss(DNS); bssgp_set_log_ss(DBSSGP); osmo_signal_register_handler(SS_L_NS, &gbprox_signal, NULL); rc = gbproxy_parse_config(config_file, &gbcfg); if (rc < 0) { LOGP(DGPRS, LOGL_FATAL, "Cannot parse config file\n"); exit(2); } if (!gprs_nsvc_by_nsei(gbcfg.nsi, gbcfg.nsip_sgsn_nsei)) { LOGP(DGPRS, LOGL_FATAL, "You cannot proxy to NSEI %u " "without creating that NSEI before\n", gbcfg.nsip_sgsn_nsei); exit(2); } rc = gprs_ns_nsip_listen(bssgp_nsi); if (rc < 0) { LOGP(DGPRS, LOGL_FATAL, "Cannot bind/listen on NSIP socket\n"); exit(2); } rc = gprs_ns_frgre_listen(bssgp_nsi); if (rc < 0) { LOGP(DGPRS, LOGL_FATAL, "Cannot bind/listen GRE " "socket. Do you have CAP_NET_RAW?\n"); exit(2); } if (daemonize) { rc = osmo_daemonize(); if (rc < 0) { perror("Error during daemonize"); exit(1); } } /* Reset all the persistent NS-VCs that we've read from the config */ gbprox_reset_persistent_nsvcs(bssgp_nsi); while (1) { rc = osmo_select_main(0); if (rc < 0) exit(3); } exit(0); }