diff Number-database @ 0:6da76097c86e

initial import from old themwi-system-sw repository
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 25 Dec 2023 07:41:31 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Number-database	Mon Dec 25 07:41:31 2023 +0000
@@ -0,0 +1,202 @@
+Database of locally owned numbers
+=================================
+
+The database of locally owned phone numbers is a ThemWi-invented ad hoc data
+structure that is absolutely required for ThemWi system sw to work.  The human-
+edited ASCII source form of this database resides in /var/gsm/number-db2 and
+its compiled binary form resides in /var/gsm/number-db2.bin, compiled with
+themwi-update-numdb2 utility.  (The "db2" in file and utility names refers to
+database version 2, which is the current version.)  This database contains two
+types of entries:
+
+1) Locally owned 10-digit NANP numbers;
+2) Internally defined 4-digit short numbers.
+
+NANP number ownership information
+=================================
+
+ThemWi system sw is written with the assumption that the local instance operator
+obtains (rents) real NANP phone numbers from a provider such as BulkVS and
+assigns these numbers to individual GSM subscribers in OsmoHLR.  However, in
+order for ThemWi system sw to work correctly, there is one more step needed:
+each locally owned number (i.e., each NANP number you rent from BulkVS or
+whoever your upstream is) needs to be entered into ThemWi local number database.
+
+The step of obtaining (a batch of) NANP phone numbers from your SIP trunk
+provider and the step of assigning individual numbers to specific GSM
+subscribers (by way of OsmoHLR subscriber database) are almost always separated
+in time: as an operator, you will typically obtain a batch of TNs (telephone
+numbers) in one go, and from the perspective of your upstream, all of these TNs
+route to your server.  How you then assign them to GSM subscribers (make them
+into MSISDNs associated with IMSIs) is your own business, and you can change
+these associations any time you like, without affecting your interconnection
+with your PSTN upstream.
+
+ThemWi local number database needs to list all TNs (10-digit NANP numbers) that
+are currently owned by your local fiefdom, irrespective of whether or not they
+are assigned to a GSM subscriber.  If a given TN belongs to your local fiefdom
+in the sense that the global worldwide PSTN will direct any incoming calls to
+this TN to your server, but you haven't assigned it to a GSM subscriber yet,
+ThemWi system sw still needs to know that this number is locally owned: call
+attempts to that TN should never be sent to the outbound gateway, in particular.
+
+Owned NANP number entry syntax
+------------------------------
+
+By way of example, suppose that a set of telephone numbers in the range
+310-555-01XX is yours - how do you enter them into /var/gsm/number-db2?  You
+have a choice of two syntax forms:
+
+1) If you have many numbers in the same NPA-NXX prefix (as in the present
+   example), you can enter them using this syntax:
+
+prefix 310-555 [allow-abbrev]
+
+suffix 0101
+suffix 0102
+suffix 0103
+...
+
+In this form, all owned TNs under the same prefix are clearly grouped together,
+and you have the option of allowing abbreviations - if you wish to allow
+abbreviated 4-digit dialing, add 'allow-abbrev' keyword to the prefix line.
+When abbreviations are enabled, each suffix line not only creates an entry in
+the owned-NANP portion of the local number database, but also adds an entry to
+the list of defined 4-digit short dialing numbers, mapping to the corresponding
+full number - see Local-short-numbers article.
+
+2) If you have individual 10-digit NANP numbers that don't form a neat group
+   under a single NPA-NXX prefix, you can enter them using this alternative
+   syntax for single numbers:
+
+full10 310-123-5678
+full10 216-555-0166
+full10 949-011-1234
+...
+
+(The example uses invalid NANP numbers, whereas in actual usage you have to
+enter real valid ones - but the syntax is the same.)  With this number entry
+method, there is no possibility of allow-abbrev: no 4-digit short dialing number
+is created, and the owned NANP number in question can only be dialed in full
+10-digit form.
+
+The given syntax examples for prefix and full10 lines use hyphens.  These
+hyphens are optional and can be placed anywhere in the number - but we recommend
+following the standard notation for NANP numbers.
+
+NANP number usage information
+=============================
+
+The entry formats given above provide only number ownership information: they
+tell ThemWi system sw which NANP numbers belong in the local fiefdom (all listed
+numbers) and which ones don't (the remaining space of all other possible NANP
+numbers outside listed ones).  However, this number ownership information does
+not include any usage or assignment information, and this additional info needs
+to be provided via number attributes.
+
+If number ownership information is entered exactly as shown in the examples
+above, without any additional attributes, ThemWi system sw will treat each of
+its owned numbers as being unassigned: any call attempts to that number, from
+the inside or from the outside, will return "unassigned number" error to the
+caller in the form of GSM CC cause value or SIP error code.  When locally owned
+numbers are assigned to GSM subscribers, a 'gsm-sub' attribute needs to be added
+to each thus-assigned number; following the already given examples, the new
+syntax becomes:
+
+prefix 310-555 [allow-abbrev]
+
+suffix 0101 gsm-sub
+suffix 0102 gsm-sub
+suffix 0103 gsm-sub
+
+full10 310-123-5678 gsm-sub
+full10 216-555-0166 gsm-sub
+full10 949-011-1234 gsm-sub
+...
+
+Note the absence of indication as to which GSM subscriber each number is
+assigned to: when ThemWi system sw sees that the called number is assigned to
+gsm-sub usage, it sends the call to OsmoMSC, which will then look for a
+connected subscriber whose MSISDN equals the called party number.  The mapping
+from phone numbers to specific subscribers as in IMSIs thus happens by way of
+OsmoHLR subscriber database, just like in "bare" Osmocom CNI setups without
+ThemWi system sw.
+
+Alias numbers
+-------------
+
+ThemWi system sw supports the notion of alias or redirecting numbers.  Suppose
+you have a single GSM subscriber who needs to be reachable at more than one NANP
+number - for example, someone who got a native ThemWi number (from BulkVS etc)
+at one point in time, but then ported their number from some national carrier
+(of evil 2G-killing kind) to BulkVS/ThemWi - how to make the same GSM subscriber
+reachable via both numbers?  Each GSM subscriber has a primary MSISDN (phone
+number) that is configured in OsmoHLR: this number is returned by *#100# query,
+and appears as the "from" number on all outgoing calls.  Any additional numbers
+that should route to the same subscriber need to be handled via ThemWi alias
+number facility, i.e., handled at ThemWi system sw level rather than at OsmoCNI
+level.
+
+The syntax for entering alias numbers is as follows (using example fake numbers
+from above):
+
+prefix 310-555 [allow-abbrev]
+suffix 0123 map-to 216-555-0166
+
+or
+
+full10 310-555-0123 map-to 216-555-0166
+
+In this example the "native" number of the GSM subscriber is 216-555-0166, but
+alias number 310-555-0123 is configured to route to the same subscriber.  In the
+case of full10 number lines, the map-to target number must always be entered in
+full 10-digit notation just like the alias number; in the case of prefix and
+suffix lines, the map-to target number can be either a full 10-digit number or
+a 4-digit number in the same prefix.
+
+Irrespective of entry notation used, every map-to target number must be a
+locally owned NANP number (cannot be an outside number) of gsm-sub usage type,
+i.e., some local GSM subscriber's primary number.
+
+Additional number flags for SMS and E911
+========================================
+
+The following additional flags can be set on each locally owned NANP number's
+suffix or full10 line:
+
+e911	This flag indicates that the number in question is provisioned for E911
+	at the level of BulkVS or whoever is the upstream provider from whom
+	the number is rented.  Having a number provisioned for E911 (which costs
+	additional money every month) means that emergency 911 calls can be sent
+	to that PSTN-via-SIP provider with this number as source or "from",
+	without paying a hefty fine for an unprovisioned E911 call.
+
+sms	This flag indicates that the number in question is provisioned for
+	outside SMS connectivity, meaning that it is possible to send SMS to
+	the outside world with this number as source or "from".
+
+Local short number entries
+==========================
+
+In addition to entries that list locally owned NANP numbers, there are other
+types of entry in the master number database source file that list ITNs
+(internal test numbers) and test sinks.  These entries are described in
+Local-short-numbers article.
+
+Compiled binary format and updates
+==================================
+
+The human-edited ASCII source form of the just-described number database,
+located in /var/gsm/number-db2 master file, is read only by themwi-update-numdb2
+utility and no other programs.  This utility reads the ASCII source form of the
+number database, parses it with some basic validation, and compiles it into a
+binary format that is designed for fast lookups and read by long-running ThemWi
+processes.  The compiled binary form of the number database resides in
+/var/gsm/number-db2.bin, and the latter file is always updated via an atomic
+rename mechanism: themwi-update-numdb2 first writes out a temporary file named
+number-db2.newbin, then renames it to number-db2.bin, making the new version
+live.
+
+Long-running ThemWi server processes perform stat(2) checks on this file as part
+of call setup or SMS admission processing, and if they notice that the binary
+database file has changed, they read the new version.