bpf

ëªì¹
     bpf — ë²í¬ ë ì´ í¨í· íí°

ìì
     pseudo-device bpfilter

í´ì¤
     ë²í¬ ë ì´ í¨í· íí°ë, ë°ì´í° ë§í¬ì¸µì ìì´ íë¡í ì½ë¹ìì¡´ì ììííì
     ì¸í°íì´ì¤ë¥¼ ì ê³µí©ëë¤.  ë¤í¸ìí¬ìì í¨í·ì, ë¹ë¡ ë¤ë¥¸ í¸ì¤í¸ë¡ í¥í´ì¡ë¤
     물건ì´ì´ë, 모ë ì´ ê¸°êµ¬ë¥¼ íµí´ ì¡ì¸ì¤ í  ìê° ììµëë¤.

     ì´ í¨í· íí°ë /dev/bpf0, /dev/bpf1 ë±ì ìºë¦í°í í¹ì ëë°ì´ì¤ë¡ ë³´ìëë¤.  ì´
     ëë°ì´ì¤ë¥¼ ì¤íí í, íì¼ ê¸°ì ìë BIOCSETIF ioctl ì ìí´, í¹ì ì ë¤í¸ìí¬
     ì¸í°íì´ì¤ì ë¬¶ì§ ìì¼ë©´ ìë©ëë¤.  ì§ìë°ì ì¸í°íì´ì¤ë ë³µìì ê°ììë¡ ê³µì í
     ìê° ìì´ ê° ê¸°ì ììëì ìë íí°ë, ê°ì í¨í·ì íë¦ì ë³´ê² ë©ëë¤.  ì¤íí  ì ìë
     íì¼ì ìíì, 커ëì ì¤ì ì¼ë¡ 주ì´ì§ ê°ì ì íë©ëë¤.  ìì ìì ê·¸ë¦¬ê³  주ì´ì§
     ìììë, ì íì 16 ì´ ëì´ ììµëë¤.

     ê°ê°ì ë§ì´ëë°ë°ì´ì¤ìë, ë¤ë¥¸ ëë°ì´ì¤ íì¼ì´ íìí©ëë¤.  ëë°ì´ì¤ íì¼ì´
     ì¬ì©ì¤ì´ë¤ë©´, ì¤íì ì¤í¨í´, errno ìë EBUSY ê° ì¸í¸ ë©ëë¤.

     ì¤íëìë¤ bpf íì¼ì ì¤ì²´ ê°ê° ê´ë ¨ ì§ì ì ìê³  ìë ê²ì´, ì ì ê° ì¤ì  ê°ë¥í
     í¨í· íí°ìëë¤.  ì´ë ì¸í°íì´ì¤ë¡ í¨í·ì ìì íì ëë ì¸ì ë¼ë, ê·¸ ì¸í°íì´ì¤ë¥¼
     ê°ìíê³  ìë íì¼ ê¸°ì ìë 모ë ìì ì íí°ë¥¼ ì ì©í©ëë¤.  í¨í·ì ë°ë ê° ê¸°ì ìë,
     ìì ì©ì ì¹´í¼ë¥¼ ë°ìµëë¤.

     ê°ê°ì íì¼ë¡ë¶í°ì ìë ¥ì, íí°ë¡ ë§¤ì¹ í í¨í·ì ë¤ìì 그룹ì ëë ¤ì¤ëë¤.
     ì±ë¥ì ì¬ë¦¬ê¸° ìí´ì(ë문ì), read ì ê±´ë¤ì£¼ë ë²í¼ë bpf íì§ë§ ë´ë¶ìì
     ì¬ì©íë ë²í¼ì ê°ì ì¬ì´ì¦ê° ìëë©´ ìë©ëë¤.  ì´ ì¬ì´ì¦ë, BIOCGBLEN ioctl (ìëì
     ê°ì´ë¥¼ 참조)ë¡ ì»ì ì ìì´ BIOCSBLEN ê·¸ë¦¬ê³  ì¤ì í  ì ììµëë¤.  ì´
     ì¬ì´ì¦ë³´ë¤ í° ê°ê°ì í¨í·ì, íì°ì ì¼ë¡ ì ì½í  ì ìì´ ë²ë¦¬ë ê²ì 주ìí´
     주ì¸ì.

     ì´ í¨í· íí°ë, ê³ ì ì¥ í¤ëì´ë©´ ì´ë ë§í¬ ë 벨 íë¡í ì½ììë ìí¬í¸í©ëë¤.
     íì¬, ì´ëë·(ethernet)ì SLIP (ì)ê³¼ PPP ëë¼ì´ë²ë§ì´ bpf (ì)ê³¼ íì¡°í´
     ëìíëë¡(ë¯ì´) ìì ëê³  ììµëë¤.

     í¨í· ë°ì´í°ë ë¤í¸ìí¬ ë°ì´í¸ ì¤ëê° ëì´ ìì¼ë¯ë¡, ì´í리ì¼ì´ìì´ ë³µì ë°ì´í¸ì
     ê°ì 꺼ë´ê¸° ìí´ì(ë문ì)ë byteorder(3) 매í¬ë¡ë¥¼ ì¬ì©íì§ ìì¼ë©´ ìë©ëë¤.

     bpf íì¼ ê¸°ì ììê² ê¸°ìíë ê²ì¼ë¡ ë¤í¸ìí¬ì í¨í·ì ì¡ì¶í  ìê° ììµëë¤.  기ìì
     ë²í¼ë§ ëì§ ì기 ë문ì, 1 íì 기ìì ëí´ 1 ê°ì í¨í·ë°ì ì²ë¦¬ëì§ ììµëë¤.  íì¬
     ì´ëë·(ethernet)ì SLIP ë§í¬ìì 기ìë§ì´ ìí¬í¸ëê³  ììµëë¤.

