Cisco Network Registrar ユーザー ガイド 7.0
DHCP 拡張ディクショナリ
DHCP 拡張ディクショナリ
発行日;2012/01/16 | ドキュメントご利用ガイド | ダウンロード ; この章pdf , ドキュメント全体pdf (PDF - 9MB) | フィードバック

目次

DHCP 拡張ディクショナリ

拡張ディクショナリのエントリ

デコード済みの DHCP パケット データ項目

要求ディクショナリ

応答ディクショナリ

拡張ディクショナリの API

TCL 属性ディクショナリの API

TCL 要求ディクショナリ方式と応答ディクショナリ方式

TCL 環境ディクショナリ方式

DEX 属性ディクショナリの API

DEX 要求ディクショナリ方式と応答ディクショナリ方式

DEX 環境ディクショナリ方式

オプションおよびオブジェクト メソッド呼び出しの例

ベンダー クラス オプション データの処理

オブジェクト データの処理

DHCP 拡張ディクショナリ

この付録では、DHCP 拡張ディクショナリのエントリと拡張ディクショナリへのアプリケーション プログラム インターフェイス(API)について説明します。ここでは、要求ディクショナリと応答ディクショナリで使用できるデータ項目と、TCL 拡張機能および共有ライブラリからディクショナリにアクセスする際に使用する呼び出しについて説明します。

拡張ディクショナリのエントリ

ディクショナリは、キーと値のペアを含むデータ構造です。ディクショナリには、要求ディクショナリと応答ディクショナリが使用する属性ディクショナリ、および環境ディクショナリの 2 つのタイプがあります。この項では、要求ディクショナリと応答ディクショナリについて説明します。環境ディクショナリのエントリについては、「TCL 環境ディクショナリ方式」で説明します。

デコード済みの DHCP パケット データ項目

デコードされた DHCPv4 パケット データ項目は、DHCP パケット内の情報を表します。これは、要求ディクショナリと応答ディクショナリの両方で使用できます。これらのディクショナリを使用すると、単なるデコードされた要求やデコードされた応答よりも内部のサーバ データ構造にアクセスできます。

アスタリスク( * )の後に続くオプションはすべて複数です。つまり、各オプションに複数の値が関連付けられる可能性があります。DHCP/BOOTP パケットでは、これらのデータ項目がすべて同じオプション内に示されます。ただし、拡張インターフェイスでは、インデックスを使用してこれらの複数データ項目にアクセスできます。

表C-3 に名前のないオプションには、option- n としてアクセスできます。 n はオプション番号です。すべてのフィールドが読み取り/書き込み用です。 表C-1 に DHCPv4 オプションのフィールド値を示します。 表C-2 は、DHCPv6 オプションのフィールド値を示しています。

 

表C-1 DHCPv4 フィールドと BOOTP フィールド

名前

chaddr

blob(バイトのシーケンス)

ciaddr

IP アドレス

file

文字列

flags

16 ビット符号なし整数

giaddr

IP アドレス

hlen

8 ビット符号なし整数

hops

8 ビット符号なし整数

htype

8 ビット符号なし整数

op

8 ビット符号なし整数

secs

16 ビット符号なし整数

siaddr

IP アドレス

sname

文字列

xid

32 ビット符号なし整数

yiaddr

IP アドレス

 

表C-2 DHCPv6 フィールドと BOOTP フィールド

名前

hop-count

8 ビット符号なし整数

link-address

IPv6 アドレス

msg-type

8 ビット符号なし整数

peer-address

IPv6 アドレス

xid

32 ビット符号なし整数

表C-3 に、DHCPv4 の DHCP オプションと BOOTP オプションを示します。

 

表C-3 DHCPv4 オプションと BOOTP オプション

名前(*= 複数値)
番号

all-subnets-local

27

バイト値ブール

authentication

90

blob(バイトのシーケンス)、5 つのフィールド

auto-configure

116

8 ビット符号なし整数

arp-cache-timeout

35

符号なし時刻

bcmcs-servers-a*

89

IP アドレス

bcmcs-servers-d*

88

DNS 名

boot-file

67

文字列

boot-size

13

16 ビット符号なし整数

broadcast-address

28

IP アドレス

cablelabs-125
(v-i-vendor-info ID: 4491)

125
サブオプション:

バイナリ

oro

1

オプション要求、8 ビット符号なし整数

tftp-servers

2

TFTP サーバの IP アドレス

erouter-container

3

リレー エージェントの CMTS 機能

packetcable-mib-env

4

MIB 環境

modem-capabilities

5

モデム機能

cablelabs-client-configuration

122
サブオプション:

blob(バイトのシーケンス)

[ccc-]primary-dhcp-server

1

IP アドレス

[ccc-]secondary-dhcp-
server

2

IP アドレス

[ccc-]provisioning-server

3

blob(最初のバイトはタイプを示すバイトである必要があります。RFC 1035 エンコードの場合は 0、IP アドレス エンコードの場合は 1 で、アドレスはネットワーク順である必要があります)。

[ccc-]as-backoff-retry-
blob

4

12 バイトの blob(3 つの符号なし 4 バイト整数。これはネットワーク順である必要があります)。Kerberos AS-REQ/AS-REP のタイムアウト、バックオフ、リトライ メカニズムを設定します。

[ccc-]ap-backoff-retry-
blob

5

12 バイトの blob(3 つの符号なし 4 バイト整数。これはネットワーク順である必要があります)。Kerberos AP-REQ/AP-REP のタイムアウト、バックオフ、リトライ メカニズムを設定します。

[ccc-]kerberos-realm

6

可変長の blob(RFC 1035 スタイル名)。Kerberos 領域名が必要です。

[ccc-]use-tgt

7

1 バイト符号なし整数ブール。アプリケーション サーバのいずれかにサービス チケットを取得する際に Ticket Granting Ticket(TGT)を使用するかどうかを示します。

[ccc-]provisioning-timer

8

1 バイト符号なし整数。プロビジョニング プロセスの完了に使用できる最大時間を定義します。

[ccc-]ticket-control-mask

9

2 バイト符号なし整数。ホスト順。

[ccc-]kdc-addresses-blob

10

可変長(4 の倍数)の IP アドレス。ネットワーク順。

cisco-autoconfigure

251

制限付きバイト

cisco-client-last-transaction-
time

163

符号なしの 32 ビット整数

cisco-client-requested-host-
name

162

文字列

cisco-leased-ip

161

IP アドレス

cisco-vpn-id

221

blob(構造化)

classless-static-route

121

blob(構造化)

client-fqdn

81

blob(バイトのシーケンス)、4 つのフィールド:flags、rcode-1、rcode-2、および domain-name

cookie-servers*

8

IP アドレス

default-ip-ttl

23

8 ビット符号なし整数

default-tcp-ttl

37

8 ビット符号なし整数

dhcp-class-identifier

60

文字列

dhcp-client-identifier

61

blob(バイトのシーケンス)

dhcp-lease-time

51

符号なし時刻

dhcp-max-message-size

57

16 ビット符号なし整数

dhcp-message

56

文字列

dhcp-message-type

53

8 ビット符号なし整数

dhcp-option-overload

52

8 ビット符号なし整数

dhcp-parameter-request-list*

55

8 ビット符号なし整数

dhcp-parameter-request-
list-blob*

55

blob(バイトのシーケンス)

dhcp-rebinding-time

59

符号なし時刻

dhcp-renewal-time

58

符号なし時刻

dhcp-requested-address

50

IP アドレス

dhcp-server-identifier

54

IP アドレス

dhcp-user-class-id

77

カウントした len バイト配列のセット、2 つのフィールド:typcnt-size および user-data

domain-name

15

文字列

domain-name-servers*

6

IP アドレス

domain-search

119

blob(バイトのシーケンス)

extensions-path

18

文字列

finger-servers*

73

IP アドレス

font-servers*

48

IP アドレス

geo-conf

123

blob(バイトのシーケンス)

geoconf-civic

99

blob(バイトのシーケンス)

host-name

12

文字列

ieee802.3-encapsulation

36

バイト値ブール

impress-servers*

10

IP アドレス

initial-url

114

文字列

interface-mtu

26

16 ビット符号なし整数

ip-forwarding

19

バイト値ブール

irc-servers*

74

IP アドレス

iSNS

83

blob(バイトのシーケンス)、7 つのフィールド

ldap-url

95

文字列

log-servers*

7

IP アドレス

lpr-servers*

9

IP アドレス

lq-associated-ip*

92

IP アドレス

lq-client-last-transaction-time

91

符号なし時刻

mask-supplier

30

バイト値ブール

max-dgram-reassembly

22

16 ビット符号なし整数

mcns-security-server

128

IP アドレス

merit-dump

14

文字列

mobile-ip-home-agents*

68

IP アドレス

name-servers*

5

IP アドレス

name-service-search*

117

16 ビット符号なし整数

nds-servers*

85

IP アドレス

nds-tree

86

文字列

nds-context

87

文字列

netbios-dd-servers*

45

IP アドレス

netbios-name-servers*

44

IP アドレス

netbios-node-type

46

8 ビット符号なし整数

netbios-scope

47

文字列

netinfo-parent-server-addr

112

IP アドレス

netinfo-parent-server-tag

113

文字列

netwareip-domain

62

文字列

netwareip-information

63

blob(バイトのシーケンス)

nis+-servers*

65

IP アドレス

nis+domain

64

文字列

nis-domain

40

文字列

nis-servers*

41

IP アドレス

nntp-servers*

71

IP アドレス

non-local-source-routing

20

バイト値ブール

ntp-servers*

42

IP アドレス

path-mtu-aging-timeout

24

符号なし時刻

path-mtu-plateau-tables*

25

16 ビット符号なし整数

perform-mask-discovery

29

バイト値ブール

policy-filters*

21

IP アドレス(2 つのポリシー フィルタを使用し、それぞれに独自の IP アドレスを持たせることができます)

pop3-servers*

70

IP アドレス

pxe-client-arch

93

16 ビット符号なし整数

pxe-client-machine-id

97

blob(バイトのシーケンス)、2 つのフィールド:type-flag および uuid

pxe-client-network-id

94

blob(バイトのシーケンス)、2 つのフィールド:type-flag および version

rapid-commit

80

null-length

relay-agent-info
サブオプション:

82
サブオプション:

blob(バイトのシーケンス)

relay-agent-circuit-id-data

1

blob(バイトのシーケンス)

relay-agent-remote-id-data

2

blob(バイトのシーケンス)

relay-agent-device-
class-data

4

4 バイト符号なし整数

relay-agent-subnet-
selection-data

5

IP アドレス

subscriber-id

6

ネットワーク クライアントまたは加入者を識別する文字列。

radius-attributes

7

サポートされるアトリビュートは、user、class、および framed-pool です。

authentication

8

バイナリ

v-i-vendor-opts

9

ベンダー オプション

cisco-subnet-selection

150

IP アドレス

cisco-vpn-id

151

バイナリ

cisco-server-id-override

152

IP アドレス

relay-agent-vpn-id-data

181

文字列

relay-agent-server-id-
override-data

182

IP アドレス


) サブオプション データの前の 2 バイト(サブオプション コードとデータ長)を返す relay-agent-circuit-id、relay-agent-remote-id、および relay-agent-device-class サブオプションは推奨されなくなりましたが、使用可能です。


resource-location-servers*

11

IP アドレス

root-path

17

文字列

router-discovery

31

バイト値ブール

router-solicitation-address

32

IP アドレス

routers*

3

IP アドレス

sip-servers

120

blob(バイトのシーケンス)、2 つのフィールド:flag および sip-server-list

slp-directory-agent*

78

blob(バイトのシーケンス)、2 つのフィールド:mandatory および agent-ip-list

slp-service-scope*

79

blob(バイトのシーケンス)、2 つのフィールド:mandatory および slp-scope-list

smtp-servers*

69

IP アドレス

static-routes*

33

IP アドレス

streettalk-directory-
assistance-servers*

76

IP アドレス

streettalk-servers*

75

IP アドレス

subnet-alloc

220

