aboutsummaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2021-02-16logging: gsmtap: Fill PID field for each messagePau Espin Pedrol1-0/+7
It was recently discovered that PID field in gsmtap log messages was always set to 0. Before this patch, the field was never being set. The approach of this patch is to record the PID of process one, in order to avoid calling getpid() syscall on each log line to be sent. The counterpart of this optimization is that eventual fork() calls would still keep the old incorrect value, but I think nobody can safely assume that fork() is possible once all this kind of infrastructure has already been configured (fork() should only be done really at the start of the program before any osmocom foo is initialized, or to immediatelly call exec()). Related: OS#5027 Change-Id: I7db00d1810f0860166bffa0bda8566caa82e06a9
2021-02-16gprs_ns2: inform the NS user (BSSGP) about the MTU of a NSEAlexander Couzens5-4/+53
The BSSGP layer needs to know the MTU of the NS UNIDATA payload. The MTU can be 0 if the NSE doesn't contain any NSVC. Every status indication will contain the mtu value. The MTU in the status indication contains the maximum transfer unit of a BSSGP message. From NS side the maximum SDU. Related: OS#4889 Change-Id: I5016b295db6185ec131d83089cf6c806e34ef1b6
2021-02-15gsm: Fix encoding of gsm0808_cell_id_list2 with CGI-PS typesPau Espin Pedrol1-3/+20
CGI-PS type doesn't exist in GSM 08.08 Cell Id lists. That type of cell id is osmocom-specific and used internally. In here CGI-PS is automatically converted to CGI (since the later is an extension of this one). The encode/decode_cell_id_u are left intact (comment added) since those can still be used (and are used by RIM code) to encode/decode TS 48.018 Cell Identifiers. Related: SYS#4909 Change-Id: Id74f4577c397c1ba696f00395858311bd82cb2c8
2021-02-15gsm0808_utils: Move static function further up in filePau Espin Pedrol1-46/+46
It's a static internal function, so it makes sense to have it at start of its related section. It will be used by other functions in follow up patches. Change-Id: I60f61f8f7bb6543feb068bdcee76d3b752565c95
2021-02-15gsm: Support converting to cgi-ps in gsm0808_cell_id_from_cgi()Pau Espin Pedrol1-0/+8
This is not really used nowadays, but added for completeness in case someone wants to use it. Change-Id: I1361b044bd897d04133cda6fd62c16852700b17a
2021-02-15gprs_ns2_sns: fix typo in doxygen commentAlexander Couzens1-2/+2
Fixes: 5bef2cc4bd58 ("ns2: Improve/extend doxygen comments for new ns2 implementation") Change-Id: I21b51791aa149d9a5b13169d1cf8c2857c55774a
2021-02-15gprs_ns2: fix comment of alive NS-VCAlexander Couzens1-2/+2
There is no active NS-VCs only alive or dead. Change-Id: Idb5d2ae4a99a472e38601ff841b8046ecf89d1bc
2021-02-15BVC FSM: Treat overlapping BVC-RESET as implicit ACKHarald Welte1-1/+8
If the BSS (or SGSN) has sent a BVC-RESET PDU for a BVCI to the SGSN (or BSS) and is awaiting a BVC-RESET- ACK PDU in response, but instead receives a BVC-RESET PDU indicating the same BVCI, then this shall be interpreted as a BVC-RESET ACK PDU and the T2 timer shall be stopped. Related: OS#4974 Change-Id: I4d15733f9f205cb563b66ef9e41dc8df50151900
2021-02-15gprs_ns2_vc_fsm: remove debug line of the alive_timerAlexander Couzens1-2/+0
The log line sneaked in when fixing the alive ms Fixes: ab0e8646c4aa ("gprs_ns2_vc_fsm: use CLOCK_MONOTONIC for alive elapsed timer") Change-Id: Iffe367b240f47c39232bbc26991c19752a1c75ad
2021-02-12bssgp_bvc_fsm: Consistent namingDaniel Willmann2-6/+6
bssgp_bvc_get_features_* are fsm "methods" and the name should indicate that just lika all other function names in bssgp_bvc_fsm.h Change-Id: I30fbbe36cdabf9635eaf4dfb1e93c8ce0f667b39
2021-02-12bssgp2_enc_status: Truncate STATUS message to maximum PDU lengthDaniel Willmann2-5/+16
Related: OS#4889 Change-Id: Ic39d918c56399ceb0431299ce938e3bf276f678a
2021-02-12bssgp_bvc_fsm: Set/get maximum BSSGP PDU lengthDaniel Willmann2-0/+25
Add functions to get/set the maximum supported BSSGP PDU size by the NS layer. IPv4 and IPv6 should not matter since we can just enable IP fragmentation and send NS PDUs up to 2**16 + bytes. Frame relay does not support fragmentation and this is the reason we need to be aware of the maximum PDU size. Luckily with 1600 bytes the MTU in frame relay can hold a regular IP packet including NS/BSSGP overhead. On the NS layer this corresponds to the size of an NS SDU in NS-UNITDATA (3GPP TS 48.016 Ch. 9.2.10) Change-Id: I9bb82ead27366b7370c9ff968e03ca2113ec11f0 Related: OS#4889
2021-02-12ns2: Fix incompatible VTY configs when writing configDaniel Willmann1-1/+1
It seems like we still don't have NS2 VTY tests running in libosmocore so this only got caught once osmo-sgsn/osmo-gbproxy builds failed. Change-Id: Id3cd407b05457a4703ee38c4b1b1b65800bbd30e Related: OS#4887
2021-02-12gprs_ns2_vty: use strcmp() instead of strncmp()Alexander Couzens1-1/+1
Otherwise substring wouldn't be detected. E.g. local vs local2 Change-Id: I183b5176a1d8a295b7551ad186b3565adeb3d5e7
2021-02-12gprs_ns2_vc_fsm: reset the alive elapsed timeout everytimeAlexander Couzens1-0/+1
The alive elapsed timeout was only set once on the start of the test procedure but not every time an ALIVE PDU was sent. Fixes: OS#4997 Change-Id: I029696dfff21919f97ac4c33cdd82162b5ab1555
2021-02-12gprs_ns2_vc_fsm: use CLOCK_MONOTONIC for alive elapsed timerAlexander Couzens1-6/+10
gettimeofday can jump and the comment says it should not be used for elapsed timer. Related: OS#4997 Change-Id: I41989d8f9f82f4d1f7b97f11577653699365c8ae
2021-02-12gprs_ns2: add signalling & data weights for UDP bindsAlexander Couzens6-4/+71
Allow to assign a signalling and data weight to UDP binds. Those weights will be used when doing dynamic configuration over IP-SNS. This is only the first part which only uses the assigned weights when doing a new SNS configuration. The outgoing change weight procedure will be supported in a later patch when the SNS fsm supports outgoing procedures. Related: SYS#5354 Change-Id: I5133e4229377d44772a9af28628a2bc420fea34b
2021-02-11ns2_fr: Fix heap-use-after-free in error recovery pathHarald Welte1-0/+1
<0026> gprs_ns2_fr.c:515 BIND(hdlcnet1) Can not create AF_PACKET socket. Are you root or have CAP_NET_RAW? ================================================================= ==3872359==ERROR: AddressSanitizer: heap-use-after-free on address 0x6130000030c0 at pc 0x7fef120aa92e bp 0x7ffebf6b5c20 sp 0x7ffebf6b5c18 READ of size 8 at 0x6130000030c0 thread T0 #0 0x7fef120aa92d in osmo_fr_link_free (/usr/local/lib/libosmogb.so.11+0x16992d) #1 0x7fef1205105a in free_bind (/usr/local/lib/libosmogb.so.11+0x11005a) Change-Id: I23c0f1697edd5734085fa18b0a2f253c0f206c53
2021-02-11ns2_fr: Fix null pointer deref in error pathHarald Welte1-1/+1
The followign happens if osmo-gbproxy is started without CAP_NET_RAW: <0026> gprs_ns2_fr.c:515 BIND(hdlcnet1) Can not create AF_PACKET socket. Are you root or have CAP_NET_RAW? gprs_ns2_fr.c:176:2: runtime error: member access within null pointer of type 'struct msgb' AddressSanitizer:DEADLYSIGNAL the second line is free_bind() iterating overr the backlog while destroying the not-yet-fully-initialized bind. Let's make sure the backlog llist_head is always initialized properly. Change-Id: I4d2fa50955c5897cd469fee68d4ddc65a9f5688f
2021-02-10cosmetic: Move comment one line below in append_gprs_cell_optPau Espin Pedrol1-2/+1
Move it above the place where the bit is set, since the bit represents whether Extension Information is available, not whether R99 is available. Change-Id: Ice592acc50a24efd7fe4cf1a91f1d48fd74f38d8
2021-02-09gprs_ns2_vty: fix memory leak of vty_bindsAlexander Couzens1-0/+1
They never got freed, only removed from the vty_bind queue. Change-Id: I100897c32dc152f9acbb322782fae49b1f0bc030
2021-02-09gprs_ns2: rename vty-command ip-sns -> ip-sns-remoteAlexander Couzens2-7/+7
In prepration to introduce more commands e.g. ip-sns-bind rename the ip-sns-remote Related: SYS#5354 Change-Id: Ida979f3b9daa5f7280a629441e4006a7635653b0
2021-02-09gprs_ns2_sns: reset the N of timeout when entering a new stateAlexander Couzens1-0/+17
Otherwise retries are splitted between the states. Related: OS#5355 Change-Id: Iefde0c89965f0be899d6d1f096480f6fc79a92be
2021-02-09gprs_ns2_sns: add timeout to ST_CONFIG_SGSNAlexander Couzens1-3/+13
The state CONFIG_SGSN must be also protected by the timeout Tsns-prov. Related: OS#5355 Change-Id: I2700c1ad40ebe30658e9937d86a4861b0b59d6b6
2021-02-09gprs_ns2_sns: rework tracking of NS-VC unblocked/alive stateAlexander Couzens3-14/+90
The SNS must know when all NS-VC have failed. Further more there might be a corner case when the SNS configuration succeeds but no NS-VC comes up afterwards. Related: OS#5355 Change-Id: Ie72da9adeefe0c2850d49a9208b2d0a4556f9101
2021-02-08ns2: Don't try to add packets to the backlog on real errorsHarald Welte1-1/+5
When writing to the AF_PACKET socket, we have to distinguish the pseudo-errors like -ENOBUFS (where we do want to add to the backlog) from real errors like -ENETDOWN, -EMSGSIZE, ... where we don't want to add the failed packet to the backlog. Change-Id: Ibbb6805da0f118466c4c91e458e62b63b84cb794
2021-02-08ns2: improve backlog handling on interface up/downHarald Welte1-9/+35
This patch improves the behavior of the newly-added backlog in situations where the interface goes up/down. * don't add new packets to the backlog while if_running == false * flush the backlog on both ifup and ifdown events Change-Id: Ib35d099526544fe2cff64566fd56147a906adab9
2021-02-08ns2: Don't queue Q.933 LMI messages; only store most recent onesHarald Welte1-3/+18
There's not really any point in storing multiple LMI messages, and then transmitting them in inverse order, as the existing code does. Instead, we shall store only the last (failed) LMI message and try to transmit that at highest priority, before any NS messages in the actual queue. Change-Id: I5407a76a34d7e687966fe1a915febf3a87256593
2021-02-08ns2: Name NSVC FSM events consistentlyHarald Welte1-12/+12
Reading a log line like this: <0026> gprs_ns2_vc_fsm.c:808 GPRS-NS2-VC(FR-hdlcnet1-DLCI16-NSE02001-NSVC00001)[0x6120000024a0]{UNBLOCKED}: Received Event RESET is very ambiguous. Does it mean we received a NS-RESET message? Does it mean the FSM was instructed to send a NS-RESET? ... Let's make sure the human-readable names give a very clear indication of what exactly is happening. Change-Id: I8b7615b3eca04212831163ff0ea4aea35069cd0e
2021-02-08Fix struct bitfields on big endian systemsPau Espin Pedrol1-0/+7
Changes done by contrib/struct_endianess.py. Change-Id: Ia9cb1ef2ba2bfff9ef713c7d1cf388931dae1c46
2021-02-05bssgp_bvc_fsm: check return value of osmo_fsm_register()Vadim Yanitskiy1-1/+1
Change-Id: I0ade2e476a035bb44b2f135ece4552d015852274 Fixes: CID#215717
2021-02-05gsm0808: use msgb_tv16_put() and osmo_store32be()Vadim Yanitskiy1-18/+5
This API makes the code simpler and easier to read. Change-Id: Ibe9eaaa2a9344ba798631b8f115ad248f0a2f76b
2021-02-05frame_relay; Fix Q.933 async STATUS at DLC creationHarald Welte1-1/+1
Fix the encoding of the asynchronous Q.933 STATUS message we send at DLC creation time. Change-Id: Id1460ffa6266be85f44579c447421eed12481b02 Closes: OS#5010
2021-02-04gb: frame_relay: Detect link outage on "last receive seq nr == 0"Harald Welte1-1/+11
this is a bit of a hack. Q.933 explicitly forbids either side from ever sending a sequence number of '0'. Values start from '1' and are modulo 256, but '0' is always skipped. So if the peer is sending us a "last received sequence number of '0' it means it has not yet received any packets from us, which in turn can only mean that it has just been restarted. Let's treat this as "service affecting condition" and notify upper layers. This helps particularly in recovering from rapidly re-starting peers, where the Q.933 nor NS have time to actually detect the connection was lost. Change-Id: I960a7b17f2550cb49a7b9d72ed87cd271bb64122 Related: OS#4974
2021-02-04gb: frame_relay: Factor-out function to set link as deadHarald Welte1-8/+15
Change-Id: I624b6a1175cf7d59173dfff02d6197bb644b9072
2021-02-04gsm48: add compare function for struct gprs_ra_idPhilipp Maier2-0/+20
Comparing struct gprs_ra_id using memcmp can be error prone, so lets add a compare function to compare two struct gprs_ra_id values reliably. Change-Id: I4d7558c04d9d01761516526086be5104bb2eeada Related: SYS#5103
2021-02-03initial support for static userspace probes via systemtapHarald Welte3-0/+29
This adds a --enable-systemtap configure option, which will then add static tracepoints to the generated libosmocore binary. At this point, only two tracepoints are supported: log_start and log_done. They can be used to trace the amount of time a libosmocore-using application spends in potentiall blocking calls to log to stderr or to files. Related: OS#4311 Change-Id: I7e1ab664241deb524c9582cbd1bec31af46c747e
2021-02-03gprs_ns2_frgre: check iph/ip6h before passing them to rx functionsAlexander Couzens1-2/+8
With IPv4 and IPv6 support it's not guaranteed that iph/ip6h is valid. Related CID#214288 Change-Id: If9015906917e3ad11d14b84c29d64f28a3158144
2021-02-03gprs_ns2_frgre: set a correct gre pointer for ipv6Alexander Couzens1-1/+5
Also fixes a nullpointer deref because iph is NULL on IPv6 Related: CID#216555 Change-Id: I2ff868a7bba6151a2202df774ff022c02b8c34cb
2021-02-03frame_relay: fix NULL pointer derefAlexander Couzens1-0/+1
Related: CID#215530 Change-Id: Ic58394ab44ee555a0c5dee2b07fa1054093fbcf0
2021-02-03gprs_ns2_fr: free_bind(): first do the NULL check before using membersAlexander Couzens1-1/+1
Change-Id: I80f72ada15b477d735bf5aee36a5d67e80eb0136
2021-02-03gprs_ns2: unify the handling of **result when bind already present.Alexander Couzens3-9/+15
All bind function should work in the same way. Also fixing a null pointer assignment if no **result is giving. Change-Id: Idd0c2190d2af39804c18c4786a997079db9a4330
2021-02-03gprs_ns2_vc_fsm: rename ST_ALIVE -> ST_RECOVERINGAlexander Couzens1-17/+17
ST_ALIVE isn't quite clear. This state means this NS-VC is still dead. ST_ALIVE is used for NS-VC with vc_mode ALIVE (e.g. UDP NS-VC). It's the first state when the remote hasn't yet answered or when the NS-VC lost ALIVEs. Related: OS#4958 Change-Id: I0b29e8ce6444546d90bde68b1f957f1013238784
2021-02-03gprs_ns2_vc_fsm: reset ALIVE N counter when restarting the test procedure.Alexander Couzens1-0/+1
Otherwise a NS-VC would flap between ALIVE and UNBLOCKED state. Related: OS#4959 Change-Id: Id98629bd65f92103e0e571ec388c58b02cb2ccb5
2021-02-02gprs_ns2: prevent division by zero in load_sharingAlexander Couzens1-1/+8
Check if the NSE is alive before passing UNITDATA to the load sharing. Change-Id: I0e2a59bec9b72f74eb64510a2e1ad60486694a55 Fixes: OS#4996
2021-02-02ns2: Don't start sending NS-RESET until FR DLC is availableHarald Welte1-2/+12
There's no point in sending NS-RESET (or any other) messages to the underlying FR layer if the FR DLC has not been marked as available/active yet. Change-Id: Id4e7565ba166ca1d12f8800c643d9f2bc4d66873 Closes: OS#4999
2021-02-02ns2: Stop test procedure when going into unconfigured stateHarald Welte1-0/+7
When we're unconfigured and not yet started, we should not transmit NS-ALIVE. Change-Id: Ida3685e42a753899f1bf177eefcc23352ec7440d Related: OS#4999
2021-02-02ns2: Don't automatically re-start FSM at FORCE_UNCONFIGUREDHarald Welte2-1/+1
There are use cases in which the NS-VC FSM should go back to unconfigured _without_ being re-started immediately. Let's permit the caller to do that. Change-Id: I31fe695a83d38ea1f10f5444e840633d7fa68442
2021-02-02frame_relay: cosmetic: Unify log syntax when discarding Rx packetsHarald Welte1-2/+2
Change-Id: I09d035e38b41be9d6ac5e16da7fb113286c77d29
2021-02-02frame_relay: Discard received messages for DLC not yet activeHarald Welte1-7/+10
If we receive messages for a DLC which has not yet reported as being available by Q.933 LMI, drop the incoming message. Otherwise we would dispatch it to the user, and the user wants to respond - but then we reject the transmission due to the inactive DLC. Change-Id: Ia4a045fdf165b526f429f4617e0fdc76036480bd Related: OS#4999