- struct filter_callback *fcb, *tmp;
-
- list_for_each_entry_safe(fcb, tmp, &fn->callbacks, node) {
- PARA_INFO_LOG("closing %s filter callback\n",
- filters[fn->filter_num].name);
- close_filter_callback(fcb);
- }
-}
-
-static void call_callbacks(struct filter_node *fn, char *inbuf, size_t inlen,
- char *outbuf, size_t outlen)
-{
- struct filter_callback *fcb, *tmp;
- list_for_each_entry_safe(fcb, tmp, &fn->callbacks, node) {
- int ret;
- if (inlen && fcb->input_cb) {
- ret = fcb->input_cb(inbuf, inlen, fcb);
- if (ret < 0) {
- close_filter_callback(fcb);
- continue;
- }
- }
- if (!outlen || !fcb->output_cb)
- continue;
- ret = fcb->output_cb(outbuf, outlen, fcb);
- if (ret < 0)
- close_filter_callback(fcb);
+ int ret, filter_num, argc;
+ char *errctx = NULL, **argv;
+ const struct lls_command *cmd;
+ const struct filter *f;
+
+ ret = create_argv(fa, " \t\n", &argv);
+ if (ret < 0)
+ goto fail;
+ argc = ret;
+ ret = lls(lls_lookup_subcmd(argv[0], filter_cmd_suite, &errctx));
+ if (ret < 0)
+ goto free_argv;
+ filter_num = ret;
+ cmd = FILTER_CMD(filter_num);
+ if (!filter_supported(filter_num)) {
+ ret = -E_UNSUPPORTED_FILTER;
+ errctx = make_message("bad filter name: %s",
+ lls_command_name(cmd));
+ goto free_argv;