Gentoo Logo

[ << ] [ < ] [ 主页 ] [ > ] [ >> ]


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()函数中不可用。


[ << ] [ < ] [ 主页 ] [ > ] [ >> ]


打印

查看全部

更新于2009年 2月 21日

本文档的原始版本最后更新于2010年 5月 14日

总结: 如果你喜欢冒险的感觉,你可以在网络中加上自己的功能。

Sven Vermeulen
作者

Grant Goodyear
作者

Roy Marples
作者

Daniel Robbins
作者

Chris Houser
作者

Jerry Alexandratos
作者

Seemant Kulleen
Gentoo x86开发人员

Tavis Ormandy
Gentoo Alpha开发人员

Jason Huebel
Gentoo AMD64开发人员

Guy Martin
Gentoo HPPA开发人员

Pieter Van den Abeele
Gentoo PPC开发人员

Joe Kallar
Gentoo SPARC开发人员

John P. Davis
编辑

Pierre-Henri Jondot
编辑

Eric Stockbridge
编辑

Rajiv Manglani
编辑

Jungmin Seo
编辑

Stoyan Zhekov
编辑

Jared Hudson
编辑

Colin Morey
编辑

Jorge Paulo
编辑

Carl Anderson
编辑

Jon Portnoy
编辑

Zack Gilburd
编辑

Jack Morgan
编辑

Benny Chuang
编辑

Erwin
编辑

Joshua Kinard
编辑

Tobias Scherbaum
编辑

Xavier Neys
编辑

Joshua Saddler
编辑

Gerald J. Normandin Jr.
审校

Donnie Berkholz
审校

Ken Nowack
审校

Lars Weiler
投稿

张乐
译者

杨小广
译者

杨珂
译者

叶宝泰
译者

vivian.ye
译者

余雷
译者

陈永骥
译者

王国辉
译者

娄东斌
译者

贾震
译者

余鈺炜
译者

陈代焱
译者

范华
译者

沈辰俊
译者

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Edurium
Copyright 2001-2010 Gentoo Foundation, Inc. Questions, Comments? Contact us.