lists.osmocom.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

gerrit-log

Thread Start a new thread
Download
Threads by month
  • ----- 2026 -----
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2025 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
gerrit-log@lists.osmocom.org

October 2024

  • 1 participants
  • 1631 discussions
[S] Change in osmo-ttcn3-hacks[master]: ggsn: Request osmo-ggsn to apply the MTU on the tundev
by pespin 23 Oct '24

23 Oct '24
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38495?usp=email ) Change subject: ggsn: Request osmo-ggsn to apply the MTU on the tundev ...................................................................... ggsn: Request osmo-ggsn to apply the MTU on the tundev Depends: osmo-ggsn.git Change-Id Ifae556169d895860812c9ea5633292d7e3fab338 Related: OS#6298 Related: SYS#7122 Change-Id: Ie55c8b41f5a4a128f999474c3fad1926099b3624 --- M ggsn_tests/GGSN_Tests.ttcn 1 file changed, 9 insertions(+), 3 deletions(-) Approvals: osmith: Looks good to me, approved fixeria: Looks good to me, but someone else must approve Jenkins Builder: Verified diff --git a/ggsn_tests/GGSN_Tests.ttcn b/ggsn_tests/GGSN_Tests.ttcn index 8b1a6e7..e6c6be0 100644 --- a/ggsn_tests/GGSN_Tests.ttcn +++ b/ggsn_tests/GGSN_Tests.ttcn @@ -234,13 +234,19 @@ } /* -1 = osmo-ggsn default mtu */ - private function f_vty_set_mtu(integer mtu) runs on GT_CT { + private function f_vty_set_mtu(integer mtu, boolean do_apply := true) runs on GT_CT { + var charstring val_str; + var charstring apply_str := ""; var charstring mtu_cmd; if (mtu >= 0) { - mtu_cmd := "mtu " & int2str(mtu); + val_str := int2str(mtu); } else { - mtu_cmd := "mtu default"; + val_str := "default"; } + if (do_apply) { + apply_str := " apply" + } + mtu_cmd := "mtu " & val_str & apply_str; f_vty_enter_config(GGSNVTY); f_vty_transceive(GGSNVTY, "ggsn ggsn0"); -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38495?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: Ie55c8b41f5a4a128f999474c3fad1926099b3624 Gerrit-Change-Number: 38495 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1 0
0 0
[S] Change in osmo-ttcn3-hacks[master]: ggsn: Request osmo-ggsn to apply the MTU on the tundev
by osmith 23 Oct '24

23 Oct '24
Attention is currently required from: pespin. osmith has posted comments on this change by pespin. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38495?usp=email ) Change subject: ggsn: Request osmo-ggsn to apply the MTU on the tundev ...................................................................... Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38495?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: comment Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: Ie55c8b41f5a4a128f999474c3fad1926099b3624 Gerrit-Change-Number: 38495 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Attention: pespin <pespin(a)sysmocom.de> Gerrit-Comment-Date: Wed, 23 Oct 2024 08:50:24 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes
1 0
0 0
[M] Change in osmo-ggsn[master]: doc: Document MTU features in User Manual and example config files
by laforge 22 Oct '24

22 Oct '24
Attention is currently required from: lynxis lazus, pespin. laforge has posted comments on this change by pespin. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/38500?usp=email ) Change subject: doc: Document MTU features in User Manual and example config files ...................................................................... Patch Set 6: (2 comments) File doc/manuals/chapters/running.adoc: https://gerrit.osmocom.org/c/osmo-ggsn/+/38500/comment/a1314577_90067642?us… : PS5, Line 57: When running osmo-ggsn, the user must take network Maximum Transmission Unit : (MTU) into consideration, and configure it based on network specific setup. > Indeed there's nothing wrong with IP fragmentation. The problem is, as usual, broken middleboxes. […] I'm not aware of any common breakage preventing transporting fragmented IP packets across networks. The only frequent problems I know about is PMTU discovery failures, which really are just ICMP filtering. https://gerrit.osmocom.org/c/osmo-ggsn/+/38500/comment/797b2ff2_0ad50b0c?us… : PS5, Line 122: OsmOGGSN > Sure, but it is still interesting to document imho since: […] "95% of the traffic will be TCP": I think that's no longer the case today. There's bittorrent, openvpn, ipsec/esp, wiregurad, RTP (for webrtc, whatever), there's QUIC, etc. - if anything I think the percentage of TCP traffic of the users on the public net is likely decreasing than increasing. I have not investigated how well those various other protocols handle MTU issues. "increasing the outer MTU" that's basically what 29.060 annex C states: (paraphrasing from memory): "When you cannot enlarge the outer MTU across the entire transport network as needed, then you should consider reducing the inner MTU to avoid fragmentation overhead" -- To view, visit https://gerrit.osmocom.org/c/osmo-ggsn/+/38500?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: comment Gerrit-Project: osmo-ggsn Gerrit-Branch: master Gerrit-Change-Id: Ib6e974b38107fe48072380f768e1881f0fc95e80 Gerrit-Change-Number: 38500 Gerrit-PatchSet: 6 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu> Gerrit-Attention: pespin <pespin(a)sysmocom.de> Gerrit-Attention: lynxis lazus <lynxis(a)fe80.eu> Gerrit-Comment-Date: Tue, 22 Oct 2024 19:01:52 +0000 Gerrit-HasComments: Yes Gerrit-Has-Labels: No Comment-In-Reply-To: laforge <laforge(a)osmocom.org> Comment-In-Reply-To: pespin <pespin(a)sysmocom.de>
1 0
0 0
[XS] Change in osmo-ggsn[master]: doc: Reorder some chapters
by pespin 22 Oct '24

