diff options
Diffstat (limited to 'apf_run.c')
-rw-r--r-- | apf_run.c | 27 |
1 files changed, 21 insertions, 6 deletions
@@ -50,13 +50,20 @@ int parse_hex(char* input, uint8_t** output) { return length; } +void print_hex(uint8_t* input, int len) { + for (int i = 0; i < len; ++i) { + printf("%02x", input[i]); + } +} + int main(int argc, char* argv[]) { - if (argc != 4) { + if (argc < 3 || argc > 5) { fprintf(stderr, - "Usage: %s <program> <packet> <program age>\n" + "Usage: %s <program> <packet> [<data>] [<age>]\n" " program: APF program, in hex\n" " packet: Packet to run through program, in hex\n" - " program age: Age of program in seconds.\n", + " data: Data memory contents, in hex\n", + " age: Age of program in seconds (default: 0)\n", basename(argv[0])); exit(1); } @@ -64,11 +71,19 @@ int main(int argc, char* argv[]) { uint32_t program_len = parse_hex(argv[1], &program); uint8_t* packet; uint32_t packet_len = parse_hex(argv[2], &packet); - uint32_t filter_age = atoi(argv[3]); + uint8_t* data = NULL; + uint32_t data_len = argc > 3 ? parse_hex(argv[3], &data) : 0; + uint32_t filter_age = argc > 4 ? atoi(argv[4]) : 0; int ret = accept_packet(program, program_len, packet, packet_len, - filter_age); + data, data_len, filter_age); printf("Packet %sed\n", ret ? "pass" : "dropp"); + if (data) { + printf("Data: "); + print_hex(data, data_len); + printf("\n"); + free(data); + } free(program); free(packet); return ret; -}
\ No newline at end of file +} |