| NGM_BPF_SET_PROGRAM |
| | This command sets the filter program that will be applied to incoming data on a hook. The following structure must be supplied as an argument:
struct ng_bpf_hookprog {
char thisHook[NG_HOOKSIZ];/* name of hook */
char ifMatch[NG_HOOKSIZ]; /* match dest hook */
char ifNotMatch[NG_HOOKSIZ]; /* !match dest hook */
int32_t bpf_prog_len; /* #isns in program */
struct bpf_insn bpf_prog[0]; /* bpf program */
};
The hook to be updated is specified in thisHook. The BPF program is the sequence of instructions in the bpf_prog array; there must be bpf_prog_len of them. Matching and non-matching incoming packets are delivered out the hooks named ifMatch and ifNotMatch, respectively. The program must be a valid bpf(4) program or else EINVAL is returned. |
| NGM_BPF_GET_PROGRAM |
| | This command takes an ASCII string argument, the hook name, and returns the corresponding "struct ng_bpf_hookprog" as shown above. |
| NGM_BPF_GET_STATS |
| | This command takes an ASCII string argument, the hook name, and returns the statistics associated with the hook as a "struct ng_bpf_hookstat". |
| NGM_BPF_CLR_STATS |
| | This command takes an ASCII string argument, the hook name, and clears the statistics associated with the hook. |
| NGM_BPF_GETCLR_STATS |
| | This command is identical to NGM_BPF_GET_STATS, except that the statistics are also atomically cleared. |
|
EXAMPLES
It is possible to configure a node from the command line, using tcpdump(1) to generate raw BPF instructions which are then fed into an awk(1) script to create the ASCII form of a NGM_BPF_SET_PROGRAM control message, as demonstrated here:
#!/bin/sh
PATTERN="tcp dst port 80"
NODEPATH="my_node:"
INHOOK="hook1"
MATCHHOOK="hook2"
NOTMATCHHOOK="hook3"
cat > /tmp/bpf.awk << xxENDxx
{
if (!init) {
printf "bpf_prog_len=%d bpf_prog=[", \$1;
init=1;
} else {
printf " { code=%d jt=%d jf=%d k=%d }", \$1, \$2, \$3, \$4;
}
}
END {
print " ]"
}
xxENDxx
BPFPROG=tcpdump -s 8192 -ddd ${PATTERN} | awk -f /tmp/bpf.awk
ngctl msg ${NODEPATH} setprogram { thisHook=\"${INHOOK}\" \
ifMatch=\"${MATCHHOOK}\" \
ifNotMatch=\"${NOTMATCHHOOK}\" \
${BPFPROG} } }
SEE ALSO
bpf(4), netgraph(4), ngctl(8)
HISTORY
AUTHORS
BUGS