22 Oct '24
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/38499?usp=email ) Change subject: doc: Reorder some chapters ...................................................................... doc: Reorder some chapters Move general/generic osmocom chapters (logging, vty) further to the end, so that the osmo-ggsn specific chapters stay together and don't get lost in tons of generic content. Change-Id: I6441944cc365bae40ab0f3cc4f1ecd1ac790c5c5 --- M doc/manuals/osmoggsn-usermanual.adoc 1 file changed, 2 insertions(+), 3 deletions(-) Approvals: fixeria: Looks good to me, but someone else must approve Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved diff --git a/doc/manuals/osmoggsn-usermanual.adoc b/doc/manuals/osmoggsn-usermanual.adoc index 30cd542..cc4a9c7 100644 --- a/doc/manuals/osmoggsn-usermanual.adoc +++ b/doc/manuals/osmoggsn-usermanual.adoc @@ -11,13 +11,12 @@ //include::{srcdir}/chapters/control.adoc[] +include::{srcdir}/chapters/configuration.adoc[] + include::./common/chapters/vty.adoc[] include::./common/chapters/logging.adoc[] - -include::{srcdir}/chapters/configuration.adoc[] - include::./common/chapters/control_if.adoc[] include::./common/chapters/vty_cpu_sched.adoc[] -- To view, visit https://gerrit.osmocom.org/c/osmo-ggsn/+/38499?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: osmo-ggsn Gerrit-Branch: master Gerrit-Change-Id: I6441944cc365bae40ab0f3cc4f1ecd1ac790c5c5 Gerrit-Change-Number: 38499 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1 0
0 0
[XS] Change in osmo-ggsn[master]: doc: Reorder some chapters
by pespin 22 Oct '24

22 Oct '24
Attention is currently required from: osmith. pespin has posted comments on this change by pespin. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/38499?usp=email ) Change subject: doc: Reorder some chapters ...................................................................... Patch Set 3: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/osmo-ggsn/+/38499?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: comment Gerrit-Project: osmo-ggsn Gerrit-Branch: master Gerrit-Change-Id: I6441944cc365bae40ab0f3cc4f1ecd1ac790c5c5 Gerrit-Change-Number: 38499 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: osmith <osmith(a)sysmocom.de> Gerrit-Comment-Date: Tue, 22 Oct 2024 18:57:46 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes
1 0
0 0
[XS] Change in osmo-ggsn[master]: doc: Reorder some chapters
by laforge 22 Oct '24

22 Oct '24
Attention is currently required from: osmith, pespin. laforge has posted comments on this change by pespin. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/38499?usp=email ) Change subject: doc: Reorder some chapters ...................................................................... Patch Set 3: Code-Review+1 -- To view, visit https://gerrit.osmocom.org/c/osmo-ggsn/+/38499?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: comment Gerrit-Project: osmo-ggsn Gerrit-Branch: master Gerrit-Change-Id: I6441944cc365bae40ab0f3cc4f1ecd1ac790c5c5 Gerrit-Change-Number: 38499 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Attention: osmith <osmith(a)sysmocom.de> Gerrit-Attention: pespin <pespin(a)sysmocom.de> Gerrit-Comment-Date: Tue, 22 Oct 2024 18:56:58 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes
1 0
0 0
[XS] Change in osmo-ggsn[master]: doc: Fix typo in user manual
by pespin 22 Oct '24

