Long-Term Supported Versions

    Functions changed info

    ---------------diffs in nftables_libnftables.so.1.0.0_abidiff.out:----------------

    ELF SONAME changed

    Functions changes summary: 409 Removed, 2 Changed (16 filtered out), 2 Added functions

    Variables changes summary: 0 Removed (87 filtered out), 0 Changed, 0 Added variables

    Function symbols changes summary: 2 Removed, 0 Added function symbols not referenced by debug info

    Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info

    SONAME changed from 'libnftables.so.0' to 'libnftables.so.1'

    409 Removed functions:

    [D] 'function void __memory_allocation_error(const char*, uint32_t)' {__memory_allocation_error}

    [D] 'function void __netlink_abi_error(const char*, int, const char*)' {__netlink_abi_error}

    [D] 'function void __netlink_init_error(const char*, int, const char*)' {__netlink_init_error}

    [D] 'function int __stmt_binary_error(eval_ctx*, const location*, const location*, const char*, ...)' {__stmt_binary_error}

    [D] 'function nftnl_expr* alloc_nft_expr(const char*)' {alloc_nft_expr}

    [D] 'function nftnl_chain* alloc_nftnl_chain(const handle*)' {alloc_nftnl_chain}

    [D] 'function nftnl_rule* alloc_nftnl_rule(const handle*)' {alloc_nftnl_rule}

    [D] 'function nftnl_set* alloc_nftnl_set(const handle*)' {alloc_nftnl_set}

    [D] 'function nftnl_table* alloc_nftnl_table(const handle*)' {alloc_nftnl_table}

    [D] 'function expr* binop_expr_alloc(const location*, ops, expr*, expr*)' {binop_expr_alloc}

    [D] 'function expr* bitmask_expr_to_binops(expr*)' {bitmask_expr_to_binops}

    [D] 'function void cache_flush(mnl_socket*, nft_cache*, cmd_ops, list_head*, unsigned int, output_ctx*)' {cache_flush}

    [D] 'function void cache_release(nft_cache*)' {cache_release}

    [D] 'function int cache_update(mnl_socket*, nft_cache*, cmd_ops, list_head*, unsigned int, output_ctx*)' {cache_update}

    [D] 'function void chain_add_hash(chain*, table*)' {chain_add_hash}

    [D] 'function chain* chain_alloc(const char*)' {chain_alloc}

    [D] 'function void chain_free(chain*)' {chain_free}

    [D] 'function chain* chain_get(chain*)' {chain_get}

    [D] 'function const char* chain_hookname_lookup(const char*)' {chain_hookname_lookup}

    [D] 'function chain* chain_lookup(const table*, const handle*)' {chain_lookup}

    [D] 'function const char* chain_policy2str(uint32_t)' {chain_policy2str}

    [D] 'function void chain_print_plain(const chain*, output_ctx*)' {chain_print_plain}

    [D] 'function const char* chain_type_name_lookup(const char*)' {chain_type_name_lookup}

    [D] 'function cmd* cmd_alloc(cmd_ops, cmd_obj, const handle*, const location*, void*)' {cmd_alloc}

    [D] 'function cmd* cmd_alloc_obj_ct(cmd_ops, int, const handle*, const location*, obj*)' {cmd_alloc_obj_ct}

    [D] 'function int cmd_evaluate(eval_ctx*, cmd*)' {cmd_evaluate}

    [D] 'function void cmd_free(cmd*)' {cmd_free}

    [D] 'function void compound_expr_add(expr*, expr*)' {compound_expr_add}

    [D] 'function expr* compound_expr_alloc(const location*, const expr_ops*)' {compound_expr_alloc}

    [D] 'function void compound_expr_remove(expr*, expr*)' {compound_expr_remove}

    [D] 'function expr* concat_expr_alloc(const location*)' {concat_expr_alloc}

    [D] 'function const datatype* concat_type_alloc(uint32_t)' {concat_type_alloc}

    [D] 'function void concat_type_destroy(const datatype*)' {concat_type_destroy}

    [D] 'function stmt* connlimit_stmt_alloc(const location*)' {connlimit_stmt_alloc}

    [D] 'function expr* constant_expr_alloc(const location*, const datatype*, byteorder, unsigned int, void*)' {constant_expr_alloc}

    [D] 'function expr* constant_expr_join(const expr*, const expr*)' {constant_expr_join}

    [D] 'function expr* constant_expr_splice(expr*, unsigned int)' {constant_expr_splice}

    [D] 'function stmt* counter_stmt_alloc(const location*)' {counter_stmt_alloc}

    [D] 'function const char* ct_dir2str(int)' {ct_dir2str}

    [D] 'function expr* ct_expr_alloc(const location*, nft_ct_keys, int8_t, uint8_t)' {ct_expr_alloc}

    [D] 'function void ct_expr_update_type(proto_ctx*, expr*)' {ct_expr_update_type}

    [D] 'function const char* ct_label2str(unsigned long int)' {ct_label2str}

    [D] 'function void ct_label_table_exit()' {ct_label_table_exit}

    [D] 'function void ct_label_table_init()' {ct_label_table_init}

    [D] 'function stmt* ct_stmt_alloc(const location*, nft_ct_keys, int8_t, expr*)' {ct_stmt_alloc}

    [D] 'function error_record* data_unit_parse(const location*, const char*, uint64_t*)' {data_unit_parse}

    [D] 'function const datatype* datatype_lookup(datatypes)' {datatype_lookup}

    [D] 'function const datatype* datatype_lookup_byname(const char*)' {datatype_lookup_byname}

    [D] 'function void datatype_print(const expr*, output_ctx*)' {datatype_print}

    [D] 'function void devgroup_table_exit()' {devgroup_table_exit}

    [D] 'function void devgroup_table_init()' {devgroup_table_init}

    [D] 'function int do_command(netlink_ctx*, cmd*)' {do_command}

    [D] 'function stmt* dup_stmt_alloc(const location*)' {dup_stmt_alloc}

    [D] 'function void erec_add_location(error_record*, const location*)' {erec_add_location}

    [D] 'function error_record* erec_create(error_record_types, const location*, const char*, ...)' {erec_create}

    [D] 'function void erec_destroy(error_record*)' {erec_destroy}

    [D] 'function void erec_print(output_ctx*, const error_record*, unsigned int)' {erec_print}

    [D] 'function void erec_print_list(output_ctx*, list_head*, unsigned int)' {erec_print_list}

    [D] 'function error_record* erec_vcreate(error_record_types, const location*, const char*, va_list)' {erec_vcreate}

    [D] 'function expr* expr_alloc(const location*, const expr_ops*, const datatype*, byteorder, unsigned int)' {expr_alloc}

    [D] 'function const datatype* expr_basetype(const expr*)' {expr_basetype}

    [D] 'function int expr_binary_error(list_head*, const expr*, const expr*, const char*, ...)' {expr_binary_error}

    [D] 'function expr* expr_clone(const expr*)' {expr_clone}

    [D] 'function bool expr_cmp(const expr*, const expr*)' {expr_cmp}

    [D] 'function void expr_describe(const expr*, output_ctx*)' {expr_describe}

    [D] 'function void expr_free(expr*)' {expr_free}

    [D] 'function expr* expr_get(expr*)' {expr_get}

    [D] 'function void expr_print(const expr*, output_ctx*)' {expr_print}

    [D] 'function void expr_set_type(expr*, const datatype*, byteorder)' {expr_set_type}

    [D] 'function stmt* expr_stmt_alloc(const location*, expr*)' {expr_stmt_alloc}

    [D] 'function void exthdr_dependency_kill(payload_dep_ctx*, expr*, unsigned int)' {exthdr_dependency_kill}

    [D] 'function expr* exthdr_expr_alloc(const location*, const exthdr_desc*, uint8_t)' {exthdr_expr_alloc}

    [D] 'function const exthdr_desc* exthdr_find_proto(uint8_t)' {exthdr_find_proto}

    [D] 'function bool exthdr_find_template(expr*, const expr*, unsigned int*)' {exthdr_find_template}

    [D] 'function int exthdr_gen_dependency(eval_ctx*, const expr*, const proto_desc*, proto_bases, stmt**)' {exthdr_gen_dependency}

    [D] 'function void exthdr_init_raw(expr*, uint8_t, unsigned int, unsigned int, nft_exthdr_op, uint32_t)' {exthdr_init_raw}

    [D] 'function stmt* exthdr_stmt_alloc(const location*, expr*, expr*)' {exthdr_stmt_alloc}

    [D] 'function const char* family2str(unsigned int)' {family2str}

    [D] 'function expr* fib_expr_alloc(const location*, unsigned int, unsigned int)' {fib_expr_alloc}

    [D] 'function const char* fib_result_str(nft_fib_result)' {fib_result_str}

    [D] 'function expr* flag_expr_alloc(const location*, const datatype*, byteorder, unsigned int, unsigned long int)' {flag_expr_alloc}

    [D] 'function stmt* flow_offload_stmt_alloc(const location*, const char*)' {flow_offload_stmt_alloc}

    [D] 'function void flowtable_add_hash(flowtable*, table*)' {flowtable_add_hash}

    [D] 'function flowtable* flowtable_alloc(const location*)' {flowtable_alloc}

    [D] 'function void flowtable_free(flowtable*)' {flowtable_free}

    [D] 'function flowtable* flowtable_get(flowtable*)' {flowtable_get}

    [D] 'function void flowtable_print(const flowtable*, output_ctx*)' {flowtable_print}

    [D] 'function stmt* fwd_stmt_alloc(const location*)' {fwd_stmt_alloc}

    [D] 'function const char* get_rate(uint64_t, uint64_t*)' {get_rate}

    [D] 'function void get_set_decompose(table*, set*)' {get_set_decompose}

    [D] 'function expr* get_set_intervals(const set*, const expr*)' {get_set_intervals}

    [D] 'function const char* get_unit(uint64_t)' {get_unit}

    [D] 'function void gmp_init()' {gmp_init}

    [D] 'function void handle_free(handle*)' {handle_free}

    [D] 'function void handle_merge(handle*, const handle*)' {handle_merge}

    [D] 'function expr* hash_expr_alloc(const location*, uint32_t, bool, uint32_t, uint32_t, nft_hash_types)' {hash_expr_alloc}

    [D] 'function const char* hooknum2str(unsigned int, unsigned int)' {hooknum2str}

    [D] 'function void iface_cache_release()' {iface_cache_release}

    [D] 'function void iface_cache_update()' {iface_cache_update}

    [D] 'function void interval_map_decompose(expr*)' {interval_map_decompose}

    [D] 'function stmt* limit_stmt_alloc(const location*)' {limit_stmt_alloc}

    [D] 'function expr* list_expr_alloc(const location*)' {list_expr_alloc}

    [D] 'function void list_expr_sort(list_head*)' {list_expr_sort}

    [D] 'function const char* log_level(uint32_t)' {log_level}

    [D] 'function int log_level_parse(const char*)' {log_level_parse}

    [D] 'function stmt* log_stmt_alloc(const location*)' {log_stmt_alloc}

    [D] 'function expr* map_expr_alloc(const location*, expr*, expr*)' {map_expr_alloc}

    [D] 'function stmt* map_stmt_alloc(const location*)' {map_stmt_alloc}

    [D] 'function expr* mapping_expr_alloc(const location*, expr*, expr*)' {mapping_expr_alloc}

    [D] 'function void mark_table_exit()' {mark_table_exit}

    [D] 'function void mark_table_init()' {mark_table_init}

    [D] 'function markup* markup_alloc(uint32_t)' {markup_alloc}

    [D] 'function void markup_free(markup*)' {markup_free}

    [D] 'function expr* meta_expr_alloc(const location*, nft_meta_keys)' {meta_expr_alloc}

    [D] 'function error_record* meta_key_parse(const location*, const char*, unsigned int*)' {meta_key_parse}

    [D] 'function stmt* meta_stmt_alloc(const location*, nft_meta_keys, expr*)' {meta_stmt_alloc}

    [D] 'function stmt* meta_stmt_meta_iiftype(const location*, uint16_t)' {meta_stmt_meta_iiftype}

    [D] 'function stmt* meter_stmt_alloc(const location*)' {meter_stmt_alloc}

    [D] 'function uint32_t mnl_batch_begin(nftnl_batch*, uint32_t)' {mnl_batch_begin}

    [D] 'function void mnl_batch_end(nftnl_batch*, uint32_t)' {mnl_batch_end}

    [D] 'function nftnl_batch* mnl_batch_init()' {mnl_batch_init}

    [D] 'function bool mnl_batch_ready(nftnl_batch*)' {mnl_batch_ready}

    [D] 'function void mnl_batch_reset(nftnl_batch*)' {mnl_batch_reset}

    [D] 'function int mnl_batch_talk(netlink_ctx*, list_head*)' {mnl_batch_talk}

    [D] 'function void mnl_err_list_free(mnl_err*)' {mnl_err_list_free}

    [D] 'function uint16_t mnl_genid_get(netlink_ctx*)' {mnl_genid_get}

    [D] 'function int mnl_nft_chain_batch_add(nftnl_chain*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_chain_batch_add}

    [D] 'function int mnl_nft_chain_batch_del(nftnl_chain*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_chain_batch_del}

    [D] 'function nftnl_chain_list* mnl_nft_chain_dump(netlink_ctx*, int)' {mnl_nft_chain_dump}

    [D] 'function int mnl_nft_event_listener(mnl_socket*, unsigned int, output_ctx*, int (const nlmsghdr*, void*), void)' {mnl_nft_event_listener}

    [D] 'function int mnl_nft_flowtable_batch_add(nftnl_flowtable*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_flowtable_batch_add}

    [D] 'function int mnl_nft_flowtable_batch_del(nftnl_flowtable*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_flowtable_batch_del}

    [D] 'function nftnl_flowtable_list* mnl_nft_flowtable_dump(netlink_ctx*, int, const char*)' {mnl_nft_flowtable_dump}

    [D] 'function int mnl_nft_obj_batch_add(nftnl_obj*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_obj_batch_add}

    [D] 'function int mnl_nft_obj_batch_del(nftnl_obj*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_obj_batch_del}

    [D] 'function nftnl_obj_list* mnl_nft_obj_dump(netlink_ctx*, int, const char*, const char*, uint32_t, bool, bool)' {mnl_nft_obj_dump}

    [D] 'function int mnl_nft_rule_batch_add(nftnl_rule*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_rule_batch_add}

    [D] 'function int mnl_nft_rule_batch_del(nftnl_rule*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_rule_batch_del}

    [D] 'function int mnl_nft_rule_batch_replace(nftnl_rule*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_rule_batch_replace}

    [D] 'function nftnl_rule_list* mnl_nft_rule_dump(netlink_ctx*, int)' {mnl_nft_rule_dump}

    [D] 'function nftnl_ruleset* mnl_nft_ruleset_dump(netlink_ctx*, uint32_t)' {mnl_nft_ruleset_dump}

    [D] 'function int mnl_nft_set_batch_add(nftnl_set*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_set_batch_add}

    [D] 'function int mnl_nft_set_batch_del(nftnl_set*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_set_batch_del}

    [D] 'function nftnl_set_list* mnl_nft_set_dump(netlink_ctx*, int, const char*)' {mnl_nft_set_dump}

    [D] 'function int mnl_nft_setelem_batch_add(nftnl_set*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_setelem_batch_add}

    [D] 'function int mnl_nft_setelem_batch_del(nftnl_set*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_setelem_batch_del}

    [D] 'function int mnl_nft_setelem_batch_flush(nftnl_set*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_setelem_batch_flush}

    [D] 'function int mnl_nft_setelem_get(netlink_ctx*, nftnl_set*)' {mnl_nft_setelem_get}

    [D] 'function nftnl_set* mnl_nft_setelem_get_one(netlink_ctx*, nftnl_set*)' {mnl_nft_setelem_get_one}

    [D] 'function int mnl_nft_table_batch_add(nftnl_table*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_table_batch_add}

    [D] 'function int mnl_nft_table_batch_del(nftnl_table*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_table_batch_del}

    [D] 'function nftnl_table_list* mnl_nft_table_dump(netlink_ctx*, int)' {mnl_nft_table_dump}

    [D] 'function uint32_t mnl_seqnum_alloc(unsigned int*)' {mnl_seqnum_alloc}

    [D] 'function monitor* monitor_alloc(uint32_t, uint32_t, const char*)' {monitor_alloc}

    [D] 'function void monitor_free(monitor*)' {monitor_free}

    [D] 'function void mpz_bitmask(__mpz_struct*, unsigned int)' {mpz_bitmask}

    [D] 'function void* mpz_export_data(void*, const __mpz_struct*, byteorder, unsigned int)' {mpz_export_data}

    [D] 'function uint16_t mpz_get_be16(const __mpz_struct*)' {mpz_get_be16}

    [D] 'function uint32_t mpz_get_be32(const __mpz_struct*)' {mpz_get_be32}

    [D] 'function uint16_t mpz_get_uint16(const __mpz_struct*)' {mpz_get_uint16}

    [D] 'function uint32_t mpz_get_uint32(const __mpz_struct*)' {mpz_get_uint32}

    [D] 'function uint64_t mpz_get_uint64(const __mpz_struct*)' {mpz_get_uint64}

    [D] 'function uint8_t mpz_get_uint8(const __mpz_struct*)' {mpz_get_uint8}

    [D] 'function void mpz_import_data(__mpz_struct*, void*, byteorder, unsigned int)' {mpz_import_data}

    [D] 'function void mpz_init_bitmask(__mpz_struct*, unsigned int)' {mpz_init_bitmask}

    [D] 'function void mpz_lshift_ui(__mpz_struct*, unsigned int)' {mpz_lshift_ui}

    [D] 'function void mpz_prefixmask(__mpz_struct*, unsigned int, unsigned int)' {mpz_prefixmask}

    [D] 'function void mpz_rshift_ui(__mpz_struct*, unsigned int)' {mpz_rshift_ui}

    [D] 'function void mpz_switch_byteorder(__mpz_struct*, unsigned int)' {mpz_switch_byteorder}

    [D] 'function bool must_print_eq_op(const expr*)' {must_print_eq_op}

    [D] 'function const char* nat_etype2str(nft_nat_etypes)' {nat_etype2str}

    [D] 'function stmt* nat_stmt_alloc(const location*, nft_nat_etypes)' {nat_stmt_alloc}

    [D] 'function int netlink_add_chain_batch(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_chain_batch}

    [D] 'function int netlink_add_flowtable(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_flowtable}

    [D] 'function int netlink_add_obj(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_obj}

    [D] 'function int netlink_add_rule_batch(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_rule_batch}

    [D] 'function int netlink_add_set_batch(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_set_batch}

    [D] 'function int netlink_add_setelems_batch(netlink_ctx*, const handle*, const expr*, uint32_t)' {netlink_add_setelems_batch}

    [D] 'function int netlink_add_table_batch(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_table_batch}

    [D] 'function expr* netlink_alloc_data(const location*, const nft_data_delinearize*, nft_registers)' {netlink_alloc_data}

    [D] 'function expr* netlink_alloc_value(const location*, const nft_data_delinearize*)' {netlink_alloc_value}

    [D] 'function int netlink_batch_send(netlink_ctx*, list_head*)' {netlink_batch_send}

    [D] 'function void netlink_close_sock(mnl_socket*)' {netlink_close_sock}

    [D] 'function int netlink_del_rule_batch(netlink_ctx*, const cmd*)' {netlink_del_rule_batch}

    [D] 'function int netlink_delete_chain_batch(netlink_ctx*, const cmd*)' {netlink_delete_chain_batch}

    [D] 'function int netlink_delete_flowtable(netlink_ctx*, const cmd*)' {netlink_delete_flowtable}

    [D] 'function int netlink_delete_obj(netlink_ctx*, const cmd*, uint32_t)' {netlink_delete_obj}

    [D] 'function int netlink_delete_set_batch(netlink_ctx*, const cmd*)' {netlink_delete_set_batch}

    [D] 'function int netlink_delete_setelems_batch(netlink_ctx*, const cmd*)' {netlink_delete_setelems_batch}

    [D] 'function int netlink_delete_table_batch(netlink_ctx*, const cmd*)' {netlink_delete_table_batch}

    [D] 'function chain* netlink_delinearize_chain(netlink_ctx*, const nftnl_chain*)' {netlink_delinearize_chain}

    [D] 'function obj* netlink_delinearize_obj(netlink_ctx*, nftnl_obj*)' {netlink_delinearize_obj}

    [D] 'function rule* netlink_delinearize_rule(netlink_ctx*, nftnl_rule*)' {netlink_delinearize_rule}

    [D] 'function set* netlink_delinearize_set(netlink_ctx*, const nftnl_set*)' {netlink_delinearize_set}

    [D] 'function int netlink_delinearize_setelem(nftnl_set_elem*, const set*, nft_cache*)' {netlink_delinearize_setelem}

    [D] 'function table* netlink_delinearize_table(netlink_ctx*, const nftnl_table*)' {netlink_delinearize_table}

    [D] 'function void netlink_dump_chain(const nftnl_chain*, netlink_ctx*)' {netlink_dump_chain}

    [D] 'function void netlink_dump_expr(const nftnl_expr*, FILE*, unsigned int)' {netlink_dump_expr}

    [D] 'function void netlink_dump_obj(nftnl_obj*, netlink_ctx*)' {netlink_dump_obj}

    [D] 'function void netlink_dump_rule(const nftnl_rule*, netlink_ctx*)' {netlink_dump_rule}

    [D] 'function nftnl_ruleset* netlink_dump_ruleset(netlink_ctx*, const handle*, const location*)' {netlink_dump_ruleset}

    [D] 'function void netlink_dump_set(const nftnl_set*, netlink_ctx*)' {netlink_dump_set}

    [D] 'function int netlink_echo_callback(const nlmsghdr*, void*)' {netlink_echo_callback}

    [D] 'function int netlink_events_trace_cb(const nlmsghdr*, int, netlink_mon_handler*)' {netlink_events_trace_cb}

    [D] 'function int netlink_flush_chain(netlink_ctx*, const cmd*)' {netlink_flush_chain}

    [D] 'function int netlink_flush_setelems(netlink_ctx*, const cmd*)' {netlink_flush_setelems}

    [D] 'function void netlink_gen_data(const expr*, nft_data_linearize*)' {netlink_gen_data}

    [D] 'function void netlink_gen_raw_data(const __mpz_struct*, byteorder, unsigned int, nft_data_linearize*)' {netlink_gen_raw_data}

    [D] 'function uint16_t netlink_genid_get(netlink_ctx*)' {netlink_genid_get}

    [D] 'function int netlink_get_setelem(netlink_ctx*, const handle*, const location*, table*, set*, expr*)' {netlink_get_setelem}

    [D] 'function int netlink_io_error(netlink_ctx*, const location*, const char*, ...)' {netlink_io_error}

    [D] 'function void netlink_linearize_rule(netlink_ctx*, nftnl_rule*, const rule*)' {netlink_linearize_rule}

    [D] 'function int netlink_list_chains(netlink_ctx*, const handle*)' {netlink_list_chains}

    [D] 'function int netlink_list_flowtables(netlink_ctx*, const handle*)' {netlink_list_flowtables}

    [D] 'function int netlink_list_objs(netlink_ctx*, const handle*)' {netlink_list_objs}

    [D] 'function int netlink_list_setelems(netlink_ctx*, const handle*, set*)' {netlink_list_setelems}

    [D] 'function int netlink_list_sets(netlink_ctx*, const handle*)' {netlink_list_sets}

    [D] 'function int netlink_list_table(netlink_ctx*, const handle*)' {netlink_list_table}

    [D] 'function int netlink_list_tables(netlink_ctx*, const handle*)' {netlink_list_tables}

    [D] 'function int netlink_markup_parse_cb(const nftnl_parse_ctx*)' {netlink_markup_parse_cb}

    [D] 'function int netlink_monitor(netlink_mon_handler*, mnl_socket*)' {netlink_monitor}

    [D] 'function mnl_socket* netlink_open_sock()' {netlink_open_sock}

    [D] 'function stmt* netlink_parse_set_expr(const set*, const nft_cache*, const nftnl_expr*)' {netlink_parse_set_expr}

    [D] 'function int netlink_rename_chain_batch(netlink_ctx*, const handle*, const cmd*)' {netlink_rename_chain_batch}

    [D] 'function int netlink_replace_rule_batch(netlink_ctx*, const cmd*)' {netlink_replace_rule_batch}

    [D] 'function int netlink_reset_objs(netlink_ctx*, const cmd*, uint32_t, bool)' {netlink_reset_objs}

    [D] 'function void netlink_restart(mnl_socket*)' {netlink_restart}

    [D] 'function YY_BUFFER_STATE nft__create_buffer(FILE*, int, yyscan_t)' {nft__create_buffer}

    [D] 'function void nft__delete_buffer(YY_BUFFER_STATE, yyscan_t)' {nft__delete_buffer}

    [D] 'function void nft__flush_buffer(YY_BUFFER_STATE, yyscan_t)' {nft__flush_buffer}

    [D] 'function YY_BUFFER_STATE nft__scan_buffer(char*, yy_size_t, yyscan_t)' {nft__scan_buffer}

    [D] 'function YY_BUFFER_STATE nft__scan_bytes(const char*, int, yyscan_t)' {nft__scan_bytes}

    [D] 'function YY_BUFFER_STATE nft__scan_string(const char*, yyscan_t)' {nft__scan_string}

    [D] 'function void nft__switch_to_buffer(YY_BUFFER_STATE, yyscan_t)' {nft__switch_to_buffer}

    [D] 'function void* nft_alloc(yy_size_t, yyscan_t)' {nft_alloc}

    [D] 'function void nft_cmd_expand(cmd*)' {nft_cmd_expand}

    [D] 'function bool nft_ctx_output_get_echo(nft_ctx*)' {nft_ctx_output_get_echo}

    [D] 'function bool nft_ctx_output_get_handle(nft_ctx*)' {nft_ctx_output_get_handle}

    [D] 'function bool nft_ctx_output_get_ip2name(nft_ctx*)' {nft_ctx_output_get_ip2name}

    [D] 'function bool nft_ctx_output_get_json(nft_ctx*)' {nft_ctx_output_get_json}

    [D] 'function nft_numeric_level nft_ctx_output_get_numeric(nft_ctx*)' {nft_ctx_output_get_numeric}

    [D] 'function bool nft_ctx_output_get_stateless(nft_ctx*)' {nft_ctx_output_get_stateless}

    [D] 'function void nft_ctx_output_set_echo(nft_ctx*, bool)' {nft_ctx_output_set_echo}

    [D] 'function void nft_ctx_output_set_handle(nft_ctx*, bool)' {nft_ctx_output_set_handle}

    [D] 'function void nft_ctx_output_set_ip2name(nft_ctx*, bool)' {nft_ctx_output_set_ip2name}

    [D] 'function void nft_ctx_output_set_json(nft_ctx*, bool)' {nft_ctx_output_set_json}

    [D] 'function void nft_ctx_output_set_numeric(nft_ctx*, nft_numeric_level)' {nft_ctx_output_set_numeric}

    [D] 'function void nft_ctx_output_set_stateless(nft_ctx*, bool)' {nft_ctx_output_set_stateless}

    [D] 'function void nft_free(void*, yyscan_t)' {nft_free}

    [D] 'function int nft_get_column(yyscan_t)' {nft_get_column}

    [D] 'function int nft_get_debug(yyscan_t)' {nft_get_debug}

    [D] 'function void* nft_get_extra(yyscan_t)' {nft_get_extra}

    [D] 'function FILE* nft_get_in(yyscan_t)' {nft_get_in}

    [D] 'function int nft_get_leng(yyscan_t)' {nft_get_leng}

    [D] 'function int nft_get_lineno(yyscan_t)' {nft_get_lineno}

    [D] 'function location* nft_get_lloc(yyscan_t)' {nft_get_lloc}

    [D] 'function YYSTYPE* nft_get_lval(yyscan_t)' {nft_get_lval}

    [D] 'function FILE* nft_get_out(yyscan_t)' {nft_get_out}

    [D] 'function char* nft_get_text(yyscan_t)' {nft_get_text}

    [D] 'function int nft_gmp_print(output_ctx*, const char*, ...)' {nft_gmp_print}

    [D] 'function char* nft_if_indextoname(unsigned int, char*)' {nft_if_indextoname}

    [D] 'function unsigned int nft_if_nametoindex(const char*)' {nft_if_nametoindex}

    [D] 'function int nft_lex(YYSTYPE*, location*, yyscan_t)' {nft_lex}

    [D] 'function int nft_lex_destroy(yyscan_t)' {nft_lex_destroy}

    [D] 'function int nft_lex_init(yyscan_t*)' {nft_lex_init}

    [D] 'function int nft_lex_init_extra(void*, yyscan_t*)' {nft_lex_init_extra}

    [D] 'function int nft_parse(nft_ctx*, void*, parser_state*)' {nft_parse}

    [D] 'function void nft_pop_buffer_state(yyscan_t)' {nft_pop_buffer_state}

    [D] 'function int nft_print(output_ctx*, const char*, ...)' {nft_print}

    [D] 'function void nft_push_buffer_state(YY_BUFFER_STATE, yyscan_t)' {nft_push_buffer_state}

    [D] 'function void* nft_realloc(void*, yy_size_t, yyscan_t)' {nft_realloc}

    [D] 'function void nft_restart(FILE*, yyscan_t)' {nft_restart}

    [D] 'function void nft_set_column(int, yyscan_t)' {nft_set_column}

    [D] 'function void nft_set_debug(int, yyscan_t)' {nft_set_debug}

    [D] 'function void nft_set_extra(void*, yyscan_t)' {nft_set_extra}

    [D] 'function void nft_set_in(FILE*, yyscan_t)' {nft_set_in}

    [D] 'function void nft_set_lineno(int, yyscan_t)' {nft_set_lineno}

    [D] 'function void nft_set_lloc(location*, yyscan_t)' {nft_set_lloc}

    [D] 'function void nft_set_lval(YYSTYPE*, yyscan_t)' {nft_set_lval}

    [D] 'function void nft_set_out(FILE*, yyscan_t)' {nft_set_out}

    [D] 'function stmt* notrack_stmt_alloc(const location*)' {notrack_stmt_alloc}

    [D] 'function expr* numgen_expr_alloc(const location*, nft_ng_types, uint32_t, uint32_t)' {numgen_expr_alloc}

    [D] 'function void obj_add_hash(obj*, table*)' {obj_add_hash}

    [D] 'function obj* obj_alloc(const location*)' {obj_alloc}

    [D] 'function void obj_free(obj*)' {obj_free}

    [D] 'function obj* obj_get(obj*)' {obj_get}

    [D] 'function obj* obj_lookup(const table*, const char*, uint32_t)' {obj_lookup}

    [D] 'function void obj_print(const obj*, output_ctx*)' {obj_print}

    [D] 'function void obj_print_plain(const obj*, output_ctx*)' {obj_print_plain}

    [D] 'function const char* obj_type_name(stmt_types)' {obj_type_name}

    [D] 'function uint32_t obj_type_to_cmd(uint32_t)' {obj_type_to_cmd}

    [D] 'function stmt* objref_stmt_alloc(const location*)' {objref_stmt_alloc}

    [D] 'function const char* objref_type_name(uint32_t)' {objref_type_name}

    [D] 'function void parser_init(nft_ctx*, parser_state*, list_head*, list_head*)' {parser_init}

    [D] 'function bool payload_can_merge(const expr*, const expr*)' {payload_can_merge}

    [D] 'function bool payload_dependency_exists(const payload_dep_ctx*, proto_bases)' {payload_dependency_exists}

    [D] 'function void payload_dependency_kill(payload_dep_ctx*, expr*, unsigned int)' {payload_dependency_kill}

    [D] 'function void payload_dependency_release(payload_dep_ctx*)' {payload_dependency_release}

    [D] 'function void payload_dependency_reset(payload_dep_ctx*)' {payload_dependency_reset}

    [D] 'function void payload_dependency_store(payload_dep_ctx*, stmt*, proto_bases)' {payload_dependency_store}

    [D] 'function expr* payload_expr_alloc(const location*, const proto_desc*, unsigned int)' {payload_expr_alloc}

    [D] 'function void payload_expr_complete(expr*, const proto_ctx*)' {payload_expr_complete}

    [D] 'function void payload_expr_expand(list_head*, expr*, const proto_ctx*)' {payload_expr_expand}

    [D] 'function expr* payload_expr_join(const expr*, const expr*)' {payload_expr_join}

    [D] 'function bool payload_expr_trim(expr*, expr*, const proto_ctx*, unsigned int*)' {payload_expr_trim}

    [D] 'function int payload_gen_dependency(eval_ctx*, const expr*, stmt**)' {payload_gen_dependency}

    [D] 'function unsigned int payload_hdr_field(const expr*)' {payload_hdr_field}

    [D] 'function void payload_init_raw(expr*, proto_bases, unsigned int, unsigned int)' {payload_init_raw}

    [D] 'function bool payload_is_known(const expr*)' {payload_is_known}

    [D] 'function bool payload_is_stacked(const proto_desc*, const expr*)' {payload_is_stacked}

    [D] 'function stmt* payload_stmt_alloc(const location*, expr*, expr*)' {payload_stmt_alloc}

    [D] 'function expr* prefix_expr_alloc(const location*, expr*, unsigned int)' {prefix_expr_alloc}

    [D] 'function void proto_ctx_init(proto_ctx*, unsigned int, unsigned int)' {proto_ctx_init}

    [D] 'function void proto_ctx_update(proto_ctx*, proto_bases, const location*, const proto_desc*)' {proto_ctx_update}

    [D] 'function const proto_desc* proto_dev_desc(uint16_t)' {proto_dev_desc}

    [D] 'function int proto_dev_type(const proto_desc*, uint16_t*)' {proto_dev_type}

    [D] 'function int proto_find_num(const proto_desc*, const proto_desc*)' {proto_find_num}

    [D] 'function const proto_desc* proto_find_upper(const proto_desc*, unsigned int)' {proto_find_upper}

    [D] 'function stmt* queue_stmt_alloc(const location*)' {queue_stmt_alloc}

    [D] 'function stmt* quota_stmt_alloc(const location*)' {quota_stmt_alloc}

    [D] 'function expr* range_expr_alloc(const location*, expr*, expr*)' {range_expr_alloc}

    [D] 'function void range_expr_value_high(__mpz_struct*, const expr*)' {range_expr_value_high}

    [D] 'function void range_expr_value_low(__mpz_struct*, const expr*)' {range_expr_value_low}

    [D] 'function error_record* rate_parse(const location*, const char*, uint64_t*, uint64_t*)' {rate_parse}

    [D] 'function void rb_erase(rb_node*, rb_root*)' {rb_erase}

    [D] 'function rb_node* rb_first(rb_root*)' {rb_first}

    [D] 'function void rb_insert_color(rb_node*, rb_root*)' {rb_insert_color}

    [D] 'function rb_node* rb_last(rb_root*)' {rb_last}

    [D] 'function rb_node* rb_next(rb_node*)' {rb_next}

    [D] 'function rb_node* rb_prev(rb_node*)' {rb_prev}

    [D] 'function void rb_replace_node(rb_node*, rb_node*, rb_root*)' {rb_replace_node}

    [D] 'function void realm_table_meta_exit()' {realm_table_meta_exit}

    [D] 'function void realm_table_meta_init()' {realm_table_meta_init}

    [D] 'function void realm_table_rt_exit()' {realm_table_rt_exit}

    [D] 'function void realm_table_rt_init()' {realm_table_rt_init}

    [D] 'function stmt* reject_stmt_alloc(const location*)' {reject_stmt_alloc}

    [D] 'function expr* relational_expr_alloc(const location*, ops, expr*, expr*)' {relational_expr_alloc}

    [D] 'function void relational_expr_pctx_update(proto_ctx*, const expr*)' {relational_expr_pctx_update}

    [D] 'function expr* rt_expr_alloc(const location*, nft_rt_keys, bool)' {rt_expr_alloc}

    [D] 'function void rt_expr_update_type(proto_ctx*, expr*)' {rt_expr_update_type}

    [D] 'function void rt_symbol_table_free(symbol_table*)' {rt_symbol_table_free}

    [D] 'function symbol_table* rt_symbol_table_init(const char*)' {rt_symbol_table_init}

    [D] 'function rule* rule_alloc(const location*, const handle*)' {rule_alloc}

    [D] 'function void rule_free(rule*)' {rule_free}

    [D] 'function rule* rule_get(rule*)' {rule_get}

    [D] 'function rule* rule_lookup(const chain*, uint64_t)' {rule_lookup}

    [D] 'function error_record* rule_postprocess(rule*)' {rule_postprocess}

    [D] 'function void rule_print(const rule*, output_ctx*)' {rule_print}

    [D] 'function void scanner_destroy(void*)' {scanner_destroy}

    [D] 'function int scanner_include_file(nft_ctx*, void*, const char*, const location*)' {scanner_include_file}

    [D] 'function void* scanner_init(parser_state*)' {scanner_init}

    [D] 'function void scanner_push_buffer(void*, const input_descriptor*, const char*)' {scanner_push_buffer}

    [D] 'function int scanner_read_file(void*, const char*, const location*)' {scanner_read_file}

    [D] 'function scope* scope_init(scope*, const scope*)' {scope_init}

    [D] 'function void scope_release(const scope*)' {scope_release}

    [D] 'function void set_add_hash(set*, table*)' {set_add_hash}

    [D] 'function set* set_alloc(const location*)' {set_alloc}

    [D] 'function set* set_clone(const set*)' {set_clone}

    [D] 'function const datatype* set_datatype_alloc(const datatype*, unsigned int)' {set_datatype_alloc}

    [D] 'function void set_datatype_destroy(const datatype*)' {set_datatype_destroy}

    [D] 'function expr* set_elem_expr_alloc(const location*, expr*)' {set_elem_expr_alloc}

    [D] 'function expr* set_expr_alloc(const location*, const set*)' {set_expr_alloc}

    [D] 'function void set_free(set*)' {set_free}

    [D] 'function set* set_get(set*)' {set_get}

    [D] 'function set* set_lookup(const table*, const char*)' {set_lookup}

    [D] 'function set* set_lookup_global(uint32_t, const char*, const char*, nft_cache*)' {set_lookup_global}

    [D] 'function const char* set_policy2str(uint32_t)' {set_policy2str}

    [D] 'function void set_print(const set*, output_ctx*)' {set_print}

    [D] 'function void set_print_plain(const set*, output_ctx*)' {set_print_plain}

    [D] 'function expr* set_ref_expr_alloc(const location*, set*)' {set_ref_expr_alloc}

    [D] 'function stmt* set_stmt_alloc(const location*)' {set_stmt_alloc}

    [D] 'function int set_to_intervals(list_head*, set*, expr*, bool, unsigned int, bool)' {set_to_intervals}

    [D] 'function expr* socket_expr_alloc(const location*, nft_socket_keys)' {socket_expr_alloc}

    [D] 'function stmt* stmt_alloc(const location*, const stmt_ops*)' {stmt_alloc}

    [D] 'function int stmt_evaluate(eval_ctx*, stmt*)' {stmt_evaluate}

    [D] 'function void stmt_free(stmt*)' {stmt_free}

    [D] 'function void stmt_list_free(list_head*)' {stmt_list_free}

    [D] 'function void stmt_print(const stmt*, output_ctx*)' {stmt_print}

    [D] 'function void symbol_bind(scope*, const char*, expr*)' {symbol_bind}

    [D] 'function expr* symbol_expr_alloc(const location*, symbol_types, scope*, const char*)' {symbol_expr_alloc}

    [D] 'function symbol* symbol_get(const scope*, const char*)' {symbol_get}

    [D] 'function symbol* symbol_lookup(const scope*, const char*)' {symbol_lookup}

    [D] 'function error_record* symbol_parse(const expr*, expr**)' {symbol_parse}

    [D] 'function void symbol_table_print(const symbol_table*, const datatype*, byteorder, output_ctx*)' {symbol_table_print}

    [D] 'function int symbol_unbind(const scope*, const char*)' {symbol_unbind}

    [D] 'function error_record* symbolic_constant_parse(const expr*, const symbol_table*, expr**)' {symbolic_constant_parse}

    [D] 'function void symbolic_constant_print(const symbol_table*, const expr*, bool, output_ctx*)' {symbolic_constant_print}

    [D] 'function void table_add_hash(table*, nft_cache*)' {table_add_hash}

    [D] 'function table* table_alloc()' {table_alloc}

    [D] 'function void table_free(table*)' {table_free}

    [D] 'function table* table_get(table*)' {table_get}

    [D] 'function table* table_lookup(const handle*, const nft_cache*)' {table_lookup}

    [D] 'function expr* tcpopt_expr_alloc(const location*, uint8_t, uint8_t)' {tcpopt_expr_alloc}

    [D] 'function bool tcpopt_find_template(expr*, const expr*, unsigned int*)' {tcpopt_find_template}

    [D] 'function void tcpopt_init_raw(expr*, uint8_t, unsigned int, unsigned int, uint32_t)' {tcpopt_init_raw}

    [D] 'function error_record* time_parse(const location*, const char*, uint64_t*)' {time_parse}

    [D] 'function void time_print(uint64_t, output_ctx*)' {time_print}

    [D] 'function expr* unary_expr_alloc(const location*, ops, expr*)' {unary_expr_alloc}

    [D] 'function expr* variable_expr_alloc(const location*, scope*, symbol*)' {variable_expr_alloc}

    [D] 'function expr* verdict_expr_alloc(const location*, int, const char*)' {verdict_expr_alloc}

    [D] 'function stmt* verdict_stmt_alloc(const location*, expr*)' {verdict_stmt_alloc}

    [D] 'function void xfree(void*)' {xfree}

    [D] 'function void* xmalloc(size_t)' {xmalloc}

    [D] 'function void* xmalloc_array(size_t, size_t)' {xmalloc_array}

    [D] 'function void* xrealloc(void*, size_t)' {xrealloc}

    [D] 'function char* xstrdup(const char*)' {xstrdup}

    [D] 'function void xstrunescape(const char*, char*)' {xstrunescape}

    [D] 'function stmt* xt_stmt_alloc(const location*)' {xt_stmt_alloc}

    [D] 'function void* xzalloc(size_t)' {xzalloc}

    2 Added functions:

    [A] 'function unsigned int nft_ctx_output_get_flags(nft_ctx*)' {nft_ctx_output_get_flags}

    [A] 'function void nft_ctx_output_set_flags(nft_ctx*, unsigned int)' {nft_ctx_output_set_flags}

    2 functions with some indirect sub-type change:

    [C]'function int nft_ctx_add_include_path(nft_ctx*, const char*)' at libnftables.c:102:1 has some indirect sub-type changes:

    parameter 1 of type 'nft_ctx*' has sub-type changes:
      in pointed to type 'struct nft_ctx' at nftables.h:111:1:
        type size changed from 1600 to 1856 (in bits)
        2 data member insertions:
          'scope* nft_ctx::top_scope', at offset 1728 (in bits) at nftables.h:123:1
          'void* nft_ctx::json_root', at offset 1792 (in bits) at nftables.h:124:1
        6 data member changes:
         type of 'output_ctx nft_ctx::output' changed:
           type size changed from 832 to 960 (in bits)
           5 data member deletions:
             'unsigned int output_ctx::stateless', at offset 32 (in bits) at nftables.h:20:1
             'unsigned int output_ctx::ip2name', at offset 64 (in bits) at nftables.h:21:1
             'unsigned int output_ctx::handle', at offset 96 (in bits) at nftables.h:22:1
             'unsigned int output_ctx::echo', at offset 128 (in bits) at nftables.h:23:1
             'unsigned int output_ctx::json', at offset 160 (in bits) at nftables.h:24:1
           1 data member insertion:
             'symbol_tables output_ctx::tbl', at offset 704 (in bits) at nftables.h:35:1
           1 data member change:
            offset changed from 192 to 64 (in bits) (by -128 bits)
           no data member change (1 filtered);
         'bool nft_ctx::check' offset changed from 1088 to 1216 (in bits) (by +128 bits)
         type of 'nft_cache nft_ctx::cache' changed:
           type size hasn't changed
           1 data member insertion:
             'uint32_t nft_cache::flags', at offset 224 (in bits) at nftables.h:102:1
           1 data member change:
            type of 'uint16_t nft_cache::genid' changed:
              typedef name changed from uint16_t to uint32_t at stdint-uintn.h:26:1
              underlying type 'typedef __uint16_t' at types.h:39:1 changed:
                typedef name changed from __uint16_t to __uint32_t at types.h:41:1
                underlying type 'unsigned short int' changed:
                  type name changed from 'unsigned short int' to 'unsigned int'
                  type size changed from 16 to 32 (in bits)
         and offset changed from 1152 to 1280 (in bits) (by +128 bits)
         'uint32_t nft_ctx::flags' offset changed from 1408 to 1536 (in bits) (by +128 bits)
         type of 'parser_state* nft_ctx::state' changed:
           in pointed to type 'struct parser_state' at parser.h:16:1:
             type size changed from 14720 to 640 (in bits)
             3 data member deletions:
               'unsigned int parser_state::indesc_idx', at offset 11328 (in bits) at parser.h:19:1
               'scope parser_state::top_scope', at offset 11520 (in bits) at parser.h:24:1
               'eval_ctx parser_state::ectx', at offset 12032 (in bits) at parser.h:29:1
             6 data member changes:
              type of 'input_descriptor* parser_state::indesc' changed:
                in pointed to type 'struct input_descriptor' at nftables.h:188:1:
                  type size changed from 704 to 960 (in bits)
                  3 data member insertions:
                    'list_head input_descriptor::list', at offset 0 (in bits) at nftables.h:189:1
                    'FILE* input_descriptor::f', at offset 128 (in bits) at nftables.h:190:1
                    'unsigned int input_descriptor::depth', at offset 192 (in bits) at nftables.h:191:1
                  8 data member changes:
                   'location input_descriptor::location' offset changed from 0 to 256 (in bits) (by +256 bits)
                   'input_descriptor_types input_descriptor::type' offset changed from 320 to 576 (in bits) (by +256 bits)
                   'const char* input_descriptor::name' offset changed from 384 to 640 (in bits) (by +256 bits)
                   'const char* input_descriptor::data' offset changed from 448 to 704 (in bits) (by +256 bits)
                   'unsigned int input_descriptor::lineno' offset changed from 512 to 768 (in bits) (by +256 bits)
                   'unsigned int input_descriptor::column' offset changed from 544 to 800 (in bits) (by +256 bits)
                   'off_t input_descriptor::token_offset' offset changed from 576 to 832 (in bits) (by +256 bits)
                   'off_t input_descriptor::line_offset' offset changed from 640 to 896 (in bits) (by +256 bits)
              'list_head* parser_state::msgs' offset changed from 11392 to 192 (in bits) (by -11200 bits)
              'unsigned int parser_state::nerrs' offset changed from 11456 to 256 (in bits) (by -11200 bits)
              'scope* parser_state::scopes[3]' offset changed from 11712 to 320 (in bits) (by -11392 bits)
              'unsigned int parser_state::scope' offset changed from 11904 to 512 (in bits) (by -11392 bits)
              'list_head* parser_state::cmds' offset changed from 11968 to 576 (in bits) (by -11392 bits)
             1 data member change:
              type of 'input_descriptor parser_state::indescs[16]' changed:
                entity changed from 'input_descriptor[16]' to 'struct list_head' at list.h:21:1
                type size changed from 11264 to 128 (in bits)
              and name of 'parser_state::indescs' changed to 'parser_state::indesc_list' at parser.h:18:1
         and offset changed from 1472 to 1600 (in bits) (by +128 bits)
         'void* nft_ctx::scanner' offset changed from 1536 to 1664 (in bits) (by +128 bits)

    [C]'function int nft_run_cmd_from_buffer(nft_ctx*, char*, size_t)' at libnftables.c:433:1 has some indirect sub-type changes:

    parameter 3 of type 'typedef size_t' was removed

    2 Removed function symbols not referenced by debug info:



    Bug Catching

    Buggy Content

    Bug Description

    Submit As Issue

    It's a little complicated....

    I'd like to ask someone.


    Just a small problem.

    I can fix it online!

    Bug Type
    Specifications and Common Mistakes

    ● Misspellings or punctuation mistakes;

    ● Incorrect links, empty cells, or wrong formats;

    ● Chinese characters in English context;

    ● Minor inconsistencies between the UI and descriptions;

    ● Low writing fluency that does not affect understanding;

    ● Incorrect version numbers, including software package names and version numbers on the UI.


    ● Incorrect or missing key steps;

    ● Missing prerequisites or precautions;

    ● Ambiguous figures, tables, or texts;

    ● Unclear logic, such as missing classifications, items, and steps.


    ● Technical principles, function descriptions, or specifications inconsistent with those of the software;

    ● Incorrect schematic or architecture diagrams;

    ● Incorrect commands or command parameters;

    ● Incorrect code;

    ● Commands inconsistent with the functions;

    ● Wrong screenshots.

    Risk Warnings

    ● Lack of risk warnings for operations that may damage the system or important data.

    Content Compliance

    ● Contents that may violate applicable laws and regulations or geo-cultural context-sensitive words and expressions;

    ● Copyright infringement.

    How satisfied are you with this document

    Not satisfied at all
    Very satisfied
    Click to create an issue. An issue template will be automatically generated based on your feedback.
    Bug Catching
    编组 3备份