From ebde64f258b5e522ad47399c034751d2e9421f90 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Thu, 12 Jul 2012 09:18:42 +0200 Subject: [PATCH] logging: Add vty to allow definition/storage of debug levels Note: This requires new libosomocore that allows to compile VTY headers with C++. --- src/Makefile.am | 6 ++++-- src/pcu_main.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index ca586fd..041831fa 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -33,7 +33,8 @@ libgprs_la_SOURCES = \ gprs_rlcmac_sched.cpp \ gsm_timer.cpp \ bitvector.cpp \ - pcu_l1_if.cpp + pcu_l1_if.cpp \ + pcu_vty.c if ENABLE_SYSMOBTS libgprs_la_SOURCES += \ @@ -56,7 +57,8 @@ noinst_HEADERS = \ pcuif_proto.h \ pcu_l1_if.h \ gsm_timer.h \ - bitvector.h + bitvector.h \ + pcu_vty.h RLCMACTest_SOURCES = RLCMACTest.cpp RLCMACTest_LDADD = \ diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp index 6c30c1e..2a01b9b 100644 --- a/src/pcu_main.cpp +++ b/src/pcu_main.cpp @@ -25,15 +25,26 @@ #include #include #include +extern "C" { +#include "pcu_vty.h" +#include +#include +} struct gprs_rlcmac_bts *gprs_rlcmac_bts; extern struct gprs_nsvc *nsvc; uint16_t spoof_mcc = 0, spoof_mnc = 0; +static int config_given = 0; +static const char *config_file = "osmo-pcu.cfg"; +extern struct vty_app_info pcu_vty_info; +void *tall_pcu_ctx; static void print_help() { printf( "Some useful options:\n" " -h --help this text\n" + " -c --config-file Specify the filename of the config " + "file\n" " -m --mcc MCC use given MCC instead of value " "provided by BTS\n" " -n --mnc MNC use given MNC instead of value " @@ -48,12 +59,13 @@ static void handle_options(int argc, char **argv) int option_idx = 0, c; static const struct option long_options[] = { { "help", 0, 0, 'h' }, + { "config-file", 1, 0, 'c' }, { "mcc", 1, 0, 'm' }, { "mnc", 1, 0, 'n' }, { 0, 0, 0, 0 } }; - c = getopt_long(argc, argv, "hm:n:", + c = getopt_long(argc, argv, "hc:m:n:", long_options, &option_idx); if (c == -1) break; @@ -63,6 +75,10 @@ static void handle_options(int argc, char **argv) print_help(); exit(0); break; + case 'c': + config_file = strdup(optarg); + config_given = 1; + break; case 'm': spoof_mcc = atoi(optarg); break; @@ -82,7 +98,12 @@ int main(int argc, char *argv[]) struct gprs_rlcmac_bts *bts; int rc; - bts = gprs_rlcmac_bts = talloc_zero(NULL, struct gprs_rlcmac_bts); + tall_pcu_ctx = talloc_named_const(NULL, 1, "Osmo-PCU context"); + if (!tall_pcu_ctx) + return -ENOMEM; + + bts = gprs_rlcmac_bts = talloc_zero(tall_pcu_ctx, + struct gprs_rlcmac_bts); if (!gprs_rlcmac_bts) return -ENOMEM; gprs_rlcmac_bts->initial_cs = 1; @@ -99,12 +120,32 @@ int main(int argc, char *argv[]) osmo_init_logging(&gprs_log_info); + vty_init(&pcu_vty_info); + pcu_vty_init(&gprs_log_info); + handle_options(argc, argv); if ((!!spoof_mcc) + (!!spoof_mnc) == 1) { fprintf(stderr, "--mcc and --mnc must be specified " "together.\n"); exit(0); } + + rc = vty_read_config_file(config_file, NULL); + if (rc < 0 && config_given) { + fprintf(stderr, "Failed to parse the config file: '%s'\n", + config_file); + exit(1); + } + if (rc < 0) + fprintf(stderr, "No config file: '%s' Using default config.\n", + config_file); + + rc = telnet_init(tall_pcu_ctx, NULL, 4240); + if (rc < 0) { + fprintf(stderr, "Error initializing telnet\n"); + exit(1); + } + rc = pcu_l1if_open(); if (rc < 0) @@ -121,6 +162,7 @@ int main(int argc, char *argv[]) pcu_l1if_close(); talloc_free(gprs_rlcmac_bts); + talloc_free(tall_pcu_ctx); return 0; }