[PATCH] osmo-bsc[master]: HO prep: introduce per-BTS handover config, with defaults on...

2018-01-19 Thread Neels Hofmeyr
Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/5892

to look at the new patch set (#2).

HO prep: introduce per-BTS handover config, with defaults on net node

It is desirable to allow configuring handover for each individual network cell.
At the same time, it is desirable to set global defaults.

Treat the 'network' node handover parameters as global defaults, add another
set of parameters for each individual BTS.

This raises questions on how the 'network' node should affect the individual
BTS. The simplistic solution would have been: on creating a BTS in the config,
just copy the current defaults; with serious drawbacks:
- tweaking any parameter in the telnet VTY on network node will never affect
  any running BTS.
- network node defaults *must* be issued before the bts sections in the config
  file.
- when writing a config back to file, we would copy all net node defaults to
  each BTS node, making the network node configs pointless.

Instead, add a handover_cfg API that tracks whether a given node has a value
set or not. A bts node ho_cfg gets a pointer to the network node config and
returns those values if locally unset. If no value is set on any node, use the
"factory" defaults, which are hardcoded in the API. Only write back exactly
those config items that were actually issued in a config file / on the telnet
VTY. (ho_cfg API wise, we could trivially add another ho_cfg level per TRX if
we so desire in the future.)

Implement ho parameters as an opaque config struct with getters and setters to
ensure the tracking is always heeded. Opaqueness dictates allocating instead of
direct embedding in gsm_network and gsm_bts structs, ctx is gsm_net / bts.

This is 100% backwards compatible to
old configs.
- No VTY command syntax changes (only the online help).
- If a 'bts' sets nothing, it will use the 'network' defaults.
- The 'show network' output only changes in presence of individual BTS configs.

On 'show network', say "Handover: On|Off" as before, iff all BTS reflect
identical behavior. Otherwise, output BTS counts of handover being enabled or
not.

Use the same set of VTY commands (same VTY cmd syntax as before) on network and
BTS nodes, i.e. don't duplicate VTY code. From the current vty->node, figure
out which ho_cfg to modify.

For linking, add handover_cfg.c (the value API) in libcommon, while the
handover_vty.c is in libbsc. This is mainly because some utility programs use
gsm_network and hence suck in the ho stuff, but don't need the VTY commands.

Review the VTY online help strings.

Add VTY transcript test for handover options, testing config propagation from
network to bts nodes, 'show network' output and VTY online help strings.
(Needs recent addition of '... !' wildcard to osmo_interact_common.py.)

I considered leaving parts of this more readable, but in the end decided for
heavy use of macros to define and declare the API, because more values will be
added in upcoming patches and I want to prevent myself from messing them up.

Inspired-by: jolly/new_handover branch, which moves the config to 'bts' level
Depends: I7c1ebb2e7f059047903a53de26a0ec1ce7fa9b98 (osmo-python-tests)
Change-Id: I79d35f6d3c0fbee67904378ad7f216df34fde79a
---
M include/osmocom/bsc/Makefile.am
M include/osmocom/bsc/gsm_data.h
M include/osmocom/bsc/gsm_data_shared.h
A include/osmocom/bsc/handover_cfg.h
A include/osmocom/bsc/handover_vty.h
M src/libbsc/Makefile.am
M src/libbsc/bsc_vty.c
M src/libbsc/handover_decision.c
A src/libbsc/handover_vty.c
M src/libbsc/net_init.c
M src/libcommon/Makefile.am
M src/libcommon/gsm_data.c
M src/libcommon/gsm_data_shared.c
A src/libcommon/handover_cfg.c
M tests/Makefile.am
A tests/handover_cfg.vty
16 files changed, 653 insertions(+), 150 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/92/5892/2

diff --git a/include/osmocom/bsc/Makefile.am b/include/osmocom/bsc/Makefile.am
index b067fc2..699aeb3 100644
--- a/include/osmocom/bsc/Makefile.am
+++ b/include/osmocom/bsc/Makefile.am
@@ -25,7 +25,9 @@
gsm_data.h \
gsm_data_shared.h \
handover.h \
+   handover_cfg.h \
handover_decision.h \
+   handover_vty.h \
ipaccess.h \
meas_feed.h \
meas_rep.h \
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index ed2a95c..c09d546 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -227,22 +227,7 @@
uint16_t network_code;
int a5_encryption;
int neci;
-   struct {
-   int active;
-   /* Window RXLEV averaging */
-   unsigned int win_rxlev_avg; /* number of SACCH frames */
-   /* Window RXQUAL averaging */
-   unsigned int win_rxqual_avg;/* number of SACCH frames */
-   /* Window RXLEV neighbouring cells averaging */
-   unsigned int win_rxlev_avg_neigh; /* number of SACCH frames 

[PATCH] osmo-bsc[master]: HO prep: introduce per-BTS handover config, with defaults on...

2018-01-18 Thread Neels Hofmeyr

Review at  https://gerrit.osmocom.org/5892

HO prep: introduce per-BTS handover config, with defaults on net node

It is desirable to allow configuring handover for each individual network cell.
At the same time, it is desirable to set global defaults.

Treat the 'network' node handover parameters as global defaults, add another
set of parameters for each individual BTS.

This raises questions on how the 'network' node should affect the individual
BTS. The simplistic solution would have been: on creating a BTS in the config,
just copy the current defaults; with serious drawbacks:
- tweaking any parameter in the telnet VTY on network node will never affect
  any running BTS.
- network node defaults *must* be issued before the bts sections in the config
  file.
- when writing a config back to file, we would copy all net node defaults to
  each BTS node, making the network node configs pointless.

Instead, add a handover_cfg API that tracks whether a given node has a value
set or not. A bts node ho_cfg gets a pointer to the network node config and
returns those values if locally unset. If no value is set on any node, use the
"factory" defaults, which are hardcoded in the API. Only write back exactly
those config items that were actually issued in a config file / on the telnet
VTY. (ho_cfg API wise, we could trivially add another ho_cfg level per TRX if
we so desire in the future.)

Implement ho parameters as an opaque config struct with getters and setters to
ensure the tracking is always heeded. Opaqueness dictates allocating instead of
direct embedding in gsm_network and gsm_bts structs, ctx is gsm_net / bts.

This is 100% backwards compatible to
old configs.
- No VTY command syntax changes (only the online help).
- If a 'bts' sets nothing, it will use the 'network' defaults.
- The 'show network' output only changes in presence of individual BTS configs.

On 'show network', say "Handover: On|Off" as before, iff all BTS reflect
identical behavior. Otherwise, output BTS counts of handover being enabled or
not.

Use the same set of VTY commands (same VTY cmd syntax as before) on network and
BTS nodes, i.e. don't duplicate VTY code. From the current vty->node, figure
out which ho_cfg to modify.

For linking, add handover_cfg.c (the value API) in libcommon, while the
handover_vty.c is in libbsc. This is mainly because some utility programs use
gsm_network and hence suck in the ho stuff, but don't need the VTY commands.

Review the VTY online help strings.

Add VTY transcript test for handover options, testing config propagation from
network to bts nodes, 'show network' output and VTY online help strings.
(Needs recent addition of '... !' wildcard to osmo_interact_common.py.)

I considered leaving parts of this more readable, but in the end decided for
heavy use of macros to define and declare the API, because more values will be
added in upcoming patches and I want to prevent myself from messing them up.

Inspired-by: jolly/new_handover branch, which moves the config to 'bts' level
Depends: I7c1ebb2e7f059047903a53de26a0ec1ce7fa9b98 (osmo-python-tests)
Change-Id: I79d35f6d3c0fbee67904378ad7f216df34fde79a
---
M include/osmocom/bsc/Makefile.am
M include/osmocom/bsc/gsm_data.h
M include/osmocom/bsc/gsm_data_shared.h
A include/osmocom/bsc/handover_cfg.h
A include/osmocom/bsc/handover_vty.h
M src/libbsc/Makefile.am
M src/libbsc/bsc_vty.c
M src/libbsc/handover_decision.c
A src/libbsc/handover_vty.c
M src/libbsc/net_init.c
M src/libcommon/Makefile.am
M src/libcommon/gsm_data.c
M src/libcommon/gsm_data_shared.c
A src/libcommon/handover_cfg.c
M tests/Makefile.am
A tests/handover_cfg.vty
16 files changed, 653 insertions(+), 150 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/92/5892/1

diff --git a/include/osmocom/bsc/Makefile.am b/include/osmocom/bsc/Makefile.am
index b067fc2..699aeb3 100644
--- a/include/osmocom/bsc/Makefile.am
+++ b/include/osmocom/bsc/Makefile.am
@@ -25,7 +25,9 @@
gsm_data.h \
gsm_data_shared.h \
handover.h \
+   handover_cfg.h \
handover_decision.h \
+   handover_vty.h \
ipaccess.h \
meas_feed.h \
meas_rep.h \
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index ed2a95c..c09d546 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -227,22 +227,7 @@
uint16_t network_code;
int a5_encryption;
int neci;
-   struct {
-   int active;
-   /* Window RXLEV averaging */
-   unsigned int win_rxlev_avg; /* number of SACCH frames */
-   /* Window RXQUAL averaging */
-   unsigned int win_rxqual_avg;/* number of SACCH frames */
-   /* Window RXLEV neighbouring cells averaging */
-   unsigned int win_rxlev_avg_neigh; /* number of SACCH frames */
-
-   /* how often should we check for power budget HO */
-   unsigned int 

[PATCH] osmo-bsc[master]: HO prep: introduce per-BTS handover config, with defaults on...

2017-11-29 Thread Neels Hofmeyr
Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/5050

to look at the new patch set (#7).

HO prep: introduce per-BTS handover config, with defaults on net node

It is desirable to allow configuring handover for each individual network cell.
At the same time, it is desirable to set global defaults.

Treat the 'network' node handover parameters as global defaults, add another
set of parameters for each individual BTS.

This raises questions on how the 'network' node should affect the individual
BTS. The simplistic solution would have been: on creating a BTS in the config,
just copy the current defaults; with serious drawbacks:
- tweaking any parameter in the telnet VTY on network node will never affect
  any running BTS.
- network node defaults *must* be issued before the bts sections in the config
  file.
- when writing a config back to file, we would copy all net node defaults to
  each BTS node, making the network node configs pointless.

Instead, add a handover_cfg API that tracks whether a given node has a value
set or not. A bts node ho_cfg gets a pointer to the network node config and
returns those values if locally unset. If no value is set on any node, use the
"factory" defaults, which are hardcoded in the API. Only write back exactly
those config items that were actually issued in a config file / on the telnet
VTY. (ho_cfg API wise, we could trivially add another ho_cfg level per TRX if
we so desire in the future.)

Implement ho parameters as an opaque config struct with getters and setters to
ensure the tracking is always heeded. Opaqueness dictates allocating instead of
direct embedding in gsm_network and gsm_bts structs, ctx is gsm_net / bts.

This is 100% backwards compatible to
old configs.
- No VTY command syntax changes (only the online help).
- If a 'bts' sets nothing, it will use the 'network' defaults.
- The 'show network' output only changes in presence of individual BTS configs.

On 'show network', say "Handover: On|Off" as before, iff all BTS reflect
identical behavior. Otherwise, output BTS counts of handover being enabled or
not.

Use the same set of VTY commands (same VTY cmd syntax as before) on network and
BTS nodes, i.e. don't duplicate VTY code. From the current vty->node, figure
out which ho_cfg to modify.

For linking, add handover_cfg.c (the value API) in libcommon, while the
handover_vty.c is in libbsc. This is mainly because some utility programs use
gsm_network and hence suck in the ho stuff, but don't need the VTY commands.

Review the VTY online help strings.

Add VTY transcript test for handover options, testing config propagation from
network to bts nodes, 'show network' output and VTY online help strings.
(Needs recent addition of '... !' wildcard to osmo_interact_common.py.)

Though the ho_cfg value getter/setter function definitions are made by a macro,
the declarations in handover_cfg.h are written out in full for better API
readability.

Inspired-by: jolly/new_handover branch, which moves the config to 'bts' level
Depends: I7c1ebb2e7f059047903a53de26a0ec1ce7fa9b98 (osmo-python-tests)
Change-Id: I00870a5828703cf397776668d3301c0c3a4e033a
---
M include/osmocom/bsc/Makefile.am
M include/osmocom/bsc/gsm_data.h
M include/osmocom/bsc/gsm_data_shared.h
A include/osmocom/bsc/handover_cfg.h
A include/osmocom/bsc/handover_vty.h
M src/libbsc/Makefile.am
M src/libbsc/bsc_vty.c
M src/libbsc/handover_decision.c
A src/libbsc/handover_vty.c
M src/libbsc/net_init.c
M src/libcommon/Makefile.am
M src/libcommon/gsm_data.c
M src/libcommon/gsm_data_shared.c
A src/libcommon/handover_cfg.c
M tests/Makefile.am
A tests/handover_cfg.vty
16 files changed, 639 insertions(+), 148 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/50/5050/7

diff --git a/include/osmocom/bsc/Makefile.am b/include/osmocom/bsc/Makefile.am
index 9d2ee6e..10467c5 100644
--- a/include/osmocom/bsc/Makefile.am
+++ b/include/osmocom/bsc/Makefile.am
@@ -28,7 +28,9 @@
gsm_data_shared.h \
gsm_subscriber.h \
handover.h \
+   handover_cfg.h \
handover_decision.h \
+   handover_vty.h \
ipaccess.h \
meas_feed.h \
meas_rep.h \
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 857dd4f..120537e 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -373,22 +373,7 @@
bool authentication_required;
int neci;
int send_mm_info;
-   struct {
-   int active;
-   /* Window RXLEV averaging */
-   unsigned int win_rxlev_avg; /* number of SACCH frames */
-   /* Window RXQUAL averaging */
-   unsigned int win_rxqual_avg;/* number of SACCH frames */
-   /* Window RXLEV neighbouring cells averaging */
-   unsigned int win_rxlev_avg_neigh; /* number of SACCH frames */
-
-   /* how often should we check for 

[PATCH] osmo-bsc[master]: HO prep: introduce per-BTS handover config, with defaults on...

2017-11-29 Thread Neels Hofmeyr
Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/5050

to look at the new patch set (#5).

HO prep: introduce per-BTS handover config, with defaults on net node

It is desirable to allow configuring handover for each individual network cell.
At the same time, it is desirable to set global defaults.

Treat the 'network' node handover parameters as global defaults, add another
set of parameters for each individual BTS.

This raises questions on how the 'network' node should affect the individual
BTS. The simplistic solution would have been: on creating a BTS in the config,
just copy the current defaults; with serious drawbacks:
- tweaking any parameter in the telnet VTY on network node will never affect
  any running BTS.
- network node defaults *must* be issued before the bts sections in the config
  file.
- when writing a config back to file, we would copy all net node defaults to
  each BTS node, making the network node configs pointless.

Instead, add a handover_cfg API that tracks whether a given node has a value
set or not. A bts node ho_cfg gets a pointer to the network node config and
returns those values if locally unset. If no value is set on any node, use the
"factory" defaults, which are hardcoded in the API. Only write back exactly
those config items that were actually issued in a config file / on the telnet
VTY. (ho_cfg API wise, we could trivially add another ho_cfg level per TRX if
we so desire in the future.)

Implement ho parameters as an opaque config struct with getters and setters to
ensure the tracking is always heeded. Opaqueness dictates allocating instead of
direct embedding in gsm_network and gsm_bts structs, ctx is gsm_net / bts.

This is 100% backwards compatible to
old configs.
- No VTY command syntax changes (only the online help).
- If a 'bts' sets nothing, it will use the 'network' defaults.
- The 'show network' output only changes in presence of individual BTS configs.

On 'show network', say "Handover: On|Off" as before, iff all BTS reflect
identical behavior. Otherwise, output BTS counts of handover being enabled or
not.

Use the same set of VTY commands (same VTY cmd syntax as before) on network and
BTS nodes, i.e. don't duplicate VTY code. From the current vty->node, figure
out which ho_cfg to modify.

For linking, add handover_cfg.c (the value API) in libcommon, while the
handover_vty.c is in libbsc. This is mainly because some utility programs use
gsm_network and hence suck in the ho stuff, but don't need the VTY commands.

Review the VTY online help strings.

Add VTY transcript test for handover options, testing config propagation from
network to bts nodes, 'show network' output and VTY online help strings.
(Needs recent addition of '... !' wildcard to osmo_interact_common.py.)

Though the ho_cfg value getter/setter function definitions are made by a macro,
the declarations in handover_cfg.h are written out in full for better API
readability.

Inspired-by: jolly/new_handover branch, which moves the config to 'bts' level
Depends: I7c1ebb2e7f059047903a53de26a0ec1ce7fa9b98 (osmo-python-tests)
Change-Id: I00870a5828703cf397776668d3301c0c3a4e033a
---
M include/osmocom/bsc/Makefile.am
M include/osmocom/bsc/gsm_data.h
M include/osmocom/bsc/gsm_data_shared.h
A include/osmocom/bsc/handover_cfg.h
A include/osmocom/bsc/handover_vty.h
M src/libbsc/Makefile.am
M src/libbsc/bsc_vty.c
M src/libbsc/handover_decision.c
A src/libbsc/handover_vty.c
M src/libbsc/net_init.c
M src/libcommon/Makefile.am
M src/libcommon/gsm_data.c
M src/libcommon/gsm_data_shared.c
A src/libcommon/handover_cfg.c
M tests/Makefile.am
A tests/handover_cfg.vty
16 files changed, 639 insertions(+), 148 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/50/5050/5

diff --git a/include/osmocom/bsc/Makefile.am b/include/osmocom/bsc/Makefile.am
index 1f7cd39..614f633 100644
--- a/include/osmocom/bsc/Makefile.am
+++ b/include/osmocom/bsc/Makefile.am
@@ -28,7 +28,9 @@
gsm_data_shared.h \
gsm_subscriber.h \
handover.h \
+   handover_cfg.h \
handover_decision.h \
+   handover_vty.h \
ipaccess.h \
meas_feed.h \
meas_rep.h \
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 857dd4f..120537e 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -373,22 +373,7 @@
bool authentication_required;
int neci;
int send_mm_info;
-   struct {
-   int active;
-   /* Window RXLEV averaging */
-   unsigned int win_rxlev_avg; /* number of SACCH frames */
-   /* Window RXQUAL averaging */
-   unsigned int win_rxqual_avg;/* number of SACCH frames */
-   /* Window RXLEV neighbouring cells averaging */
-   unsigned int win_rxlev_avg_neigh; /* number of SACCH frames */
-
-   /* how often should we check for 

[PATCH] osmo-bsc[master]: HO prep: introduce per-BTS handover config, with defaults on...

2017-11-29 Thread Neels Hofmeyr
Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/5050

to look at the new patch set (#3).

HO prep: introduce per-BTS handover config, with defaults on net node

It is desirable to allow configuring handover for each individual network cell.
At the same time, it is desirable to set global defaults.

Treat the 'network' node handover parameters as global defaults, add another
set of parameters for each individual BTS.

This raises questions on how the 'network' node should affect the individual
BTS. The simplistic solution would have been: on creating a BTS in the config,
just copy the current defaults; with serious drawbacks:
- tweaking any parameter in the telnet VTY on network node will never affect
  any running BTS.
- network node defaults *must* be issued before the bts sections in the config
  file.
- when writing a config back to file, we would copy all net node defaults to
  each BTS node, making the network node configs pointless.

Instead, add a handover_cfg API that tracks whether a given node has a value
set or not. A bts node ho_cfg gets a pointer to the network node config and
returns those values if locally unset. If no value is set on any node, use the
"factory" defaults, which are hardcoded in the API. Only write back exactly
those config items that were actually issued in a config file / on the telnet
VTY. (ho_cfg API wise, we could trivially add another ho_cfg level per TRX if
we so desire in the future.)

Implement ho parameters as an opaque config struct with getters and setters to
ensure the tracking is always heeded. Opaqueness dictates allocating instead of
direct embedding in gsm_network and gsm_bts structs, ctx is gsm_net / bts.

This is 100% backwards compatible to
old configs.
- No VTY command syntax changes (only the online help).
- If a 'bts' sets nothing, it will use the 'network' defaults.
- The 'show network' output only changes in presence of individual BTS configs.

On 'show network', say "Handover: On|Off" as before, iff all BTS reflect
identical behavior. Otherwise, output BTS counts of handover being enabled or
not.

Use the same set of VTY commands (same VTY cmd syntax as before) on network and
BTS nodes, i.e. don't duplicate VTY code. From the current vty->node, figure
out which ho_cfg to modify.

For linking, add handover_cfg.c (the value API) in libcommon, while the
handover_vty.c is in libbsc. This is mainly because some utility programs use
gsm_network and hence suck in the ho stuff, but don't need the VTY commands.

Review the VTY online help strings.

Add VTY transcript test for handover options, testing config propagation from
network to bts nodes, 'show network' output and VTY online help strings.

Though the ho_cfg value getter/setter function definitions are made by a macro,
the declarations in handover_cfg.h are written out in full for better API
readability.

Inspired-by: jolly/new_handover branch, which moves the config to 'bts' level
Change-Id: I00870a5828703cf397776668d3301c0c3a4e033a
---
M include/osmocom/bsc/Makefile.am
M include/osmocom/bsc/gsm_data.h
M include/osmocom/bsc/gsm_data_shared.h
A include/osmocom/bsc/handover_cfg.h
A include/osmocom/bsc/handover_vty.h
M src/libbsc/Makefile.am
M src/libbsc/bsc_vty.c
M src/libbsc/handover_decision.c
A src/libbsc/handover_vty.c
M src/libbsc/net_init.c
M src/libcommon/Makefile.am
M src/libcommon/gsm_data.c
M src/libcommon/gsm_data_shared.c
A src/libcommon/handover_cfg.c
M tests/Makefile.am
A tests/handover_cfg.vty
16 files changed, 681 insertions(+), 148 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/50/5050/3

diff --git a/include/osmocom/bsc/Makefile.am b/include/osmocom/bsc/Makefile.am
index 1f7cd39..614f633 100644
--- a/include/osmocom/bsc/Makefile.am
+++ b/include/osmocom/bsc/Makefile.am
@@ -28,7 +28,9 @@
gsm_data_shared.h \
gsm_subscriber.h \
handover.h \
+   handover_cfg.h \
handover_decision.h \
+   handover_vty.h \
ipaccess.h \
meas_feed.h \
meas_rep.h \
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 857dd4f..120537e 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -373,22 +373,7 @@
bool authentication_required;
int neci;
int send_mm_info;
-   struct {
-   int active;
-   /* Window RXLEV averaging */
-   unsigned int win_rxlev_avg; /* number of SACCH frames */
-   /* Window RXQUAL averaging */
-   unsigned int win_rxqual_avg;/* number of SACCH frames */
-   /* Window RXLEV neighbouring cells averaging */
-   unsigned int win_rxlev_avg_neigh; /* number of SACCH frames */
-
-   /* how often should we check for power budget HO */
-   unsigned int pwr_interval;  /* SACCH frames */
-   /* how much better does a neighbor cell 

[PATCH] osmo-bsc[master]: HO prep: introduce per-BTS handover config, with defaults on...

2017-11-27 Thread Neels Hofmeyr
Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/5050

to look at the new patch set (#2).

HO prep: introduce per-BTS handover config, with defaults on net node

It is desirable to allow configuring handover for each individual network cell.
At the same time, it is desirable to set global defaults.

Treat the 'network' node handover parameters as global defaults, add another
set of parameters for each individual BTS.

This raises questions on how the 'network' node should affect the individual
BTS. The simplistic solution would have been: on creating a BTS in the config,
just copy the current defaults; with serious drawbacks:
- tweaking any parameter in the telnet VTY on network node will never affect
  any running BTS.
- network node defaults *must* be issued before the bts sections in the config
  file.
- when writing a config back to file, we would copy all net node defaults to
  each BTS node, making the network node configs pointless.

Instead, add a handover_cfg API that tracks whether a given node has a value
set or not. A bts node ho_cfg gets a pointer to the network node config and
returns those values if locally unset. If no value is set on any node, use the
"factory" defaults, which are hardcoded in the API. Only write back exactly
those config items that were actually issued in a config file / on the telnet
VTY. (ho_cfg API wise, we could trivially add another ho_cfg level per TRX if
we so desire in the future.)

Implement ho parameters as an opaque config struct with getters and setters to
ensure the tracking is always heeded. Opaqueness dictates allocating instead of
direct embedding in gsm_network and gsm_bts structs, ctx is gsm_net / bts.

This is 100% backwards compatible to
old configs.
- No VTY command syntax changes (only the online help).
- If a 'bts' sets nothing, it will use the 'network' defaults.
- The 'show network' output only changes in presence of individual BTS configs.

On 'show network', say "Handover: On|Off" as before, iff all BTS reflect
identical behavior. Otherwise, output BTS counts of handover being enabled or
not.

Use the same set of VTY commands (same VTY cmd syntax as before) on network and
BTS nodes, i.e. don't duplicate VTY code. From the current vty->node, figure
out which ho_cfg to modify.

For linking, add handover_cfg.c (the value API) in libcommon, while the
handover_vty.c is in libbsc. This is mainly because some utility programs use
gsm_network and hence suck in the ho stuff, but don't need the VTY commands.

Review the VTY online help strings.

Add VTY transcript test for handover options, testing config propagation from
network to bts nodes, 'show network' output and VTY online help strings.

Though the ho_cfg value getter/setter function definitions are made by a macro,
the declarations in handover_cfg.h are written out in full for better API
readability.

Inspired-by: jolly/new_handover branch, which moves the config to 'bts' level
Change-Id: I00870a5828703cf397776668d3301c0c3a4e033a
---
M include/osmocom/bsc/Makefile.am
M include/osmocom/bsc/gsm_data.h
M include/osmocom/bsc/gsm_data_shared.h
A include/osmocom/bsc/handover_cfg.h
A include/osmocom/bsc/handover_vty.h
M src/libbsc/Makefile.am
M src/libbsc/bsc_vty.c
M src/libbsc/handover_decision.c
A src/libbsc/handover_vty.c
M src/libbsc/net_init.c
M src/libcommon/Makefile.am
M src/libcommon/gsm_data.c
M src/libcommon/gsm_data_shared.c
A src/libcommon/handover_cfg.c
M tests/Makefile.am
A tests/handover_cfg.vty
16 files changed, 658 insertions(+), 148 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/50/5050/2

diff --git a/include/osmocom/bsc/Makefile.am b/include/osmocom/bsc/Makefile.am
index 1f7cd39..614f633 100644
--- a/include/osmocom/bsc/Makefile.am
+++ b/include/osmocom/bsc/Makefile.am
@@ -28,7 +28,9 @@
gsm_data_shared.h \
gsm_subscriber.h \
handover.h \
+   handover_cfg.h \
handover_decision.h \
+   handover_vty.h \
ipaccess.h \
meas_feed.h \
meas_rep.h \
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 75109e3..b33400b 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -376,22 +376,7 @@
bool authentication_required;
int neci;
int send_mm_info;
-   struct {
-   int active;
-   /* Window RXLEV averaging */
-   unsigned int win_rxlev_avg; /* number of SACCH frames */
-   /* Window RXQUAL averaging */
-   unsigned int win_rxqual_avg;/* number of SACCH frames */
-   /* Window RXLEV neighbouring cells averaging */
-   unsigned int win_rxlev_avg_neigh; /* number of SACCH frames */
-
-   /* how often should we check for power budget HO */
-   unsigned int pwr_interval;  /* SACCH frames */
-   /* how much better does a neighbor cell 

[PATCH] osmo-bsc[master]: HO prep: introduce per-BTS handover config, with defaults on...

2017-11-27 Thread Neels Hofmeyr

Review at  https://gerrit.osmocom.org/5050

HO prep: introduce per-BTS handover config, with defaults on net node

It is desirable to allow configuring handover for each individual network cell.
At the same time, it is desirable to set global defaults.

Treat the 'network' node handover parameters as global defaults, add another
set of parameters for each individual BTS.

This raises questions on how the 'network' node should affect the individual
BTS. The simplistic solution would have been: on creating a BTS in the config,
just copy the current defaults; with serious drawbacks:
- tweaking any parameter in the telnet VTY on network node will never affect
  any running BTS.
- network node defaults *must* be issued before the bts sections in the config
  file.
- when writing a config back to file, we would copy all net node defaults to
  each BTS node, making the network node configs pointless.

Instead, add a handover_cfg API that tracks whether a given node has a value
set or not. A bts node ho_cfg gets a pointer to the network node config and
returns those values if locally unset. If no value is set on any node, use the
"factory" defaults, which are hardcoded in the API. Only write back exactly
those config items that were actually issued in a config file / on the telnet
VTY. (ho_cfg API wise, we could trivially add another ho_cfg level per TRX if
we so desire in the future.)

Implement ho parameters as an opaque config struct with getters and setters to
ensure the tracking is always heeded. Opaqueness dictates allocating instead of
direct embedding in gsm_network and gsm_bts structs, ctx is gsm_net / bts.

This is 100% backwards compatible to
old configs.
- No VTY command syntax changes (only the online help).
- If a 'bts' sets nothing, it will use the 'network' defaults.
- The 'show network' output only changes in presence of individual BTS configs.

On 'show network', say "Handover: On|Off" as before, iff all BTS reflect
identical behavior. Otherwise, output BTS counts of handover being enabled or
not.

Use the same set of VTY commands (same VTY cmd syntax as before) on network and
BTS nodes, i.e. don't duplicate VTY code. From the current vty->node, figure
out which ho_cfg to modify.

For linking, add handover_cfg.c (the value API) in libcommon, while the
handover_vty.c is in libbsc. This is mainly because some utility programs use
gsm_network and hence suck in the ho stuff, but don't need the VTY commands.

Review the VTY online help strings.

Add VTY transcript test for handover options, testing config propagation from
network to bts nodes, 'show network' output and VTY online help strings.

Though the ho_cfg value getter/setter function definitions are made by a macro,
the declarations in handover_cfg.h are written out in full for better API
readability.

Inspired-by: jolly/new_handover branch, which moves the config to 'bts' level
Change-Id: I00870a5828703cf397776668d3301c0c3a4e033a
---
M include/osmocom/bsc/Makefile.am
M include/osmocom/bsc/gsm_data.h
M include/osmocom/bsc/gsm_data_shared.h
A include/osmocom/bsc/handover_cfg.h
A include/osmocom/bsc/handover_vty.h
M src/libbsc/Makefile.am
M src/libbsc/bsc_vty.c
M src/libbsc/handover_decision.c
A src/libbsc/handover_vty.c
M src/libbsc/net_init.c
M src/libcommon/Makefile.am
M src/libcommon/gsm_data.c
M src/libcommon/gsm_data_shared.c
A src/libcommon/handover_cfg.c
M tests/Makefile.am
A tests/handover_cfg.vty
16 files changed, 657 insertions(+), 148 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/50/5050/1

diff --git a/include/osmocom/bsc/Makefile.am b/include/osmocom/bsc/Makefile.am
index 1f7cd39..614f633 100644
--- a/include/osmocom/bsc/Makefile.am
+++ b/include/osmocom/bsc/Makefile.am
@@ -28,7 +28,9 @@
gsm_data_shared.h \
gsm_subscriber.h \
handover.h \
+   handover_cfg.h \
handover_decision.h \
+   handover_vty.h \
ipaccess.h \
meas_feed.h \
meas_rep.h \
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 75109e3..b33400b 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -376,22 +376,7 @@
bool authentication_required;
int neci;
int send_mm_info;
-   struct {
-   int active;
-   /* Window RXLEV averaging */
-   unsigned int win_rxlev_avg; /* number of SACCH frames */
-   /* Window RXQUAL averaging */
-   unsigned int win_rxqual_avg;/* number of SACCH frames */
-   /* Window RXLEV neighbouring cells averaging */
-   unsigned int win_rxlev_avg_neigh; /* number of SACCH frames */
-
-   /* how often should we check for power budget HO */
-   unsigned int pwr_interval;  /* SACCH frames */
-   /* how much better does a neighbor cell have to be ? */
-   unsigned int pwr_hysteresis;/* dBm */
-   /* maximum