- 论坛徽章:
- 0
|
数据表达式(DATA EXPRESSIONS)
上面这几个布尔表达式都基于数据表达式计算的结果,数据表达式有下面几种:
substring (data-expr, offset, length)
求子串“substring”,返回data-expr字符串从第offset个字符开始,length个字符的字符串。Data-expr是字符串,offset和length是数值表达式,如果它们三个中任何一个的值是null,返回值也是null。如果offset比原字符串的总长度还大或相等,那么返回一个0长度的空串,如果length比剩余部分的字符串的长度大,那么返回剩余部分的全部字符串。
suffix (data-expr, length)
求字符串尾部子串“suffix”,返回data-expr的后length个字符的字符串。Length是数值型表达式,如果data-expr或length的值是null,返回值也是null。如果length比整个串的长度还大,则返回值为原字符串data-expr。
option option-name
选项“option”返回服务器响应数据包中指定选项的内容。
config-option option-name
配置选项“config-option”返回服务器或者客户端配置文件中指定的配置选项的值。
硬件“hardware”操作符。返回一个数据串,它的第一个元素是网络接口的类型,第二个元素是客户端的数据链路层地址(原文:link-layer address),如果没有数据包,或者RFC2131 hlen字段是错误的,返回值就是null,硬件类型包括ethernet (1), token-ring (6),和fddi (8),这由IETF规定,详细内容在RFC2131中,(在ISC DHCP发行版的doc/子目录中)。
packet (offset, length)
包“packet”操作符。返回数据包中的指定部分,或者没有数据包时返回空串。Offset和length与substring操作符中的意义相同。
string
一个包括在双引号中的字符串,可能作为数据表达式,并且返回ASCII格式的文本。反斜杠(backslash \ )字符与C语言中的意义相同。\7是TAB,,\13是回车,\10是新的一行,\ 是响一声,任何8进制的值都可以用\nnn的方式指定,这里nnn是一个小于0400的正数。16进制的数可以用\xnn表示,nn是一个小于0xff的正数。
colon-separated hexadecimal list
一组冒号分隔的16进制数可以作为数据表达式。
concat (data-expr1, ..., data-exprN)
连接操作,每一个参数都被连接到一起。如果其中任何一个参数的值是null,结果也是null。
reverse (numeric-expr1, data-expr2)
反转。以第一个表达式的值为单位,对第二个表达式进行反转。例如,有一个12字节的串,第一个表达式的值是4,那么返回的值先是每二个串的最后4个字符,然后是中间4个字符,最后是前面4个字符。
leased-address
租约地址。当服务器响应客户端请求而分配一个地址时,这个表达式返回那个IP地址。如果还没有为这个客户端分配地址而执行了这个操作,会在日志中记录"there is no lease associated with this client"(需要日志记录在debug级 ,这个需要在dhcpd.conf 配置debugging信息)。
binary-to-ascii (numeric-expr1, numeric-expr2, data-expr1, data-expr2)
(这一段看的不太懂,找了好几个例子,用一段真正的中文来说)
data-expr2是被处理的值,它先按numeric-expr2的值(可能是8、16或32)来分段,然后将每一段都转换成numeric-expr1进制的数(可能是2进制、8、10、16进制),最后每两段中间用data-expr1隔开,生成一个字符串。
下面这个例子为一个客户端分配IP地址后生成PTR记录的表达式:
concat (binary-to-ascii (10, 8, ".",reverse (1, leased-address)),".in-addr.arpa.");
按前面所讲的,从最里层的括号开始分析这个例子,先把leased-address按字节进行反转(机内这个leased-address存储应该是32位的二进制码,这样,反转后正好按每字节倒过来,成了反IP地址),然后按每8位(还是一个字节)分段,每段之间加一个“.”,最后以10进制的数转为字符串输出。输出的字符串再加上".in-addr.arpa.",形成一个PTR指针文件名。
encode-int (numeric-expr, width)
Numeric-expr表达式的值以最高位在前的方法(network byte order)按width为宽度编码(这里的宽度是整个数的宽度还是小数部分的宽度?这里没有提小数,而且前面数据类型里也没有小数,只有8、16、32位整数,因此这里的width可能还是这几个数)。如果数据表达式的值是null,结果也是null。
pick-first-value (data-expr1 [ ... exprn ] )
查找第一个数函数。它从参数表的第一个参数开始计算,直到找到第一个不是null的参数,并把它返回,以后的参数就不再计算;如果所有参数都是null,那么它返回null。
host-decl-name
主机名字函数。它返回匹配这个客户端的主机名声明语句中的名字(host语句中的名字),如果没有这个名字,就返回null。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/39411/showart_331562.html |
|