blob(バイトのシーケンス)、5 つのフィールド:flags、subnet-request、subnet-info、subnet-name、および subnet-suggested-lease-time

subnet-mask

1

IP アドレス

subnet-selection

118

IP アドレス

swap-server

16

IP アドレス

tcp-keepalive-internal

38

符号なし時刻

tcp-keepalive-garbage

39

バイト値ブール

tftp-server

66

文字列

time-offset

2

符号付き時刻

time-servers*

4

IP アドレス

trailer-encapsulation

34

バイト値ブール

user-auth

98

文字列

vendor-encapsulated-options

43

blob(バイトのシーケンス)

v-i-vendor-class

124

blob(バイトのシーケンス)

v-i-vendor-info

125

blob(バイトのシーケンス)

vpn-id

185

blob(構造化)、2 つのフィールド:flag および vpn-id

www-servers*

72

IP アドレス

x-display-managers*

49

IP アドレス

DHCPv6 のオプションを 表C-4 に示します。


) これらのオプションには、putOptiongetOption、および removeOption メソッドを使用した場合のみアクセスできます。


 

表C-4 DHCPv6 オプション

名前(*= 複数値)
番号

auth

11

バイナリ、5 つのフィールド:protocol、algorithm、replay-detection-method、replay-detection、および auth-info

bcmcs-server-a*

34

IPv6 アドレス

bcms-server-d

33

DNS 名

cablelabs-17
(vendor-opts ID:4491)

17
サブオプション:

vendor-opts、20 のサブオプション

oro

1

16 ビット符号なし整数

device-type

2

文字列

embedded-components-list

3

文字列

device-serial-number

4

文字列

hardware-version-number

5

文字列

software-version-number

6

文字列

boot-rom-version

7

文字列

vendor-oui

8

文字列

model-number

9

文字列

vendor-name

10

文字列

ecm-cfg-encaps

15

文字列

tftp-servers

32

IPv6 アドレス

config-file-name

33

文字列

syslog-servers

34

IPv6 アドレス

modem-capabilities

35

バイナリ

device-id

36

バイナリ

rfc868-servers

37

IPv6 アドレス

time-offset

38

符号なし時刻

cmts-capabilities

1025

バイナリ、1 つのサブオプション:docsis-version

cm-mac-address

1026

バイナリ

erouter-container

1027

バイナリ

cablelabs-client-
configuration

2170

IPv6 アドレス、10 のサブオプション(さまざまなデータ型)

client-fqdn

39

バイナリ、2 つのフィールド:flag および domain-name

client-identifier

1

バイナリ

dns-servers*

23

IPv6 アドレス

domain-list*

24

DNS 名

elapsed-time

8

符号なし 16 ビット

geoconf-civic

36

バイナリ

ia-na

3

バイナリ、3 つのフィールド:iaid、t1、および t2

ia-pd

25

バイナリ、3 つのフィールド:iaid、t1、および t2

ia-prefix

26

バイナリ、4 つのフィールド:preferred-lifetime、valid-lifetime、prefix-length、および prefix

ia-ta

4

バイナリ、1 つのサブオプション:iaid

iaaddr

5

バイナリ、3 つのフィールド:
address、preferred-lifetime、および valid-lifetime

info-refresh-time

32

符号なし時刻

interface-id

18

バイナリ

nis-domain-name*

29

DNS 名

nis-servers*

27

IP アドレス

nisp-domain-name*

30

DNS 名

nisp-servers*

28

IP アドレス

oro*

6

符号なし 16 ビット

preference

7

符号なし 8 ビット

rapid-commit

14

ゼロ サイズ

reconfigure-accept

20

ゼロ サイズ

reconfigure-message

19

符号なし 8 ビット

relay-agent-subscriber-id

38

バイナリ

relay-message

9

バイナリ

remote-id

37

バイナリ、2 つのフィールド:enterprise-id および remote-id

server-identifier

2

バイナリ(AT_BLOB)

server-unicast

12

IPv6 アドレス

sip-servers-address*

22

IPv6 アドレス

sip-servers-name*

21

DNS 名

sntp-servers*

31

IP アドレス

status-code

13

バイナリ、2 つのフィールド:status-code および status-message

user-class*

15

回数タイプ、2 つのフィールド:typecnt-size および user-data

vendor-class

16

vendor-class

vendor-opts

17

vendor-opts(cablelabs-17 も参照)

要求ディクショナリ

表C-5 に、要求ディクショナリでいつでも設定できるデータ項目を示します。DHCP サーバは、さまざまな時点でそれらを読み取ります。特に指定されない限り、操作はすべて読み取り/書き込みです。

 

表C-5 要求ディクショナリ固有のデータ項目

データ項目
値(プロトコル:v4=DHCPv4、v6=DHCPv6)

allow-bootp

整数(v4)

1 に設定されると、この要求のすべてのスコープで BOOTP を使用できます。スコープの選択中およびリース受け入れ可能性の確認時に読み取られます。

allow-dhcp

整数(v4)

1 に設定されると、この要求のすべてのスコープで DHCP を使用できます。スコープの選択中およびリース受け入れ可能性の確認時に読み取られます。

allow-dynamic-bootp

整数(v4)

1 に設定されると、この要求のすべてのスコープでダイナミック BOOTP を使用できます。スコープの選択中およびリース受け入れ可能性の確認時に読み取られます。

bootp-reply-options

blob(v4)

ポリシー内のすべての v4-bootp-reply-options を上書きします。出力パケットのデータの収集時に読み取られます。

client-class-name

文字列(v4、v6)

クライアント情報(ある場合)を完了するために使用されるクライアントクラスの名前。読み取り専用。

client-class policy

文字列(v4、v6)

クライアントクラスに関連付けられたポリシーの名前。これを設定する場合は、サーバ内ですでに設定されていたポリシーの名前も示す必要があります。

client-domain-name

文字列(v4、v6)

クライアントが使用するドメイン名。これは存在しない場合もあります。その場合、DHCP サーバはスコープで指定されたドメイン名を使用します。安定した記憶域の更新の直前に DNS 更新の要求をキューに入れる際に読み取られます。DHCPv6 では、client-fqdn 値を上書きし、DNS アップデートに使用されます。

client-host-name

文字列(v4、v6)

DNS 内のクライアントのホスト名。安定した記憶域の更新の直前に DNS アップデートの要求をキューに入れる際に読み取られます。操作が完了すると、DNS に実際の名前を入れます。DHCPv6 では、client-fqdn 値を上書きし、DNS アップデートに使用されます。

client-id

blob(v4、v6)

サーバがクライアントをトラッキングする際に使用するクライアント識別。要求とともに送信されたか、または MAC アドレスから内部で生成された client-id が使用される場合もあります。 client-id-created-from-mac-address を参照してください。

client-id-created-from-mac-address

整数(v4)

1 に設定されると、 client-id はクライアントが提供した MAC アドレスから内部用に生成される必要があり、レポートでは使用されません。

client-ipaddress

IP アドレス(v4)

クライアントによるパケットの送信元の IP アドレス。クライアントにまだ IP アドレスがない場合は、ゼロになる場合もあります。

client-limitation-id

blob(v4、v6)

クライアントの制限 ID。

client-lookup-id

blob(v4、v6)

クライアントクラスの client-lookup-id 式によって計算されたクライアント ルックアップ ID。

client-mac-address

blob(v4)

要求ディクショナリに関連付けられたクライアント オブジェクトに保存された MAC アドレス。 mac-address と同じ形式を持ちます(また、そこから作成されます)。

client-os-type

整数(v4)

pre-client-lookup または post-client-lookup 拡張ポイントでこれを設定することによって、要求パケットのクライアント エントリを変更します。 check-lease-acceptable から読み取られる場合もありますが、ここで設定することはできません。値を設定するには、まず post-packet-decode 要求ディクショナリで os-type を設定する必要があります。

client-packet

blob(v4、v6、読み取り専用)

getBytes だけで有効。パケットのクライアント部分のアドレスと長さを返します。DHCPv4 では、パケット全体です。DHCPv6 では、クライアント メッセージです。

client-policy

文字列(v4、v6)

クライアント エントリに関連付けられたポリシーの名前。設定する場合は、DHCP サーバ内の事前設定ポリシーの名前である必要があります。

client-port

整数(v4、v6)

クライアントによる要求の送信元のポート。

client-requested-host-name

文字列(v4)

DNS アップデートに使用するようクライアントが要求したホスト名。DHCP サーバは、変更が検出されるよう、この情報を保存します。

client-unicast

ブール(v6、読み取り専用)

パケットがクライアント ユニキャスト パケットである場合は true。

client-wants-nulls-in-strings

整数(v4)

DHCP サーバがクライアントにヌルで終了する文字列を返すかどうかを決定します。1 に設定されると、サーバは文字列をヌルで終了します。0 に設定すると、サーバは文字列をヌルで終了しません。 post-packet-decode の前に設定され、 pre-packet-encode の後で応答パケットのエンコード時に読み取られます。

derived-vpn-id

整数(v4、v6、読み取り専用)

VPN 識別子。詳細については、 vpn-name を参照してください。

destination-address

IP アドレス(v6、読み取り専用)

パケットの宛先 IPv6 アドレス。

dhcp-reply-options

blob(v4、v6)

ポリシーで指定された dhcp-reply-options を上書きします。出力パケットのデータの収集時に読み取られます。

dump-packet

整数(v4、v6、書き込み専用)

1 に設定されると、Network Registrar は現在デコードされている DHCP/BOOTP パケットをログ ファイルにダンプします。拡張機能は、実行の複数のポイントで、このデータ項目に値 1 を置くことができます。これは、拡張機能をデバッグする際に役立ちます。

import-packet

整数(v4)

サーバがパケットをインポート クライアントから送信されたかのように処理するかどうかを決定します。1 に設定されると、サーバはクライアントをインポート クライアントとして処理し、ACK を送信する前に DNS 操作をすべて実行します。サーバ インポート モードの確認時( post-packet-decode の直後)、DNS 処理の準備時、応答アドレスの設定時に読み取られます。

limitation-count

整数(v4)

同じ limitation-id で割り当てられる同時ユーザの数。

limitation-id

blob(v4)

この要求があるクライアントクラスの limitation-id 式(ある場合)によって計算されます。

limitation-id-null

整数(v4)

limitation-id がヌルの場合は 1(true)に設定され、別の値の場合は 0(false)に設定されます。

log-client-criteria-processing

整数(v4、v6)

1 に設定されると、この要求のためクライアントを処理する基準が記録されます。リースのないクライアント用に新規リースを取得しようとする際、およびリース受け入れ可能性の確認時に読み取られます。

log-client-detail

整数(v4、v6)

1 に設定されると、この要求のクライアントクラス処理が記録されます。 post-client-lookup の後、クライアントクラス処理の終わりに読み取られます。

log-dns-update-detail

整数(v4、v6)

1 に設定されると、この要求の DNS 更新の詳細が記録されます。

log-dropped-bootp-packets

整数(v4)

1 に設定されると、この要求のドロップされた BOOTP パケットが記録されます。

log-dropped-dhcp-packets

整数(v4、v6)

1 に設定されると、この要求のドロップされた DHCP パケットが記録されます。

log-dropped-waiting-packets

整数(v4、v6)

1 に設定されると、この要求のドロップされた待機パケットが記録されます。

log-failover-detail

整数(v4)

1 に設定されると、すべてのフェールオーバー状態の変更など、より詳細なフェールオーバー アクティビティが記録されます。

log-incoming-packet-detail

整数(v4、v6)

1 に設定されると、この要求で詳細な着信パケット トレースが行われたかどうかが確認されるので、個別のトレースを置く必要がなくなります。パケットのデコードと最初の拡張ポイントの前に読み取られます。

log-incoming-packets

整数(v4、v6)

1 に設定されると、この要求の着信パケットが記録されます。 post-decode-packet の後に読み取られます。

log-ldap-create-detail

整数(v4)

1 に設定されると、DHCP サーバが、LDAP サーバに対してリース状態エントリの作成を開始し、応答を受け取り、結果またはエラー メッセージを取得するたびにメッセージを記録します。