IOCTL
     ë¤ìê³¼ ê°ì ioctl(2) ëªë ¹ ì½ëê° <net/bpf.h> ë¡ ì ìëê³  ììµëë¤. 모ë
     커ë©ëìë ë¤ìê³¼ ê°ì ì¸í´ë£¨ë íì¼ì´ íìí©ëë¤.

             #include <sys/types.h>
             #include <sys/time.h>
             #include <sys/ioctl.h>
             #include <net/bpf.h>

     ê²ë¤ê° BIOCGETIF (ì)ê³¼ BIOCSETIF (ì)ë, ⟨sys/socket.h⟩ (ì)ê³¼ ⟨net/if.h⟩
     (ì)를 íìë¡ í©ëë¤.

     FIONREAD (ì)ê³¼ SIOCGIFADDR ì´ì¸ë¡ë, ë¤ìê³¼ ê°ì ëªë ¹ì ì¤ííë¤ bpf íì¼ì
     ì ì©í  ì ììµëë¤.  ioctl(2) ìì (3 ë²ì§¸ì) ì¸ìë, ì§ì ì ííìì í¬ì¸í°ê° ìëë©´
     ìë©ëë¤.


     BIOCGBLEN      (u_int) bpf íì¼ììì ì½ê¸°ë¥¼ ì¤ìí기 ìí´ì(ë문ì) íìí
                    ë²í¼ì¥ì ëë ¤ì¤ëë¤.

     BIOCSBLEN      (u_int) bpf íì¼ììì ì½ê¸°ë¥¼ íí기 ìí ë²í¼ì¥ì ì¤ì í©ëë¤.
                    ë²í¼ë, íì¼ì´ BIOCSETIF ì ìí´ ì¸í°íì´ì¤ì ì ìë기 ì ì¼ë¡
                    ì¤ì ëì§ ìì¼ë©´ ìë©ëë¤.  ì구ë ë²í¼ ì¬ì´ì¦ë¥¼ ì ì©í  ì ììë
                    ê²½ì°ë, íì© í  ì ìë ì¬ì´ì¦ë¡ ê°ì¥ ê°ê¹ì´ ê²ì¼ë¡ ì¤ì ëì´
                    ê·¸ê²ì´ ì¸ììì ëë ¤ì£¼ì´ì§ëë¤.  ì´ ì¬ì´ì¦ê° ìë í¨í·ì´
                    ë²í¼ë¥¼ ë¤ëì ëìë, ì½ê¸° ì½ì EIO ì ê°ì¼ë¡ ì¢ë£í©ëë¤.

     BIOCGDLT       (u_int) ì ìë ì¸í°íì´ì¤ìëì ìë ë°ì´í° ë§í¬ì¸µì íí를
                    ëë ¤ì¤ëë¤.  ì¸í°íì´ì¤ê° ì§ì ëì´ ìì§ ììë ê²½ì° EINVAL íì§ë§
                    ëë ¤ì£¼ì´ì§ëë¤.  ëë°ì´ì¤ì ííë, “DLT_” íì§ë§ ì ì ë¤ë°ë¥¸
                    ííì´ë©°, ⟨net/bpf.h⟩ ê·¸ë¦¬ê³  ì ìëê³  ììµëë¤.

     BIOCPROMISC    ê°ì ì ì¼ë¡ ì¸í°íì´ì¤ë¥¼ ë¬´ì°¨ë³ (promiscuous) 모ëë¡
                    í©ëë¤.  ë¡ì»¬ í¸ì¤í¸ë¡ í¥í´ì§ ê²ë§ ìëì´ ëª¨ë  í¨í·ì´
                    ì²ë¦¬ë©ëë¤.  ë³µìì íì¼ì´ 주ì´ì§ ì¸í°íì´ì¤ë¥¼ ê°ìí  ìê°
                    ìì¼ë¯ë¡, ê·¸ ì¸í°íì´ì¤ë¥¼ 무차ë³íì§ ìì 모ëë¡ ì¤íí
                    ê°ììë¼ë í¨í·ì 무차ë³íê² ìì íë ê²ì´ ê°ë¥íê² ë©ëë¤.  ì´
                    문ì ë ì ë¹í íí°ë¡ êµì í  ìê° ììµëë¤.

     BIOCFLUSH      ëì°© í¨í·ì ë²í¼ë¥¼ íëì í´, BIOCGSTATS ë¡ ëë ¤ì£¼ì´ì§ë¤
                    ì§ê³ì¹ë¥¼ 리ìí¸ í©ëë¤.

     BIOCGETIF      (struct ifreq) íì¼ì´ ê°ìíê³  ìë íëì¨ì´ì¸í°íì´ì¤ì ì´ë¦ì
                    ëë ¤ì¤ëë¤.  ì´ë¦ì ifreq 구조체ì ifr_name íëì
                    ëë ¤ì£¼ì´ì§ëë¤.  ë¤ë¥¸ íëë 모ë 미ì ëë¦¬ê° ë©ëë¤.

     BIOCSETIF      (struct ifreq) íì¼ì ê´ë ¨ì§ë íëì¨ì´ì¸í°íì´ì¤ë¥¼ ì¤ì í©ëë¤.
                    ì´ ëªë ¹ì, ì´ë¤ í¨í·ì ì½ì´ë¤ì´ë ê²ë³´ë¤ë ì ì ì¤íëì§ ìì¼ë©´
                    ìë©ëë¤.  ëë°ì´ì¤ë, ifreq 구조체ì ifr_name íë를 ì¬ì©í´
                    ì´ë¦ì¼ë¡ ëíë©ëë¤.  í층 ë BIOCFLUSH ì ëìì ì¤íí©ëë¤.

     BIOCSRTIMEOUT

     BIOCGRTIMEOUT  (struct timeval) íì ìì íë¼ë¯¸í°ë¥¼ ì¤ì  ëë ì·¨ëí©ëë¤.
                    ì¸ììë, ì½ê¸° ìêµ¬ë¡ íì ìì í  ëê¹ì§ì ë기 ìê°ì 길ì´ë¥¼
                    ì§ì í©ëë¤.  ì´ íë¼ë¯¸í°ë, open(2) ì ìí´ 0 ì ì´ê¸°íëì´ íì
                    ìì íì§ ìë ê²ì ì§ìí©ëë¤.

     BIOCGSTATS     (struct bpf_stat) í¨í· ì§ê³ì¹ì ë¤ìì 구조체를
                    ëë ¤ì¤ëë¤:

                    struct bpf_stat {
                            u_int bs_recv;    /* ìì í í¨í·ì */
                            u_int bs_drop;    /* ë¨ì´ë¨ë¦° í¨í·ì */
                    };

                    íëë ë¤ìê³¼ ê°ì´ ë©ëë¤:

                          bs_recv ì¤í ëë 리ìí¸ íì, ì´ ê¸°ì ìì ìí´ ìì í í¨í·ì
                                  (ë§ì§ë§ ì½ê¸° ì½ë¡ë¶í° ë²í¼ ëê³  ìë ê²ì
                                  í¬í¨í©ëë¤).

                          bs_drop íí°ê° ìì·¨ë íì§ë§, ë²í¼ì ì¤ë²íë¡ì°ì ìí´
                                  커ëì´ ë¨ì´ë¨ë¦° í¨í·ì ì (ì¦, ì´í리ì¼ì´ìì
                                  ì½ê¸°ê° í¨í·ì ì ëì ë°ë¼ ì¡ì§ ììë¤ ê·¸ë ë¤ê³
                                  íë ê²ìëë¤).

     BIOCIMMEDIATE  (u_int) ì¸ìì ì§ìì¹ì ê·¼ê±°í´ ``ì§ì  모ë''를 ì í¨ ëë
                    무í¨ë¡ í©ëë¤.  ì§ì  모ëê° ì í¨í ë, í¨í·ì ë°ì¼ë©´(ì)
                    ì½ê¸°ë ì¦ì ëë ¤ì£¼ì´ì§ëë¤. 무í¨ì¸ì´ë¼ê³  í´ ìë ¥ì 커ë
                    ë²í¼ê° ê°ë ì°¨ëì§, ëë íì ììì´ ì¼ì´ë  ëê¹ì§ ë¸ë¡ ë©ëë¤.
                    ì´ê²ì, 리ì¼íìì ë©ì¸ì§ì ìëµí´ì¼ íë¤ rarpd(8) (ì)ê³¼ ê°ì
                    íë¡ê·¸ë¨ìë í¸ë¦¬í©ëë¤.  ìë¡ì´ íì¼ì ëí´ìë, ëí´í¸ììë ì¤íê°
                    ë©ëë¤.

     BIOCSETF       (struct bpf_program) í¥ë¯¸ê° ìë í¨í·ì ë²ë¦¬ê¸° ìí´ì(ë문ì)
                    커ëì´ ì¬ì©íë íí° íë¡ê·¸ë¨ì ì¤ì í©ëë¤.  ë¤ìì 구조체를
                    íµí´ ì¸ì¤í¸ëìì ëì´ëì ë°°ì´ê³¼ ê·¸ 길ì´ê° ê±´ë¤ë°ìµëë¤:

                    struct bpf_program {
                            int bf_len;
                            struct bpf_insn *bf_insns;
                    };

                    íí° íë¡ê·¸ë¨ì bf_insns íëìì ì§ì ëì´ ‘struct bpf_insn’ ì
                    구조 ì²´ë´ì ìì´ìì íë¡ê·¸ë¨ì 길ì´ê° bf_len íëìì
                    주ì´ì§ëë¤.  ê·¸ë¦¬ê³ , BIOCFLUSH ì ëìì´ ì¤íë©ëë¤.  íí°
                    ì¸ì´ì ì¤ëªì ëí´ìë íí° ë¨¸ì  ì ì¹ìì ë´ ì£¼ì¸ì.

     BIOCVERSION    (struct bpf_version) íì¬ ì»¤ëì ì¸ìëê³  ìë íí° ì¸ì´ì ë©ì´ì
                    ë° ë§ì´ëë°ì ¼ ë²í¸ë¥¼ ëë ¤ì¤ëë¤. íí°ë¥¼ ì¸ì¤í¨ í기 ì ì,
                    ì´í리ì¼ì´ìì, ëìíê³  ìë 커ëê³¼ íì¬ì ë²ì ¼ì´ í¸íì±ì´ ìëì§
                    ì´ë¤ì§ë¥¼ ì¡°ì¬íì§ ìì¼ë©´ ìë©ëë¤.  ë©ì´ì  ë²í¸ê° ì¼ì¹í´,
                    ì´í리ì¼ì´ìì ë§ì´ë ë²í¸ê° 커ëì ë§ì´ë ë²í¸ì ëì¼íì§, ê·¸ê²
                    ì´íë¼ë©´ ë²ì ¼ ë²í¸ë í¸íì±ì´ ììµëë¤.  커ëì ë²ì ¼ ë²í¸ë
                    ì´íì êµ¬ì¡°ì²´ë¡ ëë ¤ì£¼ì´ì§ëë¤:

                    struct bpf_version {
                            u_short bv_major;
                            u_short bv_minor;
                    };

                    íì¬ì ë²ì ¼ ë²í¸ë ⟨net/bpf.h⟩ ìì BPF_MAJOR_VERSION (ì)ê³¼
                    BPF_MINOR_VERSION ì ìí´ ì£¼ì´ì§ëë¤.  í¸íì±ì´ ìë íí°ììë,
                    ìê¸°ì¹ ìì ëìì ëë ì§ë 모ë¦ëë¤ (ê°ì¥ ìì ê²ì¸ ê²ì, ioctl() ì
                    ìí´ ìë¬ê° ëë ¤ì£¼ì´ì§ëì§, ëë ì°ì°í í¨í·ì´ ì¼ì¹íë ê²ìëë¤).

