Commit Graph

1775 Commits

Author SHA1 Message Date
Holger Hans Peter Freyther
fa7afb31e9 nat: Add an example configuration for the BSC NAT with MGCP 2010-03-31 11:53:36 +02:00
Holger Hans Peter Freyther
7513b3a1c2 [mgcp] Add a new config option to set the call agent ip addr
In the case of the nat we only want to communicate with one
upstream call agent and this can now be configured.
2010-03-31 11:46:41 +02:00
Holger Hans Peter Freyther
135d99b36e [mgcp] Regroup struct mgcp_cfg members and provide some hints 2010-03-31 11:35:20 +02:00
Holger Hans Peter Freyther
5aaf7c164c [mgcp] Add a helper function to convert from GSM0808 ts/mux to MGCP endpoint
Move the conversion of GSM0808 timeslot and multiplex from
the bssap.c into the mgcp.h so it can be reused by multiple
users. The weird math comes from the mapping of the MSC...
2010-03-31 09:27:04 +02:00
Holger Hans Peter Freyther
790db1e01b nat: In the case of losing the MSC, reset all endpoints
When losing the SCCP connection make sure that we free all
endpoints. The disconnection of the BSC should already make
sure they are closed but this makes sure everything is
properly reset.
2010-03-31 09:16:56 +02:00
Holger Hans Peter Freyther
81a8975662 nat: bsc_mgcp_clear is called from within the remove function
No need to call it twice... All endpoints should be properly
freed as part of the SCCP disconnection.
2010-03-31 09:15:05 +02:00
Holger Hans Peter Freyther
fd876b7488 bsc_msc_ip: Use the autobind functionality of the kernel
We do not care about the source port for the callagent relay
and can use the autobind functionality of the kernel to pick
a port for us...
2010-03-31 08:41:52 +02:00
Holger Hans Peter Freyther
2ffe7aa340 bsc_msc_ip: Create a local UDP socket and relay MGCP messages
Attempt to bind to the local callagent port and send messages
from the MSC TCP connection to the MGCP and do it the otherway
around as well.
2010-03-31 08:39:53 +02:00
Holger Hans Peter Freyther
538ea6d5c6 [nat] Send a RSIP down to the BSC after it connects
Make sure the MGCP attached to the BSC is resetting all
endpoints whenever the BSC is connecting to us as we assume
that all endpoints are available.
2010-03-31 07:30:58 +02:00
Holger Hans Peter Freyther
e14ec0dab4 [mgcp] Handle the RSIP with resetting all endpoints
We could change that the message came from a special ip
address/port to secure this service in general but we don't
do that right now.
2010-03-31 07:01:35 +02:00
Holger Hans Peter Freyther
8252b9b947 [mgcp] Add some parsing for RSIP messages coming in
This will just call a callback and leave all the handling
to the application.
2010-03-31 06:39:35 +02:00
Holger Hans Peter Freyther
9fb88021dd [mgcp] Remove unused method from the mgcp
This was removed when sending the RSIP was
removed from the code.
2010-03-31 06:26:44 +02:00
Holger Hans Peter Freyther
b031d6ecae [mgcp] Switch from DEBUG to LOGP in the mgcp_main.c 2010-03-31 06:16:45 +02:00
Holger Hans Peter Freyther
fcfdde5390 [mgcp] Remove the sending of RSIP
This message is ignored by the call agent and we were
sending this on the first request which we maybe should
not ignore...
2010-03-30 15:41:03 +02:00
Holger Hans Peter Freyther
571ba8e4da nat: Add MGCP code and parsing to the nat code..
For the nat we will have NAT and MGCP in the same process
and this commit starts with that. We are linking in the MGCP
code and one can embed MGCP config snippets...
2010-03-30 13:08:32 +02:00
Holger Hans Peter Freyther
bed6234e26 [mgcp] The networking code needs a source addrs..
Make the source address mandantory and complain about
complain when it is missing. The address is mandantory
as it needs to be put into the MGCP messages...
2010-03-30 13:00:40 +02:00
Holger Hans Peter Freyther
9d24578812 [mgcp] Move mgcp init into the main method... 2010-03-30 12:43:53 +02:00
Holger Hans Peter Freyther
a087c4e75d [mgcp] Fix format string usage 2010-03-30 12:43:33 +02:00
Holger Hans Peter Freyther
6b64b26d8b nat: Look at the assignment command and remember on which timeslot the data is
This information will be needed when we are trying to forward
MGCP connections to and from the BSC through the IPA protocol.
2010-03-30 12:01:24 +02:00
Holger Hans Peter Freyther
22252a98e3 sccp: Move the destruction of the sccp connection to a new place 2010-03-30 10:45:48 +02:00
Holger Hans Peter Freyther
957bc93244 nat: Return the SCCP connection, change order of patching and updating
* Return the SCCP connection. This will be needed to store the
  assigned timeslot in there.
