NetAddr-IP
view release on metacpan or search on metacpan
Lite/Util/Util.xs view on Meta::CPAN
SV * s
ALIAS:
NetAddr::IP::Util::ipv6to4 = 2
NetAddr::IP::Util::shiftleft = 1
PREINIT:
unsigned char * ap;
char * subname;
u_int32_t wa[4];
STRLEN len;
int i;
PPCODE:
ap = (unsigned char *) SvPV(s,len);
if (len != 16) {
if (ix == 2)
subname = is_ipv6to4;
else if (ix == 1)
subname = is_shiftleft;
else
subname = is_comp128;
croak("Bad arg length for %s%s, length is %d, should be %d",
"NetAddr::IP::Util::",subname,len *8,128);
Lite/Util/Util.xs view on Meta::CPAN
SV * as
SV * bs
ALIAS:
NetAddr::IP::Util::sub128 = 1
PREINIT:
unsigned char * ap, *bp;
char * subname;
u_int32_t wa[4], wb[4];
n128 a128;
STRLEN len;
PPCODE:
ap = (unsigned char *) SvPV(as,len);
if (len != 16) {
Bail:
if (ix == 1)
subname = is_sub128;
else
subname = is_add128;
croak("Bad arg length for %s%s, length is %d, should be %d",
"NetAddr::IP::Util::",subname,len *8,128);
}
Lite/Util/Util.xs view on Meta::CPAN
void
addconst(s,cnst)
SV * s
I32 cnst
PREINIT:
n128 a128;
unsigned char * ap;
u_int32_t wa[4], wb[4];
STRLEN len;
PPCODE:
ap = (unsigned char *) SvPV(s,len);
if (len != 16) {
croak("Bad arg length for %s, length is %d, should be %d",
"NetAddr::IP::Util::addconst",len *8,128);
}
netswap_copy(wa,ap,4);
XPUSHs(sv_2mortal(newSViv((I32)addercon(wa,wb,&a128,cnst))));
if (GIMME_V == G_ARRAY) {
netswap(a128.u,4);
XPUSHs(sv_2mortal(newSVpvn((char *)a128.c,16)));
Lite/Util/Util.xs view on Meta::CPAN
void
bin2bcd(s)
SV * s
ALIAS:
NetAddr::IP::Util::bcdn2txt = 2
NetAddr::IP::Util::bin2bcdn = 1
PREINIT:
BCD n;
unsigned char * cp;
STRLEN len;
PPCODE:
cp = (unsigned char *) SvPV(s,len);
if (ix == 0) {
if (len != 16) {
croak("Bad arg length for %s, length is %d, should be %d",
"NetAddr::IP::Util::bin2bcd",len *8,128);
}
(void) _bin2bcd(cp,&n);
XPUSHs(sv_2mortal(newSVpvn((char *)n.txt,_bcd2txt((unsigned char *)n.bcd,&n))));
}
else if (ix == 1) {
Lite/Util/Util.xs view on Meta::CPAN
SV * s
ALIAS:
NetAddr::IP::Util::bcdn2bin = 2
NetAddr::IP::Util::simple_pack = 1
PREINIT:
BCD n;
n128 c128, a128;
unsigned char * cp, badc;
char * subname;
STRLEN len;
PPCODE:
cp = (unsigned char *) SvPV(s,len);
if (len > 40) {
if (ix == 0)
subname = is_bcd2bin;
else if (ix ==1)
subname = is_simple_pack;
Badigits:
croak("Bad arg length for %s%s, length is %d, should be %d digits or less",
"NetAddr::IP::Util::",subname,len,40);
}
Lite/Util/Util.xs view on Meta::CPAN
}
XSRETURN(1);
void
notcontiguous(s)
SV * s
PREINIT:
unsigned char * ap, count;
u_int32_t wa[4];
STRLEN len;
PPCODE:
ap = (unsigned char *) SvPV(s,len);
if (len != 16) {
croak("Bad arg length for %s, length is %d, should be %d",
"NetAddr::IP::Util::countbits",len *8,128);
}
netswap_copy(wa,ap,4);
count = _countbits(wa);
XPUSHs(sv_2mortal(newSViv((I32)have128(wa))));
if (GIMME_V == G_ARRAY) {
XPUSHs(sv_2mortal(newSViv((I32)count)));
Lite/Util/Util.xs view on Meta::CPAN
void
ipv4to6(s)
SV * s
ALIAS:
NetAddr::IP::Util::mask4to6 = 1
PREINIT:
unsigned char * ip;
char * subname;
u_int32_t wa[4];
STRLEN len;
PPCODE:
ip = (unsigned char *) SvPV(s,len);
if (len != 4) {
if (ix == 1)
subname = is_mask4to6;
else
subname = is_ipv4to6;
croak("Bad arg length for %s%s, length is %d, should be 32",
"NetAddr::IP::Util::",subname,len *8);
}
if (ix == 0)
Lite/Util/Util.xs view on Meta::CPAN
void
ipanyto6(s)
SV * s
ALIAS:
NetAddr::IP::Util::maskanyto6 = 1
PREINIT:
unsigned char * ip;
char * subname;
u_int32_t wa[4];
STRLEN len;
PPCODE:
ip = (unsigned char *) SvPV(s,len);
if (len == 16) /* if already 128 bits, return input */
XPUSHs(sv_2mortal(newSVpvn((char *)ip,16)));
else if (len == 4) {
if (ix == 0)
extendipv4(ip, wa);
else
extendmask4(ip, wa);
XPUSHs(sv_2mortal(newSVpvn((char *)wa,16)));
}
( run in 1.010 second using v1.01-cache-2.11-cpan-5511b514fd6 )