log-ldap-query-detail

整数(v4、v6)

1 に設定されると、DHCP サーバが、LDAP サーバに対してクエリーを開始し、応答を受け取り、クエリー結果またはエラー メッセージを取得するたびにメッセージを記録します。

log-ldap-update-detail

整数(v4)

1 に設定されると、DHCP サーバが、LDAP サーバに対してアップデート リース状態を開始し、応答を受け取り、結果またはエラー メッセージを取得するたびにメッセージを記録します。

log-leasequery

整数(v4、v6)

1 に設定されると、内部エラーなしで leasequery パケットが処理され、その結果 ACK または NAK が生成されるときにメッセージが記録されます。

log-missing-options

整数(v4、v6)

1 に設定されると、欠落しているオプション(クライアントが要求したが DHCP サーバ が返すことができないオプション)が記録されます。応答のためデータを収集しているときに読み取られます。

log-outgoing-packet-detail

整数(v4、v6)

1 に設定されると、この要求の発信パケットの詳細なダンプが記録されます。 pre-packet-encode の後、DHCP クライアントへのパケット送信の直前に読み取られます。

log-success-messages

整数(v4、v6)

1 に設定されると、成功メッセージが記録されます。

log-unknown-criteria

整数(v4、v6)

1 に設定されると、この要求について、クライアントの包含基準または除外基準で指定された不明な基準がすべて記録されます。新規クライアント リースの取得時または既存のクライアントのリース受け入れ可能性の確認時に読み取られます。

log-v6-lease-detail

整数(v6)

1 に設定されると、DHCPv6 リース アクティビティに関する個々のメッセージが記録されます。

mac-address

blob(v4)

クライアント パケットで送信された MAC アドレス。最初のバイトはハードウェア タイプ、2 番目のバイトはハードウェアの長さ、残りのバイト(最大 16)は post-packet-decode 直後に読み取られる chaddr 情報です。これは、DHCP パケットの htype フィールド、 hlen フィールド、 chaddr フィールドを集約した便利なフィールドです。これは、読み取られる際にこれらのフィールドから作成され、書き込まれる際にこれらのフィールドに入力されます。

max-client-lookups

整数(v4、v6)

許可されるクライアント データベース ルックアップの最大数。通常は、2 などの小さい整数にします。プリセット値は 1 です。

override-client-id

blob(v4、v6)

現在の client-id 値で使用する blob。着信パケットからの client-id を置換します(ただし、どちらの値もリース状態データベース内に保管されます)。

packet

文字列(v4、v6)

getBytes および putBytes だけで有効。getBytes では、パケット全体のアドレスと長さを返します。putBytes では、既存のパケットを(サーバがデコードする)新しいパケットに置き換えます。DHCPv4 では、 client-packet と同じです。DHCPv6 では、リレーされる場合はフル パケットとなり、リレーされない場合は client-packet と同じです。

ping-clients

整数(v4)

1 に設定されると、この要求のリースを提供する前に PING が実行されます。クライアントでリースの受け入れが可能かどうかを判別する直前に読み取られます。

relay-agent-circuit-id

blob(v4、v6)

オプション 82 の circuit-id サブオプションの内容。

relay-agent-circuit-id-data

blob(v4、v6)

オプション 82 の circuit-id サブオプションのデータ部分だけの内容。

relay-agent-device-class-data

blob(v4、v6)

オプション 82 の device-class サブオプションの内容。

relay-agent-radius-attributes

blob(v4)

オプション 82 の radius サブオプションの内容。

relay-agent-radius-class

文字列(v4)

オプション 82 の radius サブオプションのカプセル化された class アトリビュート。

relay-agent-radius-pool-name

文字列(v4)

オプション 82 の radius サブオプションのカプセル化された framed-pool アトリビュート。

relay-agent-radius-user

文字列(v4)

オプション 82 の radius サブオプションのカプセル化された user アトリビュート。

relay-agent-remote-id

blob(v4、v6)

オプション 82 の remote-id サブオプションの内容。

relay-agent-remote-id

blob(v4、v6)

オプション 82 の remote-id サブオプションのデータ部分だけの内容。

relay-agent-server-id-override-data

IPv6 アドレス(v4、v6)

オプション 82 の server-id サブオプションの内容。IANA サブオプション 182 がパケット内にある場合はその値が表示され、パケット内にない場合は、Cisco サブオプション 152 の値が表示されます。

relay-agent-subscriber-id

文字列(v4)

オプション 82 の subscriber-id サブオプションの内容。

relay-count

整数(v6、読み取り専用)

DHCPv6 リレー ホップの数。

reply-options

blob

ポリシーで指定された DHCPv4 応答オプションを上書きします。出力パケットのデータの収集時に読み取られます。

reply-to-client-address

整数(v4、v6)

v4 では、1 に設定されると、サーバは RFC で指定されたアルゴリズムを使用する代わりに、 client-ipaddress client-port へ応答パケットを送信します。v6 では、1 に設定されると、サーバは送信者(クライアントまたはリレー エージェント)のアドレスとポートにパケットを返信します。

selection-criteria

文字列(v4、v6)

スコープの選択基準を含む、カンマ区切りの文字列。

selection-criteria-excluded

文字列(v4、v6)

スコープの除外基準を含む、カンマ区切りの文字列。

send-ack-first

整数(v4、v6)

1 に設定されると、ACK for DHCP 要求の後に DNS を更新します。DNS 操作の開始直前に読み取られます。

source-ipaddress

IPv6 アドレス(v6、読み取り専用)

パケットの IPv6 送信元アドレス。

trace-id

文字列(v4、v6、読み取り専用)

パケットをトレースするためにシステムで使用される ID。

transaction-time

整数(v4、v6)

入力パケットがデコードされた時間(1970 年以降は秒単位)。

update-dns

文字列(v4、v6)

要求パケットごとに、部分、全体、または非ダイナミックの各 DNS アップデートを要求します。入力値と出力値は、1=update-all、2=update-fwd-only、3=update-rev-only、および 0=update-none です。

update-dns-for-bootp

整数(v4)

1 に設定されると、この要求の BOOTP 要求のために DNS を更新します。BOOTP 用の DNS 操作の初期化直前に読み取られます。

verbose-logging

整数(v4、v6)

1 に設定されると、この要求の冗長メッセージが記録されます。処理中のさまざまな時点で読み取られます。

vpn-description

文字列(v4、v6、読み取り専用)

VPN の説明。詳細については、 vpn-name を参照してください。

vpn-name

文字列(v4、v6、読み取り専用)

VPN の名前。要求ディクショナリでは、 post-packet-decode にはこれらの項目の有効な値はありませんが、VPN はまだ決まっていないので、他のすべての拡張ポイントには有効な値があります。これは、スクリプトが post-packet-decode derived-vpn-id オプションまたはサブオプションを変更することができ、それがリースに使用される VPN に影響するためです。

vpn-vpn-id

blob、通常は 7 バイト(v4、v6、読み取り専用)

バーチャル プライベート ネットワーク識別子。詳細については、 vpn-name を参照してください。

vpn-vrf-name

文字列(v4、v6、読み取り専用)

VPN の仮想ルーティング/転送テーブルの識別子。詳細については、 vpn-name を参照してください。

応答ディクショナリ

表C-6 に、応答ディクショナリでいつでも設定できるデータ項目を示します。DHCP サーバは、さまざまな時点でそれらを読み取ります。特に指定されない限り、操作は読み取り/書き込みです。

 

表C-6 応答ディクショナリ固有のデータ項目

データ項目
値(プロトコル:v4=DHCPv4、v6=DHCPv6)

client-active-lease-count

整数(v6、読み取り専用)

DHCPv6 クライアントのアクティブなリースの数。

client-creation-time

整数(v6、読み取り専用)

IPv6 クライアントの作成時刻。

client-domain-name

文字列(v4、読み取り専用)

リース内のクライアント情報から、クライアントが使用するドメイン名。これは存在しない場合もあります。その場合、DHCP サーバはスコープで指定されたドメイン名を使用します。安定した記憶域の更新の直前に DNS 更新の要求をキューに入れる際に読み取られます。

client-expiration-time

整数(v4、読み取り専用)

クライアントに最後に与えられたリース期限の絶対時間値。

client-host-name

文字列(v4、読み取り専用)

リース内のクライアント情報から、DHCP サーバが DNS に入れるホスト名。安定した記憶域の更新の直前に DNS 更新の要求をキューに入れる際に読み取られます。

client-id

blob(v4、v6、読み取り専用)

リース内のクライアント情報から、クライアントの記録をとるためにサーバが使用するクライアント識別。要求とともに送信された client-id 、または MAC アドレスから内部で生成された client-id が使用される場合もあります。

client-id-created-from-mac-address

整数(v4、読み取り専用)

リース内のクライアント情報から。1 に設定された場合、 client-id は MAC アドレスから生成される必要があり、レポートでは使用されません。

client-last-transaction-time

整数(v4、v6、読み取り専用)

DHCP サーバが最後にこのクライアントから受信した時間(1970 年以降は秒単位)。

client-limitation-id

blob(v4、読み取り専用)

現在のリースに関連するクライアントの制限識別子。

client-mac-address

blob(v4、読み取り専用)

リース内のクライアント情報から、要求ディクショナリに関連するクライアント オブジェクトに保存された MAC アドレス。 mac-address と同じ形式を持ちます(また、そこから作成されます)。

client-os-type

整数(v4)

pre-client-lookup または post-client-lookup 拡張ポイントでこれを設定することによって、要求パケットのクライアント エントリを変更します。 check-lease-acceptable から読み取られる場合もありますが、ここで設定することはできません。値を設定するには、まず post-packet-decode 要求ディクショナリで os-type を設定する必要があります。

client-override-client-id

blob(v4、v6、読み取り専用)

現在の client-id 値で使用する blob。着信パケットからの client-id を置換します(ただし、どちらの値もリース状態データベース内に保管されます)。

client-packet

blob(v4、v6、読み取り専用)

getBytes だけで有効。パケットのクライアント部分のアドレスと長さを返します。DHCPv4 では、パケット全体です。DHCPv6 では、クライアント メッセージです。

client-reconfigure-key

文字列(v6)

DHCPv6 リースの client-reconfigure-key アトリビュート値を返します。

client-reconfigure-key-
generation-time

文字列(v6)

DHCPv6 リースの client-reconfigure-key-generation-time アトリビュート値を返します。

client-relay-address

IPv6 アドレス(v6、読み取り専用)

(最後の)リレーの送信元 IPv6 アドレス。

client-relay-message

文字列(v6、読み取り専用)

クライアント メッセージを除く、最後にリレーされた DHCPv6 メッセージ。

client-requested-host-name

文字列(v4)

リース内のクライアント情報から、DNS アップデート用にクライアントが要求するホスト名。

client-user-defined-data

文字列(v4、v6)

以前または現在、クライアントへ関連付けられている値を返します。 check-lease-acceptable 拡張ポイントまたは lease-state-change 拡張ポイントで要求された場合は、以前に関連付けられていた値を返します。 pre-packet-encode 拡張ポイントまたは post-send-packet 拡張ポイントで要求された場合は、現在の値を返します。

client-vendor-class

文字列(v4、v6)

DHCPv4 リースまたは DHCPv6 リースの client-vendor-class アトリビュート値を返します。

client-vendor-info

文字列(v4、v6)

DHCPv4 リースまたは DHCPv6 リースの client-vendor-info アトリビュート値を返します。

client-write-sequence

整数(v6、読み取り専用)

クライアント IPv6 要求の書き込みシーケンス。

client-write-time

整数(v6、読み取り専用)

クライアント IPv6 書き込み要求の時刻。

derived-vpn-id

整数(v4、v6、読み取り専用)

VPN 識別子。

domain-name-changed

整数(v4)

1 に設定された場合、現在のパケット内のドメイン名は、DNS 更新で使用されるドメイン名とは異なります。 check-lease-acceptable の後、 pre-packet-encode の前に読み取られます。

