aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2018-01-26gtp/gtp.c: Remove unused function char2ul_tPau Espin Pedrol1-9/+0
Change-Id: I0d7493404ea05ce2e795958041bbb6cb75a04d31
2018-01-26sgsnemu: sgsnemu stopped after recieving "Request accepted" from ggsnViktor Tsymbalyuk1-1/+1
"sgsnemu" stopped with the message "Received create PDP context response. Cause value: 128", but normaly at that poit it should continue working and create "user plane". Reason: Funtion "create_pdp_conf" checking result of "in46a_from_eua" and mistakenly returned EOF when more than 1 IP address provided by GGSN. Now function "create_pdp_conf" stopped with error when 0 IP provided or error code comes from "in46a_from_eua". Fixes: 2d6a69e69a4b4cb2b8cc63c4810dae44e5a4d8f6 ("Add support for IPv4v6 End User Addresses") Change-Id: I7881b8e1f27c432007cb6e5ff665a2ce55f103b5
2018-01-25gtp.c: gtp_gpdu_ind: Early return to avoid use of uninitialized varPau Espin Pedrol1-1/+2
If the version received is not known, pdp is then uninitalized so we should not be using it. Let's return an error to inform the caller. Change-Id: Ib3e23b61a3521bd3c9002d3165ca8eff4361a35e
2018-01-25gtp.c: gtp_gpdu_ind: Convert ifelse to switch statementPau Espin Pedrol1-3/+6
Change-Id: I99b73f7a6d4100789fa92021c6ec9117869c881b
2018-01-25gtp/pdp: Remove unused APIs pdp_ntoeua pdp_euatonPau Espin Pedrol2-20/+0
Change-Id: I00db99ba8de3f3d90e85bf593ed31555eedb439b
2018-01-25gtp/pdp: Fix trailing whitespacePau Espin Pedrol2-30/+30
Change-Id: I1bc65ef9af1144779ee91a2c9b9887233ad15671
2018-01-25gtp.c: Log unsupported GTP version numberPau Espin Pedrol1-10/+10
Change-Id: Idbc6e4c912b958bde5916b87ec53c3c4db70bee0
2018-01-25gtp.c: Determine GTP version from headerPau Espin Pedrol1-8/+14
Change-Id: I843071a090e877fd529e1e0b799df3585bf836d8
2018-01-25gtp.c: Fix trailing whitespacePau Espin Pedrol1-28/+28
Change-Id: I636c81d0c0ff53c97e6aedbc00f90c1325a3d607
2018-01-19README.md: Remove misleading sentence on sgsnemuHarald Welte1-2/+1
As reported by Viktor Tsymbalyuk, "Use the same LAN switch as the one your SGSN is connected to." is of course completely bogus. As long as you have IP routing in place, it doesn't matter at all which switch you are using. Change-Id: I748752337b863b317d2899017b1dc255ced2515d
2018-01-17Add GTP message namesMax2-0/+51
Change-Id: I65eb80db4bcdc6da4d267bef3b907d3f98942a2e
2018-01-16Fix stow-enabled jenkins build failureMax1-2/+2
The error is: CC gtp-kernel.o gtp-kernel.c:19:26: fatal error: libgtpnl/gtp.h: No such file or directory #include <libgtpnl/gtp.h> ^ compilation terminated. Fix it by using proper CFLAGS/LIBS for libgtpnl. Change-Id: I5a24076778ea3ce263ac27211a6f45f935155b33
2017-12-21Enable sanitize for CI testsMax1-1/+1
Change-Id: I7559807d54bec5da45ea5c41b10d396d992cb1b7
2017-12-15ggsn_vty.c: Print ipv6 link-local cmd when writing config to filePau Espin Pedrol1-0/+2
Previous commit added the ipv6 link-local vty cmd but forgot to add code to print its value in config_write_apn. Fixes: 37c45e3998fca240b5266abd3ac883d0a35bab50 Change-Id: I08aeaa98d6dc318b7e9740d837ba4ac48cd7051c
2017-12-14ggsn: Add 'ipv6 link-local' vty cmdPau Espin Pedrol3-1/+37
This vty cmd let's you set up a new link-local IP for a specific APN to be used during ICMPv6 Router Advertisement procedure. osmo-ggsn hence requires a link-local IPv6 address to be added to the tun interface, otherwise the apn will not be configured correctly and it won't be able to allocate addresses from the ipv6 pool later on. This feature is useful in case your OS doesn't support autoconfiguring link-local IPs when the interface is brought up (some linux versions are known to fail at this) or in case you configured your OS specifically to avoid automatic set up (sysctl net.ipv6.conf.*.autoconf). If "no ipv6 link-local" is provided (default), osmo-ggsn will rely on the OS or the ipup-script setting up the link-local IP for the tun interface at creation time, then fetching it after ipup-script time and using the first link-local ip found. On the other hand, if the "ipv6 link-local" cmd is provided, osmo-ggsn will add the link-local IP to the interface manually and use that one for later Router Advertisement procedures. Change-Id: I09ef27f54940d4c47150e5f9016d1cd4298c16b5
2017-12-14Set tun_addaddr ipv agnostic and add support for ipv6Pau Espin Pedrol3-18/+193
sgsnemu (the only user of this API so far) has been modified to use the new API with in46_addr. FreeBSD code for IPv6 has not been tested. Change-Id: Ie36afe6eaf393855a4a708000ef4ad0192bf4767
2017-12-14tun.c: tun_addaddr: Fix segfault and wrong usage of tun_nlattrPau Espin Pedrol1-2/+3
First of all, dstaddr can be NULL, avoid copying it in that case. Second, we want to copy the addr data, not the pointer. I tested it and the IP was not added (not shown in ip addr) until I copied the content instead of the address. Change-Id: I8da637b155f0e913cab6c5b0dde355c9f33375b5
2017-12-14ggsn.c: Improve logging info on link-local ipv6 addr not foundPau Espin Pedrol1-3/+5
Change-Id: I18fb952514712ff30d18c7626f84309055d3efa1
2017-12-14cosmetic: sgsnemu.c: Fix trailing whitespacePau Espin Pedrol1-6/+6
Change-Id: Ic392ed35946e076a39aa5f7bf80a8c2ffe73562c
2017-12-14contrib: jenkins.sh: Build libgtpnl as dep when building with gtp kernel supportPau Espin Pedrol1-0/+3
Change-Id: I7ee741d4940e3c10a4944b676c9765d6808afba9
2017-12-11Add support for IPv4v6 End User AddressesPau Espin Pedrol8-82/+231
Before this commit, when an MS requested an ipv4v6 context osmo-ggsn returned an error stating the type was unknown, and this text was printed in the log: Processing create PDP context request for APN 'ims' Cannot decode EUA from MS/SGSN: f1 8d This patch has been tested with an MS running the 3 types of addresses: - IPv4 and IPv6: no regressions observed, the context is activated and packets are sent to the ggsn. - IPv4v6: Wireshark correctly parses request and reponse, and then ICMPv6 traffic from both sides. Finally I see the MS using the IPv4 and IPv6 DNS addresses advertised and TCP traffic over IPv4 (because probably my IPv6 network setup is not correct). I also checked I can disable/enable data (pdp ctx delete and activate) several times without any issue. Change-Id: Ic820759167fd3bdf329cb11d4b942e903fe50af5
2017-12-05ggsn: Ignore PCO with length 0, don't abort processingHarald Welte1-2/+0
The existing code would abort iterating over the list of PCO TLVs if a TLV of length zero was encountered. However, there's nothing in the spec that would make a zero-length PCO invalid, so we should continue to iterate over any PCO TLVs after the zero-length one. This issue was discovered while writing test cases in osmo-ttcn3-hacks.git Change-Id: I36660566a8ee2ca80ae6ee99c86e167e7c208df2
2017-12-05ggsn.c: Fix byte order of IPCP IPv4 DNS serversHarald Welte1-2/+2
... this probably didn't show up as 8.8.8.8 is dual-endian. doh! The address was already in network byte order, but msgb_put_u32 "of course" expects host byte order, ending up the wrong way in the actual packets :/ Change-Id: Ia4bcac5fcebfc24760432eb66be258a01d78f65f Closes: OS#2685
2017-12-05Log APN and tun names for packetsMax1-3/+4
Change-Id: I6f7ce33f6585b2b78e2b8a5c0f7111f0316d6ddd
2017-12-04tests: Split ipv6 specific tests into a new test groupPau Espin Pedrol10-352/+440
This way they can be easily disabled later on when IPv6 support is made optional. Change-Id: I3906dbf55ccf1650083398e08ac870add0bbdcef
2017-12-04Remove unused empty src/Makefile.inPau Espin Pedrol1-0/+0
Change-Id: I207362e055dbfafc42fad2cfdd0cf1da9dcad88b
2017-12-04ggsn.c: Print version of unhandled ip packetPau Espin Pedrol1-1/+1
Change-Id: I7e226a12b074c96c572f90e3aaf62716d0cd47c5
2017-12-01cosmetic: Reorder tun_addaddr to get rid of decl of tun_setaddr4Pau Espin Pedrol1-172/+169
In any case, if we add support for ipv6 in tun_addaddr we will need tun_setaddr (and also change the API of tun_addaddr to use in46_addr). Change-Id: Iadf51379455174a642b477040ec96f28022c24c7
2017-12-01tun_setaddr6: Fix log typoPau Espin Pedrol1-1/+1
Change-Id: Id7f7d33a33730d57c5ecf7ebf5612f4744cf5163
2017-11-29sanitize build: ensure uint16/32 alignment in gtpie_test and in46a_testNeels Hofmeyr2-6/+8
Fixes sanitize build failures: Testing gtpie_tlv() ../../../../src/osmo-ggsn/tests/gtp/gtpie_test.c:30:2: runtime error: load of misaligned address 0x55c0a0830f21 for type 'uint16_t', which requires 2 byte alignment 0x55c0a0830f21: note: pointer points here 00 00 00 17 00 06 01 02 03 04 05 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ Testing gtpie_tv0() Testing gtpie_tv1() Testing gtpie_tv2() ../../../../src/osmo-ggsn/tests/gtp/gtpie_test.c:76:2: runtime error: load of misaligned address 0x55c0a0830f21 for type 'uint16_t', which requires 2 byte alignment 0x55c0a0830f21: note: pointer points here 00 00 00 2a ab cd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ Testing gtpie_tv4() ../../../../src/osmo-ggsn/tests/gtp/gtpie_test.c:90:2: runtime error: load of misaligned address 0x55c0a0830f21 for type 'uint32_t', which requires 4 byte alignment 0x55c0a0830f21: note: pointer points here 00 00 00 2a ab cd 01 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ Testing gtpie_tv8() ../../../../src/osmo-ggsn/tests/gtp/gtpie_test.c:104:2: runtime error: load of misaligned address 0x55c0a0830f21 for type 'uint32_t', which requires 4 byte alignment 0x55c0a0830f21: note: pointer points here 00 00 00 2a 00 01 02 03 04 05 06 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ ../../../../src/osmo-ggsn/tests/gtp/gtpie_test.c:105:2: runtime error: load of misaligned address 0x55c0a0830f25 for type 'uint32_t', which requires 4 byte alignment 0x55c0a0830f25: note: pointer points here 00 01 02 03 04 05 06 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^ Change-Id: I9eb16450af942d6464211e190f6a4d5a1d814842
2017-11-28examples: Add secondary ipv6 google DNS to osmo-ggsn.cfgPau Espin Pedrol1-0/+2
Change-Id: I5efbd1848a7974cb8dc614c4567de2658b9a7269
2017-11-18Merge changes Id4724fe0,I5c619712Harald Welte2-3/+2
* changes: contrib/jenkins.sh: Enable Werror in C(PP)FLAGS ggsn_vty: Stop using deprecated API vty_install_default
2017-11-17add --enable-sanitize config optionNeels Hofmeyr1-0/+12
Change-Id: I439ff2b2cb36a5c29347a914c0f2e21bed598b06
2017-11-16contrib/jenkins.sh: Enable Werror in C(PP)FLAGSPau Espin Pedrol1-1/+1
Change-Id: Id4724fe07f6641e82c3bd9cde2d8d759aa492288
2017-11-16ggsn_vty: Stop using deprecated API vty_install_defaultPau Espin Pedrol1-2/+1
Changes made as requested by the deprecation text. Fixes warning below: warning: ‘vty_install_default’ is deprecated: Now happens implicitly with install_node() [-Wdeprecat ed-declarations] vty_install_default(GGSN_NODE); ^~~~~~~~~~~~~~~~~~~ Change-Id: I5c6197129e0c251a4e8dd174027b011c8f6476c6
2017-11-14contrib/jenkins.sh: Allow jenkins job to specify if kernel GTP is usedHarald Welte1-1/+1
Change-Id: I83319aa6e5e7dde229ae5a036b5a1800879cbf81
2017-11-14gtp-kernel: Add device nime in pdp_debug() log statementsHarald Welte1-4/+5
Change-Id: Iad0e7a9fa48fcddc31b8d555244581efdbd61b4e
2017-11-14gtp-kernel: Add function name to pdp_debug() function callsHarald Welte1-4/+4
This allows us to distinguish "add" from "del" operatons in the log Change-Id: Ibe2e76a6eecc7b5fa5f44ab2c1578597138e30b9
2017-11-14gtp-kernel: Get rid of SYS_ERR where not applicableHarald Welte1-14/+8
SYS_ERR is for logging an error from the (operating) system including the errno value. For general logging, we have DEBUGP/LOGP. Let's convert the gtp-kernel logging over. This also fixes the related line ending mess-up as SYS_ERR adds a LF while LOGP/DEBUGP don't. Change-Id: Idb4069a28227b770e20d62bf306cd294f47146ae
2017-11-14gtp-kernel: proper cleanup in error pathHarald Welte1-0/+2
When genl_socket_open() succeeds but genl_lookup_family() fails, we have to clean up the socket that we just opened. This requires a new version of libgtpnl :/ Change-Id: I31df046530347f88cb7b16c37a899b456ed1b080
2017-11-14gtp-kernel: Make sure repeated calls to gtp_kernel_init() are safeHarald Welte1-15/+25
We have to factor out the "run once" code and make sure to really only run that once, while the per-device code remains in the gtp_kernel_init() function. Change-Id: Iba5bd71e4b725eef59fe4f233fbb965e396a06c3
2017-11-14gtp-kernel: Avoid global state variableHarald Welte2-23/+0
Whether or not GTP kernel support is enabled is the property of a given APN, and not a global state variable. Change-Id: Iff3bd8a52bd6c20f9811ee41ff700486d08591f3
2017-11-14gtp-kernel: Align logging for APN start in kernel-gtp case with that of TUNHarald Welte1-1/+1
Change-Id: Ie53d37f151e8b6448636a8cde5777b3841989d05
2017-11-14gtp-kernel: shut down kernel GTP device in apn_down()Harald Welte1-0/+1
When we take the APN down, we should also take the GTP device down. Change-Id: Idd250dd454a1603834d388884a24a63e044fdd7b
2017-11-14gtp-kernel: Get rid of hard-coded kernel GTP device nameHarald Welte3-27/+25
The existing kernel GTP support code inherited from OpenGGSN was overly simplistic and didn't support multiple GTP devices or user-defined GTP device names. Let's remove that restriction in this patch Change-Id: I51df223788fd5b7cf8099463b8aa0ca4a4fd1c96
2017-11-13gtp-kernel: Re-add support for kernel GTP-U accelerationHarald Welte1-5/+9
When we branched off osmo-ggsn from the old openggsn code base, the support for kernel-gtp got temporarily removed. This patch re-introduces support for handling the GTP-U plane in the Linux kernel by means of libgtpnl + the kernel GTP-U driver. This only works for IPv4 at the moment, until the kernel GTP-U code gains IPv6 support. Kernel GTP currently also is restricted to a single APN per GSN. Change-Id: Ieb1bc1bd0d51d41947f0abd6ebbc2e5d102592d6
2017-11-13gtp_kernel: Change gtp_kernel_init() function signatureHarald Welte2-7/+16
Rather than taking an explicit in_addr, prefix_length and a string-formatted prefix, let's pass in an in46_prefix and derive the other representations from it. Also, don't refer to a no-longer-existing global 'ipup' variable but add it as a function argument. Change-Id: Ife87142c86589b4fa4062d62afe3670467548589
2017-11-13Properly NULL-out blacklist in alloc_ippool_blacklist()Harald Welte1-4/+8
This ensures that in case of error, any caller can still safely call talloc_free() on the blacklist pointerm as free on NULL is well-defined. With the code prior to this patch we fear a double-free. Change-Id: Idc511cb3f0dfb922920aba8f88ea77df1722ecdc
2017-11-13factor out netdev_ip_local_get() from tun_ip_local_get()Harald Welte2-4/+25
netdev_ip_local_get() is a generalized version of tun_ip_local_get() which supports the net device as argument, rather than a tun_t. Change-Id: I072aa1a55e7bf110706e9207021b776d9b977fb6
2017-11-13remove unused argument to alloc_ippool_blacklist()Harald Welte1-3/+3
Change-Id: I4d3ea077ba46446e537ec9a6de6f4080fcaa428c