aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2020-05-01release 1.5.0-fw.1fairwaves/1.5.0-fw.1fairwaves/productionKirill Zakharenko1-0/+6
2020-04-28sgsnemu: use real tun device name after the device is up.Dmitri Kalashnik1-4/+4
The device name option could be empty, using it without checking would crash sgsnemu. Using the real device is better anyway. Change-Id: Ic3934281bfc2e433323e4ab72cf5be2cbd1c962a
2020-04-21sgsnemu: Fix assumption ipv6 Interface-Identifier of public addr == ↵Pau Espin Pedrol1-41/+53
announced Prefix Until now, sgsnemu was able to identify pdp contexts of incoming packets in the tun based on the assumption that the Interface-Identifier part of public IPv6 addresses in incoming packets was equal to the announced prefix path during Create Pdp Context Response (see changes in cb_tun_ind()). This assumption works fine with osmo-ggsn due to implementation details but breaks on other spec-conformant GGSNs. In order to fix it, a new placeholder struct pdp_peer_sgsnemu_ctx is introduced which will be assigned to each pdp_t "peer[0]" user-defined pointer. This way, each pdp_t ctx upgrades from having only 1 iphash_t item to 3 (hence being able to match against 3 different ip addresses). This way, in IPv6 we can match against 2 different IP addresses set on the tun iface: * link-local: "fe80::IfId", where IfId is the Interface-Identifier received during Pdp Context Resp and which can be used to communicate with the nearest router (the GGSN). * global: The global IPv6 addr set after SLAAC procedure, containing a the prefix announced by CreatePdpContextResp/RouterAdvertisement and an Interface-Identifier chosen by sgsnemu itself (currently ::ff). This change is also a step forward towards supporting IPv4v6 APNs in sgsnemu. Related: OS#4434 Change-Id: I0d36145250185e4cce699fdaedfe96bd969f5fa1
2020-04-21sgsnemu: Implement ping on IPv6 APNsPau Espin Pedrol3-51/+234
Related: OS#4434 Change-Id: If9ca7c37a1a397bbc3f8912d67bccdabc4968e0c
2020-04-21sgsnemu: Handle IPv6 SLAAC in tun iface manuallyPau Espin Pedrol6-118/+307
Disable IPv6 automatic SLAAC by linux kernel and handle it manually. This allows us gaining control on local address acquisition and set addresses and routing properly. It will also allow us to run in ping mode without a tun iface. Related: OS#4434 Change-Id: Iae59cf6ffb181357e10b3080a5c751bd454f4a1f
2020-04-19sgsnemu: Fix build/run against linux < 4.11 (no sysctl addr_gen_mode support)Pau Espin Pedrol2-5/+20
On older systems (like debian 8), the enum is not present in the header file and build will fail (as saw in osmocom's OBS instance). Furthermore, the sysctl to change the value was added at a later point in time, which means compiling can go fine but running may fail due to the sysctl not being available. This is a fix-up to Change-Id I1d51f3ca91edbb3b788939982ab63264182ec2ce Change-Id: I208970d5b16ea7148444d414b0a6f68c8d9a086c
2020-04-15Rename netdev_*route to end in route4Pau Espin Pedrol4-15/+19
Functions for IPv6 will be added soon afterwards. Also take the chance to check for address length in sgsnemu and only apply the route if the address matches. Change-Id: Ic6c1b3c11c56f047e6e8c6f1040257fd62afea0f
2020-04-15icmpv6.c: Move code generating ipv6 hdr to its own functionPau Espin Pedrol1-16/+25
It will be re-used in next commits. Change-Id: I3c108efad6461cd4e82ef435290005174bc8b30e
2020-04-15sgsnemu: tun_addaddr: Don't set local addr as dstaddrPau Espin Pedrol1-1/+1
That should be used for point-to-point destination address. Change-Id: Iead7e9c7570ba6a9de3089a164997b1db81dc59a
2020-04-15sgsnemu: Get rid of duplicated options.netPau Espin Pedrol1-7/+4
It's not really set by any cmdline arg, and it always contains same content as options.netaddr. Change-Id: Id3cdca0975bdd2893b4b83944c5ebf29b2994622
2020-04-15sgsnemu: Get rid of duplicated options.destaddrPau Espin Pedrol1-6/+3
It's not really set by any cmdline arg, and it always contains same content as options.netaddr. Change-Id: I5a4e3c4b5ae43a89a7d0af62fb396311dcb6ebae
2020-04-15icmpv6.c: Mark internal function as staticPau Espin Pedrol1-1/+1
Change-Id: Ib38907c3a05c1651faa86ef57381ee22643e0d53
2020-04-15cosmetic: icmpv6.c: fix typo in commentPau Espin Pedrol1-1/+1
Change-Id: I2217dfb0b0a1e6e029ac817902e80c771ed219c3
2020-04-15sgsnemu: Fix ping transmitted statistics outputPau Espin Pedrol1-1/+1
Change-Id: I6e23e024ee30d6049c6b8b614c50d062d80a5260
2020-04-15sgsnemu: Avoid adding extra autogenerated local link ipv6 addr to tun ifacePau Espin Pedrol1-0/+47
It's not needed because a link-local address will be added as a result of Create Pdp Context Response. Morevoer, it fools sgsnemu ip addr verifications since it gets used on some scenarios by applications. Change-Id: I1d51f3ca91edbb3b788939982ab63264182ec2ce
2020-04-14doc: use 127.0.0.2 instead of 127.0.0.6 as bind ip.Philipp Maier1-1/+1
The example config for osmo-sgsn suggests to use 127.0.0.6 as bind ip. (the ip-address where the SGSN tries to connect) Lets use 127.0.0.2 instead to match the default config of osmo-sgsn. Change-Id: I513ab64896dee47fd92dbc5ef495fe1c6e734ec3
2020-04-14lib/netns: Fix up error pathsHarald Welte1-20/+54
The error handling in the code was doing exactly what one would not expect. If we switch to a netns and then encounter an error, we obviously have to switch back to the original netns before returning. Likewise, if we temporarily change the signal mask, we need to switch back to the original one before returning. Change-Id: I9ff5ae7bffc5bd7629dae0af1b72cfea548f9039
2020-04-14netdev_addaddr6: Use prefixlen argPau Espin Pedrol1-1/+1
The parameter was simply unused until this change was made. An Ipv6 can have a prefix length between 48 and 64 bits. Change-Id: I4b1512d5a4d7bbc2516221ea6808565eac0eb18f
2020-04-14lib/netns: OSMO_ASSERT() if user doesn't call init_netns()Harald Welte1-1/+13
It is vital that init_netns() is called first in order to initialize default_nsfd. Change-Id: Ic16646fa7d60c578056b17351c5fe2090a81dff0
2020-04-14lib/netns.c: Add comments to the code, including doxygen API docsHarald Welte1-0/+45
Change-Id: I0b20e4870bf62df0a459a621a64a4e2795340ceb
2020-04-14Move icmpv6 and checksum files from ggsn/ dir to lib/Pau Espin Pedrol7-6/+6
They will be required by sgsnemu to implement ICMPv6 Router Soliciations. Change-Id: Ie878604f0fc0169cc98a1e9eee64b14d76be2c45
2020-04-14sgsnemu: Set its default loglevel category to INFOPau Espin Pedrol1-1/+1
sgsnemu is a testing program and doesn't have a VTY iface to configure its log levels, so let's simply enable INFO as a default. Change-Id: I2a577f547b57fb0ab7b83de5c12da088697f3904
2020-04-14sgsnemu: Rename sgsnemu's libgtp cb_confPau Espin Pedrol1-2/+2
It makes it easier to understand where the function is called. Change-Id: Ibf32b416c3247d1415aa9c1a88755076dcd606f4
2020-04-14sgsnemu: Pass array of in64_addr to in46a_from_eua()Pau Espin Pedrol1-30/+34
Let's avoid buffer-overflow writing into out-of-bounds memory in the event the GGSN sends us 2 EUAs in Create PDP Context Respose. It should theoretically happen since we don't yet support ipv4v6 APNs in sgsnemu, but who knows. Change-Id: I8becd90ce1f0e8bb6e21438c04da4a9cab845492
2020-04-14configure.ac: fix libtool issue with clang and sanitizerEric1-0/+5
As pointed out at https://github.com/libexpat/libexpat/issues/312 libtool does not play nice with clang sanitizer builds at all. For those builds LD shoud be set to clang too (and LDFLAGS needs the sanitizer flags as well), because the clang compiler driver knows how linking to the sanitizer libs works, but then at a later stage libtool fails to actually produce the shared libraries and the build fails. This is fixed by this patch. Addtionally LD_LIBRARY_PATH has no effect on conftest runs during configure time, so the rpath needs to be set to the asan library path to ensure the configure run does not fail due to a missing asan library, i.e.: SANS='-fsanitize=memory -fsanitize-recover=all -shared-libsan' export CC=clang-10 ASANPATH=$(dirname `$CC -print-file-name=libclang_rt.asan-x86_64.so`) export LDFLAGS="-Wl,-rpath,$ASANPATH $SANS $LDFLAGS" Change-Id: Icc09c9d09bfa01264ddf867356d068e50d97c5a0
2020-04-08sgsnemu: cmdline: Drop unused function cmdline_parser_params_create()Pau Espin Pedrol2-15/+0
Change-Id: I7d5d69f104d24aafd4aa0b7289bb8b3fa1d77ed4
2020-03-25doc: do not use random ip address for dns in default confPhilipp Maier1-4/+4
The default configuration has a random ip-address as first DNS server. This might cause unnedessary trouble for people who try osmo-ggsn the first time. Lets have some public DNS here, just to be sure. Change-Id: I5876a806185bb3aea356fb6996d1925b8d0d1758
2020-03-03lib/netns: fix open_ns(): return fd from open()Vadim Yanitskiy1-1/+1
Looks like a bug introduced by I9b9c8fd6eeaaa7d190b8e2a34ca82088904c7708. Change-Id: I38caf5541ca90638ed10714adfbb08120e5397b9 Fixes: CID#208656
2020-03-02netns: Improve error checkingPau Espin Pedrol3-65/+132
Change-Id: I9b9c8fd6eeaaa7d190b8e2a34ca82088904c7708
2020-02-26add Linux network namespace support for TUN deviceAndreas Schultz7-12/+294
Change-Id: Idd0ad8fa9c8e7ba0aeec1b52947598d4d297b620
2020-02-25cosmetic: Fix comment typoPau Espin Pedrol1-2/+2
Change-Id: I8240b388ffb8c1806bf0d34a9e59146b403a13be
2020-01-02Bump version: 1.4.0.32-bd8f-dirty → 1.5.01.5.0Pau Espin Pedrol6-8/+50
Change-Id: I84bbe9eff37e14985b812b49e53eb6d62fff14a5
2019-12-06contrib/systemd: add systemd-networkd examples from manualsVadim Yanitskiy3-1/+18
Change-Id: I265637f39dd16dd43992f33149e512e34ed83252
2019-12-06manuals/configuration.adoc: fix IPv4 address mismatch in <<ggsn_no_root>>Vadim Yanitskiy1-1/+1
Change-Id: Ide9465a01857dbe5ec7f5bc1d09468153865156f
2019-12-06manuals/configuration.adoc: fix Network Address without prefix lengthVadim Yanitskiy1-1/+1
"An address '192.168.7.1' is specified without prefix length. The behavior of parsing addresses without prefix length will be changed in the future release. Please specify prefix length explicitly." Change-Id: I51777c6344191182fb87bae6f0048ce422802541
2019-12-01manual: Fix copy+paste errorHarald Welte1-1/+1
Change-Id: Ib6a97d8c93203e1f896ab1bd3d200d2223f9fc48
2019-12-01sgsnemu: Fix null-pointer format string argumentHarald Welte1-2/+1
Modern gcc-9.2.1 actually fails like this with --enable-werror active: In file included from sgsnemu.c:52: In function ‘process_options’, inlined from ‘main’ at sgsnemu.c:1557:6: ../lib/syserr.h:31:3: error: ‘%s’ directive argument is null [-Werror=format-overflow=] 31 | logp2(sub, pri, __FILE__, __LINE__, 0, \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32 | fmt "\n", ##args); \ | ~~~~~~~~~~~~~~~~~ sgsnemu.c:435:3: note: in expansion of macro ‘SYS_ERR’ 435 | SYS_ERR(DSGSN, LOGL_ERROR, 0, | ^~~~~~~ sgsnemu.c: In function ‘main’: sgsnemu.c:436:42: note: format string is defined here 436 | "Listening address must be specified: %s!", | ^~ It is correct: We are dereferencing args_info.listen_addr in a branch which explicitly checks if that is NULL beforehand :/ Change-Id: I417f447f821d396aa92049e0a791121240f1cf44
2019-09-05ggsn, sgsnemu: Drop use of no-op deprecated gtp_retrans* APIsPau Espin Pedrol3-34/+2
Related: OS#4178 Change-Id: I295b89ee493d230c2550d461fca9602c589d38b5
2019-09-05gtp: Manage queue timers internallyPau Espin Pedrol2-72/+128
Currently each user (application) of libgtp needs to manage its own timers in order to call gtp_retrans_timeout() and gtp_retrans() and maintain retransmit and duplicate queues working correctly. This adds unnecesary complexity to applications since nowadays, as a libosmocore user, libgtp can handle this internally in an easy way. Furthermore, keeping the timers internal to the library allows for easier extension of features as well as re-implementation of related code in the future. Last but not least, it was detected that existing known applications (osmo-sgsn, osmo-ggsn, sgsnemu) are not using correctly the API, since they should be updating their timers through gtp_retrans_timeout() everytime a message is enqueued/transmitted, otherwise they may fire gtp_retrans() for retransmition too late in some cases. Related: OS#4178 Change-Id: Ife7cfd66d6356f413263fe5bda9e43091f5c9e98
2019-09-02gtp/gtp.c: cosmetic: use get_tid() where we need TIDVadim Yanitskiy1-6/+3
Change-Id: I39e92f25ed51665c8a615826ed52f35024bdd54b
2019-09-02gtp_error_ind_conf(): fix: guard against an unknown GTP versionVadim Yanitskiy1-0/+3
This change fixes the following compiler warnings (found by Clang): gtp.c:2747:13: warning: variable 'pdp' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] } else if (version == 1) { gtp.c:2781:14: note: uninitialized use occurs here OSMO_ASSERT(pdp); ^^^ Shall not happen in general, but let's make Clang happy. Change-Id: Id471b22afd4c45435589a4edda0a804e66be3a7a
2019-09-02gtp_update_pdp_ind(): fix NULL-pointer dereferenceVadim Yanitskiy1-5/+4
As stated in the comment above, we need to use the tunnel identifier to find a GTP context, and derive both IMSI and NSAPI from that TID, when speaking GTP version 0. This change fixes the following warnings (found with Clang): gtp.c:2115:22: warning: variable 'pdp' is uninitialized when used here [-Wuninitialized] pdp_set_imsi_nsapi(pdp, tid); ^^^ gtp.c:2118:34: warning: variable 'imsi' is uninitialized when used here [-Wuninitialized] if (gtp_pdp_getimsi(gsn, &pdp, imsi, nsapi)) ^^^^ gtp.c:2118:40: warning: variable 'nsapi' is uninitialized when used here [-Wuninitialized] if (gtp_pdp_getimsi(gsn, &pdp, imsi, nsapi)) ^^^^^ Change-Id: I8f1c8d0ba2e8189d97fe1bb5c872680e5ad1cd7a
2019-08-29ggsn: rx DeletePdpReq confirmation: Improve documentation and use gtp_freepdp()Pau Espin Pedrol1-9/+10
Update documentation since nowadays there are more paths calling ggsn_close_one_pdp() (because we now close pdp contexts during sgsn timeouts). Switch pdp_freepdp() to gtp_freepdp() since in the event we ended up there in the future we want to go through normal delete_ctx_cb to free related application data structures. Change-Id: I7d9ae9a27390498ba387797aac6651e32fa44f29
2019-08-29cosmetic: gtp: Improve documentation of gtp_delete_context_req2()Pau Espin Pedrol1-2/+3
Change-Id: I1f85c7cc7684e146fca4f17914927d45410dbb84
2019-08-29cosmetic: gtp: Drop commented out code calling pdp_freepdp()Pau Espin Pedrol1-26/+0
That code was commented out in 0b076a331e1e7f955580313a5da416c170b3b4ce (year 2003), and indeed it makes no sense to call those in current pdp lifecycle (they are expected to be freed by the application). Change-Id: I096d8cb8d749ff9b737d6f3f96b1d423660ece37
2019-08-28gtp: Log msg retransmits and timeoutsPau Espin Pedrol1-0/+4
Change-Id: Ie768ddb45313582b4b5358b97a981080be64fd42
2019-08-28cosmetic: fix formatting in if linePau Espin Pedrol2-2/+3
Fixes: eefa30dce8fa8e0ae16a3108e23041f92ea6ab21 Fixes: 2d6a69e69a4b4cb2b8cc63c4810dae44e5a4d8f6 Change-Id: I9ee5f4142cacf912145693c72a53c0f531bad2c6
2019-08-28ggsn: Implement echo req/resp and recoveryPau Espin Pedrol7-11/+406
This patch is quite big because implementing echo req/resp and recovery requires having knowledge and managing differentiated state for each GSN peer attached/connected to osmo-ggsn. This kind of information was not available in osmo-ggsn nor in libgtp. So osmo-ggsn is now able to track GSN peers connected to a ggsn_ctx (associated gsn_t from libgtp) by means of "sgsn_peer" data structure, and accessible from the ggsn through a list. The instances of sgsn_peer are currently allocated and destroyed dynamically based on discovered peer who have at least a pdp context attached to us (we are not interested in peers without pdp contexts because we don't need to send echo requests/responses and maintain state in that case). A new private pointer (pdp_t->priv) data structure struct pdp_priv_t is added to be able to relate a pdp_t to an sgsn as well as the already existing pointer to an apn. An "echo-interval <0-36000>" VTY command is added which allows configuring time wait between echo requests being sent to each sgsn_peer. Transmission of echo requests is disabled by default. Finally, a new "show sgsn" VTY command is introduced, and its output is also printed during "show ggsn". Related: OS#4165 Change-Id: Id2c84165dc59dff495106758146a701ca488834f
2019-08-28libgtp: Introduce cb_recovery3Pau Espin Pedrol2-0/+23
Since osmo-ggsn can manage several GSN structures simultaneously, it needs the gsn_t pointer to know the ggsn it should forward the call to. Related: OS#4165 Change-Id: I33b4fe594d5833993af01cce34737e61e597b320
2019-08-28doc: Update vty reference xml filePau Espin Pedrol1-0/+70
Change-Id: I49e7db4d0f5c7868b86a4947d8b5739c2068da46