Path: blob/main/documentation/manual-pages/ja/man4/bpf.4
18093 views
.\" Copyright (c) 1990 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that: (1) source code distributions
.\" retain the above copyright notice and this paragraph in its entirety, (2)
.\" distributions including binary code include the above copyright notice and
.\" this paragraph in its entirety in the documentation or other materials
.\" provided with the distribution, and (3) all advertising materials mentioning
.\" features or use of this software display the following acknowledgement:
.\" ``This product includes software developed by the University of California,
.\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
.\" the University nor the names of its contributors may be used to endorse
.\" or promote products derived from this software without specific prior
.\" written permission.
.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
.\"
.\" This document is derived in part from the enet man page (enet.4)
.\" distributed with 4.3BSD Unix.
.\"
.\" %Id: bpf.4,v 1.16 1999/01/10 04:59:59 danny Exp %
.\" $FreeBSD$
.\"
.\" WORD: promiscuous ̵���̤�
.\" WORD: alignment ����Ĵ�� [POSIX]
.\" WORD: addressing mode ���ɥ�å��󥰥⡼��
.\" WORD: padding �ѥǥ���
.\" WORD: truncation amount �ڤ�ͤ���
.Dd January 16, 1996
.Dt BPF 4
.Os BSD 4.4
.Sh ̾��
.Nm bpf
.Nd �С����쥤�ѥ��åȥե��륿
.Sh ��
.Cd pseudo-device bpfilter
.Sh ����
�С����쥤�ѥ��åȥե��륿�ϡ��ǡ�������ؤˤ����ƥץ��ȥ������¸��
���η��Υ��󥿥ե��������󶡤��ޤ���
�ͥåȥ����Υѥ��åȤϡ����Ȥ�¾�Υۥ��Ȥ˸�����줿
��ΤǤ��äƤ⡢���٤Ƥ��ε������̤��ƥ����������뤳�Ȥ��Ǥ��ޤ���
.Pp
���Υѥ��åȥե��륿��
.Pa /dev/bpf0 ,
.Pa /dev/bpf1
�ʤɤ�
����饯�����ü�ǥХ����˸����ޤ���
���ΥǥХ����ò¥ª¡ï¿½ï¿½×¥ó¤·¤ï¿½ï¿½å¡¢ï¿½Õ¥ï¿½ï¿½ï¿½ï¿½ëµï¿½Ò»Ò¤ï¿½
.Dv BIOCSETIF
ioctl �ˤ�äơ�����Υͥåȥ�����󥿥ե������˷�ӤĤ��ʤ���Фʤ�ޤ���
�ؼ����줿���󥿥ե�������ʣ���δƻ�ԤǶ�Í���뤳�Ȥ��Ǥ���
�Ƶ��һҤβ��ˤ���ե��륿�ϡ�Ʊ���ѥ��åȤ�ή��򸫤뤳�Ȥˤʤ�ޤ���
�����ץ�Ǥ���ե�����ξ�¤ϡ�
�����ͥ�������Ϳ����줿�ͤ����¤���ޤ���
���
.Sx ��
��Ϳ����줿��Ǥϡ����¤� 16 �ˤʤäƤ��ޤ���
.Pp
���줾��Υޥ��ʥǥХ����ˤϡ��̡��ΥǥХ����ե����뤬ɬ�פǤ���
�ǥХ����ե����뤬������Ǥ���ʤ�С������ץ�ϼ��Ԥ���
.Va errno
�ˤ�
.Er EBUSY �����åȤ���ޤ���
.Pp
�����ץ󤵤줿
.Nm bpf
�ե�����μ��Τ��줾��˴�Ϣ�Ť����Ƥ���Τ���
�桼���������ǽ�ʥѥ��åȥե��륿�Ǥ���
���륤�󥿥ե������ǥѥ��åȤ���������Ȥ��Ϥ��ĤǤ⡢���Υ��󥿥ե�������
�ƻ뤷�Ƥ���ե����ëµï¿½Ò»Ò¤Ï¤ï¿½ï¿½Ù¤Æ¼ï¿½ï¿½È¤Î¥Õ¥ï¿½ï¿½ë¥¿ï¿½ï¿½Å¬ï¿½Ñ¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
�ѥ��åȤ�������Ƶ��һҤϡ���ʬ�ѤΥ��ԡ���������ޤ���
.Pp
���줾��Υե����뤫������Ϥϡ��ե��륿�ǥޥå������ѥ��åȤ�
���Υ��롼�פ��֤��ޤ���
��ǽ��夲�뤿��ˡ�read ���Ϥ��Хåե���
.Nm
�������ǻ��Ѥ���Хåե���Ʊ���������Ǥʤ���Фʤ�ޤ���
���Υ������ϡ�
.Dv BIOCGBLEN
ioctl (�����򻲾�) ������졢
.Dv BIOCSBLEN
������Ǥ��ޤ���
������������ç¤ï¿½ï¿½ï¿½Ä¡ï¿½ï¿½Î¥Ñ¥ï¿½ï¿½Ã¥È¤Ï¡ï¿½
ɬ��Ū���ڤ�ͤ���Ƥ��ޤ����Ȥ����դ��Ʋ�������
.Pp
���Υѥ��åȥե��륿�ϡ�����Ĺ�إå��Ǥ����
�ɤΥ�󥯥�٥�ץ��ȥ���Ǥ⥵�ݡ��Ȥ��ޤ���
���ΤȤ������������ͥåȤ�
.Tn SLIP
��
.Tn PPP
�ɥ饤�Ф�����
.Nm bpf
�ȶ�Ĵ����ư���褦�˽�������Ƥ��ޤ���
.Pp
�ѥ��åȥǡ����ϥͥåȥ���Х��ȥ������ˤʤäƤ���Τǡ�
���ץꥱ�������ʣ���Х��Ȥ��ͤ�����Ф�����ˤ�
.Xr byteorder 3
�ޥ�����Ȥ�ʤ���Фʤ�ޤ���
.Pp
.Nm bpf
�ե����ëµï¿½Ò»Ò¤Ë½ñ¤¹ï¿½ï¿½à¤³ï¿½È¤Ç¥Í¥Ã¥È¥ï¡¼ï¿½ï¿½ï¿½Ë¥Ñ¥ï¿½ï¿½Ã¥È¤ï¿½
���Ф��뤳�Ȥ��Ǥ��ޤ���
�ñ¤¹ï¿½ï¿½ß¤Ï¥Ð¥Ã¥Õ¥ï¿½ï¿½ï¿½ó¥°¤ï¿½ï¿½ï¿½Ê¤ï¿½ï¿½Î¤Ç¡ï¿½1 ��νñ¤¹ï¿½ï¿½ß¤Ë¤Ä¤ï¿½
1 �ĤΥѥ��åȤ���������������ޤ���
���ߥ������ͥåȤ�
.Tn SLIP
��󥯤ؤνñ¤¹ï¿½ï¿½ß¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ý¡ï¿½ï¿½È¤ï¿½ï¿½ï¿½Æ¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
.Sh IOCTL
���Τ褦��
.Xr ioctl 2
���ޥ�ɥ����ɤ� <net/bpf.h> ���������Ƥ��ޤ������٤ƤΥ��ޥ�ɤˤ�
���Τ褦�ʥ��󥯥롼�ɥե����뤬ɬ�פǤ���
.Bd -literal
#include <sys/types.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <net/bpf.h>
.Ed
.Pp
����ˡ�
.Dv BIOCGETIF
��
.Dv BIOCSETIF
�ϡ�
.Aq Pa sys/socket.h
��
.Aq Pa net/if.h
��ɬ�פȤ��ޤ���
.Dv FIONREAD
��
.Dv SIOCGIFADDR
�ʳ��ˤ⡢���Τ褦�ʥ��ޥ�ɤ�
�����ץ󤷤�
.Nm
�ե������Ŭ�ѤǤ��ޤ���
.Xr ioctl 2
�ؤ� (3 ���ܤ�) �����ϡ�
����η��ؤΥݥ��󥿤Ǥʤ���Фʤ�ޤ���
.Bl -tag -width BIOCGRTIMEOUT
.It Dv BIOCGBLEN
.Pq Li u_int
.Nm
�ե��������ɤ߹��ߤ�Ԥ������ɬ�פʥХåե�Ĺ���֤��ޤ���
.It Dv BIOCSBLEN
.Pq Li u_int
.Nm
�ե��������ɤ߹��ߤ�Ԥ�����ΥХåե�Ĺ�����ꤷ�ޤ����Хåե��ϡ��ե����뤬
.Dv BIOCSETIF
�ˤ�äƥ��󥿥ե���������³������������ꤵ��ʤ���Фʤ�ޤ���
�׵ᤵ�줿�Хåե���������Ŭ�ѤǤ��ʤ��ä����ϡ�
���ƤǤ��륵�����ǺǤ�ᤤ��Τ����ꤵ�졢���줬����������֤���ޤ���
���Υ������Ǥʤ��ѥ��åȤ��Хåե����̤ä��Ȥ��ˤϡ�
�ɤ߹��ߥ������
.Er EIO
���ͤǽ�λ���ޤ���
.It Dv BIOCGDLT
.Pq Li u_int
��³���줿���󥿥ե������β��ˤ���ǡ�������ؤη����֤��ޤ���
���󥿥ե����������ꤵ��Ƥ��ʤ��ä����
.Er EINVAL
���֤���ޤ���
�ǥХ����η��ϡ�
.Dq Li DLT_
�������դ������Ǥ��ꡢ
.Aq Pa net/bpf.h
���������Ƥ��ޤ���
.It Dv BIOCPROMISC
����Ū�˥��󥿥ե�������̵���� (promiscuous) �⡼�ɤˤ��ޤ���
��������ۥ��Ȥ˸�����줿��ΤΤߤʤ餺���٤ƤΥѥ��åȤ���������ޤ���
ʣ���Υե����뤬Ϳ����줿���󥿥ե�������ƻ뤹�뤳�Ȥ��Ǥ���Τǡ�
���Υ��󥿥ե�������̵���̤Ǥʤ��⡼�ɤǥ����ץ󤷤��ƻ�ԤǤ�
�ѥ��åȤ�̵���̤˼������뤳�Ȥ��Ǥ��Ƥ��ޤ��ޤ���
���������Ŭ���ʥե��륿�Ƕ������뤳�Ȥ��Ǥ��ޤ���
.It Dv BIOCFLUSH
����ѥ��åȤΥХåե���ե�å��夷��BIOCGSTATS ���֤����
�����ͤ�ꥻ�åȤ��ޤ���
.It Dv BIOCGETIF
.Pq Li "struct ifreq"
�ե����뤬�ƻ뤷�Ƥ���ϡ��ɥ��������󥿥ե�������̾�����֤��ޤ���
̾����
.Li ifreq
��¤�Τ� ifr_name �ե�����ɤ��֤���ޤ���
¾�Υե�����ɤϤ��٤�̤����Ȥʤ�ޤ���
.It Dv BIOCSETIF
.Pq Li "struct ifreq"
�ե�����˴�Ϣ�դ���ϡ��ɥ��������󥿥ե����������ꤷ�ޤ���
���Υ��ޥ�ɤϡ��ɤ�ʥѥ��åȤ��ɤ߹����������
�¹Ԥ���ʤ���Ф����ޤ���
�ǥХ����ϡ�
.Li ifreq
��¤�Τ�
.Li ifr_name
�ե�����ɤ�Ȥä�̾���Ǽ�����ޤ���
�����
.Dv BIOCFLUSH
��ư���¹Ԥ��ޤ���
.It Dv BIOCSRTIMEOUT
.It Dv BIOCGRTIMEOUT
.Pq Li "struct timeval"
�����ॢ���ȥѥ�᡼��������ޤ��ϼ������ޤ���
�����ˤϡ��ɤ߹����׵�ǥ����ॢ���Ȥ���ޤǤ�
�Ԥ����֤�Ĺ������ꤷ�ޤ���
���Υѥ�᡼���ϡ�
.Xr open 2
�ˤ�� 0 �˽�������졢�����ॢ���Ȥ��ʤ����Ȥ�ؼ����ޤ���
.It Dv BIOCGSTATS
.Pq Li "struct bpf_stat"
�ѥ��åȽ����ͤμ��ι�¤�Τ��֤��ޤ�:
.Bd -literal
struct bpf_stat {
u_int bs_recv; /* ���������ѥ��åȿ� */
u_int bs_drop; /* ��Ȥ����ѥ��åȿ� */
};
.Ed
.Pp
�ե�����ɤϼ��Τ褦�ˤʤ�ޤ�:
.Bl -hang -offset indent
.It Li bs_recv
�����ץ�ޤ��ϥꥻ�åȸ�ˡ����ε��һҤˤ�äƼ��������ѥ��åȿ�
(�Ǹ���ɤ߹��ߥ����뤫��Хåե�����Ƥ����Τ�ޤߤޤ�)��
.It Li bs_drop
�ե��륿���������Ϥ��������Хåե��Υ����Хե����ˤ��
�����ͥ뤬��Ȥ����ѥ��åȤο�
(�Ĥޤꡢ���ץꥱ���������ɤ߹��ߤ��ѥ��åȤ�ή�̤��ɤ��Ĥ��Ƥ��ʤ�
�Ȥ������ȤǤ�)��
.El
.It Dv BIOCIMMEDIATE
.Pq Li u_int
�����ο����ͤ˴�Ť��� ``ľ�ܥ⡼��'' ��Í���ޤ���̵���ˤ��ޤ���
ľ�ܥ⡼�ɤ�Í���ʤȤ����ѥ��åȤ���������ɤ߹��ߤ�
���������֤���ޤ���̵���ʤȤ������Ϥϥ����ͥ�Хåե������äѤ��ˤʤ뤫��
�ޤ��ϥ����ॢ���Ȥ�������ޤǥ֥��å�����ޤ���
����ϡ��ꥢ�륿����˥�å������˱������ʤ���Фʤ�ʤ�
.Xr rarpd 8
�Τ褦�ʥץ������ˤ������Ǥ���
�������ե�������Ф��Ƥϡ��ǥե���ȤǤϥ��դˤʤ�ޤ���
.It Dv BIOCSETF
.Pq Li "struct bpf_program"
��̣�Τʤ��ѥ��åȤ�ΤƤ뤿���
�����ͥ뤬�Ȥ��ե��륿�ץ����������ꤷ�ޤ���
���ι�¤�Τ��̤���̿����¤٤�����Ȥ���Ĺ�����Ϥ���ޤ�:
.Bd -literal
struct bpf_program {
int bf_len;
struct bpf_insn *bf_insns;
};
.Ed
�ե��륿�ץ�������
.Li bf_insns
�ե�����ɤǻ��ꤵ�졢
.Sq Li struct bpf_insn
�ι�¤����ˤ�����ץ�������Ĺ����
.Li bf_len
�ե�����ɤ�Ϳ�����ޤ���
�����ơ�
.Dv BIOCFLUSH
��ư��¹Ԥ���ޤ���
�ե��륿����������ˤĤ��Ƥ�
.Sx �ե��륿�ޥ���
�Υ��������򸫤Ʋ�������
.It Dv BIOCVERSION
.Pq Li "struct bpf_version"
���ߥ����ͥ��ǧ������Ƥ���ե��륿����Υ᥸�㡼�����
�ޥ��ʥС�������ֹ���֤��ޤ����ե��륿�򥤥󥹥ȡ��뤹�����ˡ�
���ץꥱ�������ϡ�ư��Ƥ��륫���ͥ�ȸ��ߤΥС������Ȥ�
�ߴ��������뤫�ɤ�����Ĵ�٤ʤ���Фʤ�ޤ���
�᥸�㡼�ֹ椬���פ������ץꥱ�������Υޥ����ֹ椬
�����ͥ�Υޥ����ֹ����������������ʲ��ʤ�С�������ֹ�ϸߴ�����
����ޤ���
�����ͥ�ΥС�������ֹ�ϰʲ��ι�¤�Τ��֤���ޤ�:
.Bd -literal
struct bpf_version {
u_short bv_major;
u_short bv_minor;
};
.Ed
.Pp
���ߤΥС�������ֹ��
.Aq Pa net/bpf.h
���
.Dv BPF_MAJOR_VERSION
��
.Dv BPF_MINOR_VERSION
�ˤ�ä�Ϳ�����ޤ���
�ߴ����Τʤ��ե��륿�Ǥϡ�ͽ�����ʤ�ư��˽���뤫�⤷��ޤ���
(�Ǥ⤢�ꤽ���ʤΤϡ�
.Fn ioctl
�ˤ�äƥ��顼���֤���뤫���ޤ��϶����˥ѥ��åȤ����פ��뤳�ȤǤ�)��
.Sh BPF �إå�
.Xr read 2
�ˤ�ä��֤����ƥѥ��åȤ���Ƭ�ˤϡ�
���Τ褦�ʹ�¤�Τ��Ĥ����Ƥ��ޤ�:
.Bd -literal
struct bpf_hdr {
struct timeval bh_tstamp; /* �����ॹ����� */
u_long bh_caplen; /* ����ץ��㤵�줿��ʬ��Ĺ�� */
u_long bh_datalen; /* �ѥ��åȤΥ��ꥸ�ʥ��Ĺ�� */
u_short bh_hdrlen; /* bpf �إå���Ĺ�� (���ι�¤��
+ ����Ĵ���ѥǥ���) */
};
.Ed
.Pp
�ե�����ɤϥۥ��Ƚ����¸����Ƥ��ꡢ���Τ褦�ˤʤ�ޤ�:
.Pp
.Bl -tag -compact -width bh_datalen
.It Li bh_tstamp
�ѥ��åȥե��륿�ˤ�äơ����Υѥ��åȤ��������줿����
.It Li bh_caplen
�ѥ��åȤΥ���ץ��㤵�줿��ʬ��Ĺ����
������ڤ�ͤ��̤κǾ��ͤǡ�
�ե��륿�ȥѥ��å�Ĺ�ˤ�äƻ��ꤵ��Ƥ��ޤ���
.It Li bh_datalen
��ϩ����Υ�줿�ѥ��å�Ĺ��
�����ͤϥե��륿�ǻ��ꤵ�줿�ڤ�ͤ��̤ˤϰ�¸���ޤ���
.It Li bh_hdrlen
.Nm
�إå���Ĺ���������
.\" XXX - not really a function call
.Fn sizeof "struct bpf_hdr"
���������Ȥϸ¤�ޤ���
.El
.Pp
.Li bh_hdrlen
�ե�����ɤϥإå��ȥ�󥯥�٥�ץ��ȥ���֤�
�ѥǥ��󥰤Τ����¸�ߤ��ޤ���������Ū�ϡ�
�ѥ��åȥǡ�����¤��Ŭ�ڤʶ���Ĵ�����ݾڤ��뤳�ȤǤ���
����ϡ�
����Ĵ���˸������������ƥ����㤬ɬ�פȤ��뤳�ȤǤ��ꡢ
�ޤ�������ˤ�ä�¾��¿���Υ������ƥ�����ˤ�������ǽ�����夷�ޤ���
�ѥ��åȥե��륿��
.Li bpf_hdr
�ȥͥåȥ���ؤΥإå�����ɶ����ˤʤ뤳�Ȥ��ݾڤ��ޤ���
����Ĵ�������󤵤줿�ޥ����ǥ���إץ��ȥ���򥢥�����
����Ȥ��ˤϡ�Ŭ�ڤ����դ�ʧ��ʤ���Фʤ�ޤ���
(����ϥ������ͥåȾ�Ǥ�����ˤϤʤ�ޤ��󡣤ʤ��ʤ顢
�ե�����ɤη��� short �Ǥ���������ե��åȤ�����å¤ï¿½Þ¤ï¿½ï¿½ï¿½ï¿½ï¿½
���ɥ쥹�������餯�Х���ñ�̤ǥ�����������뤫��Ǥ�)��
.Pp
����ˡ��ġ��Υѥ��åȤϥ�ɶ����ǻϤޤ�褦�˥ѥǥ��󥰤���ޤ���
����ˤ�ꡢ���ץꥱ�������ϥѥ��åȤ��鼡�Υѥ��åȤ�������ˡ��
�ΤäƤ��뤳�Ȥ��׵ᤵ��ޤ���
���Υץ��������������뤿��ˡ��ޥ���
.Dv BPF_WORDALIGN
��
.Aq Pa net/bpf.h
����������Ƥ��ޤ���
�����ϺǤ�ᤤ��ɶ����� (��ɤ�
.Dv BPF_ALIGNMENT
�Х�����) ���ڤ�夲���ޤ���
.Pp
�㤨��
.Sq Li p
���ѥ��åȤ���Ƭ��ؤ��Ȥ�������ɽ����
�ݥ��󥿤򼡤Υѥ��åȤؿʤ�ޤ�:
.Dl p = (char *)p + BPF_WORDALIGN(p->bh_hdrlen + p->bh_caplen)
.Pp
����Ĵ���ε�����Ŭ�ڤ�ư����뤿���
.Xr read 2
���Ϥ����Хåե��ϡ����켫�Ȥ���ɶ����ˤʤ���Фʤ�ޤ���
.Xr malloc 3
�ؿ��Ͼ�˥�ɶ����ΥХåե����֤��ޤ���
.Sh �ե��륿�ޥ���
�ե��륿�ץ�������̿����¤٤�����Ǥ��ꡢ���٤Ƥ�ʬ����
�����ɤ������˸�������ΤǤ��ꡢ�ޤ���
.Em return
̿��ǽ�����ΤǤ���
��̿��ϡ��������졼��������ǥå����쥸������������êµï¿½ï¿½ï¿½ï¿½
����Ӱ��ۤΥץ�����५���󥿤������뵿���ޥ�����־��
���餫��ư���Ԥʤ��ޤ���
���ι�¤�Τ�̿��ե����ޥåȤ�����Ǥ�:
.Bd -literal
struct bpf_insn {
u_short code;
u_char jt;
u_char jf;
u_long k;
};
.Ed
.Li k
�ե�����ɤ�̿��ˤ�äưۤʤ���ˡ���Ѥ���졢
.Li jt
��
.Li jf
�ե�����ɤ�ʬ��̿��ˤ�äƥ��ե��åȤȤ����Ѥ����ޤ���
�����ɤ�Ⱦ����Ū�ʷ�����沽����ޤ���
̿��ˤ� 8 �ĤΥ��饹
.Dv BPF_LD ,
.Dv BPF_LDX ,
.Dv BPF_ST ,
.Dv BPF_STX ,
.Dv BPF_ALU ,
.Dv BPF_JMP ,
.Dv BPF_RET ,
.Dv BPF_MISC
������ޤ���
¾�Τ��������ʥ⡼�ɤ����ӥåȤϼºݤ�̿���Ϳ���뤿���
�ӥåȲû� (or) ���졢���饹���Ѵ�����ޤ���
���饹�ȥ⡼�ɤ�
.Aq Pa net/bpf.h
����������Ƥ��ޤ���
�ʲ���������줿���줾���
.Nm
̿��Ǥ���
�ص�Ū�� A ���������졼����X ������ǥå����쥸������
P[] ���ѥ��åȥǡ�����M[] ���󤻽���ΰ�����êµï¿½ï¿½ï¿½Ç¤ï¿½ï¿½ï¿½È¤ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
P[i:n] �ϥѥ��å���� ``i'' �Х��ȥ��ե��åȤΥǡ�����ؤ���
��� (n=4)�����̵��Ⱦ��� (n=2)�����̵���Х��� (n=1)
����������ޤ���
M[i] �ϡ�������êµï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ i ���ܤΥ�ɤ�ؤ������ñ�̤�
���ɥ쥹��������꿶���ޤ������êµï¿½ï¿½ï¿½ï¿½ 0 ����
.Dv BPF_MEMWORDS
- 1 ���ֹ��դ�����ޤ���
.Li k ,
.Li jt ,
.Li jf
�ϡ�̿�����������б�����ե�����ɤˤʤ�ޤ���``len'' �ϡ�
�ѥ��å�Ĺ�򻲾Ȥ��ޤ���
.Pp
.Bl -tag -width BPF_STXx -compact
.It Dv BPF_LD
������̿��ϡ��ͤ򥢥����졼����ʣ�̤��ޤ���
���������ڥ��ɤη��ϡ�``���ɥ�å��󥰥⡼��'' �ǻ��ꤵ�졢
���
.Pq Dv BPF_IMM
�Ǥ⡢���ꥪ�ե��åȤΥѥ��åȥǡ���
.Pq Dv BPF_ABS
�����ѥ��ե��åȤΥѥ��åȥǡ���
.Pq Dv BPF_IND
���ѥ��å�Ĺ
.Pq Dv BPF_LEN
��������êµï¿½ï¿½ï¿½ï¿½Î¥ï¡¼ï¿½ï¿½
.Pq Dv BPF_MEM
��Ȥ����ޤ���
.Dv BPF_IND
��
.Dv BPF_ABS
�ξ�硢�ǡ����������ϡ����
.Pq Dv BPF_W
���ϡ��ե��
.Pq Dv BPF_H
������
.Pq Dv BPF_B
�Τ����줫�Ǥʤ���Фʤ�ޤ���
���Ѳ�ǽ����
.Dv BPF_LD
̿��ΰ�̣�ϼ����̤�Ǥ���
.Pp
.Bl -tag -width "BPF_LD+BPF_W+BPF_IND" -compact
.It Li BPF_LD+BPF_W+BPF_ABS
A <- P[k:4]
.It Li BPF_LD+BPF_H+BPF_ABS
A <- P[k:2]
.It Li BPF_LD+BPF_B+BPF_ABS
A <- P[k:1]
.It Li BPF_LD+BPF_W+BPF_IND
A <- P[X+k:4]
.It Li BPF_LD+BPF_H+BPF_IND
A <- P[X+k:2]
.It Li BPF_LD+BPF_B+BPF_IND
A <- P[X+k:1]
.It Li BPF_LD+BPF_W+BPF_LEN
A <- len
.It Li BPF_LD+BPF_IMM
A <- k
.It Li BPF_LD+BPF_MEM
A <- M[k]
.El
.It Dv BPF_LDX
������̿����ͤ򥤥�ǥå����쥸�����˥����ɤ��ޤ���
����̿��ΤȤ��Υ��ɥ�å��󥰥⡼�ɤϡ��������졼���ؤΥ�����
�����⸷̩�Ǥ�����IP �إå�Ĺ������ɤ������Ū����ˡ�Ǥ���
.Dv BPF_MSH
��ޤ�Ǥ��뤳�Ȥ����ܤ��Ʋ�������
.Bl -tag -width "BPF_LDX+BPF_W+BPF_MEM" -compact
.It Li BPF_LDX+BPF_W+BPF_IMM
X <- k
.It Li BPF_LDX+BPF_W+BPF_MEM
X <- M[k]
.It Li BPF_LDX+BPF_W+BPF_LEN
X <- len
.It Li BPF_LDX+BPF_B+BPF_MSH
X <- 4*(P[k:1]&0xf)
.El
.It Dv BPF_ST
����̿��ϥ������졼��������������򤷤ޤ���
�Ԥ���β�ǽ������Ĥ����ʤ��Τǥ��ɥ�å��󥰥⡼�ɤ����פǤ���
.Bl -tag -width "BPF_ST" -compact
.It Li BPF_ST
M[k] <- A
.El
.It Dv BPF_STX
����̿��ϥ���ǥå����쥸����������������򤷤ޤ���
.Bl -tag -width "BPF_STX" -compact
.It Li BPF_STX
M[k] <- X
.El
.It Dv BPF_ALU
alu ̿��ϡ��������졼���ȥ���ǥå����쥸�����ޤ�������֤�
����¹Ԥ�����̤򥢥����졼�����ᤷ�ޤ���
�Х��ʥ����Τ���ˤϥ������⡼�ɤ�ɬ�פǤ�
.Po
.Dv BPF_K
�ޤ���
.Dv BPF_X
.Pc��
.Bl -tag -width "BPF_ALU+BPF_MUL+BPF_K" -compact
.It Li BPF_ALU+BPF_ADD+BPF_K
A <- A + k
.It Li BPF_ALU+BPF_SUB+BPF_K
A <- A - k
.It Li BPF_ALU+BPF_MUL+BPF_K
A <- A * k
.It Li BPF_ALU+BPF_DIV+BPF_K
A <- A / k
.It Li BPF_ALU+BPF_AND+BPF_K
A <- A & k
.It Li BPF_ALU+BPF_OR+BPF_K
A <- A | k
.It Li BPF_ALU+BPF_LSH+BPF_K
A <- A << k
.It Li BPF_ALU+BPF_RSH+BPF_K
A <- A >> k
.It Li BPF_ALU+BPF_ADD+BPF_X
A <- A + X
.It Li BPF_ALU+BPF_SUB+BPF_X
A <- A - X
.It Li BPF_ALU+BPF_MUL+BPF_X
A <- A * X
.It Li BPF_ALU+BPF_DIV+BPF_X
A <- A / X
.It Li BPF_ALU+BPF_AND+BPF_X
A <- A & X
.It Li BPF_ALU+BPF_OR+BPF_X
A <- A | X
.It Li BPF_ALU+BPF_LSH+BPF_X
A <- A << X
.It Li BPF_ALU+BPF_RSH+BPF_X
A <- A >> X
.It Li BPF_ALU+BPF_NEG
A <- -A
.El
.It Dv BPF_JMP
������̿��ϥե���������ѹ����ޤ�����兩���פ�
�������졼���ȡ����
.Pq Dv BPF_K
�ޤ��ϥ���ǥå����쥸����
.Pq Dv BPF_X
�֤���Ӥ�Ԥʤ��ޤ���
��̤��� (�Ĥޤ��� 0) �Ǥ��ä����˿���ʬ�������򤵤졢
�����Ǥʤ���е���ʬ�������򤵤�ޤ���
�����ץ��ե��åȤ� 8 �ӥåȤ���沽�����Τǡ�
��Ĺ�����פ� 256 ̿��ʬ�Ǥ���
�����������������������
.Pq Dv BPF_JA
�ϡ����ե��åȤȤ��� 32 �ӥåȤ�
.Li k
�ե�����ɤ���Ѥ���Υ�줿Ǥ�դιԤ��������ޤ���
���٤Ƥξ��ϴ���Ū�����̵����Ӥ��Ѥ��ޤ���
.Bl -tag -width "BPF_JMP+BPF_KSET+BPF_X" -compact
.It Li BPF_JMP+BPF_JA
pc += k
.It Li BPF_JMP+BPF_JGT+BPF_K
pc += (A > k) ? jt : jf
.It Li BPF_JMP+BPF_JGE+BPF_K
pc += (A >= k) ? jt : jf
.It Li BPF_JMP+BPF_JEQ+BPF_K
pc += (A == k) ? jt : jf
.It Li BPF_JMP+BPF_JSET+BPF_K
pc += (A & k) ? jt : jf
.It Li BPF_JMP+BPF_JGT+BPF_X
pc += (A > X) ? jt : jf
.It Li BPF_JMP+BPF_JGE+BPF_X
pc += (A >= X) ? jt : jf
.It Li BPF_JMP+BPF_JEQ+BPF_X
pc += (A == X) ? jt : jf
.It Li BPF_JMP+BPF_JSET+BPF_X
pc += (A & X) ? jt : jf
.El
.It Dv BPF_RET
�꥿����̿��ϥե��륿�ץ�������λ������������ѥ��åȤ��̤�
���ꤷ�ޤ� (���ʤ�����ڤ�ͤ��̤��֤��ޤ�)��
����� 0 �ϡ����Υѥ��åȤ�̵�뤵���٤��Ǥ��뤳�Ȥ�ɽ���Ƥ��ޤ���
����ͤ����
.Pq Dv BPF_K
�ޤ��ϥ������졼��
.Pq Dv BPF_A
�Τ����줫�Ǥ���
.Bl -tag -width "BPF_RET+BPF_K" -compact
.It Li BPF_RET+BPF_A
A �Х��ȼ���
.It Li BPF_RET+BPF_K
k �Х��ȼ���
.El
.It Dv BPF_MISC
�åµï¿½Î¥ï¿½ï¿½é¥¹ï¿½ï¿½Å¬ï¿½ç¤·ï¿½Ê¤ï¿½ï¿½ï¿½Î¤ä¡¢ï¿½É²Ã¤ï¿½ï¿½ï¿½ï¿½Ù¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ì¿ï¿½ï¿½
�Τ���ˡ�����¾�Υ��ƥ��꤬����ޤ�����
���ߡ�����ǥå����쥸�����򥢥����졼����ʣ�̤��롢
�ޤ��Ϥ��εդ�Ԥʤ��쥸����ž��̿�᤬����ޤ���
.Bl -tag -width "BPF_MISC+BPF_TAX" -compact
.It Li BPF_MISC+BPF_TAX
X <- A
.It Li BPF_MISC+BPF_TXA
A <- X
.El
.Pp
.Nm
���󥿥ե������ϡ�����ν�������������뼡�Υޥ������󶡤��Ƥ��ޤ�:
.Fn BPF_STMT opcode operand
��
.Fn BPF_JUMP opcode operand true_offset false_offset
.Pp
.Sh ������
�ʲ��Υե��륿�� RARP �ǡ���󤫤��������ޤ����ե��륿�ϡ�
RARP �׵�Τߤ�������ޤ���
.Bd -literal
struct bpf_insn insns[] = {
BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, ETHERTYPE_REVARP, 0, 3),
BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 20),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, REVARP_REQUEST, 0, 1),
BPF_STMT(BPF_RET+BPF_K, sizeof(struct ether_arp) +
sizeof(struct ether_header)),
BPF_STMT(BPF_RET+BPF_K, 0),
};
.Ed
.Pp
���Υե��륿�� 128.3.112.15 �� 128.3.112.35 �δ֤� IP �ѥ��å�
������������ޤ���
.Bd -literal
struct bpf_insn insns[] = {
BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, ETHERTYPE_IP, 0, 8),
BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 2),
BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 3, 4),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 3),
BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 1),
BPF_STMT(BPF_RET+BPF_K, (u_int)-1),
BPF_STMT(BPF_RET+BPF_K, 0),
};
.Ed
.Pp
�Ǹ�ˡ����Υե��륿�� TCP finger �ѥ��åȤ������֤��ޤ���
TCP �إå��ˤ��ɤ��夯����ˤ� IP �إå�����Ϥ��ʤ���Фʤ�ޤ���
.Dv BPF_JSET
̿��� IP �ե饰���ȥ��ե��åȤ� 0 �Ǥ��뤳�Ȥ�Ĵ�٤ޤ���
����� TCP �إå��Ǥ��뤳�Ȥ��ǧ���ޤ���
.Bd -literal
struct bpf_insn insns[] = {
BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, ETHERTYPE_IP, 0, 10),
BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 23),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, IPPROTO_TCP, 0, 8),
BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 20),
BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 0x1fff, 6, 0),
BPF_STMT(BPF_LDX+BPF_B+BPF_MSH, 14),
BPF_STMT(BPF_LD+BPF_H+BPF_IND, 14),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 79, 2, 0),
BPF_STMT(BPF_LD+BPF_H+BPF_IND, 16),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 79, 0, 1),
BPF_STMT(BPF_RET+BPF_K, (u_int)-1),
BPF_STMT(BPF_RET+BPF_K, 0),
};
.Ed
.Sh ��Ϣ����
.Xr tcpdump 1 ,
.Xr ioctl 2 ,
.Xr byteorder 3
.Rs
.%A McCanne, S.
.%A Jacobson V.
.%T "An efficient, extensible, and portable network monitor"
.Re
.Sh ��Ϣ�ե�����
.Bl -tag -compact -width /dev/bpfXXX
.It Pa /dev/bpf Ns Sy n
�ѥ��åȥե��륿�ǥХ���
.El
.Sh �Х�
�ɤ߹��ߥХåե��ϸ���Ĺ (
.Dv BIOCGBLEN
ioctl ���֤������) �Ǥʤ���Фʤ�ޤ���
.Pp
̵���̥⡼�ɤ��׵ᤷ�ʤ��ե�����ϡ�Ʊ���ϡ��ɥ��������󥿥ե��������
���Υ⡼�ɤ��׵᤹��¾�Υե�����������ѤȤ��ơ�
̵���̤˥ѥ��åȤ�������뤫�⤷��ޤ���
����ϡ������ХإåɤΤ���������ɲä���С������ͥ���ǽ����Ǥ���Ǥ��礦��
�����������󥿥ե�������̵���̤Ǥ���Ȥ��٤ƤΥե����뤬�ߤʤ��ʤ���Фʤ�ʤ��褦��
��ǥ���������ޤ�ޤ���ɬ�פʤ顢�����Υѥ��åȤ�Ϥ�������Υե��륿��
���Ѥ��ʤ���Фʤ�ޤ���
.Pp
����Ĺ�إå��Υǡ�����󥯥ץ��ȥ���ϸ��ߥ��ݡ��Ȥ���Ƥ��ޤ���
.Sh ���
.Pp
Enet �ѥ��åȥե��륿�ϡ� 1980 ǯ�˥����ͥ����������ؤ�
Mike Accetta �� Rick Rashid �ˤ���������ޤ�����
������ե����ɤ� Jeffrey Mogul �������ɤ� BSD �˰ܿ�����
1983 ǯ�ʹ�ȯŸ�����ޤ��������θ�
.Tn DEC
�� Ultrix �ѥ��åȥե��륿��
.Tn SunOS 4.1
��
.Tn STREAMS
.Tn NIT
�⥸�塼�롢
.Tn BPF
�ؤȿʲ����ޤ�����
.Sh ����
Lawrence Berkeley ������
.An Steven McCanne
�� 1990 ǯ�Ƥ� BPF �򥤥�ץ���Ȥ��ޤ�����
¿����
.An Van Jacobson
�ˤ�äƥǥ����󤵤�ޤ�����