osmo-ggsn: fix VTY command for getting PDP contexts by APN

Change-Id: I0a7f4b245c4664afdae83c660358acb1a5f88ce5
This commit is contained in:
Vadim Yanitskiy 2019-05-13 15:32:21 +07:00
parent 9272d212c3
commit 977b339abe
1 changed files with 38 additions and 12 deletions

View File

@ -805,9 +805,9 @@ static void apn_show_pdp_contexts(struct vty *vty, struct apn_ctx *apn)
}
DEFUN(show_pdpctx, show_pdpctx_cmd,
"show pdp-context ggsn NAME [apn APN]",
"show pdp-context ggsn NAME",
SHOW_STR "Show PDP Context Information\n"
GGSN_STR "GGSN Name\n") // FIXME
GGSN_STR "GGSN Name\n")
{
struct ggsn_ctx *ggsn;
struct apn_ctx *apn;
@ -817,21 +817,45 @@ DEFUN(show_pdpctx, show_pdpctx_cmd,
vty_out(vty, "%% No such GGSN '%s'%s", argv[0], VTY_NEWLINE);
return CMD_WARNING;
}
if (argc < 2) {
llist_for_each_entry(apn, &ggsn->apn_list, list)
apn_show_pdp_contexts(vty, apn);
} else {
apn = ggsn_find_apn(ggsn, argv[1]);
if (!apn) {
vty_out(vty, "%% No such APN '%s'%s", argv[1], VTY_NEWLINE);
return CMD_WARNING;
}
llist_for_each_entry(apn, &ggsn->apn_list, list)
apn_show_pdp_contexts(vty, apn);
}
return CMD_SUCCESS;
}
DEFUN(show_pdpctx_apn, show_pdpctx_apn_cmd,
"show pdp-context ggsn NAME apn APN",
SHOW_STR "Show PDP Context Information\n"
GGSN_STR "GGSN Name\n" "Filter by APN\n" "APN name\n")
{
struct ggsn_ctx *ggsn;
struct apn_ctx *apn;
ggsn = ggsn_find(argv[0]);
if (!ggsn) {
vty_out(vty, "%% No such GGSN '%s'%s", argv[0], VTY_NEWLINE);
return CMD_WARNING;
}
apn = ggsn_find_apn(ggsn, argv[1]);
if (!apn) {
vty_out(vty, "%% No such APN '%s'%s", argv[1], VTY_NEWLINE);
return CMD_WARNING;
}
apn_show_pdp_contexts(vty, apn);
return CMD_SUCCESS;
}
/* Backwards compatibility: the VTY parser is (mis)interpreting
* "[apn APN]" as two separate elements: "[apn" and "APN]",
* but the first part somehow turns into command "ap". */
ALIAS_DEPRECATED(show_pdpctx_apn, show_deprecated_pdpctx_apn_cmd,
"show pdp-context ggsn NAME ap APN",
SHOW_STR "Show PDP Context Information\n"
GGSN_STR "GGSN Name\n" "Filter by APN\n" "APN name\n");
static void show_apn(struct vty *vty, struct apn_ctx *apn)
{
vty_out(vty, " APN: %s%s", apn->cfg.name, VTY_NEWLINE);
@ -871,6 +895,8 @@ DEFUN(show_ggsn, show_ggsn_cmd,
int ggsn_vty_init(void)
{
install_element_ve(&show_pdpctx_cmd);
install_element_ve(&show_pdpctx_apn_cmd);
install_element_ve(&show_deprecated_pdpctx_apn_cmd);
install_element_ve(&show_pdpctx_imsi_cmd);
install_element_ve(&show_ggsn_cmd);