aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/gprs/gtphub_vty.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/gprs/gtphub_vty.c')
-rw-r--r--openbsc/src/gprs/gtphub_vty.c158
1 files changed, 69 insertions, 89 deletions
diff --git a/openbsc/src/gprs/gtphub_vty.c b/openbsc/src/gprs/gtphub_vty.c
index 602508854..f99f81803 100644
--- a/openbsc/src/gprs/gtphub_vty.c
+++ b/openbsc/src/gprs/gtphub_vty.c
@@ -280,132 +280,112 @@ static void show_peers_summary(struct vty *vty)
}
*/
-static void show_tei_maps_summary(struct vty *vty)
+static void show_tunnels_summary(struct vty *vty)
{
time_t now = gtphub_now();
- unsigned long long int count_all = 0; /* ...just joking. */
-
const int w = 36;
- int max_expiry = g_hub->expire_tei_maps.expiry_in_seconds;
+ int max_expiry = g_hub->expire_slowly.expiry_in_seconds;
float seconds_per_step = ((float)max_expiry) / w;
/* Print TEI mapping expiry in an ASCII histogram, like:
TEI map summary
Legend: '_'=0 '.'<=1% ':'<=2% '|'<=10% '#'>10% (10.0 m/step)
- CTRL: 30 mappings, valid for 360m[#__:.____|___.____:__.______________]1m
- USER: 30 mappings, valid for 360m[#__:.____|___.____:__.______________]1m
+ CTRL: 30 mappings, valid for 360m[# :. | . : . ]1m
+ USER: 30 mappings, valid for 360m[# :. | . : . ]1m
4 TEI mappings in total, last expiry in 359.4 min
*/
vty_out(vty,
- "TEI map summary%s"
- " Legend: '_'=0 '.'<=1%% ':'<=2%% '|'<=10%% '#'>10%% (%.1f m/step)%s",
+ "Tunnels summary%s"
+ " Legend: ' '=0 '.'<=1%% ':'<=2%% '|'<=10%% '#'>10%% (%.1f m/step)%s",
VTY_NEWLINE,
seconds_per_step / 60.,
VTY_NEWLINE);
int last_expiry = 0;
- int plane_idx;
- for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
- unsigned int count = 0;
+ unsigned int count = 0;
- int histogram[w];
- memset(histogram, 0, sizeof(histogram));
+ int histogram[w];
+ memset(histogram, 0, sizeof(histogram));
- struct nr_mapping *m;
- llist_for_each_entry(m, &g_hub->tei_map[plane_idx].mappings, entry) {
- count ++;
- int expiry = m->expiry_entry.expiry - now;
- last_expiry = (last_expiry > expiry) ? last_expiry : expiry;
+ struct gtphub_tunnel *t;
+ llist_for_each_entry(t, &g_hub->tunnels, entry) {
+ count ++;
+ int expiry = t->expiry_entry.expiry - now;
+ last_expiry = (last_expiry > expiry) ? last_expiry : expiry;
- int hi = ((float)expiry) / seconds_per_step;
- if (hi < 0)
- hi = 0;
- if (hi > (w - 1))
- hi = w - 1;
- histogram[hi] ++;
- }
+ int hi = ((float)expiry) / seconds_per_step;
+ if (hi < 0)
+ hi = 0;
+ if (hi > (w - 1))
+ hi = w - 1;
+ histogram[hi] ++;
+ }
- vty_out(vty,
- " %4s: %u mappings, valid for %dm[",
- gtphub_plane_idx_names[plane_idx],
- count, max_expiry / 60);
-
- int i;
- for (i = w - 1; i >= 0; i--) {
- char c;
- int val = histogram[i];
- int percent = 100. * val / count;
- if (!val)
- c = '_';
- else if (percent <= 1)
- c = '.';
- else if (percent <= 2)
- c = ':';
- else if (percent <= 10)
- c = '|';
- else c = '#';
- vty_out(vty, "%c", c);
- }
- vty_out(vty, "]1m%s", VTY_NEWLINE);
-
- count_all += count;
+ vty_out(vty,
+ " %u tunnels, valid for %dm[",
+ count, max_expiry / 60);
+
+ int i;
+ for (i = w - 1; i >= 0; i--) {
+ char c;
+ int val = histogram[i];
+ int percent = 100. * val / count;
+ if (!val)
+ c = ' ';
+ else if (percent <= 1)
+ c = '.';
+ else if (percent <= 2)
+ c = ':';
+ else if (percent <= 10)
+ c = '|';
+ else c = '#';
+ vty_out(vty, "%c", c);
}
- vty_out(vty, " %llu TEI mappings in total, last expiry in %.1f min%s",
- count_all,
+ vty_out(vty, "]1m%s", VTY_NEWLINE);
+
+ vty_out(vty, " last expiry in %.1f min%s",
((float)last_expiry) / 60.,
VTY_NEWLINE);
}
-static void show_tei_maps_all(struct vty *vty)
+static void show_tunnels_all(struct vty *vty)
{
time_t now = gtphub_now();
- unsigned long long int count_all = 0; /* ...just joking. */
+ vty_out(vty, "All tunnels:%s"
+ "Legend: SGSN <-> GGSN, with each:%s"
+ " <IP-Ctrl>[/<IP-User>] (<TEI-Ctrl>=<mapped>/<TEI-User>=<mapped>)%s",
+ VTY_NEWLINE, VTY_NEWLINE, VTY_NEWLINE);
- vty_out(vty, "All TEI mappings:%s", VTY_NEWLINE);
- int plane_idx;
- for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
+ unsigned int count = 0;
+ unsigned int incomplete = 0;
+ struct gtphub_tunnel *t;
+ llist_for_each_entry(t, &g_hub->tunnels, entry) {
vty_out(vty,
- "- %s Plane:%s"
- " (timeout) replaced-TEI <--> original-TEI from-peer%s",
- gtphub_plane_idx_names[plane_idx],
- VTY_NEWLINE, VTY_NEWLINE);
-
- unsigned int count = 0;
- struct nr_mapping *m;
- llist_for_each_entry(m, &g_hub->tei_map[plane_idx].mappings, entry) {
- struct gtphub_peer_port *pp = m->origin;
- vty_out(vty,
- " (%4dm) %8x <--> %8x %s",
- -(int)((m->expiry_entry.expiry - now) / 60),
- (uint32_t)m->repl,
- (uint32_t)m->orig,
- gsn_addr_to_str(&pp->peer_addr->addr));
- if (pp->port != gtphub_plane_idx_default_port[plane_idx])
- vty_out(vty, " port %d", (int)pp->port);
- vty_out(vty, VTY_NEWLINE);
- count ++;
- }
- vty_out(vty, " (%u %s TEI mappings)%s", count,
- gtphub_plane_idx_names[plane_idx], VTY_NEWLINE);
- count_all += count;
+ "(%4dm) %s%s",
+ -(int)((t->expiry_entry.expiry - now) / 60),
+ gtphub_tunnel_str(t),
+ VTY_NEWLINE);
+ count ++;
+ if (!gtphub_tunnel_complete(t))
+ incomplete ++;
}
- vty_out(vty, "- %llu TEI mappings in total%s", count_all, VTY_NEWLINE);
+ vty_out(vty, "Total: %u tunnels%s", count, VTY_NEWLINE);
}
-DEFUN(show_gtphub_tei_summary, show_gtphub_tei_summary_cmd, "show gtphub tei summary",
- SHOW_STR "TEI mappings summary")
+DEFUN(show_gtphub_tunnels_summary, show_gtphub_tunnels_summary_cmd, "show gtphub tunnels summary",
+ SHOW_STR "Summary of all tunnels")
{
- show_tei_maps_summary(vty);
+ show_tunnels_summary(vty);
return CMD_SUCCESS;
}
-DEFUN(show_gtphub_tei_dump, show_gtphub_tei_dump_cmd, "show gtphub tei dump",
- SHOW_STR "Dump all current TEI mappings")
+DEFUN(show_gtphub_tunnels_list, show_gtphub_tunnels_list_cmd, "show gtphub tunnels list",
+ SHOW_STR "List all tunnels")
{
- show_tei_maps_all(vty);
+ show_tunnels_all(vty);
return CMD_SUCCESS;
}
@@ -413,7 +393,7 @@ DEFUN(show_gtphub, show_gtphub_cmd, "show gtphub all",
SHOW_STR "Display information about the GTP hub")
{
show_bind_stats_all(vty);
- show_tei_maps_summary(vty);
+ show_tunnels_summary(vty);
return CMD_SUCCESS;
}
@@ -424,8 +404,8 @@ int gtphub_vty_init(struct gtphub *global_hub, struct gtphub_cfg *global_cfg)
g_cfg = global_cfg;
install_element_ve(&show_gtphub_cmd);
- install_element_ve(&show_gtphub_tei_summary_cmd);
- install_element_ve(&show_gtphub_tei_dump_cmd);
+ install_element_ve(&show_gtphub_tunnels_summary_cmd);
+ install_element_ve(&show_gtphub_tunnels_list_cmd);
install_element(CONFIG_NODE, &cfg_gtphub_cmd);
install_node(&gtphub_node, config_write_gtphub);