dump-packet

整数(v4、v6、書き込み専用)

1 に設定された場合、Network Registrar は現在デコードされている DHCP/BOOTP パケットをログ ファイルにダンプします。拡張機能は、実行の複数のポイントで、このデータ項目に値 1 を置くことができます。これは、拡張機能をデバッグする際に役立ちます。

host-name-changed

整数(v4)

1 に設定された場合、現在のパケット内のホスト名は、DNS アップデートで使用されるホスト名とは異なります。 check-lease-acceptable の後、 pre-packet-encode の前に読み取られます。

host-name-in-dns

整数(v4、v6)

1 に設定された場合、ホスト名は DNS 内にあります。 check-lease-acceptable の後、 pre-packet-encode の前に読み取られます。ホスト名が DNS に送信された後に書き込まれます。

lease-binding-iaid

整数(v6、読み取り専用)

IPv6 リース バインドの IAID。

lease-binding-rebinding-time

整数(v6、読み取り専用)

IPv6 リース バインドの再バインド時刻。

lease-binding-renewal-time

整数(v6、読み取り専用)

IPv6 リース バインドの更新時刻。

lease-binding-type

文字列(v6、読み取り専用)

IPv6 リース バインド タイプ:「IA_NA」、「IA_TA」、または「IA_PD」。

lease-creation-time

文字列(v6、読み取り専用)

IPv6 リースの作成時刻。

lease-deactivated

整数(v4、v6、読み取り専用)

1 に設定されると、リースが非アクティブであることがレポートされます。

lease-giaddr

IP アドレス(v4、読み取り専用)

リース giaddr

lease-ipaddress

IPv4 または IPv6 アドレス(v4、v6、読み取り専用)。

DHCP サーバが処理中に使用するリースのアドレス。

lease-preferred-lifetime

整数(v6、読み取り専用)

IPv6 リースの推奨期間。

lease-prefix-name

文字列(v6、読み取り専用)

IPv6 リースのプレフィックス名。

lease-relay-agent-info

blob(v4、v6)

オプション 82 の全内容。

lease-relay-agent-circuit-id

blob(v4)

応答のリースで保存された relay agent circuit ID にアクセスし、それを操作します。最初のバイトでサブオプション番号 1 を示す必要があります。これは推奨されません。代わりに lease-relay-agent-circuit-id-data 項目を使用してください。

lease-relay-agent-circuit-id-data

blob(v4、推奨されない lease-relay-agent-circuit-id の代わりに使用されます)

応答のリースで保存された relay-agent-circuit-id-data にアクセスし、それを操作します。 save-relay-agent-data DHCP サーバ アトリビュートがイネーブルである場合にだけ適しています。

lease-relay-agent-device-class-data

blob(v4、v6)

オプション 82 の device-class サブオプションの内容。

lease-relay-agent-radius-attributes

blob(v4)

オプション 82 の radius サブオプションの内容。

lease-relay-agent-radius-class

文字列(v4)

オプション 82 の radius サブオプションのカプセル化された class アトリビュート。

lease-relay-agent-radius-pool-name

文字列(v4)

オプション 82 の radius サブオプションのカプセル化された framed-pool アトリビュート。

lease-relay-agent-radius-user

文字列(v4)

オプション 82 の radius サブオプションのカプセル化された user アトリビュート。

lease-relay-agent-remote-id

blob(v4)

応答のリースで保存された relay-agent-remote-id データにアクセスし、それを操作します。最初のバイトでサブオプション番号 2 を示す必要があります。これは推奨されません。代わりに lease-relay-agent-remote-id-data 項目を使用してください。

lease-relay-agent-remote-id-data

blob(v4、 lease-relay-agent-remote-id 項目の代わりに使用されます)

応答のリースで保存された relay-agent-remote-id-data にアクセスし、それを操作します。 save-relay-agent-data DHCP サーバ アトリビュートがイネーブルである場合にだけ適しています。

lease-relay-agent-server-id-
override-data

IP アドレス(v4)

応答のリースで保存された relay-agent-server-id-override-data にアクセスし、それを操作します。 save-relay-agent-data DHCP サーバ アトリビュートがイネーブルである場合にだけ適しています。

lease-relay-agent-subnet-
selection-data

IP アドレス(v4)

応答のリースで保存された relay-agent-subnet-selection-data にアクセスし、それを操作します。 save-relay-agent-data DHCP サーバ アトリビュートがイネーブルである場合にだけ適しています。

lease-relay-agent-subscriber-id

文字列(v4)

オプション 82 の subscriber-id サブオプションの内容。

lease-relay-agent-vpn-id-data

blob(v4)

応答のリースで保存された relay-agent-vpn-id データにアクセスし、それを操作します。 save-relay-agent-data DHCP サーバ アトリビュートがイネーブルである場合にだけ適しています。

lease-reserved

整数(v4、v6、読み取り専用)

1 に設定されると、リースが予約されているかどうかがレポートされます。

lease-start-time-of-state

整数(v4、v6、読み取り専用)

このリースが初めて現在の状態に置かれた時間(1970 年以降は秒単位)。

lease-state

文字列(v4、v6、読み取り専用)

リースの状態。これは、 available offered expired leased 、または unavailable のいずれかです。

lease-state-expiration-time

整数(v6、読み取り専用)

IPv6 リース状態の有効期限。

lease-status

文字列(v4、v6、読み取り専用)

「nonexistent」、「owned-by-client」、または「exists」を返します。リースが存在するかどうか、および現在のクライアントがリースを所有しているかどうかを調べるために使用します。「exists」が返された場合は、リースが存在しますが、現在の所有者はそのリースを所有していません(リースに関して入手できる情報が限られます)。

lease-valid-lifetime

整数(v6、読み取り専用)

IPv6 リースの有効期間。

lease-vpn-description

文字列(v4、v6、読み取り専用)

応答のリースで保存された VPN の説明。

lease-vpn-id

整数(v4、v6、読み取り専用)

応答のリースで保存された VPN の識別子。

lease-vpn-name

文字列(v4、v6、読み取り専用)

応答のリースで保存された VPN の名前。

lease-vpn-vpn-id

blob、通常は 7 バイト(v4、v6、読み取り専用)

応答のリースで保存されたバーチャル プライベート ネットワーク(VPN)識別子。

lease-vpn-vrf-name

文字列(v4、v6、読み取り専用)

応答のリースで保存された VPN の仮想ルーティング/転送テーブルの識別子。

mac-address

blob(v4)

クライアント パケットで送信された MAC アドレス。最初のバイトはハードウェア タイプ、2 番目のバイトはハードウェアの長さ、残りのバイト(最大 16)は post-packet-decode 直後に読み取られる chaddr 情報です。これは、DHCP パケットの htype フィールド、 hlen フィールド、 chaddr フィールドを集約した便利なフィールドです。これは、読み取られる際にこれらのフィールドから作成され、書き込まれる際にこれらのフィールドに入力されます。

packet

文字列(v4、v6、 post-packet-encode を除き読み取り専用)

getBytes および putBytes だけで有効。getBytes では、パケット全体のアドレスと長さを返します。putBytes では、既存のパケットを、(サーバがデコードする)新しいパケットに置き換えます。DHCPv4 では、 client-packet と同じです。DHCPv6 では、リレーされる場合はフル パケットとなり、リレーされない場合は client-packet と同じです。

ping-clients

整数(v4)

1 に設定されると、この要求のリースを提供する前に PING が実行されます。クライアントのリース受け入れ可能性を判別する直前に読み取られます。

prefix-allocate-via-best-fit

整数(v6、読み取り専用)

最適化によって割り振られたプレフィックス。

prefix-allocate-via-client-request

整数(v6、読み取り専用)

クライアント要求によって割り振られたプレフィックス。

prefix-allocate-via-extension

整数(v6、読み取り専用)

拡張機能によって割り振られたプレフィックス。

prefix-allocate-via-reservation

整数(v6、読み取り専用)

予約によって割り振られたプレフィックス。

prefix-allocate-via-interface-
identifier

整数(v6、読み取り専用)

インターフェイス識別子によって割り振られたプレフィックス。

prefix-allocate-random

整数(v6、読み取り専用)

ランダムに割り振られたプレフィックス。

prefix-address

IPv6 アドレス(v6、読み取り専用)

プレフィックス アドレス(17 バイト)。

prefix-deactivated

整数(v6、読み取り専用)

プレフィックスが非アクティブになっているかどうかを示します。

prefix-dhcp-type

文字列(v6、読み取り専用)

プレフィックス DHCP タイプ。

prefix-expiration-time

文字列(v6、読み取り専用)

プレフィックスの有効期限。

prefix-link-name

文字列(v6、読み取り専用)

プレフィックスのリンク。

prefix-name

文字列(v6、読み取り専用)

プレフィックスの名前。

prefix-range

IPv6 アドレス(v6、読み取り専用)

プレフィックスの IPv6 アドレス範囲。

prefix-selection-tags

文字列(v6、読み取り専用)

プレフィックスの選択タグ。

relay-count

整数(v6、読み取り専用)

DHCPv6 リレー ホップの数。

reply-ipaddress

IPv4 または IPv6 アドレス(v4、v6)

DHCP クライアントに応答する際に使用する IP アドレス。 pre-packet-encode の直後に読み取られます。 pre-packet-encode でその値を変更する場合、そこに入力する IP アドレスは、ARP クエリーに応答できるシステム用の IP アドレスである必要があります(ブロードキャスト アドレスの場合は別です)。ユニキャストがイネーブルで、ブロードキャスト フラグが DHCP 要求で設定されていなくても、ローカル ARP キャッシュは pre-packet-encode 内の新規 reply-ipaddress から DHCP 要求の MAC アドレスへのマッピングで設定されません。

reply-port

整数(v4、v6)

DHCP クライアントに応答する際に使用するポート。 pre-packet encode の直後に読み取られます。

response-source

文字列(v4、v6、読み取り専用)

応答が有効な場合に、拡張機能によって使用されるリース状態変更の原因。出力値:unknown、client、failover、timeout、operator、および one-lease-per-client(表29-12を参照)。

reverse-name-in-dns

整数(v4、v6)

1 に設定された場合、逆引きネームは DNS 内にあります。DNS 操作の初期化前に読み取られます。

scope-allow-bootp

整数(v4、読み取り専用)

1 に設定された場合、スコープは BOOTP を許可します。DNS 操作の完了後に書き込まれます。

scope-allow-dhcp

整数(v4、読み取り専用)

1 に設定された場合、スコープは DHCP を許可します。

scope-allow-dynamic-bootp

整数(v4、読み取り専用)

1 に設定された場合、スコープはダイナミック BOOTP を許可します。

scope-available-leases

整数(v4、読み取り専用)

現在のスコープで使用可能なリースの数。

scope-deactivated

整数(v4、読み取り専用)

1 に設定された場合、スコープは非アクティブになります。

scope-dns-forward-server-address

IP アドレス(v4、読み取り専用)

DNS 順アドレスに使用する DNS サーバ。

scope-dns-forward-zone-name

文字列(v4、v6、読み取り専用)

スコープで設定された順ゾーン名。

scope-dns-number-of-host-bytes

整数(v4、読み取り専用)

DNS 更新を処理する DHCP サーバ コードによって使用されるホスト バイトの数。

scope-dns-reverse-server-address

IP アドレス(v4、読み取り専用)

DNS 逆アドレスに使用する DNS サーバ。

scope-dns-reverse-zone-name

文字列(v4、読み取り専用)

スコープで設定された逆ゾーン名。

scope-network-number

IP アドレス(v4、読み取り専用)

DHCP サーバが処理しているリースを含むスコープのネットワーク番号。

scope-ping-clients

整数(v4、読み取り専用)

1 に設定された場合は、現在のリースに関連付けられたスコープが、リースの提供前に PING 操作をサポートするよう設定されていたことを示します。

scope-primary-network-number

IP アドレス(v4、読み取り専用)

このプライマリ スコープのネットワーク番号。

scope-primary-subnet-mask

IP アドレス(v4、読み取り専用)