22 Oct '24
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/38496?usp=email ) ( 1 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )Change subject: doc: Fix typo in user manual ...................................................................... doc: Fix typo in user manual Change-Id: I9b0024cfdb748febcecf01a097125103bc0f39c1 --- M doc/manuals/chapters/running.adoc 1 file changed, 1 insertion(+), 1 deletion(-) Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified diff --git a/doc/manuals/chapters/running.adoc b/doc/manuals/chapters/running.adoc index c07e309..41de78f 100644 --- a/doc/manuals/chapters/running.adoc +++ b/doc/manuals/chapters/running.adoc @@ -55,7 +55,7 @@ === Multiple instances Running multiple instances of `osmo-ggsn` is possible if all GGSN instances -are binding to different local IP addresse and all other interfaces (VTY, +are binding to different local IP addresses and all other interfaces (VTY, OML) are separated using the appropriate configuration options. The IP based interfaces are binding to local host by default. In order to separate the processes, the user has to bind those services to specific but different -- To view, visit https://gerrit.osmocom.org/c/osmo-ggsn/+/38496?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: osmo-ggsn Gerrit-Branch: master Gerrit-Change-Id: I9b0024cfdb748febcecf01a097125103bc0f39c1 Gerrit-Change-Number: 38496 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1 0
0 0
[S] Change in osmo-ggsn[master]: ggsn: apply configured APN MTU to tun
by pespin 22 Oct '24

22 Oct '24
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/38484?usp=email ) ( 2 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )Change subject: ggsn: apply configured APN MTU to tun ...................................................................... ggsn: apply configured APN MTU to tun Related: OS#6298 Related: SYS#7122 Change-Id: Ifae556169d895860812c9ea5633292d7e3fab338 --- M ggsn/ggsn.c M ggsn/ggsn.h M ggsn/ggsn_vty.c 3 files changed, 33 insertions(+), 3 deletions(-) Approvals: osmith: Looks good to me, but someone else must approve fixeria: Looks good to me, approved Jenkins Builder: Verified diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c index ad23dd9..c73a46d 100644 --- a/ggsn/ggsn.c +++ b/ggsn/ggsn.c @@ -307,6 +307,16 @@ return -1; } + if (apn->tun.cfg.mtu_apply) { + rc = osmo_netdev_set_mtu(apn->tun.tun->netdev, apn->cfg.mtu); + if (rc < 0) { + LOGPAPN(LOGL_ERROR, apn, "Failed to set tun interface MTU %u: %s\n", + apn->cfg.mtu, strerror(errno)); + apn_stop(apn); + return -1; + } + } + if (apn->tun.cfg.ipup_script) { LOGPAPN(LOGL_INFO, apn, "Running ip-up script %s\n", apn->tun.cfg.ipup_script); diff --git a/ggsn/ggsn.h b/ggsn/ggsn.h index bd953a4..23df05e 100644 --- a/ggsn/ggsn.h +++ b/ggsn/ggsn.h @@ -95,6 +95,8 @@ /* ip-up and ip-down script names/paths */ char *ipup_script; char *ipdown_script; + /* Whether to apply the MTU (apn->cfg.mtu) on the tun device: */ + bool mtu_apply; } cfg; struct tun_t *tun; } tun; diff --git a/ggsn/ggsn_vty.c b/ggsn/ggsn_vty.c index eda0096..b0f07fe 100644 --- a/ggsn/ggsn_vty.c +++ b/ggsn/ggsn_vty.c @@ -422,16 +422,33 @@ /* MAX_POSSIBLE_APN_MTU = 9000 * MAX_DESIRED_APN_MTU = 1420 */ DEFUN(cfg_apn_mtu, cfg_apn_mtu_cmd, - "mtu (<0-" OSMO_STRINGIFY_VAL(MAX_POSSIBLE_APN_MTU) ">|default)", + "mtu (<0-" OSMO_STRINGIFY_VAL(MAX_POSSIBLE_APN_MTU) ">|default) [apply]", "Configure announced MTU\n" "MTU of the APN, announced to the UE\n" - "Default value of the MTU of the APN (1420)\n") + "Default value of the MTU of the APN (1420)\n" + "Apply the MTU on the tun-device of the APN\n") { struct apn_ctx *apn = (struct apn_ctx *) vty->index; + int rc; + if (strcmp(argv[0], "default") == 0) apn->cfg.mtu = MAX_DESIRED_APN_MTU; else apn->cfg.mtu = atoi(argv[0]); + apn->tun.cfg.mtu_apply = (argc > 1); + + if (apn->tun.cfg.mtu_apply && apn->tun.tun) { + rc = osmo_netdev_set_mtu(apn->tun.tun->netdev, apn->cfg.mtu); + if (rc < 0) { + char buf_err[128]; + strerror_r(errno, buf_err, sizeof(buf_err)); + LOGPAPN(LOGL_ERROR, apn, "Failed to set tun interface MTU %u: %s (%d)\n", + apn->cfg.mtu, buf_err, rc); + vty_out(vty, "%% Failed to set tun interface MTU %u: %s (%d)%s", + apn->cfg.mtu, buf_err, rc, VTY_NEWLINE); + return CMD_WARNING; + } + } return CMD_SUCCESS; } @@ -705,7 +722,8 @@ VTY_NEWLINE); } - vty_out(vty, " mtu %" PRIu16 "%s", apn->cfg.mtu, VTY_NEWLINE); + vty_out(vty, " mtu %" PRIu16 "%s%s", apn->cfg.mtu, + apn->tun.cfg.mtu_apply ? " apply" : "", VTY_NEWLINE); if (!apn->cfg.tx_gpdu_seq) vty_out(vty, " no g-pdu tx-sequence-numbers%s", VTY_NEWLINE); -- To view, visit https://gerrit.osmocom.org/c/osmo-ggsn/+/38484?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: osmo-ggsn Gerrit-Branch: master Gerrit-Change-Id: Ifae556169d895860812c9ea5633292d7e3fab338 Gerrit-Change-Number: 38484 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1 0
0 0
[L] Change in osmo-ggsn[master]: ggsn: Use osmo_netdev_addaddr() libosmocore API
by pespin 22 Oct '24

