免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 903 | 回复: 0
打印 上一主题 下一主题

DHCP中使用表达式dhcp-eval (2)数据表达式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-30 16:04 |只看该作者 |倒序浏览

数据表达式(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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP