Commit Graph

3392 Commits

Author SHA1 Message Date
Vadim Yanitskiy b89114b3fa logging: fix memleak in log_target_create_file()
Change-Id: If16d8c6417698bbb5cf87716f9507c7256aeaecb
2020-09-09 05:00:15 +07:00
Vadim Yanitskiy 04f4271704 logging: fix log_target_destroy(): properly close syslog
Change-Id: I122445e8ee842b5f807d21a272520648660e7e65
2020-09-09 04:47:45 +07:00
Vadim Yanitskiy 744236b96e logging: refactor and simplify log_target_destroy()
Change-Id: Ic6b9906e6fd24de6af9c869348c100d9ef6a7df6
2020-09-09 04:42:22 +07:00
Alexander Couzens 0f36421ba8 add osmo_sockaddr_local_ip() to determine the local address for a remote.
Similiar to osmo_sock_local_ip but for osmo_sockaddr.

Change-Id: I9cd2c5ceb28183e2fd2d28f9c9088c3fcac643d2
2020-09-07 16:22:21 +02:00
Alexander Couzens 3b688835b0 gb/common_vty: use void *
As long the filter doesn't look into the nsvc/bvc structs
there is no need to use the type.
Further it allows to use the same code for NS1 and NS2.

Change-Id: I9b9a70f382a94f1d41142060d5db569f9df865ac
2020-09-07 07:50:58 +00:00
Alexander Couzens 83fb686baa gb/gprs_bssgp: remove superfluous whitespace
Change-Id: Ic66f7e640cd473fa2c8473a3e91f57332ae9bf6a
2020-09-06 23:44:02 +00:00
Alexander Couzens e4181ea8a2 socket: add osmo_sockaddr_cmp()
Compare two osmo_sockaddr.

Change-Id: I2d12ebae2710ffd17cf071e6ada0804e73f87dd6
2020-09-02 18:42:21 +02:00
Alexander Couzens 43957e69ca socket: introduce osmo_sock_init_osa & osmo_sock_init_osa_ofd
osmo_sock_init_osa() takes osmo_sockaddr* as local and remote endpoints
to setup a socket.

Change-Id: I1eece543e3241ef0e095eb63bb831f7c15a16794
2020-09-02 18:42:21 +02:00
Alexander Couzens ea19839ade tests/socket: add testcase test_get_ip_and_port
Check if osmo_sock_get_ip_and_port() works correct.

Change-Id: I4e69d814367168c05f0da161ec9b705db36ad096
2020-09-02 17:23:43 +02:00
Alexander Couzens d95f5d41fa sockaddr_str: add osmo_sockaddr_str_from_str2() which doesn't set the port
In case the port isn't known at the time osmo_sockaddr_str_from_str2()
parse only the ip and don't touch the port.
This is the case when a user has different vty commands for ip and port.

Change-Id: Ifd4e282586b8bd40b912a9f1c25f9e8208420106
2020-09-02 15:22:57 +00:00
Pau Espin d8cf52b993 socket: Fix bug in osmo_sock_init2(AF_UNSPEC) matching IP versions
See previous commit for a bug description.

Fixes: 2c962f5de1

Change-Id: I59bf4b4b3ed14766a5a5285923d1ffa9fc8b2294
2020-08-31 19:01:02 +02:00
Pau Espin d9e04177a2 tests: Add test to showcase osmo_sock_init2 bug with AF_UNSPEC
The function is checking for IP version matching between local and
remote addresses even if only one is needed based on flags. For example,
if user only desired to bind, the remote address should not be
used nor checked.

Bug was introduced here: 2c962f5de1

Change-Id: I87afd1db9bd017426abcc959fa515d15784cdf1c
2020-08-31 18:59:04 +02:00
Pau Espin 5cc4fe4706 socket: Add some osmo_sockaddr print helpers
These are APIs useful to inline in log calls.

Change-Id: Ie07a38b05b7888885dba4ae795e9f3d9a561543d
2020-08-31 12:52:09 +02:00
Pau Espin 7bda8549a4 socket: fix wrong ipv6 dst buf size passed in osmo_sock_local_ip
Change-Id: I13939fda9b3d642f9fa1413e59458aba0628a4a6
2020-08-31 11:21:30 +02:00
Pau Espin 81e7a6c859 socket: Fix stack-buffer-overflow in osmo_sock_local_ip()
On IPv6 sockets, getsockname() and inet_ntop() would act upon a
structure struct sockaddr_in.

