NAME
    "Linux::SocketFilter" - interface to Linux's socket packet filtering

SYNOPSIS
     use Linux::SocketFilter qw( :bpf pack_sock_filter );
     use IO::Socket::Packet;
     use Socket qw( SOCK_DGRAM );

     my $sock = IO::Socket::Packet->new(
        IfIndex => 0,
        Type    => SOCK_DGRAM,
     ) or die "Cannot socket - $!";

     $sock->attach_filter(
        pack_sock_filter( BPF_RET|BPF_IMM, 0, 0, 20 )
     );

     while( my $addr = $sock->recv( my $buffer, 20 ) ) {
        printf "Packet: %v02x\n", $buffer;
     }

DESCRIPTION
    This module contains the constants and structure definitions to use
    Linux's socket packet filtering mechanism.

CONSTANTS
    The following constants are exported:

  Socket Options
     SO_ATTACH_FILTER SO_DETACH_FILTER

  BPF Instructions
     BPF_LD BPF_LDX BPF_ST BPF_STX BPF_ALU BPF_JMP BPF_RET BPF_MISC
     BPF_W BPF_H BPF_B BPF_IMM BPF_ABS BPF_IND BPF_MEM PBF_LEN BPF_MSH
     BPF_ADD BPF_SUB BPF_MUL BPF_DIV BPF_OR BPF_AND BPF_LSH BPF_RSH BPF_NEG
     BPF_JA BPF_JEQ BPF_JGT BPF_JGE BPF_JSET
     BPF_K BPF_X BPF_A BPF_TAX BPF_TXA

    This entire set of constants is also exported under the tag name ":bpf".

  Linux BPF Extension Packet Addresses
     SKF_AD_OFF SKF_AD_PROTOCOL SKF_AD_PKTTYPE SKF_AD_IFINDEX
     SKF_NET_OFF SKF_LL_OFF

    This entire set of constants is also exported under the tag name ":skf".

STRUCTURE FUNCTIONS
  $buffer = pack_sock_filter( $code, $jt, $jf, $k )
  ( $code, $jt, $jf, $k ) = unpack_sock_filter( $buffer )
    Pack or unpack a single BPF instruction.

SOCKET FUNCTIONS
    The following exported functions are also provided as methods on the
    "IO::Socket" class.

  attach_filter( $sock, $filter )
  $sock->attach_filter( $filter )
    Attaches the given filter program to the given socket. The program
    should be a string formed by concatenating multiple calls to
    "pack_sock_filter()" to build the filter program, or by using
    Linux::SocketFilter::Assembler.

  detach_filter( $sock )
  $sock->detach_filter()
    Detaches the current filter from the socket, returning it to accepting
    all packets.

AUTHOR
    Paul Evans <leonerd@leonerd.org.uk>