このプライマリ スコープのサブネット マスク。

scope-renew-only

整数(v4、読み取り専用)

1 に設定された場合、スコープは更新のみになります。

scope-renew-only-expire-time

整数(v4、読み取り専用)

更新のみのスコープが更新のみでなくなる絶対時間(1970 年 1 月 1 日以降は秒単位)。

scope-selection-tags

文字列(v4、読み取り専用)

スコープの選択基準を含む、カンマ区切りの文字列。このデータ項目は、スコープに基づいた決定に使用します。

scope-send-ack-first

整数(v4、読み取り専用)

1 に設定されると、スコープは残りの処理を実行する前に ACK を送信します。

scope-subnet-mask

IP アドレス(v4、読み取り専用)

DHCP サーバが処理しているリースを含むスコープのサブネット マスク。

scope-update-dns

文字列(v4、読み取り専用)

順ゾーンまたは逆ゾーンの DNS アップデート。出力値は、1=update-all、2=update-fwd-only、3=update-rev-only、および 0=update-none です。Network Registrar 6.1.1 で導入されました。

scope-update-dns-enabled

ブール(v4、読み取り専用)

1 に設定された場合、スコープで順ゾーンおよび逆ゾーン用にアップデート DNS がイネーブルになっています。推奨されません。代わりに scope-update-dns を使用してください。

scope-update-dns-for-bootp

整数(v4、読み取り専用)

1 に設定された場合は、スコープで BOOTP 用にアップデート DNS がイネーブルになっています。

trace-id

文字列(v4、v6、読み取り専用)

パケットをトレースするためにシステムで使用される ID。

transaction-time

整数(v4、v6、読み取り専用)

要求がデコードされた時間(1970 年以降は秒単位)。

vpn-description

文字列(v4、v6、読み取り専用)

VPN の説明。

vpn-name

文字列(v4、v6、読み取り専用)

VPN の名前。

vpn-vpn-id

blob、通常は 7 バイト(v4、v6、読み取り専用)

バーチャル プライベート ネットワーク(VPN)識別子。

vpn-vrf-name

文字列(v4、v6、読み取り専用)

VPN の仮想ルーティング/転送テーブル(VRF)の識別子。

拡張ディクショナリの API

この項では、TCL 拡張機能および共有ライブラリからディクショナリにアクセスする際に使用するディクショナリ方式の呼び出しについて説明します。

TCL 属性ディクショナリの API

属性ディクショナリでは、Network Registrar DHCP サーバ設定で定義されているように、キーがアトリビュートの名前に制限されます。値は、特定のアトリビュートの正当な値を文字列で表したものです。たとえば、IP アドレスはアドレスをドット付き 10 進文字列で表したものであり、列挙される値は列挙法の名前で指定されます。したがって、数字は数字の文字列表記で指定されます。

属性ディクショナリは、1 つのキーについて複数のインスタンスを組み込める点が他のディクショナリと異なっています。これらのインスタンスには順序が付けられ、最初のインスタンスのインデックスは 0 になります。属性ディクショナリ方式の中には、参照されるインスタンス リスト内の特定のインスタンスや位置をインデックスで指定できるものもあります。

TCL 要求ディクショナリ方式と応答ディクショナリ方式

属性ディクショナリではコマンドを使用して、ディクショナリ内の値の変更や値へのアクセスを実行できます。 表C-7 に、要求ディクショナリと応答ディクショナリで使用するコマンドを示します。この場合、 dict 変数を request または response として定義できます。

例は、 install-path /examples/dhcp/tcl/tclextension.tcl ファイルを参照してください。

 

表C-7 TCL 要求ディクショナリ方式と応答ディクショナリ方式

方式
シンタックス

get

$ dict get attribute [ index [ bMore ]]

ディクショナリから、文字列として表されたアトリビュートの値を返します。ディクショナリにアトリビュートが含まれていない場合は、代わりに空の文字列が返されます。インデックス値を組み込むと、アトリビュートの index 番目のインスタンスが返されます。要求パケットまたは応答パケットで複数回現れるアトリビュートもあります。インデックスによって、返されるインスタンスが選択されます。

bMore を組み込むと、 bMore get メソッドによって、アトリビュートが 1 つ返された後にまだアトリビュートがある場合は TRUE に設定され、ない場合は FALSE に設定されます。これを使用して、 get への別の呼び出しでアトリビュートのその他のインスタンスを検出するかどうかを決めることができます。

getOption

$ dict getOption arg-type [ arg-data ]

オプションのデータを文字列として取得します。 arg-type 値については、 表C-8 を参照してください。次の引数が数値の場合は数字であると見なされ、数値でない場合は名前と見なされます。この関数は、常に文字列へのポインタを返し、オプションが存在しないか、長さが 0 の場合は、ゼロ長になることがあります。使い方の例については、「ベンダー クラス オプション データの処理」を参照してください。

isValid
isV4
isV6

$ dict isValid
$
dict isV4
$
dict isV6

isValid メソッドは、要求または応答(どちらであるかは渡されるディクショナリに依存)が存在する場合は true を返します。存在しない場合は、false を返します。 lease-state-change などの拡張機能は、このメソッドを使用して、ディクショナリが利用可能であるかどうかを判断できます。

isV4 メソッドは、この拡張機能が DHCPv4 パケットに対して呼び出されている場合は true を返し、このパケットに対して呼び出されていない場合は false を返します。 init-entry ルーチンからこのメソッドを呼び出すと、false が返されます。

isV6 メソッドは、この拡張機能が DHCPv6 パケットに対して呼び出されている場合は true を返し、このパケットに対して呼び出されていない場合は false を返します。 init-entry ルーチンからこのメソッドを呼び出すと、false が返されます。

log

$ dict log level message ...

DHCP サーバのロギング システムにメッセージを出力します。レベルは、LOG_ERROR、LOG_WARNING、または LOG_INFO である必要があります。残りの引数は連結され、指定されたレベルのロギング システムに送信されます。


) LOG_ERROR レベルおよび LOG_WARNING レベルは多用しないでください。サーバは、これらのレベルで記録されるメッセージをログ ファイルに出力します。頻繁に発生する可能性があるメッセージ(クライアント要求など)に対してこれらのレベルを使用すると、サーバのディスク入出力のパフォーマンスが低下することがあります。


moveToOption

$ dict moveToOption arg-type [ arg-data ] ...

後続の get put 、および remove オプション演算に対してコンテキストを設定します。 arg-type 値については、 表C-8 を参照してください。( removeOption などによって)オプションが削除された場合は、コンテキストが無効になることがあります。

put

$ dict put attribute value [ index ]

ディクショナリ内のアトリビュートに値を関連付けます。インデックスを省略した場合や特殊な値 REPLACE に設定した場合は、アトリビュートの既存のインスタンスがすべて単一の値に置換されます。インデックス値を特殊な値 APPEND として組み込むと、アトリビュートのインスタンスのリストの最後にアトリビュートの新規インスタンスが付加されます。インデックス値を数字として組み込むと、指定された位置にアトリビュートの新規インスタンスが挿入されます。インデックス値を特殊な値 AUGMENT に設定した場合は、アトリビュートがまだない場合だけ、そのアトリビュートが組み込まれます。

putOption

$ dict putOption data arg-type [ arg-data ] ...

オプションとそのデータを追加するか、オプションのデータを変更します。 arg-type 値については、 表C-8 を参照してください。使い方の例については、「ベンダー クラス オプション データの処理」を参照してください。

remove

$ dict remove attribute [ index ]

ディクショナリからアトリビュートを削除します。インデックスを省略した場合や特殊な値 REMOVE_ALL に設定した場合は、アトリビュートの既存のインスタンスがすべて削除されます。インデックスを数字として組み込むと、指定された位置でアトリビュートのインスタンスが削除されます。この方式は、ディクショナリがそのインデックスでそのアトリビュートを含んでいない場合でも、常に 1 を返します。

removeOption

$ dict removeOption arg-type [ arg-data ] ...

オプションを削除します。 arg-type 値については、 表C-8 を参照してください。使い方の例については、「ベンダー クラス オプション データの処理」を参照してください。

setObject

$ dict setObject obj-type [ data ]

(DHCPv6 のみ)。 get put 、および remove メソッドに対してオブジェクトを設定し、新しいオプション メソッドの演算対象になるメッセージを変更します。 obj-type 値については、 表C-8 を参照してください。DHCPv6 拡張機能は、主にクライアントとリンクで利用可能なリースとプレフィックスにアクセスするため、またはリレー パケットからメッセージ ヘッダー フィールドまたはオプションを取得するために、このメソッドを使用します。1 つのリースとスコープが応答に関連付けられている DHCPv4 とは異なり、DHCPv6 応答には複数のリースとプレフィックスが関わることがあります。オブジェクトが存在する場合は true を返し、存在しない場合は false を返します。使い方の例については、「オブジェクト データの処理」を参照してください。


) 現在のクライアントに関連付けられていないリースでは、最小限の情報だけを入手できます。


trace

$ dict trace level message ...

DHCP サーバのパケット トレース システム内のメッセージを返します。レベル 0 では、トレースは実行されません。レベル 1 では、サーバがパケットを受信し応答を送信したことだけをトレースします。レベル 4 では、すべてをトレースします。残りの引数は連結され、指定されたレベルのトレース システムに送信されます。デフォルト トレースは、DHCP サーバの extension-trace-level アトリビュートを使用して設定されます。

 

表C-8 Tcl arg-type および obj-type 値

arg-type または obj-type
説明

enterprise-id number/name

オプションまたはサブオプションのオプション定義セットに対するエンタープライズ ID 番号または名前。

home

現在のクライアントまたはリレー メッセージの「トップ」にコンテキストをリセットすることを要求します。

index number/keyword

演算対象の配列インデックスに対する数値またはキーワード(replace、append、augment、raw、または remove_all)。

index-count

オプション内の配列インデックス エントリの数を返します。

instance number

オプションのインスタンス数(主に DHCPv6 で使用)。

instance-count

オプションが出現する回数を返します(0 の場合、オプションは存在しません)。

more tcl-variable-name

オプション データ内にそれ以上の配列インデックス エントリが存在するかどうかによって true または false に設定される Tcl 変数の名前。

move-to

オプションに対するコンテキストの設定を要求します。

option number/name

演算対象のオプションの番号または名前。

parent

コンテキストを 1 オプション分だけ上に移動することを要求します。

suboption number/name

演算対象のサブオプションの番号または名前。

vendor name

オプションまたはサブオプションのオプション定義セットに対するベンダー名。

lease initial | index | address | prefix

setObject と組み合せて使用し、指定されたリースに対する応答ディクショナリでリース、バインド、およびプレフィックス データ項目のコンテキストを設定します。 initial キーワードは、拡張機能が呼び出されたときの元のコンテキストの復元を要求します。 index は、(0 で始まる)番号付きリースの設定を要求し、クライアントに対するすべてのリースの反復処理に使用できます。 address または prefix は、そのアドレスまたはプレフィックスのリースを設定することを要求します(存在する場合)。

message initial | number

setObject と組み合せて使用し、指定されたメッセージに対する要求または応答ディクショナリでメッセージ データ項目およびオプションのコンテキストを設定します。 initial キーワードは、クライアント メッセージにコンテキストを設定します。 number は、リレー メッセージにコンテキストを設定します。0 はクライアントに最も近いリレーを指定します。

prefix initial | index | address | prefix | name

setObject と組み合せて使用し、指定されたプレフィックスに対する応答ディクショナリでプレフィックス データ項目のコンテキストを設定します。 initial キーワードは、拡張機能が呼び出されたときの元のコンテキストの復元を要求します。 index は、(0 で始まる)番号付きプレフィックスの設定を要求し、リンク上のクライアントに対するすべてのプレフィックスの反復処理に使用できます。 address または prefix は、そのアドレスまたはプレフィックスのプレフィックスを設定することを要求します(検出された場合)。 name は、名前付きプレフィックスの検出を要求します。現在のリンク上のプレフィックスだけを使用できます。

