1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- This document is meant to convince you to not use ifup/ifdown.
- The general problem with ifupdown is that it is "copulated in vertical
- fashion" by design. It tries to do the job of shell script in C,
- and this is invariably doomed to fail. You need ifup/ifdown
- to be adaptable by local admins, and C is an extremely poor choice
- for that.
- We are doomed to have problems with ifup/ifdown. Just look as this code:
- static const struct dhcp_client_t ext_dhcp_clients[] = {
- { "dhcpcd", "<up cmd>", "<down cmd>" },
- { "dhclient", ........ },
- { "pump", ........ },
- { "udhcpc", ........ },
- };
- static int dhcp_down(struct interface_defn_t *ifd, execfn *exec)
- {
- #if ENABLE_FEATURE_IFUPDOWN_EXTERNAL_DHCP
- int i ;
- for (i = 0; i < ARRAY_SIZE(ext_dhcp_clients); i++) {
- if (exists_execable(ext_dhcp_clients[i].name))
- return execute(ext_dhcp_clients[i].stopcmd, ifd, exec);
- }
- bb_error_msg("no dhcp clients found, using static interface shutdown");
- return static_down(ifd, exec);
- #elif ENABLE_APP_UDHCPC
- return execute("kill "
- "`cat /var/run/udhcpc.%iface%.pid` 2>/dev/null", ifd, exec);
- #else
- return 0; /* no dhcp support */
- #endif
- }
- How the hell it is supposed to work reliably this way? Just imagine that
- admin is using pump and ifup/ifdown. It works. Then, for whatever reason,
- admin installs dhclient, but does NOT use it. ifdown will STOP WORKING,
- just because it will see installed dhclient binary in e.g. /usr/bin/dhclient!
- This is stupid.
- I seriously urge people to not use ifup/ifdown.
- Use something less brain damaged.
|