bpf_dump.c 1.9 KB

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