TCL 環境ディクショナリ方式

表C-9 で、この環境ディクショナリで使用するコマンドについて説明します。この場合、次の手順の例のように、 dict 変数を environ として定義できます。

proc tclhelloworld2 { request response environ } {
$environ put trace-level 4
$environ log LOG_INFO "Environment hello world"
}
 

 

表C-9 TCL 環境ディクショナリ方式

方式
シンタックス

clear

$ dict clear

ディクショナリからすべてのエントリを削除します。

containsKey

$ dict containsKey key

ディクショナリにキーが含まれている場合は 1、含まれていない場合は 0 を返します。

firstKey

$ dict firstKey

ディクショナリ内の最初のキーの名前を返します。キーは名前別に分類されて保存されているわけではありません。キーが存在しない場合は、空の文字列が返されます。

get

$ dict get key

ディクショナリからキーの値を返します。キーが存在しない場合は、空の文字列が返されます。

isEmpty

$ dict isEmpty

ディクショナリにエントリがない場合は 1、ある場合は 0 を返します。

log

$ dict log level message ...

DHCP サーバのロギング システム内のメッセージを返します。 level は、LOG_ERROR、LOG_WARNING、または LOG_INFO のいずれかである必要があります。残りの引数は連結され、指定されたレベルのロギング システムに送信されます。


) LOG_ERROR レベルおよび LOG_WARNING レベルは多用しないでください。サーバは、これらのレベルで記録されるメッセージをログ ファイルに出力します。頻繁に発生する可能性があるメッセージ(クライアント要求など)に対してこれらのレベルを使用すると、サーバのディスク入出力のパフォーマンスが低下することがあります。


nextKey

$ dict nextKey

ディクショナリ内の次のキーの名前を返します。これは、 firstKey または nextKey への最後の呼び出しで返されるキーの後に続きます。キーが存在しない場合は、空の文字列が返されます。

put

$ dict put key value

値をキーに関連付け、キーの既存のインスタンスを新規値に置換します。

remove

$ dict remove key

ディクショナリからキーを削除します。ディクショナリにキーが含まれていない場合でも、常に 1 を返します。

size

$ dict size

ディクショナリ内のエントリの数を返します。

trace

$ dict trace level message ...

DHCP サーバのパケット トレース システム内のメッセージを返します。レベル 0 では、トレースは実行されません。レベル 1 では、サーバがパケットを受信し応答を送信したことだけをトレースします。レベル 4 では、すべてをトレースします。残りの引数は連結され、指定されたレベルのトレース システムに送信されます。デフォルト トレースは、DHCP サーバの extension-trace-level アトリビュートを使用して設定されます。

DEX 属性ディクショナリの API

C/C++ 用の DEX 拡張機能を記述する場合は、キーをアトリビュート名の文字列表記またはタイプ(アトリビュートを定義するバイト シーケンス)で指定できます。つまり、これらのアクセス方式には、キーまたは値に文字列またはタイプを使用する 4 つの異なる組み合せがあります。

基本的な DEX 拡張機能の例は次のようになります。

int DEXAPI dexhelloworld( int iExtensionPoint,
dex_AttributeDictionary_t *pRequest,
dex_AttributeDictionary_t *pResponse,
dex_EnvironmentDictionary_t *pEnviron )
{
pEnviron->log( pEnviron, DEX_LOG_INFO, "hello world" );
return DEX_OK;
}
 

例のディレクトリで install-path /examples/dhcp/dex/dexextension.c ファイルまたはその他のファイルを参照してください。

DEX 要求ディクショナリ方式と応答ディクショナリ方式

DEX 属性ディクショナリは、メソッドと呼ばれるアクティブなコマンドを使用します。これを使用すると、値の変更や値へのアクセスができます。 表C-10 に、要求ディクショナリと応答ディクショナリで使用するメソッドを示します。この場合、 pDict 変数を pRequest または pResponse として定義できます。

pRequest->get( pRequest, "host-name", 0, 0 );
 

pszAttribute は、アプリケーションがアクセスを試みるアトリビュート名への const char * ポインタです。 pszValue は、データを表す const char * 文字列へのポインタです( get メソッドで返され、 put メソッドで保存されます)。有効な iObjectType iObjArgType 、および iArgType については、それぞれ 表C-11表C-12、および表C-13を参照してください。


ヒント 「get、put、Option、Bytes、および OptionBytes の各メソッドの違い」および 「get、put、remove、および ByType の各メソッドの違い」も参照してください。


 

表C-10 DEX 要求ディクショナリ方式と応答ディクショナリ方式

方式
シンタックス

allocateMemory

void * pDict ->allocateMemory( dex_AttributeDictionary_t * pDict ,
unsigned int
iSize )

拡張機能で、この要求のライフタイムの間だけ存続するメモリを割り振ります。

get

const char * pDict ->get( dex_AttributeDictionary_t * pDict ,
const char *
pszAttribute , int iIndex , abool_t * pbMore )

ディクショナリから、文字列として表されたアトリビュートの iIndex インスタンス値を返します。ディクショナリにアトリビュートが含まれていない場合(またはアトリビュートのインスタンスが多数含まれている場合)は、代わりに空の文字列が返されます。 pbMore は、ゼロでない場合、 get メソッドによって、アトリビュートのインスタンスが 1 つ返された後にまだインスタンスがあるときは TRUE に設定され、ないときは FALSE に設定されます。これを使用して、 get への別の呼び出しでアトリビュートのその他のインスタンスを検出するかどうかを決めることができます。

getBytes

const abytes_t * pDict ->getBytes( dex_AttributeDictionary_t * pDict ,
const char *
pszAttribute , int iIndex , abool_t * pbMore )

ディクショナリから、バイトのシーケンスとして表されたアトリビュートの iIndex インスタンス値を返します。ディクショナリにアトリビュートが含まれていない場合(またはアトリビュートのインスタンスが多数含まれている場合)は、代わりに 0 が返されます。 pbMore は、ゼロでない場合、 getBytes メソッドによって、アトリビュートのインスタンスが 1 つ返された後にまだインスタンスがあるときは TRUE に設定され、ないときは FALSE に設定されます。これを使用して、 getBytes への別の呼び出しでアトリビュートのその他のインスタンスを検出するかどうかを決めることができます。

getBytesByType

const abytes_t * pDict -> getBytesByType( dex_AttributeDictionary_t * pDict ,
const abytes_t *
pszAttribute , int iIndex , abool_t * pbMore )

ディクショナリから、バイトのシーケンスとして表されたアトリビュートの iIndex インスタンス値を返します。ディクショナリにアトリビュートが含まれていない場合(またはアトリビュートのインスタンスが多数含まれている場合)は、代わりに 0 が返されます。 pbMore がゼロでない場合、アトリビュートのインスタンスが 1 つ返された後にまだインスタンスがあるときは変数が TRUE に設定され、ないときは FALSE に設定されます。これを使用して、 get への別の呼び出しでアトリビュートのその他のインスタンスを検出するかどうかを決めることができます。

getByType

const char * pDict ->getByType( dex_AttributeDictionary_t * pDict ,
const abytes_t *
pszAttribute , int iIndex , abool_t * pbMore )

ディクショナリから、文字列として表されたアトリビュートの iIndex インスタンス値を返します。ディクショナリにアトリビュートが含まれていない場合(またはアトリビュートのインスタンスが多数含まれている場合)は、代わりに空の文字列が返されます。 pbMore は、ゼロでない場合、 getByType メソッドによって、アトリビュートのインスタンスが 1 つ返された後にまだインスタンスがあるときは TRUE に設定され、ないときは FALSE に設定されます。これを使用して、 getByType への別の呼び出しでその他のインスタンスを検出するかどうかを決めることができます。

getOption

const char * getOption( dex_AttributeDictionary_t * pDict , int iArgType , ... )

オプションのデータを文字列として取得します。この関数は、常に文字列へのポインタを返し、オプションが存在しないか、長さが 0 の場合は、ゼロ長になることがあります。ポインタが存在するかどうかを調べるには、 getOptionBytes を使用するか、DEX_INSTANCE_COUNT を指定します。

getOptionBytes

const abytes_t * getOptionBytes( dex_AttributeDictionary_t * pDict ,
int
iArgType , ... )

オプションのデータをバイトのシーケンスとして取得します。この関数は、オプションが存在しない場合にはヌルのポインタを返し、オプションが存在するが 0 バイト長の場合には、 abytes_t と長さ 0 のバッファを返します。

getType

const abytes_t* pDict ->getType( dex_AttributeDictionary_t* pDict , const char* pszAttribute )

設定されたアトリビュートとアトリビュート名が一致する場合はアトリビュートを定義するバイト シーケンスへのポインタを返し、一致しない場合は 0 を返します。

isValid
isV4
isV6

abool_t isValid( dex_AttributeDictionary_t * pDict )
abool_t isV4( dex_AttributeDictionary_t *
pDict )
abool_t isV6( dex_AttributeDictionary_t *
pDict )

isValid メソッドは、要求または応答(どちらであるかは渡されるディクショナリに依存)が存在する場合は true を返します。存在しない場合は、false を返します。 lease-state-change などの拡張機能は、このメソッドを使用して、ディクショナリが利用可能であるかどうかを判断できます。

isV4 メソッドは、この拡張機能が DHCPv4 パケットに対して呼び出されている場合は true を返し、このパケットに対して呼び出されていない場合は false を返します。 init-entry ルーチンからこのメソッドを呼び出すと、false が返されます。

isV6 メソッドは、この拡張機能が DHCPv6 パケットに対して呼び出されている場合は true を返し、このパケットに対して呼び出されていない場合は false を返します。 init-entry ルーチンからこのメソッドを呼び出すと、false が返されます。

log

abool_t pDict ->log( dex_AttributeDictionary_t * pDict , int eLevel ,
const char *
pszFormat , ... )

DHCP サーバのロギング システム内のメッセージを返します。 eLevel は、DEX_LOG_ERROR、DEX_LOG_WARNING、または DEX_LOG_INFO のいずれかである必要があります。 pszFormat は printf スタイル形式の文字列として処理され、残りの引数とともにフォーマットされ、指定されたレベルでロギング システムに送信されます。


) DEX_LOG_ERROR レベルおよび DEX_LOG_WARNING レベルは多用しないでください。サーバは、これらのレベルで記録されるメッセージをログ ファイルに出力します。頻繁に発生する可能性があるメッセージ(クライアント要求など)に対してこれらのレベルを使用すると、サーバのディスク入出力のパフォーマンスが低下することがあります。


moveToOption

abool_t moveToOption( dex_AttributeDictionary_t * pDict , int iArgType , ... )

後続の get put 、および remove オプション演算に対してコンテキストを設定します。
removeOption などによって)オプションが削除された場合は、コンテキストが無効になることがあります。

put

abool_t pDict ->put( dex_AttributeDictionary_t * pDict ,
const char *
pszAttribute , const char * pszValue , int iIndex )

サーバ設定の pszAttribute の定義に従って、 pszValue をバイトのシーケンスに変換します。そのバイトのシーケンスをディクショナリ内のアトリビュートに関連付けます。 iIndex が特殊な値 DEX_REPLACE である場合は、アトリビュートの既存のインスタンスをすべて単一の値に置換します。特殊な値 DEX_APPEND である場合は、アトリビュートの新規インスタンスをリストに付加します。特殊な値 DEX_AUGMENT である場合は、アトリビュートがまだない場合だけ、そのアトリビュートを組み込みます。それ以外の場合は、指定された位置に新規インスタンスを挿入します。設定されたアトリビュートとアトリビュート名が一致しない場合やアトリビュートを正当な値に変換できない場合を除き、TRUE を返します。

putBytes

abool_t pDict ->putBytes( dex_AttributeDictionary_t * pDict ,
const char *
pszAttribute , const abytes_t * pszValue , int iIndex )

