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/gerrit-log@lists.osmocom.org/.
keith gerrit-no-reply at lists.osmocom.orgkeith has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/17941 ) Change subject: Add default APN for each EUA Type ...................................................................... Add default APN for each EUA Type MS may request an unknown APN. In this case we will use the APN configured in the vty as default-apn but if the type support does not match the request we will fail. The commit adds two more vty commands to configure a default vpn for v6 and for v4v6 Change-Id: I03fcf8a1532bd9988ea99a6afd3dc325174ce9d6 Fixes: OS#4511 --- M ggsn/ggsn.c M ggsn/ggsn.h M ggsn/ggsn_vty.c 3 files changed, 80 insertions(+), 4 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-ggsn refs/changes/41/17941/1 diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c index 159362f..816a496 100644 --- a/ggsn/ggsn.c +++ b/ggsn/ggsn.c @@ -452,10 +452,22 @@ /* ignore if the APN has not been started */ if (apn && !apn->started) apn = NULL; - /* then try default (if any) */ - if (!apn) - apn = ggsn->cfg.default_apn; + if (!apn) { + switch (pdp->eua.v[1]) { + case PDP_EUA_TYPE_v6: + if (ggsn->cfg.default_apnv6) + apn = ggsn->cfg.default_apnv6; + break; + case PDP_EUA_TYPE_v4v6: + if (ggsn->cfg.default_apnv4v6) + apn = ggsn->cfg.default_apnv4v6; + break; + default: + apn = ggsn->cfg.default_apn; + break; + } + } /* ignore if the APN has not been started */ if (apn && !apn->started) apn = NULL; diff --git a/ggsn/ggsn.h b/ggsn/ggsn.h index 82984a0..887c743 100644 --- a/ggsn/ggsn.h +++ b/ggsn/ggsn.h @@ -115,8 +115,10 @@ char *name; /* Description string */ char *description; - /* an APN that shall be used as default for any non-matching APN */ + /* APNs that shall be used as default for any non-matching APN */ struct apn_ctx *default_apn; + struct apn_ctx *default_apnv6; + struct apn_ctx *default_apnv4v6; /* ADdress to which we listen for GTP */ struct in46_addr listen_addr; /* Local GTP-C address advertised in GTP */ diff --git a/ggsn/ggsn_vty.c b/ggsn/ggsn_vty.c index cb92a8a..9e643f0 100644 --- a/ggsn/ggsn_vty.c +++ b/ggsn/ggsn_vty.c @@ -296,6 +296,60 @@ return CMD_SUCCESS; } +DEFUN(cfg_ggsn_default_apnv6, cfg_ggsn_default_apnv6_cmd, + "default-apnv6 NAME", + "Set a default-APN to be used if no other APN v6 matches\n" + "APN Name\n") +{ + struct ggsn_ctx *ggsn = (struct ggsn_ctx *) vty->index; + struct apn_ctx *apn; + + apn = ggsn_find_apn(ggsn, argv[0]); + if (!apn) { + vty_out(vty, "%% No APN of name '%s' found%s", argv[0], VTY_NEWLINE); + return CMD_WARNING; + } + + ggsn->cfg.default_apnv6 = apn; + return CMD_SUCCESS; +} + +DEFUN(cfg_ggsn_no_default_apnv6, cfg_ggsn_no_default_apnv6_cmd, + "no default-apnv6", + NO_STR "Remove default-APN to be used if no other APN matches\n") +{ + struct ggsn_ctx *ggsn = (struct ggsn_ctx *) vty->index; + ggsn->cfg.default_apnv6 = NULL; + return CMD_SUCCESS; +} + +DEFUN(cfg_ggsn_default_apnv4v6, cfg_ggsn_default_apnv4v6_cmd, + "default-apnv4v6 NAME", + "Set a default-APN to be used if no other APN v4v6 matches\n" + "APN Name\n") +{ + struct ggsn_ctx *ggsn = (struct ggsn_ctx *) vty->index; + struct apn_ctx *apn; + + apn = ggsn_find_apn(ggsn, argv[0]); + if (!apn) { + vty_out(vty, "%% No APN of name '%s' found%s", argv[0], VTY_NEWLINE); + return CMD_WARNING; + } + + ggsn->cfg.default_apnv4v6 = apn; + return CMD_SUCCESS; +} + +DEFUN(cfg_ggsn_no_default_apnv4v6, cfg_ggsn_no_default_apnv4v6_cmd, + "no default-apnv4v6", + NO_STR "Remove default-APN to be used if no other APN v4v6 matches\n") +{ + struct ggsn_ctx *ggsn = (struct ggsn_ctx *) vty->index; + ggsn->cfg.default_apn = NULL; + return CMD_SUCCESS; +} + DEFUN(cfg_ggsn_shutdown, cfg_ggsn_shutdown_cmd, "shutdown ggsn", "Put the GGSN in administrative shut-down\n" GGSN_STR) @@ -792,6 +846,10 @@ config_write_apn(vty, apn); if (ggsn->cfg.default_apn) vty_out(vty, " default-apn %s%s", ggsn->cfg.default_apn->cfg.name, VTY_NEWLINE); + if (ggsn->cfg.default_apnv6) + vty_out(vty, " default-apnv6 %s%s", ggsn->cfg.default_apnv6->cfg.name, VTY_NEWLINE); + if (ggsn->cfg.default_apnv4v6) + vty_out(vty, " default-apnv4v6 %s%s", ggsn->cfg.default_apnv4v6->cfg.name, VTY_NEWLINE); if (ggsn->cfg.echo_interval) vty_out(vty, " echo-interval %u%s", ggsn->cfg.echo_interval, VTY_NEWLINE); /* must be last */ @@ -1097,6 +1155,10 @@ install_element(GGSN_NODE, &cfg_ggsn_no_apn_cmd); install_element(GGSN_NODE, &cfg_ggsn_default_apn_cmd); install_element(GGSN_NODE, &cfg_ggsn_no_default_apn_cmd); + install_element(GGSN_NODE, &cfg_ggsn_default_apnv6_cmd); + install_element(GGSN_NODE, &cfg_ggsn_no_default_apnv6_cmd); + install_element(GGSN_NODE, &cfg_ggsn_default_apnv4v6_cmd); + install_element(GGSN_NODE, &cfg_ggsn_no_default_apnv4v6_cmd); install_element(GGSN_NODE, &cfg_ggsn_show_sgsn_cmd); install_element(GGSN_NODE, &cfg_ggsn_echo_interval_cmd); install_element(GGSN_NODE, &cfg_ggsn_no_echo_interval_cmd); -- To view, visit https://gerrit.osmocom.org/c/osmo-ggsn/+/17941 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-ggsn Gerrit-Branch: master Gerrit-Change-Id: I03fcf8a1532bd9988ea99a6afd3dc325174ce9d6 Gerrit-Change-Number: 17941 Gerrit-PatchSet: 1 Gerrit-Owner: keith <keith at rhizomatica.org> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200425/72fcfbcd/attachment.htm>