diff options
| author | Daniel Borkmann <dborkman@redhat.com> | 2014-02-22 12:37:53 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-02-24 19:02:10 -0500 |
| commit | 7debf7806e0e984ea7e43cc271dc9400b0dffc14 (patch) | |
| tree | 28db6f2edc89f3fc8fa134a38c0a3e1187b5624d /tools | |
| parent | b17c706987fa6f28bdc1771c8266e7a69e22adcb (diff) | |
tools: bpf_dbg: various misc code cleanups
Lets clean up bpf_dbg a bit and improve its code slightly
in various areas: i) Get rid of some macros as there's no
good reason for keeping them, ii) remove one unused variable
and reduce scope of various variables found by cppcheck,
iii) Close non-default file descriptors when exiting the shell.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/net/bpf_dbg.c | 119 |
1 files changed, 55 insertions, 64 deletions
diff --git a/tools/net/bpf_dbg.c b/tools/net/bpf_dbg.c index 65dc757f7f7b..bb31813e43dd 100644 --- a/tools/net/bpf_dbg.c +++ b/tools/net/bpf_dbg.c | |||
| @@ -87,9 +87,6 @@ | |||
| 87 | __attribute__ ((format (printf, (pos_fmtstr), (pos_fmtargs)))) | 87 | __attribute__ ((format (printf, (pos_fmtstr), (pos_fmtargs)))) |
| 88 | #endif | 88 | #endif |
| 89 | 89 | ||
| 90 | #define CMD(_name, _func) { .name = _name, .func = _func, } | ||
| 91 | #define OP(_op, _name) [_op] = _name | ||
| 92 | |||
| 93 | enum { | 90 | enum { |
| 94 | CMD_OK, | 91 | CMD_OK, |
| 95 | CMD_ERR, | 92 | CMD_ERR, |
| @@ -145,32 +142,32 @@ static size_t pcap_map_size = 0; | |||
| 145 | static char *pcap_ptr_va_start, *pcap_ptr_va_curr; | 142 | static char *pcap_ptr_va_start, *pcap_ptr_va_curr; |
| 146 | 143 | ||
| 147 | static const char * const op_table[] = { | 144 | static const char * const op_table[] = { |
| 148 | OP(BPF_ST, "st"), | 145 | [BPF_ST] = "st", |
| 149 | OP(BPF_STX, "stx"), | 146 | [BPF_STX] = "stx", |
| 150 | OP(BPF_LD_B, "ldb"), | 147 | [BPF_LD_B] = "ldb", |
| 151 | OP(BPF_LD_H, "ldh"), | 148 | [BPF_LD_H] = "ldh", |
| 152 | OP(BPF_LD_W, "ld"), | 149 | [BPF_LD_W] = "ld", |
| 153 | OP(BPF_LDX, "ldx"), | 150 | [BPF_LDX] = "ldx", |
| 154 | OP(BPF_LDX_B, "ldxb"), | 151 | [BPF_LDX_B] = "ldxb", |
| 155 | OP(BPF_JMP_JA, "ja"), | 152 | [BPF_JMP_JA] = "ja", |
| 156 | OP(BPF_JMP_JEQ, "jeq"), | 153 | [BPF_JMP_JEQ] = "jeq", |
| 157 | OP(BPF_JMP_JGT, "jgt"), | 154 | [BPF_JMP_JGT] = "jgt", |
| 158 | OP(BPF_JMP_JGE, "jge"), | 155 | [BPF_JMP_JGE] = "jge", |
| 159 | OP(BPF_JMP_JSET, "jset"), | 156 | [BPF_JMP_JSET] = "jset", |
| 160 | OP(BPF_ALU_ADD, "add"), | 157 | [BPF_ALU_ADD] = "add", |
| 161 | OP(BPF_ALU_SUB, "sub"), | 158 | [BPF_ALU_SUB] = "sub", |
| 162 | OP(BPF_ALU_MUL, "mul"), | 159 | [BPF_ALU_MUL] = "mul", |
| 163 | OP(BPF_ALU_DIV, "div"), | 160 | [BPF_ALU_DIV] = "div", |
| 164 | OP(BPF_ALU_MOD, "mod"), | 161 | [BPF_ALU_MOD] = "mod", |
| 165 | OP(BPF_ALU_NEG, "neg"), | 162 | [BPF_ALU_NEG] = "neg", |
| 166 | OP(BPF_ALU_AND, "and"), | 163 | [BPF_ALU_AND] = "and", |
| 167 | OP(BPF_ALU_OR, "or"), | 164 | [BPF_ALU_OR] = "or", |
| 168 | OP(BPF_ALU_XOR, "xor"), | 165 | [BPF_ALU_XOR] = "xor", |
| 169 | OP(BPF_ALU_LSH, "lsh"), | 166 | [BPF_ALU_LSH] = "lsh", |
| 170 | OP(BPF_ALU_RSH, "rsh"), | 167 | [BPF_ALU_RSH] = "rsh", |
| 171 | OP(BPF_MISC_TAX, "tax"), | 168 | [BPF_MISC_TAX] = "tax", |
| 172 | OP(BPF_MISC_TXA, "txa"), | 169 | [BPF_MISC_TXA] = "txa", |
| 173 | OP(BPF_RET, "ret"), | 170 | [BPF_RET] = "ret", |
| 174 | }; | 171 | }; |
| 175 | 172 | ||
| 176 | static __check_format_printf(1, 2) int rl_printf(const char *fmt, ...) | 173 | static __check_format_printf(1, 2) int rl_printf(const char *fmt, ...) |
| @@ -1127,7 +1124,6 @@ static int cmd_step(char *num) | |||
| 1127 | static int cmd_select(char *num) | 1124 | static int cmd_select(char *num) |
| 1128 | { | 1125 | { |
| 1129 | unsigned int which, i; | 1126 | unsigned int which, i; |
| 1130 | struct pcap_pkthdr *hdr; | ||
| 1131 | bool have_next = true; | 1127 | bool have_next = true; |
| 1132 | 1128 | ||
| 1133 | if (!pcap_loaded() || strlen(num) == 0) | 1129 | if (!pcap_loaded() || strlen(num) == 0) |
| @@ -1144,7 +1140,7 @@ static int cmd_select(char *num) | |||
| 1144 | 1140 | ||
| 1145 | for (i = 0; i < which && (have_next = pcap_next_pkt()); i++) | 1141 | for (i = 0; i < which && (have_next = pcap_next_pkt()); i++) |
| 1146 | /* noop */; | 1142 | /* noop */; |
| 1147 | if (!have_next || (hdr = pcap_curr_pkt()) == NULL) { | 1143 | if (!have_next || pcap_curr_pkt() == NULL) { |
| 1148 | rl_printf("no packet #%u available!\n", which); | 1144 | rl_printf("no packet #%u available!\n", which); |
| 1149 | pcap_reset_pkt(); | 1145 | pcap_reset_pkt(); |
| 1150 | return CMD_ERR; | 1146 | return CMD_ERR; |
| @@ -1177,9 +1173,8 @@ static int cmd_breakpoint(char *subcmd) | |||
| 1177 | static int cmd_run(char *num) | 1173 | static int cmd_run(char *num) |
| 1178 | { | 1174 | { |
| 1179 | static uint32_t pass = 0, fail = 0; | 1175 | static uint32_t pass = 0, fail = 0; |
| 1180 | struct pcap_pkthdr *hdr; | ||
| 1181 | bool has_limit = true; | 1176 | bool has_limit = true; |
| 1182 | int ret, pkts = 0, i = 0; | 1177 | int pkts = 0, i = 0; |
| 1183 | 1178 | ||
| 1184 | if (!bpf_prog_loaded() || !pcap_loaded()) | 1179 | if (!bpf_prog_loaded() || !pcap_loaded()) |
| 1185 | return CMD_ERR; | 1180 | return CMD_ERR; |
| @@ -1189,10 +1184,10 @@ static int cmd_run(char *num) | |||
| 1189 | has_limit = false; | 1184 | has_limit = false; |
| 1190 | 1185 | ||
| 1191 | do { | 1186 | do { |
| 1192 | hdr = pcap_curr_pkt(); | 1187 | struct pcap_pkthdr *hdr = pcap_curr_pkt(); |
| 1193 | ret = bpf_run_all(bpf_image, bpf_prog_len, | 1188 | int ret = bpf_run_all(bpf_image, bpf_prog_len, |
| 1194 | (uint8_t *) hdr + sizeof(*hdr), | 1189 | (uint8_t *) hdr + sizeof(*hdr), |
| 1195 | hdr->caplen, hdr->len); | 1190 | hdr->caplen, hdr->len); |
| 1196 | if (ret > 0) | 1191 | if (ret > 0) |
| 1197 | pass++; | 1192 | pass++; |
| 1198 | else if (ret == 0) | 1193 | else if (ret == 0) |
| @@ -1245,14 +1240,14 @@ static int cmd_quit(char *dontcare) | |||
| 1245 | } | 1240 | } |
| 1246 | 1241 | ||
| 1247 | static const struct shell_cmd cmds[] = { | 1242 | static const struct shell_cmd cmds[] = { |
| 1248 | CMD("load", cmd_load), | 1243 | { .name = "load", .func = cmd_load }, |
| 1249 | CMD("select", cmd_select), | 1244 | { .name = "select", .func = cmd_select }, |
| 1250 | CMD("step", cmd_step), | 1245 | { .name = "step", .func = cmd_step }, |
| 1251 | CMD("run", cmd_run), | 1246 | { .name = "run", .func = cmd_run }, |
| 1252 | CMD("breakpoint", cmd_breakpoint), | 1247 | { .name = "breakpoint", .func = cmd_breakpoint }, |
| 1253 | CMD("disassemble", cmd_disassemble), | 1248 | { .name = "disassemble", .func = cmd_disassemble }, |
| 1254 | CMD("dump", cmd_dump), | 1249 | { .name = "dump", .func = cmd_dump }, |
| 1255 | CMD("quit", cmd_quit), | 1250 | { .name = "quit", .func = cmd_quit }, |
| 1256 | }; | 1251 | }; |
| 1257 | 1252 | ||
| 1258 | static int execf(char *arg) | 1253 | static int execf(char *arg) |
| @@ -1280,7 +1275,6 @@ out: | |||
| 1280 | static char *shell_comp_gen(const char *buf, int state) | 1275 | static char *shell_comp_gen(const char *buf, int state) |
| 1281 | { | 1276 | { |
| 1282 | static int list_index, len; | 1277 | static int list_index, len; |
| 1283 | const char *name; | ||
| 1284 | 1278 | ||
| 1285 | if (!state) { | 1279 | if (!state) { |
| 1286 | list_index = 0; | 1280 | list_index = 0; |
| @@ -1288,9 +1282,9 @@ static char *shell_comp_gen(const char *buf, int state) | |||
| 1288 | } | 1282 | } |
| 1289 | 1283 | ||
| 1290 | for (; list_index < array_size(cmds); ) { | 1284 | for (; list_index < array_size(cmds); ) { |
| 1291 | name = cmds[list_index].name; | 1285 | const char *name = cmds[list_index].name; |
| 1292 | list_index++; | ||
| 1293 | 1286 | ||
| 1287 | list_index++; | ||
| 1294 | if (strncmp(name, buf, len) == 0) | 1288 | if (strncmp(name, buf, len) == 0) |
| 1295 | return strdup(name); | 1289 | return strdup(name); |
| 1296 | } | 1290 | } |
| @@ -1322,16 +1316,9 @@ static void init_shell(FILE *fin, FILE *fout) | |||
| 1322 | { | 1316 | { |
| 1323 | char file[128]; | 1317 | char file[128]; |
| 1324 | 1318 | ||
| 1325 | memset(file, 0, sizeof(file)); | 1319 | snprintf(file, sizeof(file), "%s/.bpf_dbg_history", getenv("HOME")); |
| 1326 | snprintf(file, sizeof(file) - 1, | ||
| 1327 | "%s/.bpf_dbg_history", getenv("HOME")); | ||
| 1328 | |||
| 1329 | read_history(file); | 1320 | read_history(file); |
| 1330 | 1321 | ||
| 1331 | memset(file, 0, sizeof(file)); | ||
| 1332 | snprintf(file, sizeof(file) - 1, | ||
| 1333 | "%s/.bpf_dbg_init", getenv("HOME")); | ||
| 1334 | |||
