diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2011-10-29 01:15:34 +0100 |
---|---|---|
committer | Ben Hutchings <bhutchings@solarflare.com> | 2011-11-03 19:13:04 +0000 |
commit | 127f80691f96b573db633c7dfe9fc36006dd6979 (patch) | |
tree | 5268575dc5c0e369c6aa1021453d570ff61e6f73 /internal.h | |
parent | 75300bbbcb20650297d0c29b945167a1e3347471 (diff) | |
download | ethtool-127f80691f96b573db633c7dfe9fc36006dd6979.tar.gz |
Move argument parsing to sub-command functions
Instead of doing most of the argument parsing in parse_cmdline(),
find the sub-command and (if required) the device name in main()
and do the rest in the sub-command handler function. Pass argc
and argp around in struct cmd_context.
This also tightens up argument parsing slightly: extraneous or missing
arguments will now result in an error in a few cases where they were
previously ignored. All test cases now pass.
Replace sub-command dispatch in doit() with a function pointer
in struct option.
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Diffstat (limited to 'internal.h')
-rw-r--r-- | internal.h | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -92,6 +92,8 @@ static inline int test_bit(unsigned int nr, const unsigned long *addr) struct cmd_context { int fd; /* socket suitable for ethtool ioctl */ struct ifreq ifr; /* ifreq suitable for ethtool ioctl */ + int argc; /* number of arguments to the sub-command */ + char **argp; /* arguments to the sub-command */ }; #ifdef TEST_ETHTOOL @@ -165,7 +167,7 @@ int st_mac100_dump_regs(struct ethtool_drvinfo *info, int st_gmac_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs); /* Rx flow classification */ -int rxclass_parse_ruleopts(char **optstr, int opt_cnt, +int rxclass_parse_ruleopts(struct cmd_context *ctx, struct ethtool_rx_flow_spec *fsp); int rxclass_rule_getall(struct cmd_context *ctx); int rxclass_rule_get(struct cmd_context *ctx, __u32 loc); |