-const char *name;
-/**
- *
- *
- * pointer to the filter init routine
- *
- * This function is only called once at startup. It must initialize the
- * other non-optional function pointers of \a f.
- */
-void (*init)(struct filter *f);
-/**
- *
- *
- * open one instance of this filter
- *
- * This should allocate the output buffer of the given filter node and do any
- * other filter-specific preparations like initializing the private_data member
- * of \a fn suitably. The open function is assumed to succeed.
- */
-void (*open)(struct filter_node *fn);
-/**
- *
- *
- * convert (filter) the given data
- *
- * Pointer to the converting function of the filter. It should convert the
- * given input buffer \a inbuf which is of length \a len to the previoulsy
- * reserved output buffer of \a fn. On success, it must return the number of
- * bytes it consumed from \a inbuf. On errors, a negative number indicating the
- * kind of the error must be returned.
- *
- * A zero return value just means that nothing was converted (probably because
- * the input buffer was too small). This is not interpreted as an error.
- */
-ssize_t (*convert)(char *inbuf, size_t len, struct filter_node *fn);
-/**
- *
- *
- * close one instance of this filter
- *
- * Free all resources of associated with \a fn that were previously allocated
- * by the open() function.
- */
-void (*close)(struct filter_node *fn);
-/**
- *
- *
- * print the help text for this filter and exit
- *
- * This is optional and it is not necessary to initialize this pointer if
- * the filter does not have a help text.
- */
-void (*print_help)(void);
-/**
- *
- *
- * a pointer to the filter's command line parser
- *
- * If this optional function pointer is not NULL, any filter options are passed
- * from the main propgram to this command line parser once at application
- * startup. The command line parser should check its command line options given
- * by \a argc and \a argv and abort on errors. On success, it should return a
- * pointer to the filter-specific configuration data determined by \a argc and
- * \a argv.
- */
-void *(*parse_config)(int argc, char **argv);
+struct filter {
+ /**
+ * Open one instance of this filter.
+ *
+ * This should allocate the output buffer of the given filter node and
+ * do any other filter-specific preparations like initializing the
+ * private_data member of \a fn suitably. The open function is
+ * optional, If it is provided, it is assumed to succeed.
+ */
+ void (*open)(struct filter_node *fn);
+ /**
+ * Close one instance of this filter.
+ *
+ * Free all resources associated with \a fn that were previously
+ * allocated by the open() function. It's OK to set this to NULL if the
+ * filter does not need to perform any cleanup operation.
+ */
+ void (*close)(struct filter_node *fn);
+ /**
+ * Prepare the filter according to command line options.
+ *
+ * In addition to the syntactic checks which are automatically performed
+ * by the lopsub functions, some filters like to also check the command
+ * line arguments semantically. Moreover, since applications may open
+ * the filter many times with the same options, filters need a method
+ * which allows them to precompute once those parts of the setup which
+ * depend only on the command line options.
+ *
+ * If this function pointer is not NULL, the function is called once at
+ * startup. The returned pointer value is made available to the ->open
+ * method via the ->conf pointer of struct filter_node.
+ *
+ * Filters are supposed to abort if the setup fails. If the function
+ * returns, it is assumed to have succeeded.
+ */
+ void *(*setup)(const struct lls_parse_result *lpr);
+ /**
+ * Deallocate precomputed resources.
+ *
+ * This should free whatever ->setup() has allocated.
+ */
+ void (*teardown)(const struct lls_parse_result *lpr, void *conf);
+ /**
+ * Set scheduler timeout and add file descriptors to fd sets.
+ *
+ * This function controls the timeout value for the next call to
+ * select(2). It may decrease the current timeout but shall never
+ * increase it. The second purpose of this function is to add file
+ * descriptors to the two fd sets of the sched structure. The
+ * descriptors in these sets will be watched by the subsequent
+ * select(2) call.
+ */
+ void (*pre_select)(struct sched *s, void *context);
+ /**
+ * Convert (filter) the given data.
+ *
+ * Pointer to the converting function of the filter. On errors, the
+ * post_select function is supposed to return a negative error code.
+ */
+ int (*post_select)(struct sched *s, void *context);
+ /**
+ * Answer a buffer tree query.
+ *
+ * This optional function pointer is used for inter node communications
+ * of the buffer tree nodes. See \ref btr_command_handler for details.
+ */
+ btr_command_handler execute;