22 Oct '24
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/38483?usp=email ) Change subject: ggsn: Use osmo_netdev_addaddr() libosmocore API ...................................................................... ggsn: Use osmo_netdev_addaddr() libosmocore API This allows dropping a lot of duplicated code. While at it, drop references to non-linux systems, which are not maintained anymore. Param "dstaddr" was not used anywhere in the old APIs, so it can also be dropped. Param "tun->routes" was also used in BSD code, so it can also be dropped. Change-Id: I1fccfd658542481cd61536fbd3c7a3a32a1c253b --- M ggsn/ggsn.c M lib/netdev.c M lib/netdev.h M lib/tun.c M lib/tun.h M sgsnemu/sgsnemu.c 6 files changed, 37 insertions(+), 620 deletions(-) Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c index 7967f42..ad23dd9 100644 --- a/ggsn/ggsn.c +++ b/ggsn/ggsn.c @@ -264,7 +264,7 @@ if (apn->v4.cfg.ifconfig_prefix.addr.len) { LOGPAPN(LOGL_INFO, apn, "Setting tun IP address %s\n", in46p_ntoa(&apn->v4.cfg.ifconfig_prefix)); - if (tun_addaddr(apn->tun.tun, &apn->v4.cfg.ifconfig_prefix.addr, NULL, + if (tun_addaddr(apn->tun.tun, &apn->v4.cfg.ifconfig_prefix.addr, apn->v4.cfg.ifconfig_prefix.prefixlen)) { LOGPAPN(LOGL_ERROR, apn, "Failed to set tun IPv4 address %s: %s\n", in46p_ntoa(&apn->v4.cfg.ifconfig_prefix), strerror(errno)); @@ -276,7 +276,7 @@ if (apn->v6.cfg.ifconfig_prefix.addr.len) { LOGPAPN(LOGL_INFO, apn, "Setting tun IPv6 address %s\n", in46p_ntoa(&apn->v6.cfg.ifconfig_prefix)); - if (tun_addaddr(apn->tun.tun, &apn->v6.cfg.ifconfig_prefix.addr, NULL, + if (tun_addaddr(apn->tun.tun, &apn->v6.cfg.ifconfig_prefix.addr, apn->v6.cfg.ifconfig_prefix.prefixlen)) { LOGPAPN(LOGL_ERROR, apn, "Failed to set tun IPv6 address %s: %s. " "Ensure you have ipv6 support and not used the disable_ipv6 sysctl?\n", @@ -289,7 +289,7 @@ if (apn->v6.cfg.ll_prefix.addr.len) { LOGPAPN(LOGL_INFO, apn, "Setting tun IPv6 link-local address %s\n", in46p_ntoa(&apn->v6.cfg.ll_prefix)); - if (tun_addaddr(apn->tun.tun, &apn->v6.cfg.ll_prefix.addr, NULL, + if (tun_addaddr(apn->tun.tun, &apn->v6.cfg.ll_prefix.addr, apn->v6.cfg.ll_prefix.prefixlen)) { LOGPAPN(LOGL_ERROR, apn, "Failed to set tun IPv6 link-local address %s: %s. " "Ensure you have ipv6 support and not used the disable_ipv6 sysctl?\n", @@ -300,6 +300,13 @@ apn->v6_lladdr = apn->v6.cfg.ll_prefix.addr.v6; } + rc = osmo_netdev_ifupdown(apn->tun.tun->netdev, true); + if (rc < 0) { + LOGPAPN(LOGL_ERROR, apn, "Failed to set tun interface UP: %s\n", strerror(errno)); + apn_stop(apn); + return -1; + } + if (apn->tun.cfg.ipup_script) { LOGPAPN(LOGL_INFO, apn, "Running ip-up script %s\n", apn->tun.cfg.ipup_script); diff --git a/lib/netdev.c b/lib/netdev.c index fd3caff..fb18d60 100644 --- a/lib/netdev.c +++ b/lib/netdev.c @@ -37,522 +37,14 @@ #include <net/route.h> #include <net/if.h> -#if defined(__linux__) #include <linux/netlink.h> #include <linux/rtnetlink.h> -#elif defined (__FreeBSD__) -#include <net/if_var.h> -#include <netinet/in_var.h> - -#elif defined (__APPLE__) -#include <net/if.h> - -#else -#error "Unknown platform!" -#endif - #include "netdev.h" #include "syserr.h" -#if defined(__linux__) - #include <linux/ipv6.h> -static int netdev_nlattr(struct nlmsghdr *n, int nsize, int type, void *d, int dlen) -{ - int len = RTA_LENGTH(dlen); - int alen = NLMSG_ALIGN(n->nlmsg_len); - struct rtattr *rta = (struct rtattr *)(((void *)n) + alen); - if (alen + len > nsize) - return -1; - rta->rta_len = len; - rta->rta_type = type; - memcpy(RTA_DATA(rta), d, dlen); - n->nlmsg_len = alen + len; - return 0; -} -#endif - -static int netdev_sifflags(const char *devname, int flags) -{ - struct ifreq ifr; - int fd; - - memset(&ifr, '\0', sizeof(ifr)); - ifr.ifr_flags = flags; - strncpy(ifr.ifr_name, devname, IFNAMSIZ); - ifr.ifr_name[IFNAMSIZ - 1] = 0; /* Make sure to terminate */ - if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed"); - return -1; - } - if (ioctl(fd, SIOCSIFFLAGS, &ifr)) { - SYS_ERR(DTUN, LOGL_ERROR, errno, - "ioctl(SIOCSIFFLAGS) failed"); - close(fd); - return -1; - } - close(fd); - return 0; -} - -int netdev_setaddr4(const char *devname, struct in_addr *addr, - struct in_addr *dstaddr, struct in_addr *netmask) -{ - struct ifreq ifr; - int fd; - - memset(&ifr, '\0', sizeof(ifr)); - ifr.ifr_addr.sa_family = AF_INET; - ifr.ifr_dstaddr.sa_family = AF_INET; - -#if defined(__linux__) - ifr.ifr_netmask.sa_family = AF_INET; -#elif defined(__FreeBSD__) || defined (__APPLE__) - ((struct sockaddr_in *)&ifr.ifr_addr)->sin_len = - sizeof(struct sockaddr_in); - ((struct sockaddr_in *)&ifr.ifr_dstaddr)->sin_len = - sizeof(struct sockaddr_in); -#endif - - strncpy(ifr.ifr_name, devname, IFNAMSIZ); - ifr.ifr_name[IFNAMSIZ - 1] = 0; /* Make sure to terminate */ - - /* Create a channel to the NET kernel. */ - if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed"); - return -1; - } - - if (addr) { /* Set the interface address */ - memcpy(&((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr, addr, - sizeof(*addr)); - if (ioctl(fd, SIOCSIFADDR, (void *)&ifr) < 0) { - if (errno != EEXIST) { - SYS_ERR(DTUN, LOGL_ERROR, errno, - "ioctl(SIOCSIFADDR) failed"); - } else { - SYS_ERR(DTUN, LOGL_NOTICE, errno, - "ioctl(SIOCSIFADDR): Address already exists"); - } - close(fd); - return -1; - } - } - - if (dstaddr) { /* Set the destination address */ - memcpy(&((struct sockaddr_in *)&ifr.ifr_dstaddr)->sin_addr, - dstaddr, sizeof(*dstaddr)); - if (ioctl(fd, SIOCSIFDSTADDR, (caddr_t) & ifr) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, - "ioctl(SIOCSIFDSTADDR) failed"); - close(fd); - return -1; - } - } - - if (netmask) { /* Set the netmask */ -#if defined(__linux__) - memcpy(&((struct sockaddr_in *)&ifr.ifr_netmask)->sin_addr, - netmask, sizeof(*netmask)); -#elif defined(__FreeBSD__) || defined (__APPLE__) - ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr = - netmask->s_addr; -#endif - - if (ioctl(fd, SIOCSIFNETMASK, (void *)&ifr) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, - "ioctl(SIOCSIFNETMASK) failed"); - close(fd); - return -1; - } - } - - close(fd); - - netdev_sifflags(devname, IFF_UP | IFF_RUNNING); - - /* On linux the route to the interface is set automatically - on FreeBSD we have to do this manually */ -#if defined(__FreeBSD__) || defined (__APPLE__) - netdev_addroute4(dstaddr, addr, &this->netmask); -#endif - - return 0; -} - -int netdev_setaddr6(const char *devname, struct in6_addr *addr, struct in6_addr *dstaddr, - size_t prefixlen) -{ - struct in6_ifreq ifr; - int fd; - - memset(&ifr, 0, sizeof(ifr)); - -#if defined(__linux__) - ifr.ifr6_prefixlen = prefixlen; - ifr.ifr6_ifindex = if_nametoindex(devname); - if (ifr.ifr6_ifindex == 0) { - SYS_ERR(DTUN, LOGL_ERROR, 0, "Error getting ifindex for %s\n", devname); - return -1; - } -#elif defined(__FreeBSD__) || defined (__APPLE__) - strncpy(ifr.ifr_name, devname, IFNAMSIZ); -#endif - - /* Create a channel to the NET kernel */ - if ((fd = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, 0, "socket() failed"); - return -1; - } - -#if defined(__linux__) - if (addr) { - memcpy(&ifr.ifr6_addr, addr, sizeof(*addr)); - if (ioctl(fd, SIOCSIFADDR, (void *) &ifr) < 0) { - if (errno != EEXIST) { - SYS_ERR(DTUN, LOGL_ERROR, 0, "ioctl(SIOCSIFADDR) failed"); - } else { - SYS_ERR(DTUN, LOGL_NOTICE, 0, "ioctl(SIOCSIFADDR): Address already exists"); - } - close(fd); - return -1; - } - } - -#if 0 - /* FIXME: looks like this is not possible/necessary for IPv6? */ - if (dstaddr) { - memcpy(&ifr.ifr6_addr, dstaddr, sizeof(*dstaddr)); - if (ioctl(fd, SIOCSIFDSTADDR, (caddr_t *) &ifr) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, "ioctl(SIOCSIFDSTADDR) failed"); - close(fd); - return -1; - } - } -#endif - -#elif defined(__FreeBSD__) || defined (__APPLE__) - if (addr) - memcpy(&ifr.ifr_ifru.ifru_addr, addr, sizeof(ifr.ifr_ifru.ifru_addr)); - if (dstaddr) - memcpy(&ifr.ifr_ifru.ifru_dstaddr, dstaddr, sizeof(ifr.ifr_ifru.ifru_dstaddr)); - - if (ioctl(fd, SIOCSIFADDR_IN6, (struct ifreq *)&ifr) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, 0, "ioctl(SIOCSIFADDR_IN6) failed"); - close(fd); - return -1; - } -#endif - - close(fd); - - netdev_sifflags(devname, IFF_UP | IFF_RUNNING); - - /* On linux the route to the interface is set automatically - on FreeBSD we have to do this manually */ -#if 0 /* FIXME */ -//#if defined(__FreeBSD__) || defined (__APPLE__) - netdev_addroute6(dstaddr, addr, prefixlen); -#endif - - return 0; -} - -int netdev_addaddr4(const char *devname, struct in_addr *addr, - struct in_addr *dstaddr, struct in_addr *netmask) -{ - int fd; -#if defined(__linux__) - struct { - struct nlmsghdr n; - struct ifaddrmsg i; - char buf[TUN_NLBUFSIZE]; - } req; - - struct sockaddr_nl local; - socklen_t addr_len; - int status; - - struct sockaddr_nl nladdr; - struct iovec iov; - struct msghdr msg; - - memset(&req, 0, sizeof(req)); - req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg)); - req.n.nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE; - req.n.nlmsg_type = RTM_NEWADDR; - req.i.ifa_family = AF_INET; - req.i.ifa_prefixlen = 32; /* 32 FOR IPv4 */ - req.i.ifa_flags = 0; - req.i.ifa_scope = RT_SCOPE_HOST; /* TODO or 0 */ - req.i.ifa_index = if_nametoindex(devname); - if (!req.i.ifa_index) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "Unable to get ifindex for %s", devname); - return -1; - } - - netdev_nlattr(&req.n, sizeof(req), IFA_ADDRESS, addr, sizeof(*addr)); - if (dstaddr) - netdev_nlattr(&req.n, sizeof(req), IFA_LOCAL, dstaddr, sizeof(*dstaddr)); - - if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE)) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed"); - return -1; - } - - memset(&local, 0, sizeof(local)); - local.nl_family = AF_NETLINK; - local.nl_groups = 0; - - if (bind(fd, (struct sockaddr *)&local, sizeof(local)) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "bind() failed"); - close(fd); - return -1; - } - - addr_len = sizeof(local); - if (getsockname(fd, (struct sockaddr *)&local, &addr_len) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, - "getsockname() failed"); - close(fd); - return -1; - } - - if (addr_len != sizeof(local)) { - SYS_ERR(DTUN, LOGL_ERROR, 0, - "Wrong address length %d", addr_len); - close(fd); - return -1; - } - - if (local.nl_family != AF_NETLINK) { - SYS_ERR(DTUN, LOGL_ERROR, 0, - "Wrong address family %d", local.nl_family); - close(fd); - return -1; - } - - iov.iov_base = (void *)&req.n; - iov.iov_len = req.n.nlmsg_len; - - msg.msg_name = (void *)&nladdr; - msg.msg_namelen = sizeof(nladdr); - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - msg.msg_control = NULL; - msg.msg_controllen = 0; - msg.msg_flags = 0; - - memset(&nladdr, 0, sizeof(nladdr)); - nladdr.nl_family = AF_NETLINK; - nladdr.nl_pid = 0; - nladdr.nl_groups = 0; - - req.n.nlmsg_seq = 0; - req.n.nlmsg_flags |= NLM_F_ACK; - - status = sendmsg(fd, &msg, 0); - if (status != req.n.nlmsg_len) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "sendmsg() failed, returned %d", status); - close(fd); - return -1; - } - - status = netdev_sifflags(devname, IFF_UP | IFF_RUNNING); - if (status == -1) { - close(fd); - return -1; - } -#elif defined (__FreeBSD__) || defined (__APPLE__) - struct ifaliasreq areq; - - memset(&areq, 0, sizeof(areq)); - - /* Set up interface name */ - strncpy(areq.ifra_name, devname, IFNAMSIZ); - areq.ifra_name[IFNAMSIZ - 1] = 0; /* Make sure to terminate */ - - ((struct sockaddr_in *)&areq.ifra_addr)->sin_family = AF_INET; - ((struct sockaddr_in *)&areq.ifra_addr)->sin_len = - sizeof(areq.ifra_addr); - ((struct sockaddr_in *)&areq.ifra_addr)->sin_addr.s_addr = addr->s_addr; - - ((struct sockaddr_in *)&areq.ifra_mask)->sin_family = AF_INET; - ((struct sockaddr_in *)&areq.ifra_mask)->sin_len = - sizeof(areq.ifra_mask); - ((struct sockaddr_in *)&areq.ifra_mask)->sin_addr.s_addr = - netmask->s_addr; - - /* For some reason FreeBSD uses ifra_broadcast for specifying dstaddr */ - ((struct sockaddr_in *)&areq.ifra_broadaddr)->sin_family = AF_INET; - ((struct sockaddr_in *)&areq.ifra_broadaddr)->sin_len = - sizeof(areq.ifra_broadaddr); - ((struct sockaddr_in *)&areq.ifra_broadaddr)->sin_addr.s_addr = - dstaddr->s_addr; - - /* Create a channel to the NET kernel. */ - if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed"); - return -1; - } - - if (ioctl(fd, SIOCAIFADDR, (void *)&areq) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, - "ioctl(SIOCAIFADDR) failed"); - close(fd); - return -1; - } -#endif - close(fd); - return 0; -} - -int netdev_addaddr6(const char *devname, struct in6_addr *addr, - struct in6_addr *dstaddr, int prefixlen) -{ - int fd; -#if defined(__linux__) - struct { - struct nlmsghdr n; - struct ifaddrmsg i; - char buf[TUN_NLBUFSIZE]; - } req; - - struct sockaddr_nl local; - socklen_t addr_len; - int status; - - struct sockaddr_nl nladdr; - struct iovec iov; - struct msghdr msg; - - memset(&req, 0, sizeof(req)); - req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg)); - req.n.nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE; - req.n.nlmsg_type = RTM_NEWADDR; - req.i.ifa_family = AF_INET6; - req.i.ifa_prefixlen = prefixlen; /* 64 FOR IPv6 */ - req.i.ifa_flags = 0; - req.i.ifa_scope = RT_SCOPE_HOST; /* TODO or 0 */ - req.i.ifa_index = if_nametoindex(devname); - if (!req.i.ifa_index) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "Unable to get ifindex for %s", devname); - return -1; - } - - netdev_nlattr(&req.n, sizeof(req), IFA_ADDRESS, addr, sizeof(*addr)); - if (dstaddr) - netdev_nlattr(&req.n, sizeof(req), IFA_LOCAL, dstaddr, sizeof(*dstaddr)); - - if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE)) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed"); - return -1; - } - - memset(&local, 0, sizeof(local)); - local.nl_family = AF_NETLINK; - local.nl_groups = 0; - - if (bind(fd, (struct sockaddr *)&local, sizeof(local)) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "bind() failed"); - close(fd); - return -1; - } - - addr_len = sizeof(local); - if (getsockname(fd, (struct sockaddr *)&local, &addr_len) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, - "getsockname() failed"); - close(fd); - return -1; - } - - if (addr_len != sizeof(local)) { - SYS_ERR(DTUN, LOGL_ERROR, 0, - "Wrong address length %d", addr_len); - close(fd); - return -1; - } - - if (local.nl_family != AF_NETLINK) { - SYS_ERR(DTUN, LOGL_ERROR, 0, - "Wrong address family %d", local.nl_family); - close(fd); - return -1; - } - - iov.iov_base = (void *)&req.n; - iov.iov_len = req.n.nlmsg_len; - - msg.msg_name = (void *)&nladdr; - msg.msg_namelen = sizeof(nladdr); - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - msg.msg_control = NULL; - msg.msg_controllen = 0; - msg.msg_flags = 0; - - memset(&nladdr, 0, sizeof(nladdr)); - nladdr.nl_family = AF_NETLINK; - nladdr.nl_pid = 0; - nladdr.nl_groups = 0; - - req.n.nlmsg_seq = 0; - req.n.nlmsg_flags |= NLM_F_ACK; - - status = sendmsg(fd, &msg, 0); - if (status != req.n.nlmsg_len) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "sendmsg() failed, returned %d", status); - close(fd); - return -1; - } - - status = netdev_sifflags(devname, IFF_UP | IFF_RUNNING); - if (status == -1) { - close(fd); - return -1; - } -#elif defined (__FreeBSD__) || defined (__APPLE__) - struct ifaliasreq areq; - - memset(&areq, 0, sizeof(areq)); - - /* Set up interface name */ - strncpy(areq.ifra_name, devname, IFNAMSIZ); - areq.ifra_name[IFNAMSIZ - 1] = 0; /* Make sure to terminate */ - - ((struct sockaddr_in6 *)&areq.ifra_addr)->sin6_family = AF_INET6; - ((struct sockaddr_in6 *)&areq.ifra_addr)->sin6_len = sizeof(areq.ifra_addr); - ((struct sockaddr_in6 *)&areq.ifra_addr)->sin6_addr.s6_addr = addr->s6_addr; - - ((struct sockaddr_in6 *)&areq.ifra_mask)->sin6_family = AF_INET6; - ((struct sockaddr_in6 *)&areq.ifra_mask)->sin6_len = sizeof(areq.ifra_mask); - ((struct sockaddr_in6 *)&areq.ifra_mask)->sin6_addr.s6_addr = netmask->s6_addr; - - /* For some reason FreeBSD uses ifra_broadcast for specifying dstaddr */ - ((struct sockaddr_in6 *)&areq.ifra_broadaddr)->sin6_family = AF_INET6; - ((struct sockaddr_in6 *)&areq.ifra_broadaddr)->sin6_len = sizeof(areq.ifra_broadaddr); - ((struct sockaddr_in6 *)&areq.ifra_broadaddr)->sin6_addr.s6_addr = dstaddr->s6_addr; - - /* Create a channel to the NET kernel. */ - if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed"); - return -1; - } - - if (ioctl(fd, SIOCAIFADDR, (void *)&areq) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, - "ioctl(SIOCAIFADDR) failed"); - close(fd); - return -1; - } -#endif - close(fd); - return 0; -} - static int netdev_route4(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask, int delete) { int fd; diff --git a/lib/netdev.h b/lib/netdev.h index 1bce814..2e8e77b 100644 --- a/lib/netdev.h +++ b/lib/netdev.h @@ -53,18 +53,6 @@ }; #endif /* !HAVE_IPHDR */ -extern int netdev_setaddr4(const char *devname, struct in_addr *addr, - struct in_addr *dstaddr, struct in_addr *netmask); - -extern int netdev_setaddr6(const char *devname, struct in6_addr *addr, struct in6_addr *dstaddr, - size_t prefixlen); - -extern int netdev_addaddr4(const char *devname, struct in_addr *addr, - struct in_addr *dstaddr, struct in_addr *netmask); - -extern int netdev_addaddr6(const char *devname, struct in6_addr *addr, - struct in6_addr *dstaddr, int prefixlen); - extern int netdev_addroute4(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask); extern int netdev_delroute4(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask); extern int netdev_addroute6(struct in6_addr *dst, struct in6_addr *gateway, int prefixlen, const char *gw_iface); diff --git a/lib/tun.c b/lib/tun.c index acc3927..055c4fc 100644 --- a/lib/tun.c +++ b/lib/tun.c @@ -49,99 +49,38 @@ #include "syserr.h" #include "gtp-kernel.h" -static int tun_setaddr4(struct tun_t *this, struct in_addr *addr, - struct in_addr *dstaddr, struct in_addr *netmask) +int tun_addaddr(struct tun_t *this, struct in46_addr *addr, size_t prefixlen) { + struct osmo_sockaddr osa = {0}; int rc; - rc = netdev_setaddr4(this->devname, addr, dstaddr, netmask); - if (rc < 0) - return rc; + OSMO_ASSERT(this->netdev); + OSMO_ASSERT(addr); - if (addr) { - this->addr.len = sizeof(struct in_addr); - this->addr.v4.s_addr = addr->s_addr; - } - if (dstaddr) { - this->dstaddr.len = sizeof(struct in_addr); - this->dstaddr.v4.s_addr = dstaddr->s_addr; - } - if (netmask) - this->netmask.s_addr = netmask->s_addr; - this->addrs++; -#if defined(__FreeBSD__) || defined (__APPLE__) - this->routes = 1; -#endif - - return rc; -} - -static int tun_setaddr6(struct tun_t *this, struct in6_addr *addr, struct in6_addr *dstaddr, - size_t prefixlen) -{ - int rc; - rc = netdev_setaddr6(this->devname, addr, dstaddr, prefixlen); - if (rc < 0) - return rc; - if (dstaddr) { - this->dstaddr.len = sizeof(*dstaddr); - memcpy(&this->dstaddr.v6, dstaddr, sizeof(*dstaddr)); - } - this->addrs++; -#if defined(__FreeBSD__) || defined (__APPLE__) - this->routes = 1; -#endif - - return rc; -} - -static int tun_addaddr4(struct tun_t *this, struct in_addr *addr, - struct in_addr *dstaddr, struct in_addr *netmask) -{ - int rc; - - /* TODO: Is this needed on FreeBSD? */ - if (!this->addrs) /* Use ioctl for first addr to make ping work */ - return tun_setaddr4(this, addr, dstaddr, netmask); /* TODO dstaddr */ - - rc = netdev_addaddr4(this->devname, addr, dstaddr, netmask); - if (rc < 0) - return rc; - - this->addrs++; - - return rc; -} - -static int tun_addaddr6(struct tun_t *this, - struct in6_addr *addr, - struct in6_addr *dstaddr, int prefixlen) -{ - int rc; - - if (!this->addrs) /* Use ioctl for first addr to make ping work */ - return tun_setaddr6(this, addr, dstaddr, prefixlen); - - rc = netdev_addaddr6(this->devname, addr, dstaddr, prefixlen); - if (rc < 0) - return rc; - - this->addrs++; - - return rc; -} - -int tun_addaddr(struct tun_t *this, struct in46_addr *addr, struct in46_addr *dstaddr, size_t prefixlen) -{ - struct in_addr netmask; switch (addr->len) { case 4: - netmask.s_addr = htonl(0xffffffff << (32 - prefixlen)); - return tun_addaddr4(this, &addr->v4, dstaddr ? &dstaddr->v4 : NULL, &netmask); + osa.u.sin.sin_family = AF_INET; + memcpy(&osa.u.sin.sin_addr, &addr->v4, sizeof(struct in_addr)); + /* Store first IPv4 IP address to be used in ipup script: */ + if (this->addrs == 0) { + this->addr.len = sizeof(struct in_addr); + this->addr.v4.s_addr = addr->v4.s_addr; + this->netmask.s_addr = htonl(0xffffffff << (32 - prefixlen)); + } + break; case 16: - return tun_addaddr6(this, &addr->v6, dstaddr ? &dstaddr->v6 : NULL, prefixlen); + osa.u.sin.sin_family = AF_INET6; + memcpy(&osa.u.sin6.sin6_addr, &addr->v6, sizeof(struct in6_addr)); + break; default: return -1; } + + rc = osmo_netdev_add_addr(this->netdev, &osa, prefixlen); + if (rc < 0) + return rc; + + this->addrs++; + return rc; } static int tun_tundev_data_ind_cb(struct osmo_tundev *tundev, struct msgb *msg) @@ -168,7 +107,6 @@ t->cb_ind = NULL; t->addrs = 0; - t->routes = 0; t->fd = -1; if (!use_kernel) { @@ -235,11 +173,6 @@ int tun_free(struct tun_t *tun) { - - if (tun->routes) { - netdev_delroute4(&tun->dstaddr.v4, &tun->addr.v4, &tun->netmask); - } - if (tun->tundev) { if (osmo_tundev_close(tun->tundev) < 0) { SYS_ERR(DTUN, LOGL_ERROR, errno, "close() failed"); diff --git a/lib/tun.h b/lib/tun.h index 8a3a2d4..544e56a 100644 --- a/lib/tun.h +++ b/lib/tun.h @@ -37,10 +37,8 @@ struct osmo_netdev *netdev; int fd; /* File descriptor to tun interface */ struct in46_addr addr; - struct in46_addr dstaddr; struct in_addr netmask; int addrs; /* Number of allocated IP addresses */ - int routes; /* One if we allocated an automatic route */ char devname[IFNAMSIZ]; /* Name of the tun device */ int (*cb_ind) (struct tun_t * tun, void *pack, unsigned len); /* to be used by libgtp callers/users (to attach their own private state) */ @@ -52,8 +50,7 @@ extern int tun_decaps(struct tun_t *this); extern int tun_encaps(struct tun_t *tun, void *pack, unsigned len); -extern int tun_addaddr(struct tun_t *this, struct in46_addr *addr, - struct in46_addr *dstaddr, size_t prefixlen); +extern int tun_addaddr(struct tun_t *this, struct in46_addr *addr, size_t prefixlen); extern int tun_set_cb_ind(struct tun_t *this, int (*cb_ind) (struct tun_t * tun, void *pack, diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c index d6d87b7..9ab0f25 100644 --- a/sgsnemu/sgsnemu.c +++ b/sgsnemu/sgsnemu.c @@ -1649,7 +1649,7 @@ if (addr[i].len == 16) prefixlen = 64; /* printf("Setting up interface and routing\n"); */ - tun_addaddr(tun, &addr[i], NULL, prefixlen); + tun_addaddr(tun, &addr[i], prefixlen); if (options.defaultroute) { if (in46a_is_v4(&addr[i])) { struct in_addr rm; @@ -1786,7 +1786,7 @@ } } #endif - rc = tun_addaddr(tun, &addr, NULL, opt_prefix->prefix_len); + rc = tun_addaddr(tun, &addr, opt_prefix->prefix_len); if (rc < 0) { SYS_ERR(DSGSN, LOGL_ERROR, 0, "Failed to add addr %s to tun %s", in46a_ntoa(&addr), tun->devname); @@ -1936,7 +1936,7 @@ } if ((options.createif) && (options.netaddr.len)) { - tun_addaddr(tun, &options.netaddr, NULL, options.prefixlen); + tun_addaddr(tun, &options.netaddr, options.prefixlen); if (options.defaultroute) { if (in46a_is_v4(&options.netaddr)) { struct in_addr rm; -- To view, visit https://gerrit.osmocom.org/c/osmo-ggsn/+/38483?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: osmo-ggsn Gerrit-Branch: master Gerrit-Change-Id: I1fccfd658542481cd61536fbd3c7a3a32a1c253b Gerrit-Change-Number: 38483 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: osmith <osmith(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1 0
0 0
[XS] Change in osmo-ggsn[master]: doc: Remove reference to non longer existing osmo-ggsn.init
by pespin 22 Oct '24

22 Oct '24
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/38497?usp=email ) ( 2 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )Change subject: doc: Remove reference to non longer existing osmo-ggsn.init ...................................................................... doc: Remove reference to non longer existing osmo-ggsn.init The init file was removed at some point in the past. Nowadays only a systemd service is provided. Change-Id: I47f889a223bfaf7bd4848898211a3cc62df5e08c --- M doc/manuals/chapters/overview.adoc 1 file changed, 1 insertion(+), 6 deletions(-) Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified diff --git a/doc/manuals/chapters/overview.adoc b/doc/manuals/chapters/overview.adoc index 632db5e..c0eed79 100644 --- a/doc/manuals/chapters/overview.adoc +++ b/doc/manuals/chapters/overview.adoc @@ -9,7 +9,7 @@ core network of 2G and 3G cellular networks. The GGSN function is the tunnel endpoint on the core network side, -from where the external (IP) packet data network +from where the external (IP) packet data network === Software Components @@ -43,11 +43,6 @@ In *contrib/osmo-ggsn.service* you can find a sample service file for OsmoGGSN which can be used with systemd. -==== init script - -In *contrib/osmo-ggsn.init* you can find a sample init script to be used -on systems with classic init process. - === Limitations OsmoGGSN supports both GTP0 (GSM 09.60) and GTP1 (3GPP 29.060). In the -- To view, visit https://gerrit.osmocom.org/c/osmo-ggsn/+/38497?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: osmo-ggsn Gerrit-Branch: master Gerrit-Change-Id: I47f889a223bfaf7bd4848898211a3cc62df5e08c Gerrit-Change-Number: 38497 Gerrit-PatchSet: 3 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • ...
  • 164
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.