view doc/NANP-specifics @ 270:6f28a4377a99

doc/Local-short-numbers: first draft written
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 26 Nov 2023 17:08:10 -0800
parents d6630a2d6e80
children b54fa3e4d81f
line wrap: on
line source

North American Numbering Plan (NANP) specifics in ThemWi system sw
==================================================================

Themyscira Wireless system software, as currently written, is strongly tied to
NANP.  More precisely, it thoroughly assumes that all local phone numbers are
in +1 country code and follow NANP rules, and that all E.164 telephone numbers
in country codes other than +1 are foreign - numbers which we can call and
receive calls from, but which can never be local to us.

Why does our software need to have these assumptions baked into it, why can't
it be country-agnostic?  The present article answers this question, and this
long answer needs to be thoroughly understood before there can be any meaningful
discussion of how the software could possibly be adapted to other countries and
their respective telephone numbering plans.

In principle, there exists a standardized dialing format on all GSM phones that
remains the same no matter which country you happen to be in.  If you always
enter phone numbers (dialing, SMS manual entry, phone book entries) in full
international format beginning with the '+' symbol (press and hold the '0'
button before the number in most phone UIs), the phone handset firmware will
capture the number with TON=1, NPI=1 attributes (signifying international number
format in GSM call control and SMS protocols) and transmit it as such to the
GSM network.  Every properly designed GSM network, upon seeing a number with
these TON=1, NPI=1 attributes, must address the call or message to the country
indicated by the country code at the beginning of the full E.164 number, whether
that country is your local one or some other.  Thus if everyone were to always
use only full E.164 numbers in full international format, network software could
hypothetically be written in a country-agnostic way, treating full E.164 phone
numbers as opaque strings without parsing.  However, there are two practical
problems with such country-agnostic approach:

1) Most human users of mobile phones dial local phone numbers (within their own
   country) in a way that follows local dialing conventions, rather than in
   international format beginning with '+' and their own country code.  For
   example, in USA a given 10-digit NANP phone number can be dialed as just the
   10 digits NPANXXXXXX, as 11-digit 1NPANXXXXXX, or as full international
   +1NPANXXXXXX - and a proper cellphone network MUST accept all 3 formats as
   equivalent.

2) As explained further in this article, a network implementation must be able
   to look at a telephone number and immediately tell if that number is locally
   owned ("one of ours") or belongs somewhere outside of the local GSM network.
   Practical implementation of this distinction requires a database of locally
   owned phone numbers, and the implementation of that database in turn becomes
   much easier when the local numbering plan is known and fixed.

Supported dialing formats in ThemWi
===================================

When themwi-mncc processes a mobile-originated (MO) call from a GSM subscriber,
it supports dialing the following classes of numbers:

* NANP numbers in any of the 3 standard dialing formats;

* International numbers in any country - an international number beginning
  with +1 is enforced to be valid NANP, but E.164 numbers in all other country
  codes are accepted as-is;

* Local 4-digit numbers described in (to-be-written) Local-short-numbers
  article;

* Whatever special numbers are configured in themwi-sip-out, such as 511 and
  911.

Only NANP numbers and specially configured 4-digit numbers (see
Local-short-numbers) can be local - all E.164 numbers in non-NANP country codes
are sent to the outbound call gateway, and all other unrecognized number formats
are likewise sent to themwi-sip-out so that the latter process can catch and map
special numbers like 511, 911 etc.

If a dialed number is recognized as NANP, themwi-mncc looks in the database of
locally owned numbers to see if the dialed number is one of ours - and the
outcome of this look-up determines if the call is handled locally or sent to
the outside world via themwi-sip-out.

No 7-digit dialing support
==========================

In the olden days of land lines, most localities in USA supported 7-digit
dialing: to call Jenny, you would merely dial her local 7-digit number 867-5309,
without needing to dial the local area code; full 10-digit numbers (or 11 digits
with leading '1') had to be dialed only when calling someone in a different
area code from your own.  However, this 7-digit dialing has now been disabled
even for land lines in most localities, including the locality where ThemWi
currently operates: per official rules, 7-digit dialing gets disabled (full
10-digit numbers become mandatory) whenever an area code overlay is implemented,
such as overlay of 760 and 442 area codes in our locality.

In the case of mobile phones, 7-digit dialing never made much sense to begin
with: if you dial only 7 digits, should the implicit area code be taken from
your own number, or should it be the area code of the locality you happen to be
traveling through at the moment?  The latter option is impossible in the case
of localities with two or more overlaid NPA codes, and it appears that official
rules once again call for simply disabling 7-digit dialing.

Based on these considerations, ThemWi system sw was written from the outset to
not support 7-digit dialing - it is no longer relevant in the current state of
telecom culture in USA.  We do, however. provide optional support for
abbreviated 4-digit local numbers - see (to-be-written) Local-short-numbers
article.

Database of locally owned numbers
=================================

The telecom culture in USA features full number portability - end users can take
their phone numbers with them anywhere, from one telecom provider to another,
and with mobile phones and VoIP services, from one geographic locality to any
other, making the entire country effectively "flat" for local/non-local
distinction purposes.  Therefore, the set of phone numbers "owned" (or rented
in reality) by a small network operator such as Themyscira Wireless does not
constitute any kind of clean-cut digit range partition in the numbering plan -
instead we can have a small set of locally owned numbers (say, on the order of
5 to 20 individual numbers), and each of these locally owned numbers can fall
anywhere in the whole nationwide 10-digit numbering plan.  So how can we tell,
by looking at an arbitrary NANP number, whether it is "one of ours" or not?

The implemented solution is an explicitly maintained database of locally owned
phone numbers, described in detail in (to-be-written) Number-database article.
The format of this database (the way numbers are entered, the way the input
format is parsed, and the compiled binary format used for fast look-ups) is
specific to NANP - only NANP numbers can be local in the present design.

Porting to other national telephone numbering plans
===================================================

If someone wishes to port ThemWi system sw for use in other countries with
respective local phone numbers, the following aspects will need to be changed:

* Based on the structure of your country's national numbering plan, you will
  need to come up with an appropriate local number database format for your
  country, or if the range of numbers belonging to your GSM network forms a
  clean-cut digit range partition, implement that scheme instead.

* You will need to modify MO call handling to recognize your country code
  (rather than +1) as the one calling for parsing and closer scrutiny of the
  dialed number, determining if it is local or not.

* Handling of non-international dialing formats (numbers dialed without '+')
  will need to be changed to whatever is appropriate for your country's telecom
  culture and customs.

* Handle all secondary fallout (throughout the code base) from the previous
  essential and necessary changes.

Using fake NANP numbers
=======================

If someone outside of North America wishes to merely play with ThemWi system sw
on a casual basis, without actually interconnecting to your non-USA PSTN with
non-NANP real phone numbers, the easiest way to bring the software up is to use
fake NANP numbers.  There are two types of guaranteed-fake (can't collide with
real ones) phone numbers in NANP:

1) NPA-555-01XX, where NPA is some real area code for some (any) actual locality
   in USA and XX can be any two digits.  This number range is specifically set
   aside for use in movies etc, with realistic USA settings - the area code can
   be any real one, but 555-01XX numbers are reserved for fake use in every
   area code.

2) Fake area codes of form N9X (290-299, 390-399, ..., 990-999) are also good
   for guaranteed-fake numbers as the middle digit of NPA is not allowed to be
   '9' per official NANP rules.  This method allows large ranges of fake NANP
   numbers.

See Fake-NANP-numbers article (to be written) for more info.