誰かの無線LANの名前が、リセット理由になっていた
「不明なリセット理由: 84-G」。 昨日の続きで、安全デバイスの通報が届かなかったもうひとつの原因は、中継のエラーログに残っていたこの一行から始まった。 端末がリセットされた理由が分からない、と中継が言っている。 でも端末はリセットなどしていない。84-Gは、どこかの誰かの無線LANの名前の断片だった。
端末は位置を決める材料として、GPSのほかに周りに見える無線LANのアクセスポイントの一覧も送ってくる。 その一覧の項目には「この項目は何バイトです」という長さの申告が付いていて、中継はその長さだけ読んで次の項目へ進む。 ところが端末のファームウェアは、この長さを1バイトの枠で書く。256を超えると0に折り返す。 アクセスポイントが13個ほど見えると一覧が255バイトを超え、申告は本当の長さより256も小さくなる。 中継は申告どおり途中までしか読まず、残りのネットワーク名の文字列を次の項目だと思って解釈する。 だから「84-G」がリセット理由として現れた。
繁華街ほど必ず踏む
たちが悪いのは、この失敗のあとに起きることだ。 中継は解釈できない項目に当たると接続を切る。端末は送れなかった束を送り直す。 束の先頭は同じ壊れた一覧なので、また切られる。 昨日書いた返事の作法の話と形は同じで、壊れた1件が列の先頭に居座り、後ろに並んだSOSは永遠に順番が来ない。 しかも繁華街は無線LANが密集している。うちのキャストが働く場所は、まさにそこだ。 家の中で試験しているときは一度も起きず、本番に出した途端に常時発症する種類の不具合だった。
ファームウェアの中身はこちらでは直せない。7月25日の時点で中継の運営のサポートが生のパケットを解析してくれて、 不具合の筋は見えていた。7月31日には正常時と発症時の生パケットを並べて、長さの申告が常に「実際の長さ+1」である正常の規則と、 255バイトを超えたときだけ256引かれた値になる発症の規則を自分でも確かめ、証拠一式を端末のメーカーに送った。 直してもらえるまでは、こちらで発症の経路を断つしかない。
使っていない機能は、切っていい
答えは拍子抜けするほど単純で、無線LANのスキャンを端末の設定で切った。 このデリヘル管理システムは位置をGPSだけで決めていて、端末が送ってくる無線LANの一覧は最初から使っていなかった。 送ってこなければ壊れた一覧も生まれない。切って失うものは何もない。 店が運用設定を保存するたびに端末へ送る設定の束に「無線LANは無効」を常に混ぜるようにして、 端末に最初に設定を書き込むときも同じく無効にする。 単体テストには、保存する設定の内容にかかわらずこの項目が必ず無効で送られることを書いた。
ただ、設定を送ればすぐ直るわけではなかった。 すでに壊れた一覧を抱えてしまった端末は、それを本体の記憶に持ち続ける。工場出荷状態に戻しても、再起動しても消えない。 起動した直後に70秒ほどだけ正常に通信できる窓があって、そこで状態の報告と設定の書き込みは通るのだが、 SOSは送信待ちの列のずっと後ろにいるので、再起動を繰り返しても出てこられない。 結局、メーカーの公式のコマンドで端末の記録を全部消すのが唯一の道で、 接続が0.1秒で切れる端末相手に、試行回数の上限をうんと増やして投げ続けてようやく届いた。
画面の黄色い注意書きは、この経験から足した。端末は普段2分おきに0.1秒ほどしか繋がらず、設定を受け取る隙がない。 充電中だけは接続が長く保たれる。だから店には、設定を保存するときは端末を充電器に載せてもらっている。
宿題はメーカーの修正待ちだ。直った版が出たら、無線LANを再び有効にするかを考える。 といっても、使っていないものを有効にする理由は今のところ思いつかない。