اگر اهل ماجرا‌جویی هستید، می‌توانید تابع‌های خودتان را به شبکه‌سازی بیافزایید. 9 2011-10-30
چنگک‌های تابع استاندارد

چهار تابع می‌توانند در /etc/conf.d/net تعریف گردند که آنها را هدایتگرهای احاطه کننده start/stop فراخوانی می‌نمایند. تابع‌ها ابتدا با نام رابط کاربری‌شان فراخوانده می‌شوند بنابر این یک تابع می‌تواند چندین آداپتر را کنترل نماید.

مقدار برگشتی برای تابع‌های preup() و predown() باید ۰ (به معنی موفق) باشد تا نشان‌دهد پیکربندی یا خروج از پیکربندی می‌تواند ادامه بیابد. اگر preup() مقدار غیر صفری را بازگرداند، آنگاه رابط کاربر پیکربندی بی‌نتیجه می‌ماند. اگر predown() مقدار غیر صفری را بازگرداند، آنگاه رابط کاربری اجازه ادامه خارج سازی از پیکربندی را نخواهد داشت.

اگر مقدارهای بازگشتی برای تابع‌های postup() و postdown() شکست بخورند، از آنجا که چیزی برای انجام دادن وجود ندارد، نادیده انگاشته می شوند.

گزینه ${IFACE} رابط کاربری را بگونه‌ایی تنظیم می‌نماید که بشکل بالا/پایین کار کند. گزینه ${IFVAR} همان گزینه ${IFACE} است که به نام متغییر مجاز برای bash تبدیل گردیده.

preup() {
  # Test for link on the interface prior to bringing it up.  This
  # only works on some network adapters and requires the ethtool
  # package to be installed.
  if ethtool ${IFACE} | grep -q 'Link detected: no'; then
    ewarn "No link on ${IFACE}, aborting configuration"
    return 1
  fi

  # Remember to return 0 on success
  return 0
}

predown() {
  # The default in the script is to test for NFS root and disallow
  # downing interfaces in that case.  Note that if you specify a
  # predown() function you will override that logic.  Here it is, in
  # case you still want it...
  if is_net_fs /; then
    eerror "root filesystem is network mounted -- can't stop ${IFACE}"
    return 1
  fi

  # Remember to return 0 on success
  return 0
}

postup() {
  # This function could be used, for example, to register with a
  # dynamic DNS service.  Another possibility would be to
  # send/receive mail once the interface is brought up.
       return 0
}

postdown() {
  # This function is mostly here for completeness... I haven't
  # thought of anything nifty to do with it yet ;-)
  return 0
}
برای اطلاعات بیشتر برای نوشتن تابع‌های خودتان، خواهشمندیم /usr/share/doc/openrc-*/net.example.bz2 را بخوانید.
چنگک‌های تابع ابزارهای بیسیم این با درخواست‌های WPA کار نخواهد نمود - اما متغییرهای ${ESSID} و ${ESSIDVAR} در تابع postup() وجود دارند.

دو تابع می توانند در /etc/conf.d/net تعریف گردند که تابع‌های هم‌پیوند محیطی را فراخوانی می‌نمایند. تابع‌ها ابتدا با نام رابط کاربری فراخوانی می‌گردند بنابر این یک تابع می‌تواند چندین آداپتر را کنترل نماید.

مقدار برگشتی برای تابع‌ preassociate() باید ۰ (به معنی موفق) باشد تا نشان‌دهد پیکربندی یا خروج از پیکربندی می‌تواند ادامه بیابد. اگر preassociate() مقدار غیر صفری را بازگرداند، آنگاه رابط کاربر پیکربندی بی‌نتیجه می‌ماند.

اگر مقدارهای بازگشتی برای تابع‌ postassociate() شکست بخورد، از آنجا که چیزی برای انجام دادن وجود ندارد، نادیده انگاشته می شود.

گزینه ${ESSID} به ESSID دقیقی که AP شما به آن ارتباط پیدا کرده تنظیم می‌گردد. گزینه ${ESSIDVAR} همان گزینه ${ESSID} است که به نام متغییر مجاز برای bash تبدیل گردیده.

preassociate() {
  # The below adds two configuration variables leap_user_ESSID
  # and leap_pass_ESSID. When they are both configured for the ESSID
  # being connected to then we run the CISCO LEAP script

  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() {
  # This function is mostly here for completeness... I haven't
  # thought of anything nifty to do with it yet ;-)

  return 0
}
گزینه‌های ${ESSID} و ${ESSIDVAR} در تابع‌های predown() و postdown() وجود ندارند. برای داده‌های بیشتر برای نوشتن تابع‌های خود، خواهشمندیم /usr/share/doc/openrc-*/net.example.bz2 را بخوانید.