aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/gprs/gtphub.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/gprs/gtphub.c')
-rw-r--r--openbsc/src/gprs/gtphub.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/openbsc/src/gprs/gtphub.c b/openbsc/src/gprs/gtphub.c
index ff1105b8e..db84a00c3 100644
--- a/openbsc/src/gprs/gtphub.c
+++ b/openbsc/src/gprs/gtphub.c
@@ -1302,7 +1302,16 @@ static void gtphub_map_restart_counter(struct gtphub *hub,
struct gtphub_peer_port *from,
struct gtphub_peer_port *to)
{
- /* TODO */
+ /* Always send gtphub's own restart counter */
+ if (p->rc != GTP_RC_PDU_C)
+ return;
+
+ int ie_idx;
+ ie_idx = gtpie_getie(p->ie, GTPIE_RECOVERY, 0);
+ if (ie_idx < 0)
+ return;
+
+ p->ie[ie_idx]->tv1.v = hton8(hub->restart_counter);
}
static int gtphub_unmap_header_tei(struct gtphub_peer_port **to_port_p,
@@ -2164,12 +2173,15 @@ static int gtphub_make_proxy(struct gtphub *hub,
return 0;
}
-int gtphub_start(struct gtphub *hub, struct gtphub_cfg *cfg)
+int gtphub_start(struct gtphub *hub, struct gtphub_cfg *cfg,
+ uint8_t restart_counter)
{
int rc;
gtphub_init(hub);
+ hub->restart_counter = restart_counter;
+
/* If a Ctrl plane proxy is configured, ares will never be used. */
if (!cfg->ggsn_proxy[GTPH_PLANE_CTRL].addr_str) {
if (gtphub_ares_init(hub) != 0) {