First getsockname() would succeed but truncate the address, and later on
inet_ntop would read out of the scope of the structure.

Change-Id: If781d56680758a97643b1b38e78d3431ea649020
2020-08-31 08:50:42 +00:00
Pau Espin 308ab792a3 socket: Use AF_UNSPEC instead of PF_UNSPEC calling getaddrinfo
man getaddrinfo entry doesn't mention PF_UNSPEC, but AF_UNSPEC.

Change-Id: Icab676ff7ee9d813d7b7fe807fbe172512f5e397
2020-08-31 08:50:42 +00:00
Pau Espin 1a3d24e8a5 socket: Add support for AF_INET6 in osmo_sockaddr_to_str_and_uint()
Related: SYS#4915
Change-Id: I439c7fa52a3a30eebc3d35e78be7f1724fb69294
2020-08-31 08:50:42 +00:00
Pau Espin 4f463c5ccc socket: Allow binding to :: (IPv6) and connecting to IPv4-only on the remote
sctp_bindx() fails if passed both "0.0.0.0" and "::", only "::" must
be passed instead, which covers both.
As a result, it is fine in this case and makes sense having only IPv6
formatted IPs in the local side (which actually also includes all IPv4
ones in th system) and IPv4-only addresses on the remote side.

Change-Id: I0b590113e5def20edcbcb098426b19cd504eabff
2020-08-30 16:08:35 +00:00
Vadim Yanitskiy 776c5b16ea lapdm: fix SAPI-0/SAPI-3 frame prioritization on DCCH
According to 3GPP TS 44.005, section 4.2.2 "Priority":

  a) on DCCH, a SAPI=0 frame always has higher priority than SAPI=3;
  b) on ACCH, the priority arrangement is more complex:
    b1) if a SAPI = 3 frame is awaiting transmission, two SAPI=0
        frames shall not be sent in consecutive SACCH frames;
    b2) on the network side (LAPDM_MODE_BTS), it must also be ensured
        that any SAPI=3 frame is followed by at least one SAPI=0 frame;
    b3) a SAPI = 0 frame may be repeated in the next SACCH period
        if the Repeated SACCH is supported (see 3GPP TS 44.006, section 11).

We definitely need to extend our testing coverage to ensure that
we implement b) correctly, but for now let's focus on DCCH:

  a) for DCCH, ensure that SAPI=0 frames preceed SAPI=3 ones;
  b) for ACCH, re-use the existing round-robin implementation.

Change-Id: Ia3780bce1222b312ae2fd2d21496a4d6c5ccb6e0
Related: SYS#5047, OS#4731
2020-08-27 22:10:54 +07:00
Vadim Yanitskiy 488989d223 lapd_test: add a test checking SAPI0/SAPI3 prioritization
Recently we've encountered a situation where during MT SMS delivery,
the func=SABM for SAPI=3 was sent on Downlink *before* the BTS
replied with the func=UA for SAPI=0 (contetion resolution procedure,
where we echo the (RR) Paging Response back to the MS).

This change adds a unit test reprodicing the problem.

Change-Id: Ied0f8bb683de8e37bcfa984c2877aa1cec1c0b4b
Related: SYS#5047, OS#4731
2020-08-27 20:40:17 +07:00
Vadim Yanitskiy 45a90cf040 lapd_test: fix: print all messages to stdout, not stderr
We intentionally do not match stderr output because it contains
non-deterministic messages (e.g. pointer addresses), so let's
make sure that all test specific messages go to stdout.

Change-Id: Ia52f8e811cee9d3e1cd5fcda49a9134ccaa31f7f
2020-08-27 19:35:13 +07:00
Vadim Yanitskiy 9ff1c1a08e lapd_test: rename func=UA (RR) CM Service Request: s/ua/ua_cm/
This is basically an ACKnowledgement for (RR) CM Service Request,
thus it contains a copy of the original Uplink message (cm).
Let's rename it to reflect this explicitly.

