#endif
+static void
+dummy_app_usage(const char *progname)
+{
+ RTE_SET_USED(progname);
+}
+
+static int
+test_usage(void)
+{
+ if (rte_set_application_usage_hook(dummy_app_usage) != NULL) {
+ printf("Non-NULL value returned for initial usage hook\n");
+ return -1;
+ }
+ if (rte_set_application_usage_hook(NULL) != dummy_app_usage) {
+ printf("Incorrect value returned for application usage hook\n");
+ return -1;
+ }
+ return 0;
+}
+
int
test_debug(void)
{
return -1;
if (test_exit() < 0)
return -1;
+ if (test_usage() < 0)
+ return -1;
return 0;
}
* - On failure, a negative error value.
*/
int rte_eal_init(int argc, char **argv);
+/**
+ * Usage function typedef used by the application usage function.
+ *
+ * Use this function typedef to define and call rte_set_applcation_usage_hook()
+ * routine.
+ */
+typedef void (*rte_usage_hook_t)(const char * prgname);
+
+/**
+ * Add application usage routine callout from the eal_usage() routine.
+ *
+ * This function allows the application to include its usage message
+ * in the EAL system usage message. The routine rte_set_application_usage_hook()
+ * needs to be called before the rte_eal_init() routine in the application.
+ *
+ * This routine is optional for the application and will behave as if the set
+ * routine was never called as the default behavior.
+ *
+ * @param func
+ * The func argument is a function pointer to the application usage routine.
+ * Called function is defined using rte_usage_hook_t typedef, which is of
+ * the form void rte_usage_func(const char * prgname).
+ *
+ * Calling this routine with a NULL value will reset the usage hook routine and
+ * return the current value, which could be NULL.
+ * @return
+ * - Returns the current value of the rte_application_usage pointer to allow
+ * the caller to daisy chain the usage routines if needing more then one.
+ */
+rte_usage_hook_t
+rte_set_application_usage_hook( rte_usage_hook_t usage_func );
/**
* macro to get the lock of tailq in mem_config
(in) = end + 1; \
}
+/* Allow the application to print its usage message too if set */
+static rte_usage_hook_t rte_application_usage_hook = NULL;
/* early configuration structure, when memory config is not mmapped */
static struct rte_mem_config early_mem_config;
" --"OPT_NO_HPET" : disable hpet\n"
" --"OPT_NO_SHCONF": no shared config (mmap'd files)\n\n",
prgname);
+ /* Allow the application to print its usage message too if hook is set */
+ if ( rte_application_usage_hook ) {
+ printf("===== Application Usage =====\n\n");
+ rte_application_usage_hook(prgname);
+ }
+}
+
+/* Set a per-application usage message */
+rte_usage_hook_t
+rte_set_application_usage_hook( rte_usage_hook_t usage_func )
+{
+ rte_usage_hook_t old_func;
+
+ /* Will be NULL on the first call to denote the last usage routine. */
+ old_func = rte_application_usage_hook;
+ rte_application_usage_hook = usage_func;
+
+ return old_func;
}
/*