dhcpd acl 使用规则详解

条件表达式 if elseif switch case

if else 语句:

if option dhcp-user-class = "accounting" {
max-lease-time 17600;
option domain-name "accounting.example.org";
option domain-name-servers ns1.accounting.example.org,

ns2.accounting.example.org;

} elsif option dhcp-user-class = "sales" {
	max-lease-time 17600;
	option domain-name "sales.example.org";
	option domain-name-servers ns1.sales.example.org,

	ns2.sales.example.org;

} elsif option dhcp-user-class = "engineering" {
	max-lease-time 17600;
	option domain-name "engineering.example.org";
	option domain-name-servers ns1.engineering.example.org,
	ns2.engineering.example.org;

} else {
	max-lease-time 600;
	option domain-name "misc.example.org";
	option domain-name-servers ns1.misc.example.org,

	ns2.misc.example.org;

}

Shell

if not 语句:

if not option domain-name = "example.org" {
	prepend domain-name-servers 127.0.0.1;
}

说明:if elseif 语句用bool类型的作为参数,如果表达式值为true,就执行大括号里面的内容,表达式结果为null,当做false处理。

swtich case 语句类似:可以接收一个数据表达式或者数字表达式

switch 表达式和case 表达式类型要一直:

switch (option dhcp-user-class) {
	case "accounting":
		max-lease-time 17600;
		option domain-name "accounting.example.org";
		option domain-name-servers ns1.accounting.example.org,

	ns2.accounting.example.org;
		
		case "sales":
		max-lease-time 17600;
		option domain-name "sales.example.org";
		option domain-name-servers ns1.sales.example.org,

		ns2.sales.example.org;

		break;

	default:
		max-lease-time 600;
		option domain-name "misc.example.org";
		option domain-name-servers ns1.misc.example.org,

		ns2.misc.example.org;
		
		break;
}

bool表达式

data-expression-1 = data-expression-2

= 当两边表达式结果相等是返回true,不相等是返回false,左右或者右边有一遍为空是,返回null

data-expression-1 ~= data-expression-2

data-expression-1 ~~ data-expression-2

~= 操作符,表达式1用表达式2的规则去匹配,(dhcpd 采用regex(7)方式),如果结果为真,则表达式为真,如果结果不匹配或者出现错误或者有一端为空字符串,都当false处理。

~~~= 的唯一区别就是~~不区分大小写,~=区分大小写。

boolean-expression-1 and boolean-expression-2

and 语句,如果两边的表达式结果都为真,则结果为真,否则为假,如果两边的结果都为空,则表达式的结果为空。

boolean-expression-1 or boolean-expression-2

or 语句,只要有一边为真,则结果为真,否则为false,两边结果都为null,则结果为null

not boolean-expression

not 语句, 如果布尔表达式的值是假的,not操作符就会评估为真,如果布尔表达式的值是真,则返回假。如果布尔表达式求值为空,则结果也为空。

exists option-name

exists 语句如果传入的dhcp 报文存在指定的option,则结果为真。

known

known 语句,如果处理的客户端在配置文件中已经有声明,则结果为真。

static

static 语句,如果分配给客户端的租约是静态租约,则为真。

数据表达式

bool表达式依赖于数据表达式,以下是常用的数据表达式的列表。

substring (data-expr, offset, length)

从data-expr表达式中截取对应的字符串,offset标识从第几个字节开始,length标识要截取的长度。

suffix (data-expr, length)

后缀匹配,从data-expr 字符串结尾处开始匹配,截取长度为length的字符串,与substring作用相反。

lcase (data-expr)

lcase 将表达式data-expr转换为小写。

ucase (data-expr)

ucase 将表达式data-expr转换为大写

option option-name

匹配对应的option内容。

hardware

硬件操作符返回一个链路层地址的数据字符串,其中第一个字节数据为硬件类型,目前支持的有(ethernet (1), token-ring (6), and fddi (8).)

packet (offset, length)

packet 操作符返回数据包中指定的部门, offset偏移值,从哪儿开始,length,需要截取的长度。

concat (data-expr1, ..., data-exprN)

将表达式结果一次链接起来。任何一个表达式为空,则结果为空。

reverse (numeric-expr1, data-expr2)

翻转表达式dada-expr2的评估结果,numeric-expr1指定翻转的长度。

举个例子:如果num值为4,表达式最后计算的结果为12,则翻转后的顺序为:后四个字节+中间四字节+前四个字节

leased-address

如果请求被处理的客户已经被分配了一个IP地址,这个数据表达式将返回该IP地址,如果该客户没有被分配一个IP地址,如果在代表该客户执行的可执行语句中发现这个数据表达式,则会输出一条语句信息到日志文件“there is no lease associated with this client"

binary-to-ascii (numeric-expr1, numeric-expr2, data-expr1, data-expr2)

将二进制数据转换为文本字符串表示。

numeric-expr1:指定转换数字的进制,2进制,8进制,16进制(取值2-16)

numeric-expr2:指定每个数字所占的位宽,8,16,32

data-expr1:表示输出字符串中每个转换后的数字之间的分隔符。

data-expr2:被转换的数据。

//将lease-address转换为10进制,每个数字占8bit,用.隔开binary-to-ascii(10, 8, ".", leased-address);

Plain Text

生成一个客户单ptr的记录的表达式规则:

concat (binary-to-ascii (10, 8, ".",
reverse (1, leased-address)),
".in-addr.arpa.");

Plain Text

pick-first-value (data-expr1 [ ... exprn ] )

从第一个表达式开始评估,遇到不为空的表达式就返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值