ディクショナリ内で pszValue pszAttribute に関連付けます。 iIndex が特殊な値 DEX_REPLACE である場合は、アトリビュートの既存のインスタンスをすべて単一の新規値に置換します。特殊な値 DEX_APPEND である場合は、アトリビュートの新規インスタンスをリストに付加します。特殊な値 DEX_AUGMENT である場合は、アトリビュートがまだない場合だけ、そのアトリビュートを組み込みます。それ以外の場合は、指定された位置に新規インスタンスを挿入します。設定された名前にアトリビュート名が一致しない場合を除き、TRUE を返します。

putBytesByType

abool_t pDict ->putBytesByType( dex_AttributeDictionary_t * pDict ,
const abytes_t *
pszAttribute , const abytes_t * pszValue , int iIndex )

ディクショナリ内で pszValue pszAttribute に関連付けます。 iIndex が特殊な値 DEX_REPLACE である場合は、アトリビュートの既存のインスタンスをすべて新規値に置換します。特殊な値 DEX_APPEND である場合は、アトリビュートの新規インスタンスをリストに付加します。特殊な値 DEX_AUGMENT である場合は、アトリビュートがまだない場合だけ、そのアトリビュートを組み込みます。それ以外の場合は、指定された位置にアトリビュートの新規インスタンスを挿入します。

putByType

abool_t pDict ->putByType( dex_AttributeDictionary_t * pDict ,
const abytes_t *
pszAttribute , const char * pszValue , int iIndex )

サーバ設定の pszAttribute の定義に従って、 pszValue をバイトのシーケンスに変換します。そのバイトのシーケンスをディクショナリ内のアトリビュートに関連付けます。 iIndex が特殊な値 DEX_REPLACE である場合は、アトリビュートの既存のインスタンスをすべて単一の新規値に置換します。特殊な値 DEX_APPEND である場合は、アトリビュートの新規インスタンスをリストに付加します。特殊な値 DEX_AUGMENT である場合は、アトリビュートがまだない場合だけ、そのアトリビュートを組み込みます。それ以外の場合は、指定された位置に新規インスタンスを挿入します。

putOption

abool_t putOption( dex_AttributeDictionary_t * pDict , const char * pszValue , int iArgType , ... )

オプションとそのデータを追加するか、オプションのデータを変更します。

putOptionBytes

abool_t putOptionBytes( dex_AttributeDictionary_t * pDict ,
const
abytes_t * pValue , int iArgType , ... )

オプションとそのデータを追加するか、オプションのデータを変更します。

remove

abool_t pDict ->remove( dex_AttributeDictionary_t * pDict ,
const char *
pszAttribute , int iIndex )

ディクショナリからアトリビュートを削除します。 iIndex が特殊な値 DEX_REMOVE_ALL である場合は、アトリビュートの既存のインスタンスをすべて削除します。それ以外の場合は、指定された位置で新規インスタンスを削除します。ディクショナリがそのインデックスでそのアトリビュートを含んでいない場合でも、設定された名前にアトリビュート名が一致しない場合を除き、TRUE を返します。

removeByType

abool_t pDict ->removeByType( dex_AttributeDictionary_t * pDict ,
const abytes_t *
pszAttribute , int iIndex )

ディクショナリからアトリビュートを削除します。 iIndex が値 DEX_REMOVE_ALL である場合は、アトリビュートの既存のインスタンスをすべて削除します。それ以外の場合は、指定された位置で新規インスタンスを削除します。ディクショナリがそのインデックスでそのアトリビュートを含んでいない場合でも、常に TRUE を返します。

removeOption

abool_t removeOption( dex_AttributeDictionary * pDict , int iArgType , ... )

オプションを削除します。DEX_INDEX を省略した場合、DEX_INDEX は DEX_REMOVE_ALL であると見なされます(オプション全体が削除されます)。

setObject

abool_t setObject( dex_AttributeDictionary_t * pDict , int iObjectType ,
int
iObjArgType , ... )

get put 、および remove メソッドに対してオブジェクトを設定し、新しいオプション メソッドの演算対象になるメッセージを変更します。DHCPv6 拡張機能は、主にクライアントとリンクで利用可能なリースとプレフィックスにアクセスするため、またはリレー パケットからメッセージ ヘッダー フィールドまたはオプションを取得するために、このメソッドを使用します。1 つのリースとスコープが応答に関連付けられている DHCPv4 とは異なり、DHCPv6 応答には複数のリースとプレフィックスが関わることがあります。オブジェクトが存在する場合は true を返し、存在しない場合は false を返します。使い方の例については、「オブジェクト データの処理」を参照してください。


) 現在のクライアントに関連付けられていないリースでは、最小限の情報だけを入手できます。


trace

abool_t pDict ->trace( dex_AttributeDictionary_t * pDict , int iLevel ,
const char *
pszFormat , ... )

DHCP サーバのパケット トレース システム内のメッセージを返します。レベル 0 では、トレースは実行されません。レベル 1 では、サーバがパケットを受信し応答を送信したことだけをトレースします。レベル 4 では、すべてをトレースします。残りの引数は連結され、指定されたレベルのトレース システムに送信されます。デフォルト トレースは、DHCP サーバの extension-trace-level アトリビュートを使用して設定されます。

get、put、Option、Bytes、および OptionBytes の各メソッドの違い

次の DEX 拡張機能メソッドには違いがあります。

get put

getOption putOption

getBytes putBytes

getOptionBytes putOptionBytes

get メソッドと getOption メソッドは、要求された情報を文字列形式で返します。サーバは、ディクショナリ項目で予期されるデータ型に応じて、データを文字列に変換します。データ型が不明な場合、サーバは blob 文字列形式でデータを返します。

getBytes メソッドと getOptionBytes メソッドは、要求された情報を未加工のバイト形式(バッファへのポインタおよびバッファのサイズ)で返します。サーバはこのバッファだけを読み取る必要があります。このバッファには、オプションからのデータだけが格納されています(たとえば、ヌル終端子は追加されません)。

put メソッドと putOption メソッドは、データがフォーマット済み文字列で書き込まれることを前提としています。サーバは、ディクショナリ項目で予期されるデータ型に応じて、文字列からデータに変換します。データ型が不明な場合は、blob 文字列形式であると見なされます。

サーバは、 putBytes メソッドと putOptionBytes メソッドに未加工のバイト(バイトへのバッファおよびバイトのサイズ)を渡します。サーバは、これらのバイトを読み取るだけです。

get、put、remove、および ByType の各メソッドの違い

次の DEX 拡張機能メソッドには違いがあります。

get put 、および remove

getByType putByType 、および removeByType

サーバは、 get put 、および remove メソッドに、該当するデータ項目の名前を文字列として渡します。このために、サーバはその内部データ テーブルに文字列をマッピングする必要があります。

サーバは、 getByType putByType 、および removeByType メソッドに、内部データ テーブル参照を渡します。サーバは、文字列に対して getType メソッドを呼び出すことにより、(拡張機能 init-entry などで)事前に取得しておく必要があります。これにより拡張機能の処理が高速化されます。このことは、高いパフォーマンスが必要なアプリケーションで重要になる場合があります。


getType メソッドが参照する内部データ テーブルは、要求ディクショナリまたは応答ディクショナリのどちらに対して要求した場合でも同じです。同じデータ項目名に対して、ディクショナリごとに getType 呼び出しを個別に実行する必要はありません。


 

表C-11 DEX iObjectType 値

iObjectType
説明

一般的な定義:コンテキストを変更するオブジェクト(表C-12も参照してください)。

DEX_LEASE

リース(およびプレフィックス)コンテキストを変更します。応答ディクショナリのみ。次の iObjTypeArg を使用できます。
DEX_BY_IPV6ADDRESS
DEX_BY_IPV6PREFIX
DEX_BY_INSTANCE
DEX_INITIAL

DEX_MESSAGE

リレー メッセージまたはクライアント メッセージに対する、メッセージ コンテキストを変更します。要求ディクショナリと応答ディクショナリ。次の iObjArgType を使用できます。
DEX_INITIAL
DEX_RELAY
DEX_BY_NUMBER

DEX_PREFIX

プレフィックス コンテキストを変更しますが、リース コンテキストは変更しません。応答ディクショナリのみ。次の iObjTypeArg を使用できます。
DEX_BY_IPV6ADDRESS
DEX_BY_IPV6PREFIX
DEX_BY_INSTANCE
DEX_BY_NAME
DEX_INITIAL

 

表C-12 DEX iObjArgType 値

iObjArgType
説明

一般的な定義:コンテキストを変更する方法(表C-11も参照してください)。

DEX_BY_INSTANCE

DEX_LEASE iObjectType または DEX_PREFIX iObjectType と組み合せて使用します。これに続けて、(0 から始まる)インスタンス番号を指定する int が必要です。すべての利用可能なオブジェクトのリストの中で、現在の要求または応答に適用されるオブジェクトのリストだけのウォークスルーを行うために使用します。DEX_LEASE では、そのクライアントのリース(存在する場合)、DEX_PREFIX では現在のリンク上のプレフィックス(存在する場合)です。DEX_RELAY と同義の DEX_MESSAGE と組み合せて使用します。

DEX_BY_IPV6ADDRESS

DEX_LEASE iObjectType および DEX_PREFIX iObjectType のみと組み合せて使用します。これに続けて、16 バイトのアドレスを指定する const unsigned char * が必要です。

DEX_BY_IPV6PREFIX

DEX_LEASE iObjectType または DEX_PREFIX iObjectType と組み合せて使用します。これに続けて、17 バイトのプレフィックス バッファ(16 バイトのアドレスに続く 1 バイトのプレフィックス長)を指定する const unsigned char * が必要です。

DEX_BY_NAME

DEX_PREFIX iObjectType のみと組み合せて使用します。これに続けて、必要なオブジェクトの名前を指定する const char * が必要です。

DEX_INITIAL

要求または応答に対してコンテキストを元に戻します。追加の引数はありません。拡張機能が最初に呼び出されたときの状態に、リースおよびプレフィックス(DEX_LEASE)、プレフィックス(DEX_PREFIX)、またはメッセージ(DEX_MESSAGE)を設定します。

DEX_RELAY

DEX_MESSAGE iObjectType のみと組み合せて使用します。これに続けて、リレーを指定する int が必要です(0 は、クライアントに最も近いリレーを示します)。クライアントに対してメッセージ コンテキストを設定するには、 setObject( pDictÅADEX_MESSAGE, DEX_INITIAL ) を使用します。

 

表C-13 DEX iArgType 値

iArgType
説明

一般的な定義:コンテキストに続くアクションと引数。呼び出し内には任意の数の iArgType インスタンスを使用できます(表C-11表C-12も参照してください)。

DEX_ARG_ARRAY

これに続けて、 dex_OptionsArgs_t の配列に対するポインタが必要です。これは引数リストの指定に代わるものです。各 dex_OptionsArgs_t 構造には次の 2 つのフィールドがあります。

iArgType :このテーブル内の iArgType DEX 値の 1 つ。

pData :データ(整数)、(文字列およびその他のデータ型に対する)データへのポインタ。 iArgType が引数をとらない場合は、無視されます。

サーバは、(配列リストまたは dex_OptionsArgs_t 内の配列で)DEX_ARG_ARRAY を検出すると、元のリストでそれ以降の引数を無視します。

DEX_END


) 必須。追加の引数はなく、引数リストの終端を示します。


DEX_ENTERPRISE_NAME

これに続いて、オプション定義セット名を指定する const char * が必要です。サーバは、ベンダー オプション データを取得するために、この名前からエンタープライズ ID を抽出します。ベンダー識別オプションだけに対して有効です。ベンダー オプション定義セットが存在している必要があります。

DEX_ENTERPRISE_ID

これに続けて、ベンダーのエンタープライズ ID を指定する int が必要です。

DEX_HOME

クライアントまたはリレー メッセージ オプションに、コンテキストを戻します。追加の引数はありません。必ず成功を返します。使用する場合は、最初の iArgType にする必要があります。 getOption getOptionBytes 、および moveToOption メソッドだけに対して有効です。

DEX_INDEX

