getrules_decoder.decoders, getrules_decoder.count); - break; - case PFNL_CMD_GET_LIMIT: - nl_decode_attrs_raw(fp, nla, nlm_len, - set_limit_decoder.decoders, set_limit_decoder.count); - break; - case PFNL_CMD_GET_ADDR: - nl_decode_attrs_raw(fp, nla, nlm_len, - addr_decoder.decoders, addr_decoder.count); - break; - case PFNL_CMD_GET_ADDRS: - nl_decode_attrs_raw(fp, nla, nlm_len, - addr_decoder.decoders, addr_decoder.count); - break; - case PFNL_CMD_KILLSTATES: - nl_decode_attrs_raw(fp, nla, nlm_len, - killclear_states_decoder.decoders, - killclear_states_decoder.count); - break; - default: - break; + const struct pfnl_cmd_decoder *d; + + d = search_cmd_decoders(cmd_decoder, nitems(cmd_decoder), cmd); + if (d != NULL) { + nl_decode_attrs_raw(fp, nla, nlm_len, + d->ds->decoders, d->ds->count); } }