From: Igor Putovny Date: Tue, 8 Apr 2025 12:03:15 +0000 (+0200) Subject: Add dump_request_target X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79800711d8f631252902f6129ef9396f088db8e0;p=thirdparty%2Fbird.git Add dump_request_target --- diff --git a/lib/birdlib.h b/lib/birdlib.h index 70ea3fd38..45b9cfc06 100644 --- a/lib/birdlib.h +++ b/lib/birdlib.h @@ -248,10 +248,13 @@ static inline u32 u64_hash(u64 v) { return hash_value(u64_hash0(v, HASH_PARAM, 0)); } /* Dumping */ +struct dump_request_target {}; + struct dump_request { u64 size; btime begin; uint indent, offset; + struct dump_request_target *target; void (*write)(struct dump_request *, const char *fmt, ...); void (*report)(struct dump_request *, int state, const char *fmt, ...); }; diff --git a/nest/config.Y b/nest/config.Y index 36577227e..d5744549d 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -866,25 +866,25 @@ sym_args: CF_CLI_HELP(DUMP, ..., [[Dump debugging information to the given file]]) CF_CLI(DUMP RESOURCES, text,, [[Dump all allocated resource]]) -{ cmd_dump_file(this_cli, $3, "resources", resource_dump); } ; +{ cmd_dump_file(this_cli, $3, "resources", resource_dump, NULL); } ; CF_CLI(DUMP SOCKETS, text,, [[Dump open sockets]]) -{ cmd_dump_file(this_cli, $3, "sockets", sk_dump_all); } ; +{ cmd_dump_file(this_cli, $3, "sockets", sk_dump_all, NULL); } ; CF_CLI(DUMP AO KEYS, text,, [[Dump TCP-AO keys on sockets ]]) -{ cmd_dump_file(this_cli, $4, "AO keys", sk_dump_ao_all); } ; +{ cmd_dump_file(this_cli, $4, "AO keys", sk_dump_ao_all, NULL); } ; CF_CLI(DUMP EVENTS, text,, [[Dump event log]]) -{ cmd_dump_file(this_cli, $3, "event log", io_log_dump); } ; +{ cmd_dump_file(this_cli, $3, "event log", io_log_dump, NULL); } ; CF_CLI(DUMP INTERFACES, text,, [[Dump interface information]]) -{ cmd_dump_file(this_cli, $3, "interfaces", if_dump_all); } ; +{ cmd_dump_file(this_cli, $3, "interfaces", if_dump_all, NULL); } ; CF_CLI(DUMP NEIGHBORS, text,, [[Dump neighbor cache]]) -{ cmd_dump_file(this_cli, $3, "neighbor cache", neigh_dump_all); } ; +{ cmd_dump_file(this_cli, $3, "neighbor cache", neigh_dump_all, NULL); } ; CF_CLI(DUMP ATTRIBUTES, text,, [[Dump attribute cache]]) -{ cmd_dump_file(this_cli, $3, "attribute cache", rta_dump_all); } ; +{ cmd_dump_file(this_cli, $3, "attribute cache", rta_dump_all, NULL); } ; CF_CLI(DUMP ROUTES, text,, [[Dump routing table]]) -{ cmd_dump_file(this_cli, $3, "routing tables", rt_dump_all); } ; +{ cmd_dump_file(this_cli, $3, "routing tables", rt_dump_all, NULL); } ; CF_CLI(DUMP PROTOCOLS, text,, [[Dump protocol information]]) -{ cmd_dump_file(this_cli, $3, "protocols", protos_dump_all); } ; +{ cmd_dump_file(this_cli, $3, "protocols", protos_dump_all, NULL); } ; CF_CLI(DUMP FILTER ALL, text,, [[Dump all filters in linearized form]]) -{ cmd_dump_file(this_cli, $4, "filter bytecode", filters_dump_all); } ; +{ cmd_dump_file(this_cli, $4, "filter bytecode", filters_dump_all, NULL); } ; CF_CLI(EVAL, term, , [[Evaluate an expression]]) { cmd_eval(f_linearize($2, 1)); } ; diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index cc422ee1c..8b4be0d2d 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -259,7 +259,7 @@ cmd_dump_report(struct dump_request *dr, int state, const char *fmt, ...) } void -cmd_dump_file(struct cli *cli, const char *file, const char *what, void (*dump)(struct dump_request *)) +cmd_dump_file(struct cli *cli, const char *file, const char *what, void (*dump)(struct dump_request *), struct dump_request_target *target) { if (cli->restricted) return cli_printf(cli, 8007, "Access denied"); @@ -269,6 +269,7 @@ cmd_dump_file(struct cli *cli, const char *file, const char *what, void (*dump)( req->cli = cli; req->dr.report = cmd_dump_report; + req->dr.target = target; dump_to_file_run(&req->dr, file, what, dump); } diff --git a/sysdep/unix/unix.h b/sysdep/unix/unix.h index 2b3c5d4ea..0fea5c091 100644 --- a/sysdep/unix/unix.h +++ b/sysdep/unix/unix.h @@ -119,7 +119,7 @@ ip_addr resolve_hostname(const char *host, int type, const char **err_msg); struct dump_request *dump_to_file_init(off_t offset); void dump_to_file_run(struct dump_request *dr, const char *file, const char *what, void (*dump)(struct dump_request *)); -void cmd_dump_file(struct cli *cli, const char *file, const char *what, void (*dump)(struct dump_request *)); +void cmd_dump_file(struct cli *cli, const char *file, const char *what, void (*dump)(struct dump_request *), struct dump_request_target *target); /* krt.c bits */