as suggested by Renaud Cerrato and Souf, switch over to recursive_action() for some...
[oweals/busybox.git] / networking / ip.c
index dc9ca1f91700d8c16018587bb1ea92c5ce2eaa9e..0105bd98b246fc8265832522e00710f2699aa922 100644 (file)
  * Bernhard Fischer rewrote to use index_in_substr_array
  */
 
-#include "busybox.h"
+#include "libbb.h"
 
 #include "libiproute/utils.h"
 #include "libiproute/ip_common.h"
 
+#if ENABLE_FEATURE_IP_ADDRESS \
+ || ENABLE_FEATURE_IP_ROUTE \
+ || ENABLE_FEATURE_IP_LINK \
+ || ENABLE_FEATURE_IP_TUNNEL \
+ || ENABLE_FEATURE_IP_RULE
+
 static int ATTRIBUTE_NORETURN ip_print_help(int ATTRIBUTE_UNUSED ac, char ATTRIBUTE_UNUSED **av)
 {
        bb_show_usage();
 }
+
+static int (*ip_func)(int argc, char **argv) = ip_print_help;
+
+static int ip_do(int argc, char **argv)
+{
+       ip_parse_common_args(&argc, &argv);
+       return ip_func(argc-1, argv+1);
+}
+
+#if ENABLE_FEATURE_IP_ADDRESS
+int ipaddr_main(int argc, char **argv);
+int ipaddr_main(int argc, char **argv)
+{
+    ip_func = do_ipaddr;
+    return ip_do(argc, argv);
+}
+#endif
+#if ENABLE_FEATURE_IP_LINK
+int iplink_main(int argc, char **argv);
+int iplink_main(int argc, char **argv)
+{
+    ip_func = do_iplink;
+    return ip_do(argc, argv);
+}
+#endif
+#if ENABLE_FEATURE_IP_ROUTE
+int iproute_main(int argc, char **argv);
+int iproute_main(int argc, char **argv)
+{
+    ip_func = do_iproute;
+    return ip_do(argc, argv);
+}
+#endif
+#if ENABLE_FEATURE_IP_RULE
+int iprule_main(int argc, char **argv);
+int iprule_main(int argc, char **argv)
+{
+    ip_func = do_iprule;
+    return ip_do(argc, argv);
+}
+#endif
+#if ENABLE_FEATURE_IP_TUNNEL
+int iptunnel_main(int argc, char **argv);
+int iptunnel_main(int argc, char **argv)
+{
+    ip_func = do_iptunnel;
+    return ip_do(argc, argv);
+}
+#endif
+
+
 int ip_main(int argc, char **argv);
 int ip_main(int argc, char **argv)
 {
@@ -41,7 +98,6 @@ int ip_main(int argc, char **argv)
                USE_FEATURE_IP_RULE(IP_rule,)
                IP_none
        };
-       int (*ip_func)(int argc, char **argv) = ip_print_help;
 
        ip_parse_common_args(&argc, &argv);
        if (argc > 1) {
@@ -71,3 +127,5 @@ int ip_main(int argc, char **argv)
        }
        return (ip_func(argc, argv));
 }
+
+#endif /* any of ENABLE_FEATURE_IP_xxx is 1 */