声明: 本手册已经被新版本代替了,不再被维护。 |
你可以定义4个函数,它们将会在start/stop操作前后被调用。这些函数将会以接口名称作为参数被调用,以便于一个函数可以控制多个适配器。
preup()和predown()函数的返回值必须为0(成功),这意味着可以使一个网络接口进入配置状态或退出配置状态。如果preup()返回一个非0值,则网络接口配置过程将被中止。如果predown()返回一个非0值,则停止该网络接口运行的操作将被终止。
postup()和postdown()函数的返回值会被忽略,因为就算它们返回失败,系统也没有什么可以做的。
${IFACE}表示要打开/关闭的接口。${IFVAR}是${IFACE}转化而来的bash允许的变量名。
代码 1.1: pre/post up/down函数范例 |
preup() {
# 在打开接口之前先测试它的网络物理连接是否已连接上。这只在某些网络
# 适配器上有效,而且需要安装ethtool包。
if ethtool ${IFACE} | grep -q 'Link detected: no'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
# 记得返回0以表示操作成功
return 0
}
predown() {
# 脚本默认内容是测试根文件系统是否是NFS提供的。在此情况下系统是不会允
# 许你关闭接口的。注意,如果你定义了一个predown()函数,你就覆盖了这个逻辑。
# 如果你仍然需要它的话,请往下看……
if is_net_fs /; then
eerror "root filesystem is network mounted -- can't stop ${IFACE}"
return 1
fi
# 记得返回0以表示操作成功
return 0
}
postup() {
# 这个函数可以被用来实现一些功能,比如注册一个动态DNS服务。
# 而另一个可能是在网络接口一启动时就开始传送/接收邮件。
return 0
}
postdown() {
# 这个函数出现在这主要是为了完整性……我还没有想到任何可以用它来做的好玩的事情 ;-)
return 0
}
|
注意: 此功能不适用于WPA Supplicant──但是${ESSID}和${ESSIDVAR}变量在postup()函数中是可用的。 |
你可以定义2个函数,它们将会在执行相关的操作前后被调用。这些函数将会以接口名称作为参数被调用,以便于一个函数可以控制多个适配器。
preassociate()函数的返回值应该为0(成功),这意味着一个网络接口的配置或取消配置过程可以继续。如果preassociate()返回一个非0值,则网络接口的配置过程将被中止。
postassociate()函数的返回值是被忽略的,因为就算它们返回失败,系统也没有什么可以做的。
${ESSID}被设置为你所连接到的AP的ESSID。${ESSIDVAR}是${ESSID}转化而来的bash允许的变量名。
代码 2.1: pre/post association functions |
preassociate() {
# 下面添加了两个配置变量leap_user_ESSID和leap_pass_ESSID。
# 当你已经连接的ESSID的这两个变量都被配置时,我们就执行CISCO LEAP脚本。
local user pass
eval user=\"\$\{leap_user_${ESSIDVAR}\}\"
eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"
if [[ -n ${user} && -n ${pass} ]]; then
if [[ ! -x /opt/cisco/bin/leapscript ]]; then
eend "For LEAP support, please emerge net-misc/cisco-aironet-client-utils"
return 1
fi
einfo "Waiting for LEAP Authentication on \"${ESSID//\\\\//}\""
if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
ewarn "Login Failed for ${user}"
return 1
fi
fi
return 0
}
postassociate() {
# 这个函数出现在这主要是为了完整性……我还没有想到任何可以用它来做的好玩的事情 ;-)
return 0
}
|
注意: ${ESSID}和${ESSIDVAR}在predown()和postdown()函数中不可用。 |
本文档的内容遵循知识共享-署名-相同方式共享许可协议