Change-Id: Id497ff4b688528916495387d64915b14396a68f1
2020-08-27 19:35:13 +07:00
Vadim Yanitskiy d925243ca8 lapd_test: fix wrong comment in lapdm_establish()
Change-Id: I2d8f191147249d5ec34a2d1aba3f4dbc26a7824f
2020-08-27 19:35:13 +07:00
Vadim Yanitskiy 29ecabe7a2 lapdm_pad_msgb(): cosmetic: use GSM_MACBLOCK_PADDING
Change-Id: Ic2ff931ea4272903c440c7c5ea996dd84c2e470b
2020-08-27 19:35:13 +07:00
Pau Espin 9cc661b0e8 ipa: Fix wrong output log formatting
Change-Id: I1862465e9f9a1d9f06a189641360ae7b9e03b1fc
2020-08-27 10:45:30 +00:00
Vadim Yanitskiy f76f21b245 macaddr: fix osmo_macaddr_parse(): return meaningful error codes
Change-Id: I316deb83979198acc26721d29708d9942174b192
2020-08-27 01:10:51 +07:00
Vadim Yanitskiy a751f77cad macaddr: fix osmo_get_macaddr(): return -1 if no device is found
Change-Id: I74d33159485ec1f7f09b444621a2d1941c3dd4db
2020-08-27 01:05:18 +07:00
Vadim Yanitskiy fa6cd88ee5 gsm0808: add gsm0808_create_sapi_reject_cause()
This is basically a successor of gsm0808_create_sapi_reject(), but
instead of hard-coding GSM0808_CAUSE_BSS_NOT_EQUIPPED, it allows
the caller to specify a cause value to be used.  The old function
is now deprecated and should not be used.

Change-Id: Iefe5484d0fa02d5722b628b1dc237d51d3fb1a9b
Related: OS#4728
2020-08-26 18:30:19 +07:00
Pau Espin 16b076cd15 tests: Split SCTP tests to its own file and run them conditionally
Some systmes (like the ones available in OBS) don't support creating
SCTP sockets, so we need to skip those tests there.

Change-Id: I1d16280674625877ec22cc60cbc5deb67868a656
2020-08-25 14:22:03 +02:00
Pau Espin 3119d47603 socker: Remove AI_ADDRCONFIG from getaddrinfo flags
The flag was added recently in cd133316cf,
and it is causing issues while running unit tests in environement like
OBS where probably there's no non-loopback address configured.

Change-Id: I47c31953f1db39fcd2870bde0b984057b8e7b4c4
2020-08-25 11:43:02 +00:00
Pau Espin 4541cf2b96 osmo_sock_inti2_multiaddr: Fix memleak and free uninitialized mem
Under some specific cases, res_loc could be leaked. Under some others,
res_loc and res_rem were freed without being initialized previously.

Fixes: CID#212863
Fixes: CID#212861
Change-Id: Id9c4eda6fd1172e7324aa23c81e8658967a8dd0b
2020-08-25 11:43:02 +00:00
Pau Espin e9fd7ff9d9 l1sap.h: Fix typo in doxygen documentation
Change-Id: I5772d02704ef289945b8b70d1ebe8a8aa8b79362
2020-08-25 11:42:46 +00:00
Neels Hofmeyr 1cbdee36b6 comment: typo in cbsp.h
Change-Id: I965ba77160f931afaf472c1e260ac6ca5cc7890e
2020-08-25 13:34:39 +02:00
Neels Hofmeyr b19b533e36 comment: mention spec reference in cbsp.[ch]
Change-Id: I1217883a85b4ddd20e9646c7e80ba18950e09713
2020-08-25 13:34:04 +02:00
Pau Espin ed42a88900 osmo_sock_get_ip_and_port(): Support IPv6 sockets
Change-Id: I255a71cf047fd022285fc9aa2f24e5070aa3920b
2020-08-24 08:29:19 +00:00
Pau Espin ba828c30a0 socket: Log proper getaddrinfo() error
Drop one of the two log lines since it would be a duplicated and anyway
it misses context (return code).

Change-Id: I4620bf86f4bcda58ae85209278ac9ae9a0f3012a
2020-08-24 08:29:19 +00:00
Pau Espin cd133316cf socket: multiaddr: Support IPv4 + IPv6 addresses in SCTP associations
The function is improved to support AF_INET:v4->v4, AF_INET6:v6->v6 and
AF_UNSPEC:v4+v6->v4+v6.
Unit tests for the function are added to make sure function behaves
correctly in several scenarios.

