Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

bpf_image.c File Reference

#include <stdio.h>
#include <string.h>
#include "pcap-int.h"

Include dependency graph for bpf_image.c:

Include dependency graph

Go to the source code of this file.

Functions

char * bpf_image (struct bpf_insn *p, int n)

Variables

const char rcsid []


Function Documentation

char* bpf_image struct bpf_insn p,
int  n
 

Definition at line 41 of file bpf_image.c.

References BPF_A, BPF_ABS, BPF_ADD, BPF_ALU, BPF_AND, BPF_B, BPF_CLASS, BPF_DIV, BPF_H, BPF_IMM, BPF_IND, BPF_JA, BPF_JEQ, BPF_JGE, BPF_JGT, BPF_JMP, BPF_JSET, BPF_K, BPF_LD, BPF_LDX, BPF_LEN, BPF_LSH, BPF_MEM, BPF_MISC, BPF_MSH, BPF_MUL, BPF_NEG, BPF_OP, BPF_OR, BPF_RET, BPF_RSH, BPF_ST, BPF_STX, BPF_SUB, BPF_TAX, BPF_TXA, BPF_W, BPF_X, fmt, p, and snprintf().

Referenced by bpf_dump().

00044 {
00045         int v;
00046         char *fmt, *op;
00047         static char image[256];
00048         char operand[64];
00049 
00050         v = p->k;
00051         switch (p->code) {
00052 
00053         default:
00054                 op = "unimp";
00055                 fmt = "0x%x";
00056                 v = p->code;
00057                 break;
00058 
00059         case BPF_RET|BPF_K:
00060                 op = "ret";
00061                 fmt = "#%d";
00062                 break;
00063 
00064         case BPF_RET|BPF_A:
00065                 op = "ret";
00066                 fmt = "";
00067                 break;
00068 
00069         case BPF_LD|BPF_W|BPF_ABS:
00070                 op = "ld";
00071                 fmt = "[%d]";
00072                 break;
00073 
00074         case BPF_LD|BPF_H|BPF_ABS:
00075                 op = "ldh";
00076                 fmt = "[%d]";
00077                 break;
00078 
00079         case BPF_LD|BPF_B|BPF_ABS:
00080                 op = "ldb";
00081                 fmt = "[%d]";
00082                 break;
00083 
00084         case BPF_LD|BPF_W|BPF_LEN:
00085                 op = "ld";
00086                 fmt = "#pktlen";
00087                 break;
00088 
00089         case BPF_LD|BPF_W|BPF_IND:
00090                 op = "ld";
00091                 fmt = "[x + %d]";
00092                 break;
00093 
00094         case BPF_LD|BPF_H|BPF_IND:
00095                 op = "ldh";
00096                 fmt = "[x + %d]";
00097                 break;
00098 
00099         case BPF_LD|BPF_B|BPF_IND:
00100                 op = "ldb";
00101                 fmt = "[x + %d]";
00102                 break;
00103 
00104         case BPF_LD|BPF_IMM:
00105                 op = "ld";
00106                 fmt = "#0x%x";
00107                 break;
00108 
00109         case BPF_LDX|BPF_IMM:
00110                 op = "ldx";
00111                 fmt = "#0x%x";
00112                 break;
00113 
00114         case BPF_LDX|BPF_MSH|BPF_B:
00115                 op = "ldxb";
00116                 fmt = "4*([%d]&0xf)";
00117                 break;
00118 
00119         case BPF_LD|BPF_MEM:
00120                 op = "ld";
00121                 fmt = "M[%d]";
00122                 break;
00123 
00124         case BPF_LDX|BPF_MEM:
00125                 op = "ldx";
00126                 fmt = "M[%d]";
00127                 break;
00128 
00129         case BPF_ST:
00130                 op = "st";
00131                 fmt = "M[%d]";
00132                 break;
00133 
00134         case BPF_STX:
00135                 op = "stx";
00136                 fmt = "M[%d]";
00137                 break;
00138 
00139         case BPF_JMP|BPF_JA:
00140                 op = "ja";
00141                 fmt = "%d";
00142                 v = n + 1 + p->k;
00143                 break;
00144 
00145         case BPF_JMP|BPF_JGT|BPF_K:
00146                 op = "jgt";
00147                 fmt = "#0x%x";
00148                 break;
00149 
00150         case BPF_JMP|BPF_JGE|BPF_K:
00151                 op = "jge";
00152                 fmt = "#0x%x";
00153                 break;
00154 
00155         case BPF_JMP|BPF_JEQ|BPF_K:
00156                 op = "jeq";
00157                 fmt = "#0x%x";
00158                 break;
00159 
00160         case BPF_JMP|BPF_JSET|BPF_K:
00161                 op = "jset";
00162                 fmt = "#0x%x";
00163                 break;
00164 
00165         case BPF_JMP|BPF_JGT|BPF_X:
00166                 op = "jgt";
00167                 fmt = "x";
00168                 break;
00169 
00170         case BPF_JMP|BPF_JGE|BPF_X:
00171                 op = "jge";
00172                 fmt = "x";
00173                 break;
00174 
00175         case BPF_JMP|BPF_JEQ|BPF_X:
00176                 op = "jeq";
00177                 fmt = "x";
00178                 break;
00179 
00180         case BPF_JMP|BPF_JSET|BPF_X:
00181                 op = "jset";
00182                 fmt = "x";
00183                 break;
00184 
00185         case BPF_ALU|BPF_ADD|BPF_X:
00186                 op = "add";
00187                 fmt = "x";
00188                 break;
00189 
00190         case BPF_ALU|BPF_SUB|BPF_X:
00191                 op = "sub";
00192                 fmt = "x";
00193                 break;
00194 
00195         case BPF_ALU|BPF_MUL|BPF_X:
00196                 op = "mul";
00197                 fmt = "x";
00198                 break;
00199 
00200         case BPF_ALU|BPF_DIV|BPF_X:
00201                 op = "div";
00202                 fmt = "x";
00203                 break;
00204 
00205         case BPF_ALU|BPF_AND|BPF_X:
00206                 op = "and";
00207                 fmt = "x";
00208                 break;
00209 
00210         case BPF_ALU|BPF_OR|BPF_X:
00211                 op = "or";
00212                 fmt = "x";
00213                 break;
00214 
00215         case BPF_ALU|BPF_LSH|BPF_X:
00216                 op = "lsh";
00217                 fmt = "x";
00218                 break;
00219 
00220         case BPF_ALU|BPF_RSH|BPF_X:
00221                 op = "rsh";
00222                 fmt = "x";
00223                 break;
00224 
00225         case BPF_ALU|BPF_ADD|BPF_K:
00226                 op = "add";
00227                 fmt = "#%d";
00228                 break;
00229 
00230         case BPF_ALU|BPF_SUB|BPF_K:
00231                 op = "sub";
00232                 fmt = "#%d";
00233                 break;
00234 
00235         case BPF_ALU|BPF_MUL|BPF_K:
00236                 op = "mul";
00237                 fmt = "#%d";
00238                 break;
00239 
00240         case BPF_ALU|BPF_DIV|BPF_K:
00241                 op = "div";
00242                 fmt = "#%d";
00243                 break;
00244 
00245         case BPF_ALU|BPF_AND|BPF_K:
00246                 op = "and";
00247                 fmt = "#0x%x";
00248                 break;
00249 
00250         case BPF_ALU|BPF_OR|BPF_K:
00251                 op = "or";
00252                 fmt = "#0x%x";
00253                 break;
00254 
00255         case BPF_ALU|BPF_LSH|BPF_K:
00256                 op = "lsh";
00257                 fmt = "#%d";
00258                 break;
00259 
00260         case BPF_ALU|BPF_RSH|BPF_K:
00261                 op = "rsh";
00262                 fmt = "#%d";
00263                 break;
00264 
00265         case BPF_ALU|BPF_NEG:
00266                 op = "neg";
00267                 fmt = "";
00268                 break;
00269 
00270         case BPF_MISC|BPF_TAX:
00271                 op = "tax";
00272                 fmt = "";
00273                 break;
00274 
00275         case BPF_MISC|BPF_TXA:
00276                 op = "txa";
00277                 fmt = "";
00278                 break;
00279         }
00280         (void)snprintf(operand, sizeof operand, fmt, v);
00281         (void)snprintf(image, sizeof image,
00282                       (BPF_CLASS(p->code) == BPF_JMP &&
00283                        BPF_OP(p->code) != BPF_JA) ?
00284                       "(%03d) %-8s %-16s jt %d\tjf %d"
00285                       : "(%03d) %-8s %s",
00286                       n, op, operand, n + 1 + p->jt, n + 1 + p->jf);
00287         return image;
00288 }


Variable Documentation

const char rcsid[] [static]
 

Initial value:

    "@(#) $Header: /tcpdump/master/libpcap/bpf_image.c,v 1.24.4.1 2002/03/24 23:25:37 guy Exp $ (LBL)"

Definition at line 23 of file bpf_image.c.


Generated on Wed Sep 14 02:57:18 2005 for bro_docs by doxygen 1.3.5