Net-Silk
view release on metacpan or search on metacpan
char buf[SK_NUM2DOT_STRLEN];
CODE:
skipaddrString(buf, &THIS, SKIPADDR_ZEROPAD);
RETVAL = buf;
OUTPUT:
RETVAL
void
num(THIS, ...)
Net::Silk::IPAddr THIS
PPCODE:
#if SK_ENABLE_IPV6
if (skipaddrIsV6(&THIS)) {
uint8_t *u8 = THIS.ip_ip.ipu_ipv6;
mXPUSHs(
newSVu128((((((((((((((((((((((((((((((((uint128_t)u8[0]) << 8)
+ (uint128_t)u8[1]) << 8)
+ (uint128_t)u8[2]) << 8)
+ (uint128_t)u8[3]) << 8)
+ (uint128_t)u8[4]) << 8)
+ (uint128_t)u8[5]) << 8)
#endif
{
mXPUSHu(skipaddrGetV4(&THIS));
}
void
octets(THIS)
Net::Silk::IPAddr THIS
PREINIT:
int i;
PPCODE:
#if SK_ENABLE_IPV6
if (skipaddrIsV6(&THIS)) {
uint8_t v6[16];
EXTEND(SP, 16);
skipaddrGetV6(&THIS, v6);
for (i = 0; i < 16; i++) {
mPUSHu(v6[i]);
}
} else
#endif
OUTPUT:
RETVAL
void
country_code(THIS)
Net::Silk::IPAddr THIS
PREINIT:
char name[3];
sk_countrycode_t code;
int rv;
PPCODE:
rv = skCountrySetup(NULL, error_printf);
if (rv != 0)
croak("%s", error_buffer);
code = skCountryLookupCode(&THIS);
if (code != SK_COUNTRYCODE_INVALID)
skCountryCodeToName(code, name, sizeof(name));
mXPUSHs(newSVpvn(name, sizeof(name)));
MODULE = Net::Silk PACKAGE = Net::Silk::IPv4Addr PREFIX = sk
RETVAL = &iter;
OUTPUT:
RETVAL
void
next(THIS)
Net::Silk::IPWildcard::iter_xs THIS
PREINIT:
skipaddr_t raw_addr;
skIteratorStatus_t rv;
PPCODE:
rv = skIPWildcardIteratorNext(THIS, &raw_addr);
if (rv != SK_ITERATOR_NO_MORE_ENTRIES)
mXPUSHs(newSvIPADDR(aTHX_ &raw_addr));
void
next_cidr(THIS)
Net::Silk::IPWildcard::iter_xs THIS
PREINIT:
skipaddr_t raw_addr;
uint32_t raw_prefix;
skIteratorStatus_t rv;
PPCODE:
rv = skIPWildcardIteratorNextCidr(THIS, &raw_addr, &raw_prefix);
if (rv != SK_ITERATOR_NO_MORE_ENTRIES) {
mXPUSHs(newSvIPADDR(aTHX_ &raw_addr));
mXPUSHu(raw_prefix);
}
MODULE = Net::Silk PACKAGE = Net::Silk::IPWildcard PREFIX = sk
Net::Silk::IPWildcard
PREINIT:
int i, j;
uint8_t bitcount;
uint32_t bittotal;
bool gtzero = 0;
#if SK_ENABLE_IPV6
uint128_t total;
#else
uint64_t total;
#endif
PPCODE:
total = 0;
for (i = 0; i < THIS.num_blocks; ++i) {
bittotal = 0;
for (j = THIS.m_min[i] >> 5; j <= THIS.m_max[i] >> 5; ++j) {
BITS_IN_WORD32(&bitcount, THIS.m_blocks[i][j]);
bittotal += bitcount;
}
if (total == 0)
#if SK_ENABLE_IPV6
total = (uint128_t)bittotal;
OUTPUT:
RETVAL
void
next(THIS)
Net::Silk::IPSet::iter_xs THIS
PREINIT:
skipaddr_t raw_addr;
uint32_t raw_prefix;
int rv;
PPCODE:
rv = skIPSetIteratorNext(THIS, &raw_addr, &raw_prefix);
if (rv != SK_ITERATOR_NO_MORE_ENTRIES) {
mXPUSHs(newSvIPADDR(aTHX_ &raw_addr));
if (THIS->cidr_blocks)
mXPUSHu(raw_prefix);
}
MODULE = Net::Silk PACKAGE = Net::Silk::IPSet PREFIX = sk
void
next(THIS, key_type, counter_type)
Net::Silk::Bag::iter_xs THIS
skBagKeyType_t key_type
skBagCounterType_t counter_type
PREINIT:
skBagTypedKey_t key;
skBagTypedCounter_t counter;
skBagErr_t rv;
PPCODE:
key.type = key_type;
counter.type = counter_type;
rv = skBagIteratorNextTyped(THIS, &key, &counter);
if (rv != SKBAG_ERR_KEY_NOT_FOUND) {
if (rv != SKBAG_OK)
croak("error %d bag next: %s", rv, skBagStrerror(rv));
mXPUSHs(newSvBAGKEY(aTHX_ &key));
mXPUSHs(newSVu64(counter.val.u64));
}
CODE:
skBagAutoConvertDisable(THIS);
void
_bag_info(THIS)
Net::Silk::Bag THIS
PREINIT:
skBagFieldType_t type;
size_t len;
char buf[80];
PPCODE:
type = skBagKeyFieldName(THIS, buf, sizeof(buf));
len = skBagKeyFieldLength(THIS);
mXPUSHu(type);
mXPUSHu(len);
if (IS_IP_KEY(type)) {
mXPUSHu(SKBAG_KEY_IPADDR);
}
else {
switch(len) {
case 4:
skPrefixMapIteratorDestroy(&THIS);
void
next_ip(THIS)
Net::Silk::Pmap::iter_xs THIS
PREINIT:
uint32_t val;
skipaddr_t lo;
skipaddr_t hi;
skIteratorStatus_t rv;
PPCODE:
rv = skPrefixMapIteratorNext(THIS, &lo, &hi, &val);
if (rv != SK_ITERATOR_NO_MORE_ENTRIES) {
if (rv != SK_ITERATOR_OK)
croak("error %d pmap iterator", rv);
mXPUSHs(newSvIPADDR(aTHX_ &lo));
mXPUSHs(newSvIPADDR(aTHX_ &hi));
mXPUSHu(val);
}
void
next_pp(THIS)
Net::Silk::Pmap::iter_xs THIS
PREINIT:
uint32_t val;
skPrefixMapProtoPort_t lo;
skPrefixMapProtoPort_t hi;
skIteratorStatus_t rv;
PPCODE:
rv = skPrefixMapIteratorNext(THIS, &lo, &hi, &val);
if (rv != SK_ITERATOR_NO_MORE_ENTRIES) {
if (rv != SK_ITERATOR_OK)
croak("error %d pmap iterator", rv);
mXPUSHs(newSvPROTOPORT(aTHX_ lo));
mXPUSHs(newSvPROTOPORT(aTHX_ hi));
mXPUSHu(val);
}
Net::Silk::Pmap THIS
CODE:
skPrefixMapDelete(THIS);
void
save(THIS, fname)
Net::Silk::Pmap THIS
const char *fname
PREINIT:
skPrefixMapErr_t rv;
PPCODE:
rv = skPrefixMapSave(THIS, fname);
if (rv != SKPREFIXMAP_OK)
croak("error %d saving prefix map to %s: %s",
rv, fname, skPrefixMapStrerror(rv));
void
_set_content_type(THIS, type)
Net::Silk::Pmap THIS
skPrefixMapContent_t type
PREINIT:
skPrefixMapErr_t rv;
PPCODE:
rv = skPrefixMapSetContentType(THIS, type);
if (rv != SKPREFIXMAP_OK)
croak("error %d setting pmap content type: %s",
rv, skPrefixMapStrerror(rv));
skPrefixMapContent_t
_get_content_type(THIS)
Net::Silk::Pmap THIS
CODE:
RETVAL = skPrefixMapGetContentType(THIS);
RETVAL = skPrefixMapGetContentName(skPrefixMapGetContentType(THIS));
OUTPUT:
RETVAL
void
_set_default_value(THIS, val)
Net::Silk::Pmap THIS
uint32_t val
PREINIT:
skPrefixMapErr_t rv;
PPCODE:
rv = skPrefixMapSetDefaultVal(THIS, val);
if (rv != SKPREFIXMAP_OK)
croak("error %d setting default pmap value: %s",
rv, skPrefixMapStrerror(rv));
void
_insert_label(THIS, val, label)
Net::Silk::Pmap THIS
uint32_t val
const char *label
PREINIT:
skPrefixMapErr_t rv;
PPCODE:
rv = skPrefixMapDictionaryInsert(THIS, val, label);
if (rv != SKPREFIXMAP_OK)
croak("error %d inserting pmap label: %s",
rv, skPrefixMapStrerror(rv));
uint32_t
_get_or_insert_label(THIS, label)
Net::Silk::Pmap THIS
const char *label
PREINIT:
RETVAL = skPrefixMapDictionaryGetMaxWordSize(THIS);
OUTPUT:
RETVAL
void
_label_to_val(THIS, label)
Net::Silk::Pmap THIS
char *label
PREINIT:
uint32_t idx;
PPCODE:
idx = skPrefixMapDictionaryLookup(THIS, label);
if (idx != SKPREFIXMAP_NOT_FOUND)
mXPUSHu(idx);
void
_val_to_label(THIS, val, max_size)
Net::Silk::Pmap THIS
uint32_t val
uint32_t max_size
PREINIT:
char *buf;
uint32_t len;
int rv;
PPCODE:
if (val != SKPREFIXMAP_NOT_FOUND && val >= 0) {
if (val >= skPrefixMapDictionaryGetWordCount(THIS))
croak("invalid value index (%u out of range 0-%u)",
val, skPrefixMapDictionaryGetWordCount(THIS));
// len = skPrefixMapDictionaryGetMaxWordSize(THIS) + 1;
len = max_size + 1;
buf = malloc(len);
if (buf == NULL)
croak("unable to allocate string (out of memory)");
rv = skPrefixMapDictionaryGetEntry(THIS, val, buf, len);
uint32_t val
PREINIT:
void *ptr_lo = NULL;
void *ptr_hi = NULL;
skipaddr_t addr_lo;
skipaddr_t addr_hi;
skPrefixMapProtoPort_t pp_lo;
skPrefixMapProtoPort_t pp_hi;
skPrefixMapContent_t content;
skPrefixMapErr_t rv;
PPCODE:
content = skPrefixMapGetContentType(THIS);
switch (content) {
case SKPREFIXMAP_CONT_ADDR_V4:
addr_lo = SvIPV4ADDR(aTHX_ sv_lo);
addr_hi = SvIPV4ADDR(aTHX_ sv_hi);
ptr_lo = &addr_lo;
ptr_hi = &addr_hi;
break;
#if SK_ENABLE_IPV6
case SKPREFIXMAP_CONT_ADDR_V6:
SV *sv_lo;
SV *sv_hi;
skipaddr_t addr_key;
skipaddr_t addr_lo;
skipaddr_t addr_hi;
skPrefixMapProtoPort_t pp_key;
skPrefixMapProtoPort_t pp_lo;
skPrefixMapProtoPort_t pp_hi;
skPrefixMapContent_t content;
skPrefixMapErr_t rv;
PPCODE:
content = skPrefixMapGetContentType(THIS);
switch (content) {
case SKPREFIXMAP_CONT_ADDR_V4:
addr_key = SvIPV4ADDR(aTHX_ sv_key);
rv = skPrefixMapFindRange(THIS, &addr_key, &addr_lo, &addr_hi);
sv_lo = newSvIPV4ADDR(aTHX_ &addr_lo);
sv_hi = newSvIPV4ADDR(aTHX_ &addr_hi);
break;
#if SK_ENABLE_IPV6
case SKPREFIXMAP_CONT_ADDR_V6:
void
get_val(THIS, sv_key)
Net::Silk::Pmap THIS
SV *sv_key
PREINIT:
void *key = NULL;
uint32_t val;
skipaddr_t addr;
skPrefixMapProtoPort_t pp;
skPrefixMapContent_t content;
PPCODE:
content = skPrefixMapGetContentType(THIS);
switch (content) {
case SKPREFIXMAP_CONT_ADDR_V4:
addr = SvIPV4ADDR(aTHX_ sv_key);
key = &addr;
break;
#if SK_ENABLE_IPV6
case SKPREFIXMAP_CONT_ADDR_V6:
addr = SvIPV6ADDR(aTHX_ sv_key);
key = &addr;
}
OUTPUT:
RETVAL
void
parse_high_mask(repr)
const char *repr
PREINIT:
int rv;
uint8_t high, mask;
PPCODE:
rv = skStringParseTCPFlagsHighMask(&high, &mask, repr);
if (rv == SKUTILS_ERR_SHORT) {
mask = high;
} else if (rv != SKUTILS_OK) {
croak("Illegal flag/mask: %s", repr);
}
mXPUSHu(high);
mXPUSHu(mask);
char *
OUTPUT:
RETVAL
char *
next(THIS)
Net::Silk::Site::iter_xs THIS
PREINIT:
char path[PATH_MAX];
int missing;
int rv;
PPCODE:
rv = sksiteRepoIteratorNextPath(THIS, path, sizeof(path), &missing);
if (rv != SK_ITERATOR_NO_MORE_ENTRIES) {
mXPUSHs(newSVpvn(path, strlen(path)));
}
MODULE = Net::Silk PACKAGE = Net::Silk::Site PREFIX = sk
BOOT:
// BOOT ends after first blank line outside of a block
CODE:
RETVAL = sksiteConfigure(verbose);
OUTPUT:
RETVAL
void
sensor_ids()
PREINIT:
sk_sensor_iter_t sensor_iter;
sk_sensor_id_t id;
PPCODE:
sksiteSensorIterator(&sensor_iter);
while (sksiteSensorIteratorNext(&sensor_iter, &id)) {
mXPUSHu(id);
}
void
sensor_classes_by_id(id)
sk_sensor_id_t id
PREINIT:
sk_class_iter_t class_iter;
sk_class_id_t class;
PPCODE:
sksiteSensorClassIterator(id, &class_iter);
while (sksiteClassIteratorNext(&class_iter, &class)) {
mXPUSHu(class);
}
char *
sensor_name(id)
sk_sensor_id_t id
PREINIT:
char name[SK_MAX_STRLEN_SENSOR+1];
CODE:
RETVAL = sksiteSensorGetDescription(id);
OUTPUT:
RETVAL
void
class_ids()
PREINIT:
sk_class_iter_t class_iter;
sk_class_id_t id;
PPCODE:
sksiteClassIterator(&class_iter);
while (sksiteClassIteratorNext(&class_iter, &id)) {
mXPUSHu(id);
}
void
class_sensors_by_id(id)
sk_class_id_t id
PREINIT:
sk_sensor_iter_t sensor_iter;
sk_sensor_id_t sensor;
PPCODE:
sksiteClassSensorIterator(id, &sensor_iter);
while (sksiteSensorIteratorNext(&sensor_iter, &sensor)) {
mXPUSHu(sensor);
}
void
class_flowtypes_by_id(id)
sk_class_id_t id
PREINIT:
sk_flowtype_iter_t flowtype_iter;
sk_flowtype_id_t flowtype;
PPCODE:
sksiteClassFlowtypeIterator(id, &flowtype_iter);
while (sksiteFlowtypeIteratorNext(&flowtype_iter, &flowtype)) {
mXPUSHu(flowtype);
}
void
class_default_flowtypes_by_id(id)
sk_class_id_t id
PREINIT:
sk_flowtype_iter_t flowtype_iter;
sk_flowtype_id_t flowtype;
PPCODE:
sksiteClassDefaultFlowtypeIterator(id, &flowtype_iter);
while (sksiteFlowtypeIteratorNext(&flowtype_iter, &flowtype)) {
mXPUSHu(flowtype);
}
sk_class_id_t
default_class_id(id)
CODE:
RETVAL = sksiteClassGetDefault();
OUTPUT:
sksiteClassGetName(name, sizeof(name), id);
RETVAL = name;
OUTPUT:
RETVAL
void
flowtype_ids()
PREINIT:
sk_flowtype_iter_t flowtype_iter;
sk_flowtype_id_t id;
PPCODE:
sksiteFlowtypeIterator(&flowtype_iter);
while (sksiteFlowtypeIteratorNext(&flowtype_iter, &id)) {
mXPUSHu(id);
}
char *
flowtype_name(id)
sk_flowtype_id_t id
PREINIT:
char name[SK_MAX_STRLEN_SENSOR+1];
croak("SiLK was not built with IPv6 support");
#endif
OUTPUT:
RETVAL
void
to_ipv4(THIS)
Net::Silk::RWRec THIS
PREINIT:
rwRec copy;
PPCODE:
copy = *THIS;
#if SK_ENABLE_IPV6
if (rwRecIsIPv6(©)) {
if (!rwRecConvertToIPv4(©))
goto proceed;
}
else
#endif
proceed:
{
uint8_t state;
CODE:
state = rwRecGetTcpState(THIS) & ~SK_TCPSTATE_EXPANDED;
rwRecSetFlags(THIS, flags);
rwRecSetInitFlags(THIS, 0);
rwRecSetTcpState(THIS, state);
void
get_initial_tcpflags(THIS)
Net::Silk::RWRec THIS
PPCODE:
if (!(!(rwRecGetTcpState(THIS) & SK_TCPSTATE_EXPANDED)))
mXPUSHs(newSvTCPFLAGS(aTHX_ rwRecGetInitFlags(THIS)));
void
set_initial_tcpflags(THIS, flags)
Net::Silk::RWRec THIS
Net::Silk::TCPFlags flags
PREINIT:
uint8_t state;
CODE:
rwRecSetInitFlags(THIS, flags);
if (! (state & SK_TCPSTATE_EXPANDED)) {
rwRecSetTcpState(THIS, state | SK_TCPSTATE_EXPANDED);
rwRecSetRestFlags(THIS, 0);
}
rwRecSetFlags(THIS, rwRecGetRestFlags(THIS) | flags);
void
get_session_tcpflags(THIS)
Net::Silk::RWRec THIS
PPCODE:
if (!(!(rwRecGetTcpState(THIS) & SK_TCPSTATE_EXPANDED)))
mXPUSHs(newSvTCPFLAGS(aTHX_ rwRecGetRestFlags(THIS)));
void
set_session_tcpflags(THIS, flags)
Net::Silk::RWRec THIS
Net::Silk::TCPFlags flags
PREINIT:
uint8_t state;
CODE:
}
void
invocations(THIS)
Net::Silk::File::io_xs THIS
PREINIT:
sk_file_header_t *hdr;
sk_header_entry_t *entry;
sk_hentry_iterator_t iter;
const char *invoc;
PPCODE:
hdr = skStreamGetSilkHeader(THIS);
if (hdr != NULL) {
skHeaderIteratorBindType(&iter, hdr, SK_HENTRY_INVOCATION_ID);
while ((entry = skHeaderIteratorNext(&iter)) != NULL) {
//invoc = ((sk_hentry_invocation_t*)entry)->command_line;
invoc = skHentryInvocationGetInvocation(entry);
mXPUSHs(newSVpvn(invoc, strlen(invoc)));
}
}
void
notes(THIS)
Net::Silk::File::io_xs THIS
PREINIT:
sk_file_header_t *hdr;
sk_header_entry_t *entry;
sk_hentry_iterator_t iter;
const char *annot;
PPCODE:
hdr = skStreamGetSilkHeader(THIS);
if (hdr != NULL) {
skHeaderIteratorBindType(&iter, hdr, SK_HENTRY_ANNOTATION_ID);
while ((entry = skHeaderIteratorNext(&iter)) != NULL) {
//annot = ((sk_hentry_annotation_t*)entry)->annotation;
annot = skHentryAnnotationGetNote(entry);
mXPUSHs(newSVpvn(annot, strlen(annot)));
}
}
rv = skStreamFlush(THIS);
if (rv != 0)
_stream_croak(aTHX_ THIS, rv);
Net::Silk::RWRec
read(THIS)
Net::Silk::File::io_xs THIS
PREINIT:
int rv;
rwRec rec;
PPCODE:
rv = skStreamReadRecord(THIS, &rec);
if (rv == 0) {
mXPUSHs(newSvRWREC(aTHX_ &rec));
} else if (rv != SKSTREAM_ERR_EOF) {
_stream_croak(aTHX_ THIS, rv);
}
void
write(THIS, rec)
Net::Silk::File::io_xs THIS
( run in 0.547 second using v1.01-cache-2.11-cpan-5511b514fd6 )