ONC+ 開発ガイド

SAC の概要

SACSAF の制御プロセスです。SAC/etc/inittab のエントリに入れて init() で起動します。SAC の機能は、ポートモニタを、システム管理者が指定した状態に保持することです。

管理コマンド sacadm を使用して、SAC にポートモニタの状態を変更させることができます。また、sacadm を使用して、ポートモニタを SAC の管理下に入れたり、管理から外したり、SAC が管理しているポートモニタの情報をリストしたりできます。

SAC の管理ファイルには、SAC の管理下の各ポートモニタを一意的に識別できるタグと、各ポートモニタを起動するコマンドのパス名が入っています。

SAC が実行する主な機能を簡単に示します。

ポートモニタの基本機能

ポートモニタは、マシン上の同タイプの入力ポートセットを監視するプロセスです。ポートモニタの主目的は、外部からのサービス要求を検出し、それを適切にディスパッチすることです。

ポートとは、外部に開かれたシステム上のアクセスポイントです。ポートには具体的には、ネットワーク上のアドレス (TSAPPSAP)、コードで接続された端末ライン、電話線入力などがあります。何をポートとみなすかは、ポートモニタ自体が定義します。

ポートモニタはいくつかの基本機能を実行します。機能によっては SAF のために必要なものもありますし、ポートモニタ自身が必要に応じて設計した機能もあります。

ポートモニタの主な機能を 2 つ示します。

ポート管理

ポートモニタの第 1 の機能はポートの管理です。ポートを実際にどう管理するかの詳細は、ポートモニタの開発者が定義します。1 つのポートモニタで 1 つのポートを管理するとは限りません。同時に複数のポートを管理することもできます。


注 -

ポート管理の例として、電話回線の接続における回線速度の設定、適切なネットワークアドレスとの結合、サービス終了後のポートの再初期化、プロンプトの出力などがあります。


アクティビティの監視

ポートモニタの第 2 の機能は、アクティビティ指示に対応する責任があるポートを監視することです。検出されるアクティビティには、次の 2 つのタイプがあります。

  1. アクティビティの 1 つは、ポートモニタがモニタ固有のアクションを取るための指示です。ポートモニタ固有アクティビティの例として、ブレークキーが押されると回線速度を循環させるという指示があります。すべてのポートモニタが、同じ指示を認識して同じように反応するわけではありません。ポートモニタがどのような指示を検出するかは、ポートモニタの開発者が定義します。

  2. もう 1 つは外部からのサービス要求です。ポートモニタはサービス要求を受信すると、受信したポートからどのサービスが要求されているかを判定できなければなりません。同じサービスを複数のポートで提供できることに注意してください。

ポートモニタのその他の機能

この項では、ポートモニタのその他の機能について簡単に説明します。

システムへのアクセス制限

ポートモニタは現在実行中のサービスに影響することなく、システムへのアクセスを制限できなければなりません。そのために、ポートモニタは有効と無効の 2 つの内部状態を保持しています。ポートモニタの起動時の状態は、sac で設定した環境変数 ISTATE の値で決まります。SAC とポートモニタのインタフェース」 の項を参照してください。

ポートモニタの有効・無効を切り換えると、その管理下にあるすべてのポートが影響を受けます。ポートモニタが 1 つのポートだけを管理している場合は、そのポートだけが影響を受けます。複数ポートがそのポートモニタの管理下にあるときは、それらのポートすべてが影響を受けます。

ポートモニタの有効・無効の切り換えは動的な操作です。この操作で、ポートモニタの内部状態が変わります。ただし、次にポートモニタを起動するときには、この状態は失われます。

これに対して、個々のポートの有効・無効の切り換えは静的な操作です。この操作によって管理ファイルが変更されます。次にポートモニタを起動しても、ポートの状態は残ります。これに対して、個々のポートの有効・無効の切り換えは静的な操作です。この操作によって管理ファイルが変更されます。次にポートモニタを起動しても、ポートの状態は残ります。

utmp エントリの作成

ポートモニタは、起動するサービスの utmp エントリを作成する責任があります。そのとき、エントリのタイプフィールドは USER_PROCESS に設定します(ただし、pmadm でサービスを追加したときに -fu を指定した場合だけです)。utmp エントリは、次にサービスによって変更されます。サービスが終了したときは、utmp エントリは DEAD_PROCESS に設定されなければなりません。

ポートモニタのプロセス ID とファイルのロック

ポートモニタは、起動したときに自分のプロセス ID をカレントディレクトリの _pid というファイルに書き込み、そのファイルにアドバイザリロックを設定します。

サービス環境の変更: doconfig() の実行

ポートモニタは、ポートモニタの管理ファイル _pmtab に指定されているサービスを起動する前に、サービスごとの構成スクリプトがあればライブラリ関数 doconfig() を呼び出してそれを実行します。セキュリティ上の理由だけではなく、サービスごとの構成スクリプトで制限コマンドの実行が指示される場合があるので、ポートモニタはルートパーミッションで起動されます。サービスの呼び出し方法の詳細は、ポートモニタの開発者が定義します。