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 )