你可以定义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()函数中不可用。 |
本文档的内容遵循知识共享-署名-相同方式共享许可协议