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>