BPF í¤ë
     read(2) ì ìí´ ëë ¤ì£¼ì´ì§ë ê° í¨í·ì ì ëìë, ë¤ìê³¼ ê°ì êµ¬ì¡°ì²´ê° ë¶ì¬ì ¸
     ììµëë¤:

     struct bpf_hdr {
             struct timeval bh_tstamp;     /* íì ì¤í¬í */
             u_long bh_caplen;             /* capther ë ë¶ë¶ì ê¸¸ì´ */
             u_long bh_datalen;            /* í¨í·ì ì¤ë¦¬ì§ë ì ê¸¸ì´ */
             u_short bh_hdrlen;            /* bpf í¤ëì ê¸¸ì´ (ì´ êµ¬ì¡°ì²´
                                              + ê²½ê³ ì¡°ì  í¨ë©) */
     };

     íëë í¸ì¤í¸ììë¡ ë³´ì¡´ëê³  ìì´ ë¤ìê³¼ ê°ì´ ë©ëë¤:

     bh_tstamp   í¨í· íí°ì ìí´, ê·¸ í¨í·ì´ ì²ë¦¬ëìì ë ê°
     bh_caplen   í¨í·ì capther ë ë¶ë¶ì 길ì´.  ì´ê²ì ì ì½íê³  ìì ìµìì¹ë¡, íí°ì
                 í¨í·ì¥ì ìí´ ì§ì ëì´ ììµëë¤.
     bh_datalen  ê²½ë¡ë¡ë¶í° ë©ì´ì§ í¨í·ì¥.  ì´ ê°ì íí°ë¡ ì§ì ë ì ì½íê³  ììë
                 ìì¡´íì§ ììµëë¤.
     bh_hdrlen   bpf í¤ëì 길ì´. ì´ê²ì sizeof(struct bpf_hdr) ì ëì¼íë¤ê³ ë í
                 ì ììµëë¤.

     bh_hdrlen íëë í¤ëì ë§í¬ ë 벨 íë¡í ì½ê°ì í¨ë©ì ìí´ì(ë문ì) ì¡´ì¬í©ëë¤. ì´
     목ì ì, í¨í· ë°ì´í° 구조ì ì ì í ê²½ê³ ì¡°ì ì íë¡íìíë ê²ìëë¤.  ì´ê²ì,
     ê²½ê³ ì¡°ì ì ì´ë ¤ì´ ìí¤íì³ê° íìë¡ íë ê²ì´ì´, ë, ì´ê²ì ìí´ ë¤ë¥¸ ë§ì
     ìí¤íì³ì ìì´ìì ì±ë¥ì´ í¥ìí©ëë¤.  í¨í· íí°ë bpf_hdr (ì)ê³¼ ë¤í¸ìí¬ì¸µì
     í¤ëê° ìë ê²½ê³ê° ëë ê²ì íë¡íìí©ëë¤.  ê²½ê³ ì¡°ì ì´ ì ì½ë 머ì ììì ë§í¬ì¸µ
     íë¡í ì½ì ì¡ì¸ì¤ í  ê²½ì°ìë, ì ì í 주ì를 기ì¸ì´ì§ ìì¼ë©´ ìë©ëë¤ (ì´ê²ì
     ì´ëë·(ethernet)ìììë 문ì ë¡ë ëì§ ììµëë¤. ìëíë©´, íëì ííê° short ì´ë©° ì§ì
     ì¤íì(offset)ì ìì ëê³ , 주ìê° ìë§ ë°ì´í¸ ë¨ìë¡ ì¡ì¸ì¤ ë기 ë문ìëë¤).

     ê²ë¤ê° ê°ê°ì í¨í·ì ìë ê²½ê³ìì ììëëë¡(ë¯ì´) í¨ë© ë©ëë¤.  ì´ê²ì ìí´,
     ì´í리ì¼ì´ìì í¨í·ì¼ë¡ë¶í° ë¤ìì í¨í·ì ì»ë ë°©ë²ì ìê³  ìë ê²ì´ ì구ë©ëë¤.
     ì´ íë¡ì¸ì¤ë¥¼ ë기 ìí´ì(ë문ì), 매í¬ë¡ BPF_WORDALIGN íì§ë§ ⟨net/bpf.h⟩
     ìì¼ë¡ ì ìëê³  ììµëë¤.  ì¸ìë ê°ì¥ ê°ê¹ì´ ìë ê²½ê³ì¹ (ìëê° BPF_ALIGNMENT
     ë°ì´í¸í)ì ë맺ì ì ììµëë¤.

     ì를 ë¤ë©´ ‘p’ íì§ë§ í¨í·ì ì ë를 ê°ë¦¬í¬ ë, ë¤ìì ííì í¬ì¸í°ë¥¼ ë¤ìì
     í¨í·ì ì§íí©ëë¤:
           p = (char *) p + BPF_WORDALIGN(p->bh_hdrlen + p->bh_caplen)

     ê²½ê³ ì¡°ì ì 기구를 ì ì í ëììí¤ê¸° ìí´ì(ë문ì) read(2) ìê² ê±´ë¤ì§ë
     ë²í¼ë, ê·¸ê² ìì ì´ ìë ê²½ê³ì ìì¼ë©´ ìë©ëë¤.  malloc(3) í¨ìë íì ìë ê²½ê³ì
     ë²í¼ë¥¼ ëë ¤ì¤ëë¤.

