| 1 | /*	$NetBSD: bpf_dump.c,v 1.4 2018/09/03 15:26:43 christos Exp $	*/ | 
| 2 |  | 
| 3 | /* | 
| 4 |  * Copyright (c) 1992, 1993, 1994, 1995, 1996 | 
| 5 |  *	The Regents of the University of California.  All rights reserved. | 
| 6 |  * | 
| 7 |  * Redistribution and use in source and binary forms, with or without | 
| 8 |  * modification, are permitted provided that: (1) source code distributions | 
| 9 |  * retain the above copyright notice and this paragraph in its entirety, (2) | 
| 10 |  * distributions including binary code include the above copyright notice and | 
| 11 |  * this paragraph in its entirety in the documentation or other materials | 
| 12 |  * provided with the distribution, and (3) all advertising materials mentioning | 
| 13 |  * features or use of this software display the following acknowledgement: | 
| 14 |  * ``This product includes software developed by the University of California, | 
| 15 |  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of | 
| 16 |  * the University nor the names of its contributors may be used to endorse | 
| 17 |  * or promote products derived from this software without specific prior | 
| 18 |  * written permission. | 
| 19 |  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED | 
| 20 |  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF | 
| 21 |  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 
| 22 |  */ | 
| 23 |  | 
| 24 | #include <sys/cdefs.h> | 
| 25 | __RCSID("$NetBSD: bpf_dump.c,v 1.4 2018/09/03 15:26:43 christos Exp $" ); | 
| 26 |  | 
| 27 | #ifdef HAVE_CONFIG_H | 
| 28 | #include <config.h> | 
| 29 | #endif | 
| 30 |  | 
| 31 | #include <pcap.h> | 
| 32 | #include <stdio.h> | 
| 33 |  | 
| 34 | #include "optimize.h" | 
| 35 |  | 
| 36 | void | 
| 37 | bpf_dump(const struct bpf_program *p, int option) | 
| 38 | { | 
| 39 | 	const struct bpf_insn *insn; | 
| 40 | 	int i; | 
| 41 | 	int n = p->bf_len; | 
| 42 |  | 
| 43 | 	insn = p->bf_insns; | 
| 44 | 	if (option > 2) { | 
| 45 | 		printf("%d\n" , n); | 
| 46 | 		for (i = 0; i < n; ++insn, ++i) { | 
| 47 | 			printf("%u %u %u %u\n" , insn->code, | 
| 48 | 			       insn->jt, insn->jf, insn->k); | 
| 49 | 		} | 
| 50 | 		return ; | 
| 51 | 	} | 
| 52 | 	if (option > 1) { | 
| 53 | 		for (i = 0; i < n; ++insn, ++i) | 
| 54 | 			printf("{ 0x%x, %d, %d, 0x%08x },\n" , | 
| 55 | 			       insn->code, insn->jt, insn->jf, insn->k); | 
| 56 | 		return; | 
| 57 | 	} | 
| 58 | 	for (i = 0; i < n; ++insn, ++i) { | 
| 59 | #ifdef BDEBUG | 
| 60 | 		if (i < NBIDS && bids[i] > 0) | 
| 61 | 			printf("[%02d]" , bids[i] - 1); | 
| 62 | 		else | 
| 63 | 			printf(" -- " ); | 
| 64 | #endif | 
| 65 | 		puts(bpf_image(insn, i)); | 
| 66 | 	} | 
| 67 | } | 
| 68 |  |