| |
| == mgw_nat == |
| |
| == files == |
| |
| === mgw_nat_app.erl === |
| |
| This file contains the OTP application wrapper for running mgw_nat as an |
| OTP application. It exports the start/2 and stop/1 functions which are |
| required for application:{start,stop}(mgw_nat) to work. |
| |
| There is also mgw_nat_app:reload_config/0, which will re-read the config |
| file given to the erl machine as '-config' shell argument. |
| |
| === mgw_nat_sup.erl === |
| |
| This is the supervisor code, it starts: |
| * one mgw_nat_adm process |
| * one mgw_nat_usr for each signalling link in the config file |
| |
| === mgw_nat_adm.erl === |
| |
| This is a permanent server running under the supervisor, taking care of |
| realoading configuration or dumping some information as well as casting |
| messages to all of the mgw_nat_usr children. |
| |
| === mgw_nat_usr.erl === |
| |
| This is a gen_server OTP behavior which wraps the sctp_helper. Among |
| the arguments passed to the sctp_helper are the 'rewrite_act_mod', whcih |
| is the name of the Erlang module actually doing the rewriting. |
| |
| === sctp_helper.erl === |
| |
| Erlang module for wrapping both a listen-type and a connect-type SCTP |
| connection, taking care of re-connects, etc. Each actual user payload |
| message is handled via handle_rx_data/5, which will in turn call the |
| rewrite_actor/5 function of the 'rewrite_act_mod' |
| |
| === mgw_nat_act_vfuk_onw === |
| |
| This is a rewrite actor module for patching the advertised CAMEL Phase |
| during Location update of inbound roaming subsribers. |
| |
| the rewrite_actor/5 is first called with sctp as the first element, at |
| which time mgw_nat:mangle_rx_data/4 is being called. mangle_rx_data |
| will parse all higher level protocols (m2ua/mtp3/sccp/tcap/map), |
| and each time one protocol layer has been decoded, it will again call |
| the rewrite_actor/5 function with the first argument set to the protocol |
| in question. |
| |
| m2ua/mtp3/sccp is handled without modification by the default clause of |
| rewrite_actor/5. |
| |
| Once the map level is reached, the mangle_map_camel_phase/3 function is |
| called. If the direction is STP->MSC, then the message is in the |
| direction we are not interested in. |
| |
| In the MSC->STP direction, we decode the called_party_addr, do a global |
| title match on it. If there is a match against the int_camel_ph_tbl, |
| then the hierarchical record data structure is walked by |
| osmo_util:tuple_walk/3 which will call caleph_twalk_cb/3. If there is a |
| match on UpdateLocationArg, the supportedCamelPhases is rewritten |
| accordingly. |
| |
| === mgw_nat_act_bow_onw.erl === |
| |
| This is a much more complex rewrite actor doing a lot of different |
| rewrites whihc are not described here in detail. |
| |
| === imsi_list.erl === |
| |
| maintains a list of 1:1 IMSI mappings, internally represented by tw |
| gb_tree's. |
| * read_list/1 populates the gb_trees from an Erlang list |
| * read_file/1 populates the gb_trees from a CSV file |
| * match_imsi/3 matches an IMSI either in forward or reverse direction |
| |
| === mangle_tt_sri_sm.erl === |
| |
| Contains utility code for rewriting the translation type of the global |
| title present in SRI-for-SM messages. |
| |
| === sccp_masq.erl === |
| |
| This code implements SCCP masquerading: |
| |
| The mgw_nat gateway has a pool of dynamically-allocated SCCP global |
| titles. Whenever needed (decided by other code), the original GT is |
| replaced with one dynamically allocated from the pool. If ther ever is |
| a SCCP mesage directed at one of the dynamic addresses in response, the |
| inverse translation back to the original address is performed. |