From: Stephen Hemminger Date: Fri, 19 Jan 2024 16:38:58 +0000 (-0800) Subject: tc: unify clockid handling X-Git-Tag: v6.8.0~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=91cca2aee76bb00ad81ce94da4d7e60670512fa3;p=thirdparty%2Fiproute2.git tc: unify clockid handling There are three places in tc which all have same code for handling clockid (copy/paste). Move it into tc_util.c. Signed-off-by: Stephen Hemminger --- diff --git a/tc/m_gate.c b/tc/m_gate.c index c091ae19c..37afa426a 100644 --- a/tc/m_gate.c +++ b/tc/m_gate.c @@ -20,18 +20,6 @@ struct gate_entry { int32_t maxoctets; }; -#define CLOCKID_INVALID (-1) -static const struct clockid_table { - const char *name; - clockid_t clockid; -} clockt_map[] = { - { "REALTIME", CLOCK_REALTIME }, - { "TAI", CLOCK_TAI }, - { "BOOTTIME", CLOCK_BOOTTIME }, - { "MONOTONIC", CLOCK_MONOTONIC }, - { NULL } -}; - static void explain(void) { fprintf(stderr, @@ -78,35 +66,6 @@ struct action_util gate_action_util = { .print_aopt = print_gate, }; -static int get_clockid(__s32 *val, const char *arg) -{ - const struct clockid_table *c; - - if (strcasestr(arg, "CLOCK_") != NULL) - arg += sizeof("CLOCK_") - 1; - - for (c = clockt_map; c->name; c++) { - if (strcasecmp(c->name, arg) == 0) { - *val = c->clockid; - return 0; - } - } - - return -1; -} - -static const char *get_clock_name(clockid_t clockid) -{ - const struct clockid_table *c; - - for (c = clockt_map; c->name; c++) { - if (clockid == c->clockid) - return c->name; - } - - return "invalid"; -} - static int get_gate_state(__u8 *val, const char *arg) { if (!strcasecmp("OPEN", arg)) { diff --git a/tc/q_etf.c b/tc/q_etf.c index 572e2bc89..d16188daa 100644 --- a/tc/q_etf.c +++ b/tc/q_etf.c @@ -19,18 +19,6 @@ #include "utils.h" #include "tc_util.h" -#define CLOCKID_INVALID (-1) -static const struct static_clockid { - const char *name; - clockid_t clockid; -} clockids_sysv[] = { - { "REALTIME", CLOCK_REALTIME }, - { "TAI", CLOCK_TAI }, - { "BOOTTIME", CLOCK_BOOTTIME }, - { "MONOTONIC", CLOCK_MONOTONIC }, - { NULL } -}; - static void explain(void) { fprintf(stderr, @@ -51,37 +39,6 @@ static void explain_clockid(const char *val) val); } -static int get_clockid(__s32 *val, const char *arg) -{ - const struct static_clockid *c; - - /* Drop the CLOCK_ prefix if that is being used. */ - if (strcasestr(arg, "CLOCK_") != NULL) - arg += sizeof("CLOCK_") - 1; - - for (c = clockids_sysv; c->name; c++) { - if (strcasecmp(c->name, arg) == 0) { - *val = c->clockid; - - return 0; - } - } - - return -1; -} - -static const char* get_clock_name(clockid_t clockid) -{ - const struct static_clockid *c; - - for (c = clockids_sysv; c->name; c++) { - if (clockid == c->clockid) - return c->name; - } - - return "invalid"; -} - static int etf_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n, const char *dev) { diff --git a/tc/q_taprio.c b/tc/q_taprio.c index ef8fc7a05..c47fe2443 100644 --- a/tc/q_taprio.c +++ b/tc/q_taprio.c @@ -29,18 +29,6 @@ struct sched_entry { uint8_t cmd; }; -#define CLOCKID_INVALID (-1) -static const struct static_clockid { - const char *name; - clockid_t clockid; -} clockids_sysv[] = { - { "REALTIME", CLOCK_REALTIME }, - { "TAI", CLOCK_TAI }, - { "BOOTTIME", CLOCK_BOOTTIME }, - { "MONOTONIC", CLOCK_MONOTONIC }, - { NULL } -}; - static void explain(void) { fprintf(stderr, @@ -60,37 +48,6 @@ static void explain_clockid(const char *val) fprintf(stderr, "It must be a valid SYS-V id (i.e. CLOCK_TAI)\n"); } -static int get_clockid(__s32 *val, const char *arg) -{ - const struct static_clockid *c; - - /* Drop the CLOCK_ prefix if that is being used. */ - if (strcasestr(arg, "CLOCK_") != NULL) - arg += sizeof("CLOCK_") - 1; - - for (c = clockids_sysv; c->name; c++) { - if (strcasecmp(c->name, arg) == 0) { - *val = c->clockid; - - return 0; - } - } - - return -1; -} - -static const char* get_clock_name(clockid_t clockid) -{ - const struct static_clockid *c; - - for (c = clockids_sysv; c->name; c++) { - if (clockid == c->clockid) - return c->name; - } - - return "invalid"; -} - static const char *entry_cmd_to_str(__u8 cmd) { switch (cmd) { diff --git a/tc/tc_util.c b/tc/tc_util.c index 8c0e19e45..a799a6299 100644 --- a/tc/tc_util.c +++ b/tc/tc_util.c @@ -596,6 +596,46 @@ char *sprint_linklayer(unsigned int linklayer, char *buf) return buf; } +static const struct clockid_table { + const char *name; + clockid_t clockid; +} clockt_map[] = { + { "REALTIME", CLOCK_REALTIME }, + { "TAI", CLOCK_TAI }, + { "BOOTTIME", CLOCK_BOOTTIME }, + { "MONOTONIC", CLOCK_MONOTONIC }, + { NULL } +}; + +int get_clockid(__s32 *val, const char *arg) +{ + const struct clockid_table *c; + + if (strcasestr(arg, "CLOCK_") != NULL) + arg += sizeof("CLOCK_") - 1; + + for (c = clockt_map; c->name; c++) { + if (strcasecmp(c->name, arg) == 0) { + *val = c->clockid; + return 0; + } + } + + return -1; +} + +const char *get_clock_name(clockid_t clockid) +{ + const struct clockid_table *c; + + for (c = clockt_map; c->name; c++) { + if (clockid == c->clockid) + return c->name; + } + + return "invalid"; +} + void print_tm(FILE *f, const struct tcf_t *tm) { int hz = get_user_hz(); diff --git a/tc/tc_util.h b/tc/tc_util.h index c535dccbc..aaf10e433 100644 --- a/tc/tc_util.h +++ b/tc/tc_util.h @@ -121,6 +121,10 @@ int prio_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt); int cls_names_init(char *path); void cls_names_uninit(void); +#define CLOCKID_INVALID (-1) +int get_clockid(__s32 *val, const char *arg); +const char *get_clock_name(clockid_t clockid); + int action_a2n(char *arg, int *result, bool allow_num); bool tc_qdisc_block_exists(__u32 block_index);