[PATCH 2/2] misc: Add an option exit/quit when the BSSGP is supposed to be destroyed

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/osmocom-net-gprs@lists.osmocom.org/.

Ivan Kluchnikov Ivan.Kluchnikov at fairwaves.ru
Thu Jul 25 16:27:04 UTC 2013


Hi Holger,

Sorry for slow response.
Actually I think that we should implement more intellectual behavior
of PCUfor handling restarts and disconnections of
BTS and SGSN.
I should try to find the way to solve this problem, but I will commit this
patch, because it fixes current problems.


2013/7/13 Holger Hans Peter Freyther <holger at moiji-mobile.com>

> The PCU does not properly re-set the state when the connection to the
> BTS is lost (and the SGSN potentially is re-started during that). This
> results in the BSSGP BVCI > 1 remaining blocked and no data will be
> accepted by the SGSN.
>
> Add the '-e' option and exit the PCU when the BSSGP/NS are getting
> destroyed.
> ---
>  src/gprs_bssgp_pcu.cpp | 13 ++++++++++++-
>  src/gprs_bssgp_pcu.h   |  3 ++-
>  src/openbts_sock.cpp   |  2 +-
>  src/pcu_l1_if.cpp      |  2 +-
>  src/pcu_main.cpp       |  7 ++++++-
>  src/sysmo_sock.cpp     |  2 +-
>  6 files changed, 23 insertions(+), 6 deletions(-)
>
> diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.cpp
> index c791913..59185e3 100644
> --- a/src/gprs_bssgp_pcu.cpp
> +++ b/src/gprs_bssgp_pcu.cpp
> @@ -27,6 +27,7 @@ struct bssgp_bvc_ctx *bctx = NULL;
>  struct gprs_nsvc *nsvc = NULL;
>  static int bvc_sig_reset = 0, bvc_reset = 0, bvc_unblocked = 0;
>  extern uint16_t spoof_mcc, spoof_mnc;
> +static int exit_on_destroy = 0;
>
>  struct osmo_timer_list bvc_timer;
>
> @@ -640,8 +641,13 @@ int gprs_bssgp_create(uint16_t local_port, uint32_t
> sgsn_ip,
>         return 0;
>  }
>
> -void gprs_bssgp_destroy(void)
> +void gprs_bssgp_destroy_or_exit(void)
>  {
> +       if (exit_on_destroy) {
> +               LOGP(DBSSGP, LOGL_NOTICE, "Exiting on BSSGP
> destruction.\n");
> +               exit(0);
> +       }
> +
>         if (!bssgp_nsi)
>                 return;
>
> @@ -662,3 +668,8 @@ void gprs_bssgp_destroy(void)
>         bssgp_nsi = NULL;
>  }
>
> +void gprs_bssgp_exit_on_destroy(void)
> +{
> +       LOGP(DBSSGP, LOGL_NOTICE, "Going to quit on BSSGP destruction\n");
> +       exit_on_destroy = 1;
> +}
> diff --git a/src/gprs_bssgp_pcu.h b/src/gprs_bssgp_pcu.h
> index d669c3a..dc57e4f 100644
> --- a/src/gprs_bssgp_pcu.h
> +++ b/src/gprs_bssgp_pcu.h
> @@ -56,6 +56,7 @@ int gprs_bssgp_create(uint16_t local_port, uint32_t
> sgsn_ip, uint16_t
>                 uint16_t mcc, uint16_t mnc, uint16_t lac, uint16_t rac,
>                 uint16_t cell_id);
>
> -void gprs_bssgp_destroy(void);
> +void gprs_bssgp_exit_on_destroy(void);
> +void gprs_bssgp_destroy_or_exit(void);
>
>  #endif // GPRS_BSSGP_PCU_H
> diff --git a/src/openbts_sock.cpp b/src/openbts_sock.cpp
> index 845aa77..a09f834 100644
> --- a/src/openbts_sock.cpp
> +++ b/src/openbts_sock.cpp
> @@ -179,7 +179,7 @@ int pcu_l1if_open()
>
>  void pcu_l1if_close(void)
>  {
> -       gprs_bssgp_destroy();
> +       gprs_bssgp_destroy_or_exit();
>
>         /* FIXME: cleanup l1if */
>         talloc_free(l1fh->fl1h);
> diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
> index 923070f..037cf60 100644
> --- a/src/pcu_l1_if.cpp
> +++ b/src/pcu_l1_if.cpp
> @@ -369,7 +369,7 @@ bssgp_failed:
>                                                 trx, ts);
>                         }
>                 }
> -               gprs_bssgp_destroy();
> +               gprs_bssgp_destroy_or_exit();
>                 return 0;
>         }
>         LOGP(DL1IF, LOGL_INFO, "BTS available\n");
> diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp
> index 041831f6..754043f 100644
> --- a/src/pcu_main.cpp
> +++ b/src/pcu_main.cpp
> @@ -60,6 +60,7 @@ static void print_help()
>                         "provided by BTS\n"
>                 "  -r   --realtime PRIO Use SCHED_RR with the specified "
>                         "priority\n"
> +               "  -e   --exit          Exit the application on
> disconnect\n"
>                 );
>  }
>
> @@ -75,10 +76,11 @@ static void handle_options(int argc, char **argv)
>                         { "mnc", 1, 0, 'n' },
>                         { "version", 0, 0, 'V' },
>                         { "realtime", 1, 0, 'r' },
> +                       { "exit", 0, 0, 'e' },
>                         { 0, 0, 0, 0 }
>                 };
>
> -               c = getopt_long(argc, argv, "hc:m:n:Vr:",
> +               c = getopt_long(argc, argv, "hc:m:n:Vr:e",
>                                 long_options, &option_idx);
>                 if (c == -1)
>                         break;
> @@ -105,6 +107,9 @@ static void handle_options(int argc, char **argv)
>                 case 'r':
>                         rt_prio = atoi(optarg);
>                         break;
> +               case 'e':
> +                       gprs_bssgp_exit_on_destroy();
> +                       break;
>                 default:
>                         fprintf(stderr, "Unknown option '%c'\n", c);
>                         exit(0);
> diff --git a/src/sysmo_sock.cpp b/src/sysmo_sock.cpp
> index d4fb5a6..e116e5a 100644
> --- a/src/sysmo_sock.cpp
> +++ b/src/sysmo_sock.cpp
> @@ -117,7 +117,7 @@ static void pcu_sock_close(struct pcu_sock_state
> *state, int lost)
>                 }
>         }
>
> -       gprs_bssgp_destroy();
> +       gprs_bssgp_destroy_or_exit();
>
>         if (lost) {
>                 state->timer.cb = pcu_sock_timeout;
> --
> 1.8.3.2
>
>
>


-- 
Regards,
Ivan Kluchnikov.
http://fairwaves.ru
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/osmocom-net-gprs/attachments/20130725/c6d01b2c/attachment.htm>


More information about the osmocom-net-gprs mailing list