Socket-Netlink
view release on metacpan or search on metacpan
lib/Socket/Netlink.xs view on Meta::CPAN
OUTPUT:
RETVAL
void
unpack_sockaddr_nl(addr)
SV *addr
PREINIT:
struct sockaddr_nl snl;
PPCODE:
if(SvCUR(addr) != sizeof snl)
croak("Expected %d byte address", sizeof snl);
Copy(SvPVbyte_nolen(addr), &snl, sizeof snl, char);
if(snl.nl_family != AF_NETLINK)
croak("Expected AF_NETLINK");
EXTEND(SP, 2);
mPUSHi(snl.nl_pid);
lib/Socket/Netlink.xs view on Meta::CPAN
RETVAL
void
unpack_nlmsghdr(msg)
SV *msg
PREINIT:
struct nlmsghdr nlmsghdr;
STRLEN msglen;
PPCODE:
if(!SvPOK(msg))
croak("Expected a string message");
msglen = SvCUR(msg);
Copy(SvPVbyte_nolen(msg), &nlmsghdr, sizeof(nlmsghdr), char);
EXTEND(SP, 6);
PUSHs(sv_2mortal(newSViv(nlmsghdr.nlmsg_type)));
PUSHs(sv_2mortal(newSViv(nlmsghdr.nlmsg_flags)));
lib/Socket/Netlink.xs view on Meta::CPAN
OUTPUT:
RETVAL
void
unpack_nlmsgerr(msg)
SV *msg
PREINIT:
struct nlmsgerr nlmsgerr;
PPCODE:
if(!SvPOK(msg))
croak("Expected a string message");
if(SvCUR(msg) != sizeof(nlmsgerr))
croak("Expected %d bytes of message", sizeof(nlmsgerr));
Copy(SvPVbyte_nolen(msg), &nlmsgerr, sizeof(nlmsgerr), char);
EXTEND(SP, 2);
PUSHs(sv_2mortal(newSViv(-nlmsgerr.error))); /* kernel sends this negative */
PUSHs(sv_2mortal(newSVpvn((char*)&nlmsgerr.msg, sizeof(nlmsgerr.msg))));
lib/Socket/Netlink.xs view on Meta::CPAN
RETVAL
void
unpack_nlattrs(body)
SV *body
INIT:
STRLEN bufflen;
char *buffer;
PPCODE:
if(!SvPOK(body))
croak("Expected a string body");
buffer = SvPVbyte(body, bufflen);
while(bufflen > 0) {
struct nlattr attrhdr;
if(bufflen < NLA_HDRLEN)
croak("Ran out of bytes for nlattr header");
( run in 2.289 seconds using v1.01-cache-2.11-cpan-5511b514fd6 )