* Update code to work with this change
* This uncovered a bug in the CC handling, at the time the BSC was
  passed it was still a null pointer and the code would have failed.
2010-03-30 09:17:53 +02:00
Holger Hans Peter Freyther
18bbe2e8a0 misc: Do not prepend 0x when using %p in printf. 2010-03-30 08:41:17 +02:00
Holger Hans Peter Freyther
1b17913cbc nat: Fail more early in the case of not being authenticated
This is also fixing a possible memory leak.
2010-03-30 07:45:52 +02:00
Holger Hans Peter Freyther
ce2a36840d nat: Add test case and data for paging by lac test. 2010-03-30 06:51:53 +02:00
Holger Hans Peter Freyther
0e09feccb0 nat: Some more input validation... on the paging command. 2010-03-30 06:51:23 +02:00
Holger Hans Peter Freyther
40a1de699a nat: Documentation fix... use nat for the parameter 2010-03-30 06:39:37 +02:00
Holger Hans Peter Freyther
d906a366c8 nat: Verify that the configured LACs are unique across the nat 2010-03-30 06:08:56 +02:00
Holger Hans Peter Freyther
d44d4c8c8b nat: Move paging by lac handling code into the utils file
Moving it here means we can more easily test this code, there is one
behaviour change with the code that we only support paging messages
with one LAC and will silently ignore the others.
2010-03-30 05:57:42 +02:00
Holger Hans Peter Freyther
af0e1d7a85 nat: Add a test case for the connection tracking
This test case tests connectiont tracking by sending
a CR, getting a CC, sending a DTAP, receiving a DTAP,
receiving a RLSD, sending a RLC. It verifies that the
messages are properly patched specially the references
at the BSC.
2010-03-30 02:43:11 +02:00
Holger Hans Peter Freyther
d21b4d7f98 nat: Fix the lookup of connections to and from the BSC
When sending a message to the MSC in the case of DT1
messages we only have the address of the MSC, so we
need to go with that, otherwise (e.g. in case of a CR, RLC)
we do have the source address and need to patch it.

When forwarding a message to the BSC we do receive
a msg that should contain the patched address, we need
to unpatch it...
2010-03-29 17:43:32 +02:00
Holger Hans Peter Freyther
3bdaa69fb2 nat: Keep track of both sides of the connection
On a CC message we will need to remeber where the source local
reference of the network belonged so we can properly identify
the connection when receiving UDT messages.
2010-03-29 17:43:32 +02:00
Holger Hans Peter Freyther
5c0132882a nat: Assign the connection inside the new helper function. 2010-03-29 15:14:15 +02:00
Holger Hans Peter Freyther
ed443e949e nat: Actually add the connection to the SCCP list of active connections
Add the connection to the list of active connections. Otherwise
we are not able to find the connection.
2010-03-29 15:03:54 +02:00
Holger Hans Peter Freyther
1df69f3c64 filter: Move logging level down to INFO 2010-03-29 14:59:59 +02:00
Holger Hans Peter Freyther
d7cafafeee debug: Fix debugging for the nat category. 2010-03-29 14:59:21 +02:00
Holger Hans Peter Freyther
e09348d366 nat: Compare the IPA size with the actual size of the data...
One sanity check that was needed in my test case..
2010-03-29 14:58:43 +02:00
Holger Hans Peter Freyther
5f1b7c14f5 nat: Move creation of the structs to a separate file
This way one can create the bsc_nat structure in unit tests..
2010-03-29 12:48:36 +02:00
Holger Hans Peter Freyther
5b3e9198f0 nat: Move SCCP patching to a new file, log updates
Move patching and reassigning of messages to a new file which
will making testing this functionality more easy.
2010-03-29 11:04:52 +02:00
Holger Hans Peter Freyther
f0b21dfd25 bsc_msc: Handle the loss of the MSC connection better
Instead of simply exiting the application we will handle it by
giving up all SCCP connections, once we have the MSC back we will
send a GSM 08.08 reset message, and we will free all resources
related to these connections. This includes the primary and secondary
lchan of these connections.

