伝統的にUNIX系OSでは、ストレージや端末などのデバイス/周辺機器をファイルの形で扱おうとする。モダンなUNIXの一形態といえるmacOSにおいても、1台目のストレージが「/dev/disk0」、現在利用している端末が「/dev/tty」として認識されるなど、「デバイス(スペシャル)ファイル」の概念はそのまま引き継がれている。一種のI/O抽象化であり、UNIXらしい部分といえるだろう。
ただし、何もかもが往年のUNIXそのままというわけではない。ネットワークインターフェイスはその一例で、EthernetにせよWi-Fiにせよ、/devディレクトリ以下に対応するデバイスファイルは見当たらない。これはmacOSに限った話ではなく、Linuxなど他のUNIX系OSも同様だ。
しかし、現在でもデバイスファイルの名残りはある。システムに存在するネットワークインターフェイスを一覧するコマンド(ifconfig -l)を実行すればわかるが、メインのネットワークデバイス「en0」、ループバックのための仮装デバイス「lo0」など、多数のデバイスファイル風文字列が表示されるはずだ。1つのネットワークデバイスに複数のIPアドレスを割り当てられるようになるなど、データの入出力が必ずしも1対1の関係ではなくなった時代背景を考えると、このスタイルのほうが自然なのだろう。
特別なネットワーク機能には専用のネットワークインターフェイス名を割り当てる、というやり方も増えている。ワイヤレス/ピア・ツー・ピアでファイルを転送する「AirDrop」は、その代表格だ。
iOSデバイス間とのファイル転送をサポートしたAirDropを利用できるMacには、「awdl0」というネットワークインターフェイスが存在する。tcpdumpコマンドで「awdl0」を監視すればわかるが、iPhoneなどのAirDrop対応デバイスにMacが検出されると反応し、互いのIPv6アドレスを目印に通信し始める。これで認証されれば、無事ファイル転送まで進めるという流れだ。
この「awdl0」というネットワークインターフェイスは、「Apple Wireless Direct Link」がその名前の由来で、Wi-Fiベースのピア・ツー・ピア接続に利用される。tcpdumpコマンドでAirPlay実行時に「awdl0」を監視すると、AirDropのときと同様の反応を得られることからすると、共通の(アドホックな)プロトコルと考えてよさそうだ。
ただし、tcpdumpコマンドの出力から推測するかぎり、「awdl0」は完全に独立したネットワークインターフェイスとして動作するわけではなく、標準/プライマリのWi-Fi接続(en0)と連携しつつ、ブロードキャストやピア・ツー・ピア接続の処理を進めていくらしい。
なお、「awdl0」がネットワークインターフェイスであることに変わりはなく、ifconfigコマンドでアクセスできる。以下のとおりコマンドを実行すれば、en0などと同様に無効化/有効化も実行可能だ。Wi-Fi/Bluetoothとも使い続けたいがAirDrop/AirPlayはオフにしたい、といった場合に有効だろう。
・awdl0(実質的にはAirDrop/AirPlay)を無効化する
$ sudo ifconfig awdl0 down
・awdl0(実質的にはAirDrop/AirPlay)を有効化する
$ sudo ifconfig awdl0 up
このようにAirDrop/AirPlayで利用されるApple Wireless Direct Linkだが、近くにいるMacユーザとのチャットに使うというなかなかぶっ飛んだアイデアも存在する。「AirChat」がそれだ。
このRubyスクリプトは、ネットワークインターフェイスに「awdl0」を持ちRuby 2.0以降が動作するMac 、つまりYosemite以降のAirDrop/AirPlayに対応したMacで動作する。インストール手順はWEBページに記載されているとおり、curlコマンドでgithubのサイトからダウンロードし、chmodコマンドで実行権限を与えればOK。コピペで導入準備できるので、ぜひ試してほしい。
AirChatを複数のMacで実行すると、互いを自動認識しチャットできる状態になる。当然ながらAirDrop/AirPlay同様、Wi-Fiネットワークに接続しなくても利用できるので、通信環境がプアな外出先で仕事仲間とひっそりテキストベースのやり取りを行いたいときに使えそうだ。「awdl0」のYet Anotherな活用法と思うが、いかがだろう?