-
-
17 Nov 2016 22:21:50 UTC
- Distribution: Socket-Netlink
- Module version: 0.05
- Source (raw)
- Browse (raw)
- Changes
- How to Contribute
- Issues (4)
- Testers (401 / 6 / 66)
- Kwalitee
Bus factor: 1- 84.73% Coverage
- License: perl_5
- Activity
24 month- Tools
- Download (31.16KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
- Dependencies
- Exporter
- and possibly others
- Reverse dependencies
- CPAN Testers List
- Dependency graph
NAME
Socket::Netlink
- interface to Linux'sPF_NETLINK
socket familySYNOPSIS
use Socket; use Socket::Netlink qw( :DEFAULT pack_nlmsghdr unpack_nlmsghdr ); socket( my $sock, PF_NETLINK, SOCK_RAW, 0 ) or die "socket: $!"; send( $sock, pack_nlmsghdr( 18, NLM_F_REQUEST|NLM_F_DUMP, 0, 0, "\0\0\0\0\0\0\0\0" ), 0 ) or die "send: $!"; recv( $sock, my $buffer, 65536, 0 ) or die "recv: $!"; printf "Received type=%d flags=%x:\n%v02x\n", ( unpack_nlmsghdr( $buffer ) )[ 0, 1, 4 ];
DESCRIPTION
This module contains the low-level constants and structure handling functions required to use Linux's
PF_NETLINK
socket family. It is suggested to use the high-level object interface to this instead; see IO::Socket::Netlink.CONSTANTS
The following constants are exported
- PF_NETLINK
-
The packet family (for
socket()
calls) - AF_NETLINK
-
The address family
ADDRESS FUNCTIONS
The following pair of functions operate on
AF_NETLINK
address structures. The meainings of the parameters are:- pid
-
The unique endpoint number for this netlink socket. If given as 0 to the
bind()
syscall, the kernel will allocate an endpoint number of the process's PID. - groups
-
A 32-bit bitmask of the multicast groups to join.
pack_sockaddr_nl
$addr = pack_sockaddr_nl( $pid, $groups )
Returns a
sockaddr_nl
structure with the fields packed into it.unpack_sockaddr_nl
( $pid, $groups ) = unpack_sockaddr_nl( $addr )
Takes a
sockaddr_nl
structure and returns the unpacked fields from it.STRUCTURE FUNCTIONS
The following function pairs operate on structure types used by netlink
pack_nlmsghdr
$buffer = pack_nlmsghdr( $type, $flags, $seq, $pid, $body )
unpack_nlmsghdr
( $type, $flags, $seq, $pid, $body, $morebuffer ) = unpack_nlmsghdr( $buffer )
Pack or unpack a
struct nlmsghdr
and its payload body.Because a single netlink message can contain more than payload body, the
unpack_nlmsghdr
function will return the remaining buffer after unpacking the first message, in case there are others. If there are no more, the$morebuffer
list element will not be returned.while( defined $buffer ) { ( my ( $type, $flags, $seq, $pid, $body ), $buffer ) = unpack_nlmsghdr( $buffer ); ... }
There is no similar functionallity for
pack_nlmsghdr
; simply concatenate multiple results together to send more than one message.pack_nlmsgerr
$buffer = pack_nlmsgerr( $error, $msg )
unpack_nlmsgerr
( $error, $msg ) = unpack_nlmsgerr( $buffer )
Pack or unpack a
struct nlmsgerr
. The kernel expects or reports negative integers in its structures; these functions take or return normal positive error values suitable for use with$!
.pack_nlattrs
$buffer = pack_nlattrs( %attrs )
unpack_nlattrs
%attrs = unpack_nlattrs( $buffer )
Pack or unpack a list of netlink attributes.
These functions take or return even-sized lists of
$type, $value
pairs. The type will be the number in the netlink attribute message, and the value will be a plain packed string buffer. It is the caller's responsibilty to further pack/unpack this buffer as appropriate for the specific type.Because these functions take/return even-sized lists, they may be passed or returned into hashes.
SEE ALSO
netlink(7)
- netlink - Communication between kernel and userspace (AF_NETLINK)IO::Socket::Netlink - Object interface to
AF_NETLINK
domain sockets
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>
Module Install Instructions
To install Socket::Netlink, copy and paste the appropriate command in to your terminal.
cpanm Socket::Netlink
perl -MCPAN -e shell install Socket::Netlink
For more information on module installation, please visit the detailed CPAN module installation guide.