íí° ë¨¸ì
     íí° íë¡ê·¸ë¨ì ì¸ì¤í¸ëìì ëì´ëì ë°°ì´ì´ë©°, ëª¨ë  ë¶ê¸°ê° ì½ëì ì ë°©ì í¥íë
     ê²ì´ì´, ë, return ì¸ì¤í¸ëìì¼ë¡ ëëë ê²ìëë¤.  ê° ì¸ì¤í¸ëìì, ëì°ê¸°, ì¸ë±ì¤
     ë ì§ì¤í°, ì¼ì ë©ëª¨ë¦¬ 기ìµ, ë° ì묵ì íë¡ê·¸ë¨ ì¹´ì´í°ë¡ë¶í° ìì±ëë ì ì¬
     ë¨¸ì  ìíììì ì´ë í ëìì íí©ëë¤.

     ë¤ìì êµ¬ì¡°ì²´ê° ì¸ì¤í¸ëì í¬ë§·ì ì ììëë¤:

     struct bpf_insn {
             u_short code;
             u_char  jt;
             u_char  jf;
             u_long k;
     };

     k íëë ì¸ì¤í¸ëìì ë°ë¼ì ë¤ë¥¸ ì©ë²ì¼ë¡ ì´ì©ëì´ jt (ì)ê³¼ jf íëë ë¶ê¸°
     ì¸ì¤í¸ëìì ìí´ ì¤íì(offset)ë¡ì ì´ì©ë©ëë¤.  ì¡°ì ì½ëë ë°ê³ì¸µì ì¸ ííë¡
     encode ë©ëë¤.  ì¸ì¤í¸ëììë 8 ê°ì í´ëì¤ BPF_LD, BPF_LDX, BPF_ST, BPF_STX,
     BPF_ALU, BPF_JMP, BPF_RET, BPF_MISC (ì´)ê° ììµëë¤.  ë¤ë¥¸ ì¬ë¬ê°ì§ 모ëì
     ì¡°ì ë¹í¸ë ì¤ì ì ì¸ì¤í¸ëìì 주기 ìí´ì(ë문ì) ë¹í¸ ê°ì° (or)ëì´ í´ëì¤ì
     ë³íë©ëë¤.  í´ëì¤ì 모ëë ⟨net/bpf.h⟩ ììì ì ìëê³  ììµëë¤.

     ì´íë ì ìë ê°ê°ì bpf ì¸ì¤í¸ëììëë¤.  í¸ìì ì¼ë¡ A ê° ëì°ê¸°, X ê° ì¸ë±ì¤
     ë ì§ì¤í°, P[] ê° í¨í· ë°ì´í°, M[] ê° ì¤í©ì§ì¡¸ì ì¼ì ë©ëª¨ë¦¬ 기ìµì´ë¤ê³
     í©ëë¤.  P[i:n] ë í¨í·ë´ì ``i''ë°ì´í¸ ì¤íì(offset)ì ë°ì´í°ë¥¼ ê°ë¦¬ì¼, ìë
     (n=4), ë¶í¸ ììë°ìë (n=2), ë¶í¸ ìì ë°ì´í¸ (n=1) (ì¼)ë¡ ë²ìë©ëë¤.  M[i] ë,
     ì¼ì ë©ëª¨ë¦¬ ê¸°ìµ ì¤(ì)ìì i ë²ì§¸ì ìë를 ê°ë¦¬ì¼, ìë ë¨ìì 주ìë§ì´
     í ë¹í´ì§ëë¤. ë©ëª¨ë¦¬ 기ìµì 0 ì¼ë¡ë¶í° BPF_MEMWORDS - 1 ì ë²í¸ ë¶ì´ê³
     ë©ëë¤.  k, jt, jf (ì)ë, ì¸ì¤í¸ëì ì ì ì¤(ì)ìì ëìíë íëê° ë©ëë¤. ``len''ë,
     í¨í·ì¥ì 참조í©ëë¤.

     BPF_LD    ì´ë¬í ì¸ì¤í¸ëìì, ê°ì ëì°ê¸°ì ë³µì¬í©ëë¤.  ìì¤ ì¤í¼ëëì
               ííë,``addressing mode''ë¡ ì§ì ëì´ ì ì (BPF_IMM) ê·¸ë ì§ë§,
               ê³ ì  ì¤íì(offset)ì í¨í· ë°ì´í° (BPF_ABS) , ê°ë³ ì¤íì(offset)ì
               í¨í· ë°ì´í° (BPF_IND) , í¨í·ì¥ (BPF_LEN) , ì¼ì ë©ëª¨ë¦¬
               기ìµë´ì ìë (BPF_MEM) (ì)를 ì·¨í  ì ììµëë¤.  BPF_IND (ì)ê³¼
               BPF_ABS ì ê²½ì°, ë°ì´í° ì¬ì´ì¦ë, ìë (BPF_W) , íí ìë (BPF_H) ,
               ë°ì´í¸ (BPF_B) ì ì¸ì  ê°ê° ìëë©´ ìë©ëë¤.  ì¬ì© ê°ë¥í ì  BPF_LD
               ì¸ì¤í¸ëìì ì미ë ë¤ìê³¼ ê°ìµëë¤.

               BPF_LD+BPF_W+BPF_ABS  A <- P[k:4]
               BPF_LD+BPF_H+BPF_ABS  A <- P[k:2]
               BPF_LD+BPF_B+BPF_ABS  A <- P[k:1]
               BPF_LD+BPF_W+BPF_IND  A <- P[X+k:4]
               BPF_LD+BPF_H+BPF_IND  A <- P[X+k:2]
               BPF_LD+BPF_B+BPF_IND  A <- P[X+k:1]
               BPF_LD+BPF_W+BPF_LEN  A <- len
               BPF_LD+BPF_IMM        A <- k
               BPF_LD+BPF_MEM        A <- M[k]

     BPF_LDX   ì´ë¬í ì¸ì¤í¸ëìì ê°ì ì¸ë±ì¤ ë ì§ì¤í°ì ë¡ëí©ëë¤.  ì´ ì¸ì¤í¸ëì ëì
               addressing modeë, ëì°ê¸°ìì ë¡ë ëë³´ë¤ ìë°í©ëë¤ë§, IP í¤ëì¥ì
               ë¡ëíë í¨ê³¼ì ì¸ ë°©ë²ì´ë¤ BPF_MSH (ì)를 í¬í¨íê³  ìë ê²ì
               ì£¼ëª©í´ ì£¼ì¸ì.

               BPF_LDX+BPF_W+BPF_IMM  X <- k
               BPF_LDX+BPF_W+BPF_MEM  X <- M[k]
               BPF_LDX+BPF_W+BPF_LEN  X <- len
               BPF_LDX+BPF_B+BPF_MSH  X <- 4*(P[k:1]&0xf)

     BPF_ST    ì´ ì¸ì¤í¸ëìì ëì°ê¸°ë¥¼ ì¼ì ë©ëª¨ë¦¬ì í´í¼í©ëë¤.  íì ì§ì
               ê°ë¥ì±ì´ íë ë°ì ì기 ë문ì addressing modeë ë¶íìí©ëë¤.

               BPF_ST  M[k] <- A

     BPF_STX   ì´ ì¸ì¤í¸ëìì ì¸ë±ì¤ ë ì§ì¤í°ë¥¼ ì¼ì ë©ëª¨ë¦¬ì í´í¼í©ëë¤.

               BPF_STX  M[k] <- X

     BPF_ALU   alu ì¸ì¤í¸ëìì, ëì°ê¸°ì ì¸ë±ì¤ ë ì§ì¤í° ëë ì ìê°ì ì¡°ìì ì¤íí´,
               결과를 ëì°ê¸°ì ëë립ëë¤.  ë°ì´ë리 ì¡°ìì ìí´ì(ë문ì)ë ìì¤