Change-Id: I36d8ab85d92bba4d6adb83bc1875eb61094ed2ef
2020-08-24 08:29:19 +00:00
Pau Espin 796c651372 sock: osmo_sock_init2_multiaddr: decouple addr resolution from socket creation
Address resolution is done first and once we have the information, it
proceeds to create the socket. This separation in steps will help when
adding support for IPv6+IPv4 sets, where AF_UNSPEC is passed and created
socket needs to be AF_INET6 in order to handle addr of both versions.

Change-Id: I03147e3033a0c1fd04c9ac61d2ffbd78a1bb784a
2020-08-24 08:29:19 +00:00
Harald Welte 9a21d2af0e Add VTY + CTRL ports for upcoming OsmoSMLC
We will soon have a minimal Serving Mobile Location Center.

Change-Id: Ic7e9c2196a03502cfd3d880a3090a5be80773945
2020-08-21 17:59:53 +02:00
Harald Welte 161d42a619 gsmtap: Add definitions for E1/T1 payload (LAPD, TRAU, FR) in GSMTAP
Change-Id: Ie22eac9a881fe0822f8abc9de73620b93b1f2b37
2020-08-20 20:07:03 +00:00
Pau Espin 62be97e89d vty: Fix cpu-sched VTY node name
Durin dev cycle, node was initially called "sched" instead of
"cpu-sched", and when it was renamed, this specific part was missed.

Change-Id: I0709fee12cc8ddc4d57efb4ea40b0b79b7ea4151
2020-08-20 08:40:30 +00:00
Vadim Yanitskiy 478dd1b330 vty/command: cosmetic: swap i and j in vty_dump_element()
It's more convenient to use i in the outer loop, and j, k, etc.
in the inner loops.  Otherwise it looks a bit confusing.

Change-Id: I61ef48fcf977d6a872e288571a4ff2c3dfe3184b
2020-08-18 18:40:22 +07:00
Vadim Yanitskiy b0bbd72b2e vty/command: fix switch / case coding style in vty_go_parent()
Change-Id: I6f7f5af6879d91811be6f0edf3feb2ebae185ac7
2020-08-18 18:34:47 +07:00
Eric Wild dde327275c vty cpu sched: do not assert if sched impossible
Shared code might be used by applications that have no vty, so sched
can't be initialized, do not assert and break everything in this case, a
warning should suffice.

Change-Id: Ic40075df8d4cf9fe8f1d711f899dae9a4b5b0928
2020-08-17 10:14:27 +00:00
Vadim Yanitskiy 523c4e0f44 vty/command: cosmetic: drop redundant line break
Change-Id: Ia7c85b7862fbb191b5746fc333cf0c34bc79a533
2020-08-15 07:46:53 +00:00
Vadim Yanitskiy 1d7ae15625 vty/command: cosmetic: fix formatting of config_help_cmd
Change-Id: I8f784d0cf65fa7813088e3ff76d7213b99b975d0
2020-08-15 07:46:53 +00:00
Vadim Yanitskiy 6f50e21936 vty/command: cosmetic: simplify conditions in in config_list_cmd
Change-Id: Id1c082d102b7156dafb9c5d9197dcdc4d26bff63
2020-08-15 07:46:53 +00:00
Vadim Yanitskiy 441dd32e89 debian/control: change maintainer to the Osmocom team / mailing list
Change-Id: Ia340c28169c8bfd07c37d320c3f5386a06e4c092
2020-08-13 15:00:34 +00:00
Harald Welte 5c5713e869 Bump version: 1.3.0.173-51974 → 1.4.0
Change-Id: I4fc6dd4f727c8ff5a64865bbb87e1d9feb7c5174
2020-08-13 11:06:36 +02:00
Alexander Couzens 8419bb2e9e socket.h: introduce osmo_sockaddr to hold v4 and v6 endpoints
When dealing with IPv4 and IPv6 address, the struct sockaddr
allows to hold IPv4 and IPv6.
However even when struct sockaddr is being used, a cast to the
IPv4 or IPv6 family must happen. To work around this additional code,
use a union for the most common types.

Change-Id: If80172373735193401af872b18e1ff00c93880e7
2020-08-10 23:29:21 +02:00