Commit Graph

144 Commits

Author SHA1 Message Date
Harald Welte b2a4dbe34b Make sure all commands of SHOW_NODE to ENABLE_NODE 2010-05-12 18:28:00 +02:00
Harald Welte 2bffac599f NS: Add support for persistent NS-VC configuration
With persistent NS-VC configuration (configured through VTY),
we can respond properly to BSS with a somewhat strange NS
implementation Such as the BSplus.  It enables us to respond
with a proper NS-RESET (including NSVCI/NSEI) when receiving
a NS-ALIVE or other PDU for a BLOCKED/DEAD NS-VC after our
end of the connection is rebooted.
2010-05-12 18:28:00 +02:00
Harald Welte f88dc00182 NS: Send UNBLOCK signal when we get UNBLOCK_ACK from peer 2010-05-12 18:28:00 +02:00
Harald Welte 4e187c6dbb Display NSEI instead of NSVCI for all debug msgs 2010-05-12 18:28:00 +02:00
Harald Welte 803647e4af NS: Send STATUS or RESET when receiving NS_ALIVE on unknown NSVC 2010-05-12 18:28:00 +02:00
Harald Welte 4941b35be5 NS / GB Proxy: Add Signal in case Tns-Alive expires too often
The Gb Proxy can then restart the RESET procedure.
2010-05-12 18:28:00 +02:00
Harald Welte 7c24b9edbc NS: Debug NS timer expiry 2010-05-12 18:28:00 +02:00
Harald Welte b983c3104d NS: Add more LOG_DEBGU messages and retransmit NS-ALIVE 2010-05-12 18:28:00 +02:00
Harald Welte 6ecaa3da2b NS: More INFO messages about what we actually transmit 2010-05-12 18:28:00 +02:00
Harald Welte 38407efdf8 NS: don't memcmp sockaddr_in but compare ip and port individually
this seems to work more portably (ppc/32bit big endian)
2010-05-12 18:28:00 +02:00
Harald Welte c1402a68c5 [gprs] NS: more state transitions, error reporting via Tx STATUS PDU 2010-05-12 11:50:11 +02:00
Harald Welte e4ecc8c81e [gprs] NS: elevate events from LOGL_DEBUG to LOGL_INFO 2010-05-12 00:16:57 +02:00
Harald Welte 2b7d4658fb [gprs] NS: update the remote peer IP addr/port on NS RESET 2010-05-11 18:40:45 +02:00
Harald Welte bba902db19 [gprs] NS: include port number in log statement 2010-05-11 18:38:36 +02:00
Harald Welte 9a39293ced [gprs] gb-proxy: We might receive a NS-RESET for a NS-VC that we already know
In this case, don't blindly allocate a new NS-VC but rather use the NSEI
to lookup the 'struct gprs_nsvc' for it.
2010-05-11 18:30:37 +02:00
Harald Welte e8b9ca2972 [gprs] NS: Make sure we include "Rx" in the log statement for NS RESET 2010-05-11 18:18:31 +02:00
Harald Welte 2fc725de72 [gprs] NS: cleanup / fix compiler warnings 2010-05-11 10:15:26 +02:00
Harald Welte fa270b9d5b [gprs] BSSGP: cosmetic cleanup 2010-05-11 10:12:44 +02:00
Harald Welte af0867882d [gprs] gb_proxy: Send proper BSSGP STATUS msg in error case
In order to reuse the existing bssgp_tx_* functions without pulling
in the dependencies of gprs_bssgp.c, we have to move those functions
to gprs_bssgp_util.c

Furthermore, we can remove gbprox_nsi and replace it with bssgp_nsi,
and we can do proper processing of BVC-RESET messages coming from
the SGSN on the signalling BVC.  In that case we need to send RESET
messages to all the BSS.
2010-05-11 10:03:34 +02:00
Harald Welte 834f26d62c [gprs] NS: Add signals in the event of BLOCK/UNBLOCK/RESET
The signals will be sent upon reception of NS-BLOCK/UNBLOCK/RESET PDUs

We also export functions to generate/send BLOCK/UNBLOCK and RESET.
2010-05-11 06:33:17 +02:00
Harald Welte b8a6a83be6 [gprs] Add new 'NS' and 'BSSGP' logging categories 2010-05-11 05:54:22 +02:00
Harald Welte 94633f3e2b [gprs] Move all GPRS related code to src/gprs subdirectory 2010-05-04 07:41:59 +02:00
Harald Welte 7fb7e6154c [gprs] NS: If we are the BSS side, UNBLOCK the connection after it is ALIVE
After RESET / RESET-ACK and ALIVE / ALIVE-ACK, the connection needs to
be unblocked from the BSS side to the SGSN.
2010-05-04 07:20:45 +02:00
Harald Welte 570fb83fd5 [gprs] NS: Start ALIVE Procedure after receiving RESET_ACK 2010-05-04 07:20:45 +02:00
Harald Welte 69a4cf2731 [gprs] NS: improved timer handling for RESET 2010-05-04 07:20:45 +02:00
Harald Welte 80405458a0 [gprs] NS: replace nsvc->timer_is_tns_alive with nsvc->timer_mode
This will allow to use the timer in more than 2 modes
2010-05-04 07:20:45 +02:00
Harald Welte bbc9fac7b7 [gprs] Unify log messages of the NS protocol implementation 2010-05-04 07:20:44 +02:00
Harald Welte f76aee438e [gprs] correctly calculate the length of the BSSGP PDUs 2010-05-04 07:20:44 +02:00
Harald Welte a2ca4ed960 [gprs] pass BSSGP UL-UNITDATA Cell ID up into GMM layer
BSSGP stores a pointer to the Cell Identifier IE in msgb->cb, which
is later used by the GMM layer to identify the cell that has sent a
given message.

