Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2490662
  • 博文数量: 609
  • 博客积分: 10061
  • 博客等级: 上将
  • 技术积分: 5920
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-25 08:30
文章分类

全部博文(609)

文章存档

2010年(13)

2009年(39)

2008年(558)

我的朋友

分类: LINUX

2008-08-25 13:28:44

5. 附加功能

5.a. 标准函数钩子

你可以定义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
}

5.b. 无线工具函数钩子

注意: 此功能不适用于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()函数中不可用。

阅读(795) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~