- 论坛徽章:
- 0
|
定义新的选项
ISC DHCP服务器和客户端提供了定义新选项的能力。每个选项都要有名字、代码和结构(name、code 、structure)。名字用来引用这个选项,代码code是一个数,服务器和客户端用它来引用这个选项。结构描述选项的内容。定义一个选项首先要选一个别的选项没用过的名字,例如,不能使用"host-name",因为协议已经定义了一个host-name 选项。如果选项的名字没有用过,就可以用,但最好在前面加上一段唯一的字符以后也不会有别的新选项与你定义的选项重名。例如,定义一个"local-host-name",相信官方的DHCP不会使用"local"开头。选完名字后,就必须选一个代码,对于这些本地定义的选项,代码必须在128-254之间,你可以选择其中之一。实践中,一些开发商对解释协议非常宽松,他们的代码比128大的多,没有什么办法来避免这个问题,实际中也很少出什么问题。结构structure就是数据看起来像什么。ISC DHCP server当前支持几种简单的类型,比如integers, booleans, strings 和IP addresses,并且也支持定义单个类型的数组,或者固定顺序类型的记录。新选项声明的方法如下:
option new-name code new-code = definition ;
new-name和new-code就是为新选项选择的名字和代码, definition 是选项的结构定义。支持以下简单的选项类型定义:
BOOLEAN
option new-name code new-code = boolean ;
选项类型是boolean的就是一个标志位。例如:
option use-zephyr code 180 = boolean;
option use-zephyr on;
INTEGER
option new-name code new-code = sign integer width ;
这里的sign可以是没有(空)unsigned 或者 signed,width可以是8, 16或者32或者其它的整数。例如:
option sql-connection-max code 192 = unsigned integer 16;
option sql-connection-max 1536;
IP-ADDRESS
option new-name code new-code = ip-address ;
这个选项是一个IP地址。可以是域名也可以是点隔开的4个数字。例如:
option sql-server-address code 193 = ip-address;
option sql-server-address sql.example.com;
TEXT
option new-name code new-code = text ;
这个选项是一组ASCII编码的字符串。例如:
option sql-default-connection-name code 194 = text;
option sql-default-connection-name "PRODZA";
DATA STRING
option new-name code new-code = string ;
可以用字符串或一列字节串。如果是字节串,每两位中间用冒号隔开,两位的值介于0 和 FF之间。例如:
option sql-identification-token code 195 = string;
option sql-identification-token 17:23:19:a6:42:ea:99:7c:22;
封装ENCAPSULATION
option new-name code new-code = encapsulate identifier ;
如果类型是encapsulate,将会封装选项的结构到后面的identifier中指定的定义中。封装的例子在vendor-encapsulated-options、netware-suboptions和relay-agent-information选项中。
option space local;
option local.demo code 1 = text;
option local-encapsulation code 197 = encapsulate local;
option local.demo "demo";
数组ARRAYS
数组可以使用上面除了text和string的类型,数组的定义例子如下:
option kerberos-servers code 200 = array of ip-address;
option kerberos-servers 10.20.10.1, 10.20.11.1;
记录RECORDS
选项也可以包含有一系列数据类型的结构,它们有时叫记录类型(record type),例如:
option contrived-001 code 201 = { boolean, integer 32, text };
option contrived-001 on 1772 "contrivance";
也可以使用记录数组。例如:
option new-static-routes code 201 =
array of {ip-address, ip-address, ip-address, integer 8 };
option static-routes
10.0.0.0 255.255.255.0 net-0-rtr.example.com 1,
10.0.1.0 255.255.255.0 net-1-rtr.example.com 1,
10.2.0.0 255.255.224.0 net-2-0-rtr.example.com 3;
这里注意记录的元素之间用空格分隔,数组的元素之间用逗号分隔。
开发商封装的选项
DHCP协议定义了vendor-encapsulated-options选项,它允许开发商定义他们自己的选项,这些选项会被封装在一起形成一个标准的DHCP选项。vendor-encapsu-lated-options选项也是一系列字节,它的格式不是特定的,它是一个选项序列,每一个选项包含一个单字节的开发商指定的选项代码,然后是一个单字节的长度,然后是这个长度规定的数目的字节的数据,长度不包含前面的选项代码和长度字节自身。
两种方法可以设定这个选项的值。第一种方法是简单的指定数据,使用文本字符串或者是冒号分隔的一组16进制数,例如:
option vendor-encapsulated-options
2:4:AC:11:41:1:
3:12:73:75:6e:64:68:63:70:2d:73:65:72:76:65:72:31:37:2d:31:
4:12:2f:65:78:70:6f:72:74:2f:72:6f:6f:74:2f:69:38:36:70:63;
第二种方法是让DHCP服务器产生一个开发商指定的选项缓存。这样需要做4件事:定义一个选项空间,在这个空间中定义一些选项,为这些选项提供值,指定选项空间应该用来产生vendor-encapsulated-options选项。
为了定义一个开发商选项可以存储的新的选项空间,使用option space语句:
option space name ;
这里的name用在option定义中,例如:
option space SUNW;
option SUNW.server-address code 2 = ip-address;
option SUNW.server-name code 3 = text;
option SUNW.root-path code 4 = text;
定义完选项空间和它的格式后,就可以在某个范围里定义这些选项的值,指定何时使用它们。例如,假定要管理两种客户端类,使用选项空间定义在前面的例子中,现在可以依据不同的vendor-class-identifier值向客户端发送不同的选项值,如下:
class "vendor-classes" {
match option vendor-class-identifier;
}
option SUNW.server-address 172.17.65.1;
option SUNW.server-name "sundhcp-server17-1";
subclass "vendor-classes" "SUNW.Ultra-5_10" {
vendor-option-space SUNW;
option SUNW.root-path "/export/root/sparc";
}
subclass "vendor-classes" "SUNW.i86pc" {
vendor-option-space SUNW;
option SUNW.root-path "/export/root/i86pc";
}
就像这个例子一样,它作用的范围是由它所在的位置决定,这样就可以在全局范围里定义一个值,而在局部指定个别的类。vendor-option-space语句告诉DHCP服务器使用SUNW中的选项空间构建vendor-encapsulated-options选项。
另见:
dhcpd.conf(5), dhcpd.leases(5), dhclient.conf(5), dhcp-eval(5), hcpd(8), dhclient(8), RFC2132, RFC2131,
draft-ietf-dhc-agent-options-??.txt.
AUTHOR
The Internet Systems Consortium DHCP Distribution was written by Ted Lemon under a contract with Vixie Labs. Funding for this project was provided through Internet Systems Consortium. Information about
Internet Systems Consortium can be found at http://www.isc.org.
翻译:liufirst
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/39411/showart_328272.html |
|