This now also means that the gsm_04_08_gprs.c code is free of any
legacy references to msg->trx or struct gsm_bts.
2010-05-04 07:20:43 +02:00
Harald Welte 8f9a3ee67b [gprs] Use stdint.h types (uintXX_t instead of u_intXX_t)
libosmocore already uses them, it's time (at least for new code)
in openbsc to do the same.
2010-05-04 07:20:43 +02:00
Harald Welte 30bc19a5c6 [gprs] SGSN: Expect all Identifiers to be stored at highest level
We now expect the highest level (actual SGSN GMM code) to know
all identifiers for every element in the protocol stack, i.e.
TLLI, SAPI, BVCI and NSEI.  The layer-inetrnal state is looked
up based on those identifiers.

The reason for this is to ensure only the highest level state
needs to be persistent, while everything else can be regenerated
dynamically (e.g. in a SGSN restart)
2010-05-04 07:20:43 +02:00
Harald Welte ec19c10829 [gprs] Ensure msgb->l3h points to Layer3 (04.08)
In the old code
	l3h = BSSGP, l4h = LLC, cb[gmmh] = 04.08
Now, this has been changed to
	cb[bssgph] = BSSGP, cb[llch] = LLC, l3h = 04.08

This way, GSM general 04.08 and GPRS 04.08 code can expect a
GSM 04.08 header at msgb->l3h
2010-05-04 07:20:43 +02:00
Harald Welte 2577d41526 [gprs] convert ns_cause_str to value_string 2010-05-04 07:20:43 +02:00
Harald Welte 290671d683 [gprs] BSSGP: convert cause strings to value_string 2010-05-04 07:20:43 +02:00
Harald Welte 6752fa43b6 [gprs] introduce BSSGP concept of BTS contextx
A BTS context represents the mapping betewen (RA-ID, Cell-ID) and
(BVCI, NSEI) as well as the per-BVC local state.
2010-05-04 07:20:43 +02:00
Harald Welte 3fddf3c4ef [gprs] Build the SGSN stand-alone and not as part of bsc_hack
Instead of continuing to add more and more functionality to the
bsc_hack binary, we should have the new SGSN code run as a separate
executable.

After this commit we now build a 'osmo_sgsn' executable, using its
own osmo_sgsn.cfg config file.

However, the SGSN is not yet functional, mainly due to the fact that
the BSSGP and GMM code are written with the assumption that there
is a msgb->trx->bts and the according 'sturct gsm_bts' data model
around - which clearly is no longer the case outside of bsc_hack.
2010-05-04 07:20:43 +02:00
Harald Welte 1203de3993 [gprs] fully integrate VTY configuration into Gb proxy
The Gb-proxy is now fully configured by config file / VTY
2010-05-04 07:20:42 +02:00
Harald Welte 3771d09ec0 GPRS: Introduce a GPRS Gb Proxy
The ida of the Gb proxy is to aggregate Gb links with a number of BSS
and then present all the BSSGP-VC's together inside one NS-VC to the
actual SGSN.

The code is not yet expected to be complete.
2010-05-04 07:20:42 +02:00
Harald Welte 24a655f140 gprs: remove msgb->nsvc pointer and replace it with NSEI and BVCI
According to TS 08.16, the BSSGP layer needs to specify NSEI and BVCI when
executing the NS UNITDATA REQUEST primitive of the underlying NS layer.

Rather than passing around a pointer to the 'struct gprs_nsvc', we now
have NSEI and BVCI as members of 'struct obsc_msgb_cb' and set them
when BSSGP hands a message down to NS.

NS then does a lookup of the 'gprs_nsvc' based on the NSEI parameter.
2010-05-04 07:20:42 +02:00
Harald Welte 645609ddc8 gprs: Use new msgb->cb[] for storing a pointer to the NS-VC through which it was received 2010-05-04 07:20:42 +02:00
Harald Welte f030b210e8 GPRS: Modularize the NS implementation
* move UDP listener code for NSIP from input/ipaccess.c and into gprs_ns.c
* add PDU type, IE and CAUSE values for later IP based 3GPP TS 48.016
* support multiple NS-VCs and their lookup based on NSVC and sockaddr_in
* maintain the remote_state (blocked/alive) for each NSVC
* introduce the concept of GPRS_NS instances, move all global vars to instance
* remove hardcoded calls to gprs_bssgp_rcvmsg() and replace it by callback

WARNING: This is not finished code.  While it will compile, it will not work
yet, as BSSGP needs to be converted to properly indicate the NSVC to which it
needs to send data.
2010-05-04 07:20:42 +02:00
Harald Welte 510c3920c8 gprs: Update gprs-sgsn branch to use new msgb->cb layout
The explicit 'tlli, gmmh' members of struct msgb are gone from
current libosmocore and have been replaced by the more generic
'control buffer' mechanism.
2010-05-04 07:20:41 +02:00
Harald Welte c547848ead GPRS: remove hard-coded IP address for NSIP responses from SGSN->BTS 2010-05-04 07:20:41 +02:00
Harald Welte 9ba500559a Create new 'gprs-sgsn' branch on top of 'gprs-conf'
This branch contains the partial SGSN/GGSN implementation that
was originally developed as part of the gprs branch.
2010-05-04 07:20:41 +02:00