Home | History | Annotate | Line # | Download | only in dist
      1 /*	$NetBSD: bpf_dump.c,v 1.5 2024/09/02 15:33:36 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.5 2024/09/02 15:33:36 christos Exp $");
     26 
     27 #include <config.h>
     28 
     29 #include <pcap.h>
     30 #include <stdio.h>
     31 
     32 #include "optimize.h"
     33 
     34 void
     35 bpf_dump(const struct bpf_program *p, int option)
     36 {
     37 	const struct bpf_insn *insn;
     38 	int i;
     39 	int n = p->bf_len;
     40 
     41 	insn = p->bf_insns;
     42 	if (option > 2) {
     43 		printf("%d\n", n);
     44 		for (i = 0; i < n; ++insn, ++i) {
     45 			printf("%u %u %u %u\n", insn->code,
     46 			       insn->jt, insn->jf, insn->k);
     47 		}
     48 		return ;
     49 	}
     50 	if (option > 1) {
     51 		for (i = 0; i < n; ++insn, ++i)
     52 			printf("{ 0x%x, %d, %d, 0x%08x },\n",
     53 			       insn->code, insn->jt, insn->jf, insn->k);
     54 		return;
     55 	}
     56 	for (i = 0; i < n; ++insn, ++i) {
     57 #ifdef BDEBUG
     58 		if (i < NBIDS && bids[i] > 0)
     59 			printf("[%02d]", bids[i] - 1);
     60 		else
     61 			printf(" -- ");
     62 #endif
     63 		puts(bpf_image(insn, i));
     64 	}
     65 }
     66