これに続けて、 int とオプション データのインデックスが必要です(データ配列が対象の場合)。省略した場合は、インデックス 0 であると見なされます。ただし、 removeOption では、
DEX_REMOVE_ALL であると見なされます。オプション データの全体を取得、記録、または削除するには、特殊な値である DEX_RAW を使用します。ただし、DHCPv4 Vendor-Identifying ベンダー オプション(RFC 3925 および RFC 4243)では、DEX_RAW はオプション全体ではなく、(インスタンスまたはエンタープライズ ID に基づいて)1 つのベンダーだけのデータを返します。

特殊な値の DEX_RAW は、オプション(またはサブオプション)データの全体にアクセスします。データ型およびそのデータ型の繰り返し回数に関するオプション定義の指定にかかわらず、データへの一貫したアクセスを提供します。


ヒント DEX_INDEX は、オプション定義にかかわらず、常に同じデータにアクセスすることを保証する必要があるアプリケーションで役立ちます(管理者または他のコンポーネントが、オプション定義を変更することがあるからです)。これは、汎用拡張機能に対して推奨されます。

特殊な値 DEX_REPLACE(値の置換)、DEX_APPEND(末尾に追加)、および DEX_AUGMENT(値が現在存在しない場合に追加)は、 putOption メソッドおよび putOptionBytes メソッドと組み合せて使用します。これは、 put putByType putBytes 、および putBytesByType メソッドと同様に動作します。オプションを完全に削除するには、 removeOption に対して
DEX_REMOVE_ALL を使用します。

DEX_INDEX_COUNT

オプション データではなく、オプションのインデックス付きエントリ数のカウントとともに、 int 値が返されます。追加の引数はなく、DEX_INDEX または DEX_INSTANCE_COUNT と組み合せて使用することはできません。これに続けて DEX_END が必要です。 getOption および getOptionBytes だけに対して有効です。

DEX_INSTANCE

これに続けて、オプションのインスタンスを指定する int が必要です(DHCPv6 オプションだけに対して有効で、複数のインスタンスを使用できます)。0 は最初のインスタンスを示します。

DEX_INSTANCE_COUNT

オプション データではなく、オプションのインスタンス数のカウントとともに、 int 値が返されます。追加の引数はなく、DEX_INSTANCE と組み合せて使用することはできません。これに続けて DEX_END が必要です。 getOption および
getOptionBytes
だけに対して有効です。

DEX_MORE

これに続けて、 more フラグを書き込む場所を指定する abool_t * が必要です。DEX_INDEX が指定するインデックスを超える配列項目が存在する場合、この場所は true に設定されます。 getOption および getOptionBytes メソッドだけに対して有効です。

DEX_MOVE_TO

コンテキストを、DEX_MOVE_TO の直前のオプションまたはサブオプションの位置のままにします。追加の引数はありません。省略した場合、コンテキストは変更されません。データを取得しないでコンテキストを移動するには、 moveToOption を使用します。 getOption および getOptionBytes メソッドだけに対して有効です。


) 存在しないオプションまたはサブオプションに移動しようとすると、エラーが記録されます。拡張機能がオプションの存在を事前に確認していない場合は、
moveToOption
を使用します。


DEX_OPTION_NAME

これに続けて、必要なオプション名を指定する const char * が必要です。オプション名は、 dhcpv4-config または dhcpv6-config オプション定義セットに含まれている必要があります。

DEX_OPTION_NUMBER

これに続けて、必要なオプション数を指定する int が必要です。オプション数は、 dhcpv4-config または dhcpv6-config オプション定義セットに含まれている必要がありますが、定義の存在は必須条件ではありません。ただし、オプションが存在しない場合は、バイト blob 型のデータであると見なされます。

DEX_PARENT

コンテキストを親オプションに移動します。追加の引数はありません。コンテキスト メッセージまたはリレー メッセージを超えて移動することはなく、コンテキストが変更されない場合は false を返します。使用する場合は、最初の iArgType にする必要があります。 getOption getOptionBytes 、および moveToOption メソッドだけに対して有効です。

DEX_SUBOPTION_NAME

これに続けて、必要なサブオプションの名前を指定する const char * が必要です。サブオプションは、現在のオプション定義に含まれている必要があります。

DEX_SUBOPTION_NUMBER

これに続けて、必要なサブオプション数を指定する int が必要です。サブオプション数は、現在のオプション定義に含まれている必要がありますが、定義の存在は必須条件ではありません。ただし、サブオプションが存在しない場合は、バイト blob 型のデータであると見なされます。

DEX_VENDOR_NAME

これに続けて、ベンダー文字列を指定する const char * が必要です。この文字列は、適切なオプション定義セットを検出するためだけに使用されます。

DEX 環境ディクショナリ方式

環境ディクショナリは、 メソッド と呼ばれるアクティブなコマンドを使用します。これを使用すると、ディクショナリの値の変更やディクショナリの値へのアクセスができます。 表C-14 に、環境ディクショナリで使用するメソッドを示します。この場合、 pDict 変数を pEnviron として定義できます。

pEnviron->log( pEnviron, DEX_LOG_INFO, "Environment hello world" );
 

表C-14 DEX 環境ディクショナリ方式

方式
シンタックス

allocateMemory

void * pDict ->allocateMemory( dex_EnvironmentDictionary_t * pDict ,
unsigned int
iSize )

拡張機能で、この要求のライフタイムの間だけ存続するメモリを割り振ります。

clear

void pDict ->clear( dex_EnvironmentDictionary_t * pDict )

ディクショナリからすべてのエントリを削除します。

containsKey

abool_t pDict ->containsKey( dex_EnvironmentDictionary_t * pDict ,
const char *
pszKey )

ディクショナリにキーが含まれている場合は TRUE、含まれていない場合は FALSE を返します。

firstKey

const char * pDict ->firstKey( dex_EnvironmentDictionary_t * pDict )

ディクショナリ内の最初のキーの名前を返します。キーは名前別に分類されて保存されているわけではありません。キーが存在しない場合は、ゼロが返されます。

get

const char * pDict ->get( dex_EnvironmentDictionary_t * pDict ,
const char *
pszKey )

ディクショナリからキーの値を返します。キーが存在しない場合は、空の文字列が返されます。

isEmpty

abool_t pDict ->isEmpty( dex_EnvironmentDictionary_t * pDict )

ディクショナリにエントリがない場合は TRUE、ある場合は FALSE を返します。

log

abool_t pDict ->log( dex_EnvironmentDictionary_t * pDict , int eLevel ,
const char *
pszFormat , ... )

DHCP サーバのロギング システム内のメッセージを返します。 eLevel は、DEX_LOG_ERROR、DEX_LOG_WARNING、または DEX_LOG_INFO のいずれかである必要があります。 pszFormat は printf スタイル形式の文字列として処理され、残りの引数とともにフォーマットされ、指定されたレベルでロギング システムに送信されます。


) DEX_LOG_ERROR レベルおよび DEX_LOG_WARNING レベルは多用しないでください。サーバは、これらのレベルで記録されるメッセージをログ ファイルに出力します。頻繁に発生する可能性があるメッセージ(クライアント要求など)に対してこれらのレベルを使用すると、サーバのディスク入出力のパフォーマンスが低下することがあります。


nextKey

const char * pDict ->nextKey( dex_EnvironmentDictionary_t * pDict )

ディクショナリ内の次のキーの名前を返します。これは、 firstKey または nextKey への最後の呼び出しで返されるキーの後に続きます。キーが存在しない場合は、ゼロが返されます。

put

abool_t pDict ->put( dex_EnvironmentDictionary_t * pDict ,
const char *
pszKey , const char* pszValue )

値をキーに関連付け、キーの既存のインスタンスを新規値に置換します。

remove

abool_t pDict ->remove( dex_EnvironmentDictionary_t * pDict ,
const char *
pszKey )

ディクショナリからキーとそれに関連する値を削除します。ディクショナリにキーが含まれていない場合でも、常に TRUE を返します。

size

int pDict ->size( dex_EnvironmentDictionary_t * pDict )

ディクショナリ内のエントリの数を返します。

trace

abool_t pDict ->trace( dex_EnvironmentDictionary_t * pDict , int iLevel ,
const char *
pszFormat , ... )

DHCP サーバのパケット トレース システム内のメッセージを返します。レベル 0 では、トレースは実行されません。レベル 1 では、サーバがパケットを受信し応答を送信したことだけをトレースします。レベル 4 では、すべてをトレースします。残りの引数は連結され、指定されたレベルのトレース システムに送信されます。デフォルト トレースは、DHCP サーバの extension-trace-level アトリビュートを使用して設定されます。

オプションおよびオブジェクト メソッド呼び出しの例

この項では、メソッドを使用して DHCP オプションおよびオブジェクト データを処理する方法の例をいくつか示します。

ベンダー クラス オプション データの処理

DHCPv4 で、2 つのエンタープライズ ID に対する Vendor-Identifying Vendor Class オプション(124)データをクライアントへの応答に加える、 putOption メソッドを使用した Tcl コードの例を次に示します。

$response putOption 65:66:67 option 124 enterprise 999998 #adds "abc" (65:66:67) under enterprise-id 999998
$response putOption 68:69:6a:6b option v-i-vendor-class enterprise 999998 index append #appends "defg" (68:69:6a:6b) under the same enterprise-id
$response putOption 01:02:03:04 option 124 enterprise 999999 #adds 01:02:03:04 under enterprise-id 999999
 

オプションを取得するには、 getOption メソッドを使用します。

$response getOption option v-i-vendor-class instance-count #returns 2 because there were two instances added (enterprise id 999998 and enterprise id 999999)
$response getOption option 124 #returns index 0 of instance 0, which is 65:66:67
$response getOption option 124 index-count #returns 2 because there were two vendor classes added for the first enterprise id (9999998)
$response getOption option 124 index raw #returns 00:0f:42:3e:09:03:65:66:67:04:68:69:6a:6b for the complete encoding of the enterprise-id 999998 data (see RFC 3925)
$response getOption option 124 index 1 #returns 68:69:6a:6b
$response getOption option 124 instance 1 index-count #returns 1 because there is only one vendor class
$response getOption option 124 instance 1 index raw #returns 00:0f:42:3f:05:04:01:02:03:04 for the complete encoding of the enterprise-id 999999 data (see RFC 3925)
$response getOption option 124 enterprise 999999 #returns 01:02:03:04
 

2 つの別個のエンタープライズ ID があるため、データを削除するには、2 回の removeOption 呼び出しが必要です。

$response removeOption option 124
$response removeOption option 124
 

オブジェクト データの処理

pre-packet-encode 拡張機能ポイントで、クライアントに対するすべてのリースのデータを抽出する必要があるとします。 setObject メソッドを使用する Tcl コード例を、次に示します。

proc logleasesinit { request response environ } {
if { [$environ get "extension-point"] == "initialize" } {
# Set up for DHCPv6 only]
$environ put dhcp-support "v6"
$environ put extension-extensionapi-version 2
}
}
proc logleases { request response environ } {
for { set i 0 } { 1 } { incr i } {
# Set context to next lease
if { ![$response setObject lease $i] } {
# Lease does not exist, so done
break
}
# Log the lease address, prefix name, and prefix address
$environ log LOG_INFO "Lease [$response get lease-ipaddress], Prefix\
[$response get lease-prefix-name] - [$response get prefix-address]"
}
# Restore the lease context to where we started
$response setObject lease initial
# Do other things...
}
 

このコードを C++ で記述すると次のようになります。

// Print the current leases for the client
for( int i=0; ; i++ ) {
if( !pRes->setObject( pRes, DEX_LEASE, DEX_BY_INSTANCE, i ) )
break;
const char *pszLeaseAddress =
pRes->get( pRes, "lease-ipaddress", 0, 0 );
if( pszLeaseAddress == 0 )
pszLeaseAddress = "<error>";
const char *pszPrefixName =
pRes->get( pRes, "prefix-name", 0, 0 );
if( pszPrefixName == 0 )
pszPrefixName = "<error>";
pEnv->log(pEnv, DEX_LOG_INFO,
"Lease %s, Prefix %s",
pszLeaseAddress, pszPrefixName );
}