While we are not connected to the MSC we will handle each message
that would open a SCCP connection by giving up the lchan. This has
only been compile tested and will need to be manually tested during
a test session.

This also highlights a DoS that could be used against OpenBSC
by setting up a lchan but never send any GSM L3 message. We will have
to fix that at some point.
2010-03-29 10:09:27 +02:00
Holger Hans Peter Freyther
e165d1aaa4 [misc] Clean some whitespace in files of this branch. 2010-03-29 08:10:48 +02:00
Holger Hans Peter Freyther
649496eb57 nat: Handle MSC disconnect by closing all NAT connections
When we disconnect from the MSC handle it by pushing the problem
to our connected clients. We will simply close all connections,
reject all new BSC connections and attempt to reconnect to the MSC.
2010-03-29 08:09:29 +02:00
Holger Hans Peter Freyther
135a45c833 msc: Create a real interface for BSC MSC and start handling reconnects
Create a BSC<->MSC interface and use it for the BSC MSC IP and the
BSC NAT to reduce code duplication on handling reconnects to the MSC
and cleaning up the local state. The code is only partially tested
and will contain bugs. Currently both the BSC and the NAT will just
exit on connection loss and this way have the current behavior.
2010-03-26 12:14:37 +01:00
Holger Hans Peter Freyther
1a3d9dbabf bsc_msc: Connect in a non blocking way to the MSC
The latency of setting up of the TCP connection can be quite high,
it is better to connect in a non blocking way. This code is working
by setting the socket nonblocking and temporarily replacing the
bfd callback with the connect handling.
Once the OS has connected our socket we switch back to normal operation.
2010-03-26 10:41:20 +01:00
Holger Hans Peter Freyther
a91d15df7e bsc_msc_ip: Keep track of active connections so we could clear them.
Keep track of SCCP connections so we can clear them
when the MSC is going down.
2010-03-26 09:58:40 +01:00
Holger Hans Peter Freyther
3368e2a3d1 nat: Add a warning for an important todo item on connection loss
In case we disconnect with some pending operations we will need to
signal the MSC that something is wrong. This could be by sending a
RLSD directly, or a clear command. Another part of the fix is to
respond with a RLC on unknown RLSD messages.
2010-03-26 09:28:40 +01:00
Holger Hans Peter Freyther
929d788e21 nat: Clear all pending messages in case the BSC disconnected
Throw away all messages we have scheduled but never delivered
to the BSC.
2010-03-26 09:27:08 +01:00
Holger Hans Peter Freyther
6958065f85 nat: Switch downstream over to the write queue 2010-03-26 09:18:02 +01:00
Holger Hans Peter Freyther
097c82b2bc nat: Stop using the input/ipaccess.c method as it will write directly
We want to write everything through the write queue, it seemed the
easiest to copy the bytes here and feed the data into the bsc_write
method.
2010-03-26 07:41:54 +01:00
Holger Hans Peter Freyther
abaeb3f55f nat: Make it clear where we want to send these methods 2010-03-26 07:26:18 +01:00
Holger Hans Peter Freyther
f42e29c79c nat: Move one more area to the bsc_write method 2010-03-26 07:24:34 +01:00