処理 - みる会図書館


検索対象: UNIX MAGAZINE 2005年4月号
72件見つかりました。

1. UNIX MAGAZINE 2005年4月号

連載 / 旧 v6 の実装ー 0 図 5 mip6-bu 」 ist-find-withpaddr() によるオ鑠 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 struct mip6—bu * mip6—bu—1ist-find—withpaddr (bu—list , paddr , return (NULL) ; if (paddr = = NULL) / * sanity check. * / struct mip6—bu *mbu ; struct in6_addr *haddr ; struct in6—addr *paddr ; struct mip6—bu—1ist *bu—list; haddr ) for (mbu = LIST—FIRST(bu_1ist) ; mbu; mbu = LIST—NEXT (mbu , mbu_entry) ) { if (IN6_ARE_ADDR_EQUAL (&mbu->mbu_paddr , paddr) & & ( (haddr ! = NULL ) ? IN6_ARE_ADDR—EQUAL (&mbu—>mbu_haddr, haddr) return (mbu) ; break ; 図 6 タイマータ里関数の開始と停止 2294 2295 2296 2298 2299 2300 2309 2310 2311 2312 2313 2315 2321 static void mip6—bu—starttimer ( ) callout—reset (&mip6—bu—ch , MIP6_BU_TIMEOUT_INTERVAL * hz , mip6—bu—timeout , NULL) ; static void mip6—bu—stoptimer ( ) ca110ut—stop(&mip6-bu—ch) ; 図 6 の 2 , 295 行目の mip6-bu-starttimer() と 2 312 行目の mip6-bu-stoptimer() はタイマー処理関数 mip6- bu-timeout() の開始と停止を実装します。タイマー処理 関数は、対応付け更新のエントリが 1 つ以上存在するあい だのみ実行されます。 MIP6-BU-TIMEOUT-INTER- VAL は 1 に設定されています。よって、対応付け更新の タイマー処理関数は、 mip6-bu-starttimer() を実行して から 1 秒後に呼び出されます。 2331 2335 2341 2343 Struct timeval mono_time ; time_second; mono_time . tv_sec splnet ( ) ; mip6—bu—starttimer ( ) ; S 2323 2324 2325 2326 2327 2328 2329 64 static void mip6—bu—timeout (arg) int error = 0 ; struct hif_softc int S ; void *arg ; 実際のタイマー処理は mip6-bu-timeout() で実装され ます。 mip6-bu-timeout() は 1 つの引数をもちますが、 値は利用されません。 2 , 343 行目で、次のタイマー呼出しを予約します。 call- out-reset() で設定するタイマー処理関数の呼出しは、タ イマー処理が実行されるごとに再定力、要です。 2345 fo て ()c = LIST-FIRST(&hif-softc_1ist) ; sc; 2346 2347 sc = LIST—NEXT(sc, hif—entry) ) { struct mip6—bu *mbu , *mbu—entry ; UN 工 X MAGAZINE 2005.4

2. UNIX MAGAZINE 2005年4月号

UNIX MAGAZINE 主要記事ー 見 ・ 2004 年 4 月 ~ 2005 年 3 月 ・野外でのネットワーク構築 ( 塚田清志 / 早川浩平 / 宅正巳 / 沖本忠久 ) オーサカキング 2004 ・・・ 2005 / 03 21 刀めての SAN 仙田英之 ) ストレージ・ネットワークの構築・・・・・・ 2005 / 03 85 土寸 ・プログラマーのためのテパッガの基礎雉哉 ( 中屋宝味子 ) 基本的なデバッグ手法、プログラミングに活かすデバッグ・・ 2004 / 04 31 ・インターネットと世界のすきま ( 川喜田佑介 / 宇夫陽次朗 ) (I)RFID 事始め・・・・・ 2004 / 05 28 ( 2 ) カンファレンス / 合宿支援システム・・・・・・ 2004 / 06 34 ( 3 ) アクテイプ RFID と位置情報サービス・・・・・・ 2004 / 07 101 ・ VPN ツールの使い方 ( 白樹専生 (1)VTun の活用法・・・・・・ 2004 / 07 30 (2)PPTP プログラムと OpenVPN ・・・・・・ 2004 / 08 36 ・プログラミングの次の一歩 ( 中屋子 ) メモリ管理の基礎・・・・・ 2004 / 09 24 ・空調障害との闘し、 ( 工将剋 国立天文台ネットワーク機器室の場合・・・・・・ 2004 / 09 82 ・ネットワーク・トラカレの基礎雉哉 ( 荒井美千子 ) ( 1 ) バケットの中身を調べる・・・・・・ 2004 / 10 33 (2)IP のバケット門当ム ICMP ・・・・・・ 2004 / 11 103 人のソフトウェア工学 ( 高橋元 ) 正しいプログラム・・・・・・ 2004 / 10 95 ・ポスト・ファイアウォールとネットワーク・セキュリティ ・ 2004 / 11 27 ・ VoIP の基礎雉哉 ( 秋葉俊夫 / 垣内啓之 / 木村嘉秋 / / 」浩 / 田中一寿 / 森永有紀子 ) プロトコルの概要から導入時の注意直まで・・ 2004 / 12 28 ・ Open Cygwin Window Here ( 吉田昌英 ) UNIX 使いのための VBScript と C# ・・・・・・ 2004 / 12 83 謝霸ヒとイ各と用途で選ぶ Ethernet スイッチ ( / 林ロ真 ) 2005 / 01 28 ・ネットワーク・ストレージの基礎雉哉仙田英之 ) 内蔵ディスクシステムから SAN 、 NAS へ・・ ・ 2005 / 01 127 ・マルチメティア酬言の ( 赤侖久 / 河合台 / 沖本忠幻 夏の甲子園高十予球中継・・・・・ 2005 / 02 23 或 Ethernet 実剱 JGN Ⅱ ( / 林 ) 2005 / 02 105 ・ EcIipse を味わう G え藤美代子 ) (1)VisuaI Editor 竟・・・・・・ 2004 / 10 108 (2)GUI を作る・・ ・ 2004 / 12 156 (3)GridBagLayout を使う・ 2005 / 01 152 ( 4 ) イベントを処理する・・ ・ 2005 / 02 153 ( 5 ) データベースに撮売する・・ ・ 2005 / 03 167 ・ FreeBSD のブートプロセスをみる ( 白崎博 (6)init386 ・・ ・ 2004 / 04 161 (7)getmemsize ・・ ・ 2004 / 05 163 (8)mi-startup ・ ・・ 2004 / 06 167 (9)cpu-startup ・ ・ 2004 / 09 74 (10)procO-init ・・ 2004 / 10 78 (ll)create-init() とプロセスの生成・・・・・・ 2004 / 11 167 (12)vm-forkproc() と仮想アドレス空間の管理・・・・・・ 2004 / 12 104 (13)idle-setup() と initclocks() ・・ ・ 2005 / 01 91 ( 14 ) ルート・パーティションのマウント・ ・ 2005 / 02 91 (15)execve システムコール・・ 2005 / 03 75 ・ IPv6 の実装 ( 島慶ー ) (27)IPv6 モビリティ ( 6 ) ーホーム・エージェントの動作・・ 2004 / 04 80 (28)IPv6 モビリティ ( 7 ) ーホーム・エージェントの代理近謝架 索とトンネル処理・・ 2004 / 07 87 (29)IPv6 モビリティ ( 8 ) ー動的ホーム・エージェント探索 ( 1 ) 2004 / 08 67 (30)IPv6 モビリティ ( 9 ) - 動的ホーム・エージェント探索 ( 2 ) ・ 2004 / 09 93 (31)IPv6 モビリティ ( 10 ) ・一ホーム・エージェントでのモバイ ル・プレフィックス処理など・・ 2005 / 01 65 (32)IPv6 モビリティ ( 11 ) ー移動ノードの実装・・・・・・ 2005 / 02 54 ・ IP ルーティング ( 小原泰弘 ) (4)RIP ・・・・・・ 2004 / 04 105 (VVIDE プロジェクト secure6 ワーキング・グループ 181 UNIX MAGAZINE 2005.4

3. UNIX MAGAZINE 2005年4月号

図 1 Junk Mail Controls の言画面 11 期市ト”引 ways ect ⅱま mail. に it con ols 6 8 『℃ om messages ⅵ dentify せ浦 se are •os い如レ′ k A ま if せ愴 message 記ⅲ f ま REiL Settngs Ad 叩をⅳ 0 FiIter %ite L 地 曰ま m k れ ss es ま ma ⅱ if せ旧 s 鼾「叫記女 ess E] ”第 om rnessaees t m 『 d to i ′ま mail 〇 - よ『ド fo 旧 s ( れ is. na の ロ協 m 鹵まー ness 0 蜘「物 団印 1 お庁 k n 溶 ss よ聶、・ 〇トわ仕に m 扣を気ま " r 〇 Delete を m 曰Ⅷ 1 displayng HTML れ肥 ss ” marked え′ま . syiitize 1 HTML Loggng VEW ⅵ 0 侊曜 e まれ渇ⅱ log をⅳ . 連載 /UNIX Communication Notes 202 ォルダに入れたメールも、あとで取り出せるようにしてお くほうが安心である。 SPAM をうまく処理できたとして も、単純なミスで重要なメールを破棄してしまったら元も 子もない。このような処理の設定は、慎重におこなうのが 基本である。 、 Adaptive Filter ( 学習フィルタ ) " タブでは、 SPAM フ イルタの肩効 / 無効か第定できる。また、学習した SPAM 判定用のデータをリセットすることも可能である。 Spam. A. ssassin メールサーバー側で設定する SPAM フィルタとして有 名なのが SpamAssassin である。さきほど述べたように これも SPAM の判別に Bayesian フィルタを用いている。 SpamAssassin は独立したフィルタであり、メールサー バー側での運用を前提として開発されたものである。この ため、メールリーダーに統合された SPAM フィルタとは 異なり、ユーザーカ斗夏数のメールリーダーを使い分けてい るような竟でも、 SPAM フィルタの学習効果に差が生じ 、 Settings ( 設疋 ) " タブの、、 White Lists ( ホワイトリス ないという利点がある。 ト ) " では、無条件に SPAM と判定しないメールを送信 たとえば、 IMAP サーバーを利用していると、複数のシ 者アドレスによって指定する。そのユーザーが使ってい ステムから同じメールドロップにアクセスしてメールを読 る、、 Personal Address Book ( 個人用アドレス帳 ) " に登 むことがよくある ( 私も、すべてのメールを 1 台の IMAP 録されているメールアドレスからのメールは、原則として サーバーに集め、オフィスや外出先から、それそれ異なるシ SPAM とはみなさない。 ステムを使って同じメールドロップにアクセスしている ) 。 、 Handling ( フィルタの処理 ) " では、 SPAM と判定され この場合、メールリーダーに組み込まれた SPAM フィル たメールをどう処理するかを指定する。はじめのうちは、 タの学習の度合いはシステムごとに違うので、挙動が一定 SPAM と判定されたメールを特定のフォルダに移動する しないという問題がある。とくに、購入直後のシステムに 処理は無効にしておき、しばらく使って処理に納得できた インストールしたばかりのメールリーダーを使う場合、か ら言定を変更すればよいだろう。 Thunderbird が SPAM なり悲惨な状況になる。 とみなしたメールを、たとえば、、 Junk ( 迷惑メール ) " と このような問題を解決するには、サーバー側に SPAM いうフォルダに移動させるように設疋しておけば、誤って フィルタを導入し、そこで処理をおこなうほうがよい。 SPAM と判断したメールを普通のフォルダに戻すことも れを実現してくれるのが SpamAssassin である。 可能になる。 SPAM フィルタが、、 SPAM ではない " とみなしたメー ルをユーザーが SPAM と判断したとき、どのような処理 をおこなうかも指定できる。これも、 Junk フォルダなど に移動させるように設定するのカましい。人間が手で操 作する以上、どんなに注意していても間違う可能性はある ( 私自身、 SPAM ではないメールを SPAM に分類してし まったことカ舸回もある ) 。したがって、いったん Junk フ 回区 Junk MaiI C00 れ引 s P son 引 Ad 市 0 80 巨丕コ days om folder 亠ー 込物ま Mai は 特徴 SpamAssassin は、 Bayesian フィルタ以外に、次のよ うな手法を用いて SPAM の判定精度を高めている。 ・メールヘッダのチェック 詢解析 ・ white list/black list の設疋 ・ SPAM データベース (DCC 、 pyzor 、 Razor2 など ) ニ = ロ 37 UNIX MAGAZINE 2005.4

4. UNIX MAGAZINE 2005年4月号

ロプロクラミンク・テクニック 多治見寿和 sysIog(2) 前回は、デーモン・プログラムなどがメッセージを出力 70 ューザーのリストのうちログインしているユーザーの端 ・指定されたファイルにメッセージを追加する。 syslogd でおこなえる処理は以下のとおりです。 す。 ない情報はログファイルに記録するといったことも可能で 要な情報はシステムのコンソールに表示し、さほど重要で 性を表します。たとえば、カーネルからのメッセージや重 能が出力したメッセージかを、レベルはメッセージの重要 引数に指定する値です。ファシリティはシステムのどの機 よって区別します。これらは、前回述べたように priority syslogd では、渡された情報をファシリティとレベルに に用意されているデーモン・プログラムが syslogd です。 き込まれたりメッセージが出力されたりします。そのため ァイルにもとづいて処理方式が決定されて、ファイルに書 ったん 1 つのプロセスに集められ、そのプロセスで設疋フ 直接出力する処理はおこないません。出力すべき情報はい 前回紹介した syslog 関連の関数群は、ファイルなどへ sy 引 ogd の動作 る側の syslogd デーモンについて説明します。 今回は、前号で予告したとおり、メッセージを受け付け でしよう。 syslog システムを利用するように変更するのも比較的簡単 るので、 fprintf 関数を利用している既存のプログラムを、 た。 syslog 関数は fprintf 関数とほば同様の使い方ができ プログラムから呼び出されるライプラリ関数を紹介しまし する際に利用する syslog システムをとりあげ、これらの 末にメッセージを表示する。 UNIX MAGAZ 工 NE 2005.4 を指定します。このとき、大文字と小文字は区別されませ いる記号定数 (LOG-KERN など ) の、、一 " より後ろの部分 します。ファシリティは、ライプラリ関数の引数として用 で、ファシリティとレベルを、、 . " ( ドット ) で区切って言当 セレクタ部は処理対象となるメッセージを指定する部分 ため、注意が必要です。 定ファイルは古いシステムでは利用できなくなってしまう 在は空白文字も使えます。ただし、空白文字を使用した設 す。以前はタブ文字しか認められていませんでしたが、現 の 2 つは、タブ文字 ( または空白文字 ) で分けられていま 各行はセレクタ部とアクション部から構成されます。 がコメントとして扱われます。 多くのシステムと同様、倥白文字を除いて ) # で始まる行 述されています。コメントを言当することもでき、ほかの syslog. conf です。このファイルは 1 行に 1 つの設疋カ第己 syslogd デーモンの動作を決める設疋ファイルが /etc/ sy 引 og. conf の基本的な記法 メールを送るといった処理にも対応しています。 ージを渡すこともできるので、たとえは特定のユーザーに へのメッセージの出力ですが、コマンドを起動してメッセ 基本はファイルへのメッセージの追加とユーザーの端末 す。 ・コマンドを起動し、その標準入力としてメッセージを渡 指定されたホストにメッセージを車幻去する。 を表示する。 ・ログインしているすべてのユーザーの端末にメッセージ

5. UNIX MAGAZINE 2005年4月号

連載 / 旧 v6 の実装ー 0 図 7 有咬加 1 か切れたエントリの肖畭 2355 if (mbu—>mbu_expire く mono_time . tv_sec) { 2356 2362 2363 2364 2365 2366 2367 2368 2373 2374 2375 2376 2377 } if ( (mbu->mbu—flags & IP6MU-HOME) ! = 0 ) { mip6—bu—fsm(mbu , MIP6_BU_PRI_FSM_EVENT_RETRANS_TIMER, NULL) ; error = mip6_bu—1ist_remove ( &sc—>hif—bu—list, mbu) ; } else { continue ; / * continue anyway. if (error) { 対応付け更新のリストは、ホーム・ネットワークごとに 保持されています。 2 , 345 行目のループで、すべてのホー ム・ネットワーク構造体 ( hif インターフェイス構造体 ) を たどります。 2349 for (mbu = LIST—FIRST(&sc—>hif_bu_1ist) ; 2350 2351 2352 mbu ! = NULL ; mbu = mbu—entry) { mbu—entry = LIST—NEXT (mbu , mbu—entry) ; 2 , 349 行目のループで、各ホーム・ネットワーク構造体 に保持されている対応付け更新のリストのエントリをたど り、各ェントリごとに必要な処理を実行します。 まず、 2 , 355 ~ 2 , 377 行目 ( 図 7 ) で有効時間が切れた工 ントリを削除します。基本的に、効時間が切れたエント リは削除されますが、 KAME ではホーム登録のエントリ のみ例外的に取り扱います。削除対象となるエントリがホ ーム登録であれば ( 2 , 356 行目 ) 、エントリを削除する代わ りに対応付け更新メッセージを再送します ( 2 , 362 ~ 2 , 364 行目 ) 。ホーム登録の勠時間が切れるのは、多くの場合移 動ノードがネットワークから切り離された状態が長く続い たときです。ホーム登録の再送を続けることで、ネットワ ーク接続カ鰒旧したときに、ふたたひ移動ノードとしての 機能を利用できるようになります。なお、 mip6-bu-fsm() は対応付け更新エントリの状態に応じて適切な処理を実行 する状態遷移関数です。状態遷移関数については、別の機 会に詳しく解説します。 if ( (mbu->mbu—state & 2380 6-BU-STATE-NEEDTUNNEL カス疋されているかど うかを確認します。このフラグは、通信相手が Mobile IPv6 をサポートしていないなどの理由により経路最適化 ができない状態を表します。これらのノードに対しては、 以後に実装されているメッセージ再送処理カ坏要になるた め、ループを抜けて次のエントリに処理を進めます。 図 8 の 2 , 384 ~ 2 , 413 行目は再送処理です。もし指定さ れた再送時刻 (mbu-retrans) が現在時刻 (mono-time) より前なら、なんらかの再送処理が必要であることを意味 します。対応付け更新では 3 つのケースが考えられます。 1 つ目は往復経路確認の手川頁でメッセージの再送が必要に なった場合 ( 2 , 387 ~ 2 , 391 行目 ) 、 2 つ目は対応付け更 新を週言し、その応答メッセージを待っている (IP6MU- ACK が指定されている ) 場合 ( 2 , 392 ~ 2 , 398 行目 ) 、 3 つ 目は、登録が完了していて、登録の効時間延長のための 再送時刻になった場合 ( 2 , 399 ~ 2 , 404 行目 ) です。いず れの場合も、対応付け更新窈越遷移関数を現在の状況を 示す引数を指定して呼び出すことで、適切な再送処理がお こなわれます。 最初のケースでは、現在の往復糸各確認の状態に応じて 必要なメッセージが送信されます。 2 番目のケースであれ ば、以前送信した対応付け更新メッセージか応メッセー ジカ鴃われたと判断し、対応付け更新メッセージカ送信 されます。 3 つ目の場合は、勠時間の延長を要求するた 2381 MIP6_BU_STATE_NEEDTUNNEL) ! = 0 ) continue ; めに、対応付け更新メッセージが送信されます。 対応イ寸け更新メッセージの送信 移動ノードは、現在の気付アドレスをホーム・エー 2 , 380 行目では、対応付け更新の状態フラグとして MIP UNIX MAGAZINE 2005 . 4 シェン 65

6. UNIX MAGAZINE 2005年4月号

ん。つまり、ファシリティには kern 、 console 、 auth 、 au- thpriv 、 security 、 ftp 、 lpr 、 mail 、 news 、 cron 、 uucp 、 syslog 、 daemon 、 user 、 local()æ 10Ca17 のいずれかを指 定します。 レベルのほうも、ライプラリ関数の引数として用いる 記号定数 (LOG-EMERG など ) の一以降の文字列を指定 します。こちらも大文字と小文字は区別されません。つま り、レベルとしては emerg 、 alert 、 crit 、 err 、 warning 、 notice 、 info 、 debug のいずれかを指定します。 レベルの値は上記の順番で重要度カ皜く、もっとも高い のが emerg 、もっとも低いのが debug となります。レ ベルの順番は重要です。たとえば、セレクタとして、、 ftp. warning" を指定した場合、 FTP に関するメッセージのな かの警告メッセージを未するのではなく、 warning 以上 のレベルのメッセージ ( つまり warning 、 err 、 crit 、 alert 、 emerg の 5 種類 ) を指定したことになります。 アクション部では、セレクタ部で設定したメッセージの 処理方法を指定します。次のような記法羽吏えます。 / で始まるパス名 指定したファイルにメッセージを追加する。 , で区切られたユーザーのリスト 指定されたユーザーのうちログインしているユーザー 端末にメッセージを表示する。 ログインしているすべてのユーザーの端末にメッセー を表示する。 ・ @ホスト名 推定したホストにメッセージを中幻医する。 戸マンド行 の ン 標準入力としてメッセージを渡しながら、 sh を使ってコ マンド行を実行する。 コマンド行を使うときに注意が必要なのは、コマンドの 標準出力と標準ェラー出力は /dev/null に割り当てられて いるため、コマンドのなかで明示的に出力先を指定しない と何も出力されない点です。また、ファイルに出力する場 合などは、その出力のバッファリングにも注意しなければ なりません。バッファリングにより出力に時間がかかる場 合もありますし、プロセスが異常終了したときに出力がお こなわれない可能性もあります。このような場合には、で UNIX MAGAZINE 2005 . 4 プログラミング・テクニック : きればバッファリングをおこなわない入出力を使うほうが よいでしよう。 コマンドはメッセージごとに起動されるわけではありま せん。いったんメッセージを処理するために syslogd がコ マンドを起動すると、タイムアウト時間 ( 60 秒 ) を過ぎる かコマンドが終了しないかぎり、次のメッセージも同じプ ロセスに渡されます。つまり、メッセージが頻繁に発生し ている場合には、 1 度のコマンド起動で複数のメッセージ を処理しなければならなくなることがあります。 以上が syslog. conf の基本的な記法ですが、複数の処理 対象をまとめて諮することもできます。 まず、あるセレクタに複数のアクションを適用したい場 合について考えてみましよう。これは、アクション部を複 数言当できれば実現可能です。しかし、アクションとして コマンド行を指定する場合は行末までがアクションの内容 として扱われるため、 1 行に複数のアクションを言古する ことはできません。複数のアクションを指定したい場合に は、それぞれを別の行に言当します。つまり、 syslog ・ conf ファイルには同じセレクタをもつ行カ夏数存在することに なります。ーヨ殳に、 syslogd は受け取ったメッセージにマ ッチするセレクタカ数ある場合には、それらに指定され ているすべての処理を実行します。セレクタが同一の 2 つ のアクションをそれぞれ別の行に言杢した場合、どちらか にマッチするメッセージはかならずもう一方にもマッチし ますから、両方のアクションが実行されることになります。 これは同一のセレクタが指定された場合にかぎりませ ん。セレクタによっては、異なるセレクタであっても同 ーのメッセージにマッチする場合があります。たとえば、 以下のようにレベルとして info を指定したセレクタと emerg を指定したセレクタがあるとすると、 emerg のほ うにマッチするメッセージはかならず info のほうにもマ ッチすることになります。この場合には、両方のセレクタ に割り当てられているアクションが実行されます。 複数の処理対象の指定 kern . info kern. emerg これにより、 /var/log/kernel. 10g カーネルからのメッセージは debug レベ 71

7. UNIX MAGAZINE 2005年4月号

特集 SAN 環境におけるフアプリックの構成 フロー帋 (Buffer-to-Buffer ) 図 19 R ー RDY の受信を待たずに 4 フレーム連続送信可能 送信側 / ヾッファ 1 バッファ 2 バッファ 3 ノヾッファ 4 バッフアの処理を終えたら、 R_RDY を送信 ・ノードがフアブリックにログインした時点でバッファ数 ( BB Credit) を調整 ・送信ノードは、 BB Credit の範囲であれば続けて送信可能にの例では 4 フレーム ) ・受信ノードは、バッフア内のテータを処理したら R RDY を送信 ・同様の処理は、 FC - SW の各ノードにおいてもおこなわれる メッシュキ寺のルーティング 図 20 術が発展し、より柔軟かっ便利に利用できるようになって きている。 SAN の世界でも VSAN 機能をはじめ、従来 はサーバーやストレージ製品でおこなっていたミラーリン グ、リモートコピー機能をフアプリック内の FC ー SW で実 現する方向に進んでいる。イ反想化ストレージの実現に向か って進み始めているので、今後はより使いやすい環境が簡 単に構築できるようになると思われる。 ( やまだ・ひでゆき EMC ジャパン ) ストレーシ 1 スイッチ A ーバー 1 スイッチ B スイッチ C スイッチ D FC スイッチ間では、 FSPF の機能を 用いて最短経路を計算する 図 21 FC-SW のホッフ激 サーバー 2 ストレージ 2 ストレー ン FC - SW のホップ数は 3 までにしたほうがよい わッお スイッチ C スイッチ A った場合、最短の ISL に障害カ起こったとしても、かな らず 3 ホッフ。以内で到達できるように注意する ( 図 21 ) 。 スイッチ B スイッチ D 今後の FC-SW IP 網の世界では、 VLAN や負荷分散、 VPN などの技 33 UNIX MAGAZINE 2005.4

8. UNIX MAGAZINE 2005年4月号

ー 0 連載 / v6 の実装 図 9 mip6-register-current-location() のタ里 732 733 737 738 739 740 746 747 748 749 750 751 752 753 754 1696 1697 1698 1699 1700 1701 1702 1703 switch (sc->hif—location) { case case HIF_LOCATION_HOME : mip6—home—registration(sc) ; break ; HIF_LOCATION_FOREIGN : error = mip6_home—registration(sc) ; break ・ HIF_LOCATION_UNKNOWN : break; return (error) ; 図 10 既存の対応付け更新エントリのオ f0 て (mbu mbu if if LIST_FIRST(&sc—>hif—bu—Iist) ; mbu; LIST_NEXT (mbu , mbu_entry) ) { ( (mbu—>mbu—flags & IP6MU-HOME) = の continue ; (IN6_ARE_ADDR_EQUAL (&mbu—>mbu_haddr , break; &mpfx—>mpfx—haddr) ) 1 , 682 ~ 1 , 688 行目で現在の気付アドレスを hif-coa に 取得します。 hif インターフェイス構造体の hif-coa-ifa は、現在の気付アドレスを示す in6-ifaddr 構造体へのポ インタです。以後の処理では in6-addr 構造体を使うため、 hif-coa-ifa から in6-addr 構造体の形式で気付アドレスを 1690 for (mpfx 取り出します。 1 , 690 行目のループでは、移動ノードがイ尉寺しているプ contlnue ; mpfx) = = NULL) &sc—>hif—prefix—list—home, (hif—prefix—list—find—withmpfx( LIST_NEXT(mpfx , mpfx_entry) ) { LIST_FIRST(&mip6—prefix-1ist) ; ので、次のプレフィックスの処理へ進みます。 1 , 696 ~ 1 , 703 行目 ( 図 10 ) は、既存の対応付け更新エ ントリの検索です。さきほど検索したプレフィックスの mpfx-haddr メンバー変数には、移動ノードのホームアド レスが指定されています。 1 , 696 行目のループで、対応付 け更新のリストをたどりながら、 mpfx-haddr に対応する ホーム登録のエントリを検索します。 1704 if (mbu = = NULL) { 1691 1692 1693 1694 mpfx ; mpfx if 1722 1723 1706 if (sc—>hif—location HIF_LOCATION_HOME) { continue ; レフィックス情報をたどり、ホーム登録の対象となってい るホーム・ネットワーク上のプレフィックスを検索してい ます。 hif-prefix 」 ist-find-withmpfx() は、引数で指定 されたプレフィックスが hif インターフェイス構造体に登 録されているかどうかを調べます。 hif-prefix 」 ist-home には、 hif インターフェイスにホーム・プレフィックスと して登録されているプレフィックスが十されているので、 その値と比較することにより、現在確認中のプレフィック スがホーム・プレフィックスかどうかを判断できます。ホ ーム・プレフィックスでない場合、とくに処理は必要ない UNIX MAGAZINE 2005.4 1 , 704 行目から、対応付け更新エントリカ在しない 場合の処理に入ります。基本的に、 mip6-home-registra- tion() カばれたときに対応するホームアドレスの対応付 け更新エントリがなければ、新たにエントリを作成します が、移動ノードがホーム・ネットワークに接続している場 合は単純に無視します。具体的には、ホーム・ネットワー クに接続している状態で、移動ノードの機能を開始した場 合が、この条件にあてはまります。 1731 mha = hif—find-preferable—ha(sc) ; 1732 67

9. UNIX MAGAZINE 2005年4月号

連載 /UNIX Communication Notes に、受け取った電子メールが SPAM に該当するかどう それ以外のメールとを判別する。さきほど述べたよう ューザーの考え方を学習し、それに沿って SPAM と ・ユーザーごとの傾向を学習して分類 になる。 てきた電子メールは受信を拒否するといった設疋が可能 たとえば、特定のドメインもしくはユーザーから送られ ユーザーが指定したルールに従ってメールを破棄する。 ・ルールにもとづく処理 ものなど、いろいろな実装がある。 ウイルスやワームを含む部分を削除したうえで配送する する。該当するメールをそのまま捨てるものもあれば、 ware) カ鯉め込まれた電子メールを検知し、安全に破棄 ウイルスやワームなどの悪意あるソフトウェア (mal- 危険な電子メールの破棄 ている。 最近のメールフィルタは、一般に次のような機能をもっ なる。 受信者にとって意味のある電子メールだけを読めるように が自動的に働くようになれば、受信者は SPAM ではない、 い電子メールを破棄する処理をおこなう機構である。これ ごく簡単にいえば、メールフィルタとは受信者カまな フィルタ (mail filter) である。 術がいろいろと考案されてきた。これが、いわゆるメール そこで、この鬱陶しい SPAM に煩わされないための技 を読み、 4 % は宣伝されている商品を実祭に購入しているらしい。 10 通以との SPAM を受け取り、そのうちの 14 % は律儀に内容 同じ調査によると、インターネット・ユーザーの 68 % が 1 日に 間で約 260 億ドルに達するという。 の破棄に費やされる時間は週に 2 , 290 時間、その総コストは 1 年 そうだ。これを米国全体のユーザーにあてはめてみると、 SPAM SPAM を受け取り、それを破棄するのに 2.8 分を費やしている 米国のインターネット・ユーザーは平均して 1 日に 18.5 通の 2005 年 2 月メリーランド大学が発表した調吉果によれば、 メールフィルタにはいくつかの実装方法があるが、大別 ールはユーザーごとにカスタマイズできるようになって かは受信者ごとに異なる。したがって、分類 / 破棄のル すると、 いる。 UNIX MAGAZINE 2005.4 ・メールリーダー (MUA) に実装されるもの ・システムがメールを送受信する際に起動されるもの に分けられる。 最近は、多くのメールリーダーに、なんらかの SPAM フィルタの機能がある。たとえば、無償で公開されている Mozilla Thunderbird には強力な SPAM フィルタが組 み込まれている ( 私も Thunderbird を使っているが、完 成度カ皜く、 SPAM フィルタの定も比較的簡単である ) 。 もう 1 つは、電子メールの送受信時に起動されるソフト ウェアとして実装するものだ。 sendmail などのメールサ ーバー (MTA) に組み込むかたちになっているものもある し、 MUA から起動されて処理をおこなうものもある。 受信者側で SPAM を検出して破棄する技術は、ユーザ ーが SPAM の処理に費やす時間を減らすという未では 有効である。しかし、 SPAM がすでに中継され、ユーザー の手許に届いていることを前提としているため、ネットワ ーク帯域の浪費を軽減する効果は得られない。 以下では、上記の 2 種類の実装方法の例として、 Mozilla Thunderbird と SpamAssassin を紹介する。 MoziIIa Thunderbird Mozilla Thunderbird は、 Netscape Communica- tor のオープンソース化を進めてきた Mozilla Founda- tion が、それまでの技術を結集して開発したメールリーダ ーである。無賞で提供されているが、品質はかなり高い。 2004 年 8 月の有限責任中間法人 MoziIla Japan1 の 設立にともない、 Mozilla の各ソフトウェアに関する情報 が日本語で継続的に提供されるようになった。日本語によ るサポートも充実してきたため、以前より Mozilla 製品 を導入しやすくなっている。 Thunderbird についても、 Linux 、 Mac OS X 、 Windows 用の日本語版力開され ているから、英語に自信のない人でも利用しやすいだろう。 Thunderbird の SPAM フィルタは、かなり性能が高い 部類に入る。いわゆる学習型のメールフィルタであり、受 信したメールへのユーザーの対応をみながらフィルタ自身 が SPAM 判定ルールを動的に変化させていく。最終的に は、かなり高い確率で SPAM を識別、破棄できるように なる。 1 http://www.mozilla-japan.org/ 35

10. UNIX MAGAZINE 2005年4月号

連載 / 旧 v6 の実装ー 0 図 13 有交加 1 の更新 for (mpfx = LIST-FIRST(&mip6_prefix-1ist) ; mpfx; 0x7fffffff; prefix—lifetime coa—lifetime = mip6—coa—get—Iifetime(&mbu—>mbu—coa) ; 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 次回も引き続き移動ノードの処理を解説します。 mpfx = LIST—NEXT (mpfx , mpfx-entry) ) { if (hif-prefix-list-find-withmpfx( &mbu—>mbu—hif—>hif-prefix—list—home , mpfx) COIltinUe ; if (mpfx—>mpfx—vltime く prefix-lifetime) prefix—lifetime = mpfx—>mpfx—vltime ; } else { coa_lifetime; mbu—>mbu_lifetime if (coa—lifetime く prefix—lifetime) { mbu—>mbu lifetime = prefix—lifetime; mbu—>mbu—expire = mono_time . tv_sec 十 mbu—>mbu lifetime ; mbu—>mbu_refresh = mbu—>mbu_lifetime ; 0x7fffffff; mbu—>mbu—explre if (mbu—>mbu_expire く mono_time . tv_sec) / * sanity check f0 て overflow * / = NULL) ンタをもちます。 mip6-home-registration2() は、ホー ム登録および固定ノードへの対応付け更新処理で利用され ます。 mip6-home-registration() が状態遷移関数を呼 び出すだけだったのに対し、 mip6-home-registration2() は実際のバケット出力関数を呼び出します。 1809 1813 1814 1815 = NULL ) { ia_addr . sin6_addr ; hif_coa = mbu—>mbu_hif—>hif_coa_ifa—> return ( 0 ) ; if (mbu—>mbu—hif->hif—coa-ifa 1 , 809 行目で気付アドレスを再確認します。 hif インタ 対応付け更新メッセージを週言することはできません。 ーフェイス構造体に気付アドレスが設疋されていない場合、 ~ 1 , 837 行目で取得します。肩効時間のオーバーフローを 防ぐため、プレフィックスの最大肩効時間を 0X7 仕仕肝に 制限しています。対応付け更新の肩効時間は気付アドレス とホーム・プレフィックスの有効時間の短いほうに設疋さ れます。 1 , 846 ~ 1 , 849 行目で、いま設定した肩効時間をもとに 有効時間が切れる時刻を設定します。なお、 1 , 850 行目 で次の再送時刻を肩効時間が切れる時刻と同じ値に設定し ていますが、これは以降の処理で必要に応じて適切な値に 更新されます。具体的には、ホーム登録の場合は次の再送 時刻に設定されます。固定ノード宛の対応付け更新の場合 は、再送の必要がないのでそのままです。 1822 1823 1824 1825 1826 1827 1828 if (mbu—>mbu—hif—>hif—location HIF_LOCATION_HOME) { / * home de—registration. * / mbu—>mbu—coa = mbu—>mbu_haddr ; } else { / * home registration. * / mbu—>mbu_coa = hif_coa; 1854 1855 1856 1857 } error = mip6-bu-send—bu(mbu) ; return (error) ; 最後に、 mip6-bu-send-bu() を呼び出して対応付け更 新メッセージを生成し、出力します。 mip6-bu-send-bu() は次回に解説します。 1 , 822 ~ 1 , 828 行目で、出力する対応付け更新メッセージ に使う気付アドレスを決定します。移動ノードがホーム・ ネットワークにいる場合はホームアドレスが、出先ネット ワークにいる場合は 1 , 815 行目で取得した気付アドレスが 設定されます。 図 13 の 1 , 831 ~ 1 , 845 行目で有効時間を更新します。 手川頁は mip6-bu-create() での処理と同じです。まず、気 付アドレスの有効時間を 1 , 831 行目で取得し、その後ホー ムアドレスに対応するプレフィックスの有効時間を 1 , 833 UNIX MAGAZINE 2005.4 ☆ ( しま・けいいち IIJ) 69