MKNETEL のメモ
名称
KusaReMKN によるネットワークの名称は MKNET あるいは MIKANET である。「みかねっと」と読む。
MKNET 上に構築される電話網の名称は MKNETEL あるいは MIKANETEL である。「みかねてる」と読む。「みかん、寝てる」と憶えよう。
内線番号の作りかた
MKNETEL の内線番号(加入者番号?)は以下の手順で構成される。
MKNETEL に接続される電話機は MKNET 上にある必要がある。これは、直接 MKNET に接続されていても良いし、別のネットワーク(例えば Tailscale など)を経由して接続されていても良い。ただし、別のネットワークを経由して接続する場合であっても、MKNET に直接接続するための IPv4 アドレスを予約すること。
旧番号を発行する。原則として、旧番号は MKNET におけるその機器の IPv4 アドレスのホスト部を 1 つの 10 進数で表示したものである。例えば、172.20.101.106/16 の機器に対して発行される旧番号は 25962 であり、172.20.1.0/16 の機器に対して発行される旧番号は 256 である。(ここで、アドレス範囲 172.20.0/16 は例示用の IPv4 アドレス範囲ではない。このアドレス範囲は、このメモが書かれた時点の MKNET の実際のアドレス範囲である。)
旧番号はその桁数が一定でないことから廃止され、固定 4 桁の新番号に置き換えられた。新番号の範囲は 2000–9992 である。
旧番号を右詰め 5 桁で表示し、その各桁の数をその数に 1 を足したもので置き換える。ただし、1 を足したものが 10 になる場合、0 で置き換える。例えば、旧番号 25962 は 36073 となり、旧番号 256 は 11367 となる。
上で求めた値を 7993(8000 以下の最大の素数)で割った余りを求める。例えば、36073 は 4101 となり、11367 は 3374 となる。
上で求めた値に 2000 を足したものが新番号である。例えば、4101 は 6101 となり、3374 は 5374 となる。
既に割当てられている新番号と衝突した場合、衝突した新番号を旧番号とみなし、再度新番号に変換する。
この方法では衝突を完全に回避することはできない。つまり、衝突回避の再変換を繰り返すと同一の番号に変換される番号が存在する。実際の運用において、この問題に直面した際は解決策を考えること。
旧番号から新番号に変換するプログラム
code:conv.c
int
main(void)
{
int i, n;
while (scanf("%d", &n) != EOF) {
snprintf(s, sizeof(s), "%05d", n);
printf("%s -> ", s);
for (i = 0; si != '\0'; i++) si = (si - '0' + 1) % 10 + '0'; printf("%s -> ", s);
sscanf(s, "%d", &n);
n %= 7993;
printf("%04d -> ", n);
n += 2000;
printf("%04d\n", n);
}
return 0;
}