Logical Domains 1.2 管理ガイド

付録 B Logical Domains Manager の検出

マルチキャストメッセージを使用すると、サブネット上で Logical Domains Manager を検出できます。ldmd デーモンは、ネットワーク上で特定のマルチキャストパケットを待機できます。そのマルチキャストメッセージが特定のタイプの場合、ldmd は呼び出し元に対して応答します。これにより、Logical Domains を実行しているシステム上で ldmd を検出できます。

この付録では、サブネット上のシステムで動作している Logical Domains Manager の検出について説明します。

Logical Domains Manager を実行しているシステムの検出

マルチキャスト通信

この検出メカニズムは、ldmd デーモンによって使用されるものと同じマルチキャストネットワークを使用して、MAC アドレスを自動的に割り当てるときに衝突を検出します。マルチキャストソケットを構成するには、次の情報を指定する必要があります。


#define	MAC_MULTI_PORT		64535
#define	MAC_MULTI_GROUP		"239.129.9.27"

デフォルトでは、マシンが接続されているサブネット上ではマルチキャストパケットのみを送信できます。この動作をは、ldmd デーモンに ldmd/hops SMF プロパティーを設定することによって変更できます。

メッセージ形式

検出メッセージは、他のメッセージと混同しないように明白にマークされている必要があります。次のマルチキャストメッセージ形式により、検出待機プロセスで検出メッセージを識別できます。


#define	MAC_MULTI_MAGIC_NO	92792004
#define	MAC_MULTI_VERSION	1

enum {
	SEND_MSG = 0,
	RESPONSE_MSG,
	LDMD_DISC_SEND,
	LDMD_DISC_RESP,
};

typedef struct {
	uint32_t	version_no;
	uint32_t	magic_no;
	uint32_t	msg_type;
	uint32_t	resv;
	union {
		mac_lookup_t		Mac_lookup;
		ldmd_discovery_t	Ldmd_discovery;
	} payload;
#define	lookup		payload.Mac_lookup
#define	discovery	payload.Ldmd_discovery
} multicast_msg_t;

#define	LDMD_VERSION_LEN	32

typedef struct {
	char		ldmd_version[LDMD_VERSION_LEN];
	char		hostname[MAXHOSTNAMELEN];
	struct in_addr	ip_address;
	int		port_no;
} ldmd_discovery_t;

Procedureサブネット上で動作している Logical Domains Manager を検出する

  1. マルチキャストソケットを開きます。

    「マルチキャスト通信」 に示すポートおよびグループの情報を使用していることを確認してください。

  2. ソケット経由で multicast_msg_t メッセージを送信します。

    メッセージには次の内容を含めるようにしてください。

    • version_no の有効な値 (MAC_MULTI_VERSION によって定義されている 1)

    • magic_no の有効な値 (MAC_MULTI_MAGIC_NO によって定義されている 92792004)

    • LDMD_DISC_SENDmsg_type

  3. マルチキャストソケットで Logical Domains Manager からの応答を待機します。

    応答は、次の値が含まれる multicast_msg_t メッセージである必要があります。

    • version_no の有効な値

    • magic_no の有効な値

    • LDMD_DISC_RESP に設定された msg_type

    • 次の情報が含まれる、ldmd_discovery_t 構造で構成されたペイロード

      • ldmd_version システム上で動作している Logical Domains Manager のバージョン

      • hostname システムのホスト名

      • ip_address システムの IP アドレス

      • port_no Logical Domains Manager によって通信に使用されているポート番号で、XMPP ポート 6482 にする

    Logical Domains Manager からの応答を待機する場合、自動割り当て MAC 衝突検出パケットが破棄されていることを確認してください。