Net-CDP
view release on metacpan or search on metacpan
STMT_START { \
struct cdp_appliance *appliance = (APPLIANCE); \
if (GIMME_V == G_SCALAR) { \
if (appliance) \
XPUSHs(sv_2mortal(newSVuv(appliance->vlan))); \
else \
XPUSHs(&PL_sv_undef); \
} else if (GIMME_V == G_ARRAY) { \
EXTEND(SP, 2); \
if (appliance) { \
PUSHs(sv_2mortal(newSVuv(appliance->vlan))); \
PUSHs(sv_2mortal(newSVuv(appliance->id))); \
} else { \
PUSHs(&PL_sv_undef); \
PUSHs(&PL_sv_undef); \
} \
} \
} STMT_END
#define MY_CXT_KEY "Net::CDP::_guts" XS_VERSION
typedef struct {
char errors[CDP_ERRBUF_SIZE];
} my_cxt_t;
START_MY_CXT
typedef cdp_t * Net_CDP;
typedef struct cdp_address * Net_CDP_Address;
typedef struct cdp_ip_prefix * Net_CDP_IPPrefix;
typedef struct cdp_packet * Net_CDP_Packet;
typedef int SysRet;
typedef const char * PV_UNDEF;
typedef uint8_t * BOOL_UNDEF;
typedef uint8_t * U8_UNDEF;
typedef uint16_t * U16_UNDEF;
typedef uint32_t * U32_UNDEF;
typedef cdp_llist_t * Net_CDP_Address_List;
#define Net_CDP_Address_dup cdp_address_dup
#define Net_CDP_Address_free cdp_address_free
typedef cdp_llist_t * Net_CDP_IPPrefix_List;
#define Net_CDP_IPPrefix_dup cdp_ip_prefix_dup
#define Net_CDP_IPPrefix_free cdp_ip_prefix_free
MODULE = Net::CDP PACKAGE = Net::CDP
BOOT:
{
MY_CXT_INIT;
Zero(MY_CXT.errors, CDP_ERRBUF_SIZE, char);
}
void
_ports()
PROTOTYPE:
PREINIT:
dMY_CXT;
UV count;
cdp_llist_t *ports;
PPCODE:
MY_CXT.errors[0] = '\0';
if (GIMME_V == G_VOID) XSRETURN_EMPTY;
ports = cdp_get_ports(MY_CXT.errors);
if (!ports) croak(MY_CXT.errors);
PUSH_port_llist(ports);
cdp_llist_free(ports);
Net_CDP
_new(CLASS, device, flags)
SV *CLASS
const char * device
int flags
PROTOTYPE: $$$
PREINIT:
dMY_CXT;
CODE:
MY_CXT.errors[0] = '\0';
RETVAL = cdp_new(device, flags, MY_CXT.errors);
if (!RETVAL) croak(MY_CXT.errors);
OUTPUT:
RETVAL
const char *
port(self)
Net_CDP self
PROTOTYPE: $
CODE:
RETVAL = cdp_get_port(self);
OUTPUT:
RETVAL
void
addresses(self)
Net_CDP self
PROTOTYPE: $
PREINIT:
const cdp_llist_t *addresses;
PPCODE:
addresses = cdp_get_addresses(self);
PUSH_llist(addresses, "Net::CDP::Address");
int
_fd(self)
Net_CDP self
PROTOTYPE: $
CODE:
RETVAL = cdp_get_fd(self);
OUTPUT:
RETVAL
Net_CDP_Packet
_recv(self, flags)
Net_CDP self
int flags
PROTOTYPE: $$
PREINIT:
dMY_CXT;
int result;
CODE:
MY_CXT.errors[0] = '\0';
RETVAL = cdp_recv(self, flags, MY_CXT.errors);
if (!RETVAL) {
if (!MY_CXT.errors[0])
XSRETURN_UNDEF;
croak(MY_CXT.errors);
}
OUTPUT:
RETVAL
SysRet
_send(self, packet)
Net_CDP self
Net_CDP_Packet packet
PROTOTYPE: $$
PREINIT:
dMY_CXT;
CODE:
MY_CXT.errors[0] = '\0';
if (cdp_packet_update(packet, MY_CXT.errors) == -1)
croak(MY_CXT.errors);
RETVAL = cdp_send(self, packet, MY_CXT.errors);
if (RETVAL == -1) croak(MY_CXT.errors);
OUTPUT:
RETVAL
void
DESTROY(self)
Net_CDP self
PROTOTYPE: $
CODE:
cdp_free(self);
MODULE = Net::CDP PACKAGE = Net::CDP::Packet
Net_CDP_Packet
_new(CLASS, cdp=NULL)
SV *CLASS
Net_CDP cdp
CODE:
RETVAL = cdp_packet_dup(self);
OUTPUT:
RETVAL
void
DESTROY(self)
Net_CDP_Packet self
PROTOTYPE: $
CODE:
cdp_packet_free(self);
UV
version(self)
Net_CDP_Packet self
PROTOTYPE: $
CODE:
RETVAL = self->version;
OUTPUT:
RETVAL
UV
ttl(self, new_ttl=0)
Net_CDP_Packet self
UV new_ttl
PROTOTYPE: $;$
CODE:
if (items > 1) self->ttl = new_ttl;
RETVAL = self->ttl;
OUTPUT:
RETVAL
UV
checksum(self)
Net_CDP_Packet self
PROTOTYPE: $
CODE:
RETVAL = self->checksum;
OUTPUT:
RETVAL
PV_UNDEF
device(self, new_device=NULL)
Net_CDP_Packet self
PV_UNDEF new_device
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (self->device_id) free(self->device_id);
self->device_id = (new_device ? strdup(new_device) : NULL);
}
RETVAL = self->device_id;
OUTPUT:
RETVAL
void
addresses(self, new_addresses=NULL)
Net_CDP_Packet self
Net_CDP_Address_List new_addresses
PROTOTYPE: $;$
PPCODE:
if (items > 1) {
if (self->addresses) cdp_llist_free(self->addresses);
self->addresses = new_addresses;
}
PUSH_llist(self->addresses, "Net::CDP::Address");
PV_UNDEF
port(self, new_port=NULL)
Net_CDP_Packet self
PV_UNDEF new_port
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (self->port_id) free(self->port_id);
self->port_id = (new_port ? strdup(new_port) : NULL);
}
RETVAL = self->port_id;
OUTPUT:
RETVAL
U32_UNDEF
capabilities(self, new_capabilities=NULL)
Net_CDP_Packet self
U32_UNDEF new_capabilities
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (self->capabilities) free(self->capabilities);
self->capabilities = new_capabilities;
}
RETVAL = self->capabilities;
OUTPUT:
RETVAL
PV_UNDEF
ios_version(self, new_ios_version=NULL)
Net_CDP_Packet self
PV_UNDEF new_ios_version
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (self->ios_version) free(self->ios_version);
self->ios_version = (new_ios_version ? strdup(new_ios_version) : NULL);
}
RETVAL = self->ios_version;
OUTPUT:
RETVAL
PV_UNDEF
platform(self, new_platform=NULL)
Net_CDP_Packet self
PV_UNDEF new_platform
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (self->platform) free(self->platform);
self->platform = (new_platform ? strdup(new_platform) : NULL);
}
RETVAL = self->platform;
OUTPUT:
RETVAL
void
ip_prefixes(self, new_ip_prefixes=NULL)
Net_CDP_Packet self
Net_CDP_IPPrefix_List new_ip_prefixes
PROTOTYPE: $;$
PPCODE:
if (items > 1) {
if (self->ip_prefixes) cdp_llist_free(self->ip_prefixes);
self->ip_prefixes = new_ip_prefixes;
}
PUSH_llist(self->ip_prefixes, "Net::CDP::IPPrefix");
PV_UNDEF
vtp_management_domain(self, new_vtp_management_domain=NULL)
Net_CDP_Packet self
PV_UNDEF new_vtp_management_domain
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (self->vtp_mgmt_domain) free(self->vtp_mgmt_domain);
self->vtp_mgmt_domain = (new_vtp_management_domain ? strdup(new_vtp_management_domain) : NULL);
}
RETVAL = self->vtp_mgmt_domain;
OUTPUT:
RETVAL
U16_UNDEF
native_vlan(self, new_native_vlan=NULL)
Net_CDP_Packet self
U16_UNDEF new_native_vlan
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (new_native_vlan && (*new_native_vlan < 1 || *new_native_vlan > MAX_VLAN_ID))
croak("Invalid new_native_vlan (must be between 1 and %u)", MAX_VLAN_ID);
if (self->native_vlan) free(self->native_vlan);
self->native_vlan = new_native_vlan;
}
RETVAL = self->native_vlan;
OUTPUT:
RETVAL
BOOL_UNDEF
duplex(self, new_duplex=NULL)
Net_CDP_Packet self
BOOL_UNDEF new_duplex
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (self->duplex) free(self->duplex);
self->duplex = new_duplex;
}
RETVAL = self->duplex;
OUTPUT:
RETVAL
void
voice_vlan(self, new_voice_vlan=NULL, new_appliance_id=NULL)
Net_CDP_Packet self
U16_UNDEF new_voice_vlan
U8_UNDEF new_appliance_id
PROTOTYPE: $;$$
PPCODE:
if (items > 1) {
if (new_voice_vlan && (*new_voice_vlan < 1 || *new_voice_vlan > MAX_VLAN_ID))
croak("Invalid new_voice_vlan (must be between 1 and %u)", MAX_VLAN_ID);
if (new_appliance_id && *new_appliance_id < 1)
croak("Invalid new_appliance_id (must be between 1 and 255)");
if (new_voice_vlan) {
if (self->appliance)
self->appliance->vlan = *new_voice_vlan;
else
self->appliance = cdp_appliance_new(
DEFAULT_APPLIANCE_ID, *new_voice_vlan
);
}
if (new_appliance_id) {
if (!self->appliance)
croak("Attempt to add Appliance VLAN-ID field without setting voice VLAN");
self->appliance->id = *new_appliance_id;
}
if (!new_voice_vlan && !new_appliance_id) {
cdp_appliance_free(self->appliance);
self->appliance = NULL;
}
if (new_voice_vlan) free(new_voice_vlan);
if (new_appliance_id) free(new_appliance_id);
CHECK_VERSION;
}
PUSH_appliance(self->appliance);
void
voice_vlan_query(self, new_voice_vlan=NULL, new_appliance_id=NULL)
Net_CDP_Packet self
U16_UNDEF new_voice_vlan
U8_UNDEF new_appliance_id
PROTOTYPE: $;$$
PPCODE:
if (items > 1) {
if (new_voice_vlan && (*new_voice_vlan < 1 || *new_voice_vlan > MAX_VLAN_ID))
croak("Invalid new_voice_vlan (must be between 1 and %u)", MAX_VLAN_ID);
if (new_appliance_id && *new_appliance_id < 1)
croak("Invalid new_appliance_id (must be between 1 and 255)");
if (new_voice_vlan) {
if (self->appliance_query)
self->appliance_query->vlan = *new_voice_vlan;
else
self->appliance_query = cdp_appliance_new(
DEFAULT_APPLIANCE_ID, *new_voice_vlan
);
}
if (new_appliance_id) {
if (!self->appliance_query)
croak("Attempt to add Appliance VLAN-ID query field without setting voice VLAN");
self->appliance_query->id = *new_appliance_id;
}
if (!new_voice_vlan && !new_appliance_id) {
cdp_appliance_free(self->appliance_query);
self->appliance_query = NULL;
}
if (new_voice_vlan) free(new_voice_vlan);
if (new_appliance_id) free(new_appliance_id);
CHECK_VERSION;
}
PUSH_appliance(self->appliance_query);
U16_UNDEF
power_consumption(self, new_power_consumption=NULL)
Net_CDP_Packet self
U16_UNDEF new_power_consumption
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (self->power_consumption) free(self->power_consumption);
self->power_consumption = new_power_consumption;
CHECK_VERSION;
}
RETVAL = self->power_consumption;
OUTPUT:
RETVAL
U32_UNDEF
mtu(self, new_mtu=NULL)
Net_CDP_Packet self
U32_UNDEF new_mtu
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (new_mtu && *new_mtu < 1)
croak("Invalid new_mtu (must be greater than 1)");
if (self->mtu) free(self->mtu);
self->mtu = new_mtu;
CHECK_VERSION;
}
RETVAL = self->mtu;
OUTPUT:
RETVAL
BOOL_UNDEF
trusted(self, new_trusted=NULL)
Net_CDP_Packet self
BOOL_UNDEF new_trusted
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (self->extended_trust) free(self->extended_trust);
self->extended_trust = new_trusted;
CHECK_VERSION;
}
RETVAL = self->extended_trust;
OUTPUT:
RETVAL
U8_UNDEF
untrusted_cos(self, new_untrusted_cos=NULL)
Net_CDP_Packet self
U8_UNDEF new_untrusted_cos
PROTOTYPE: $;$
CODE:
if (items > 1) {
if (new_untrusted_cos && *new_untrusted_cos > 7)
croak("Invalid new_untrusted_cos (must be less than 7)");
if (self->untrusted_cos) free(self->untrusted_cos);
self->untrusted_cos = new_untrusted_cos;
CHECK_VERSION;
}
RETVAL = self->untrusted_cos;
OUTPUT:
RETVAL
void
management_addresses(self, new_addresses=NULL)
Net_CDP_Packet self
Net_CDP_Address_List new_addresses
PROTOTYPE: $;$
PPCODE:
if (items > 1) {
if (self->mgmt_addresses) cdp_llist_free(self->mgmt_addresses);
self->mgmt_addresses = new_addresses;
CHECK_VERSION;
}
PUSH_llist(self->mgmt_addresses, "Net::CDP::Address");
MODULE = Net::CDP PACKAGE = Net::CDP::Address
Net_CDP_Address
_new(CLASS, protocol, packed)
SV *CLASS
SV *protocol
SV *packed
PROTOTYPE: $$$
INIT:
STRLEN len1, len2;
void *str1, *str2;
CODE:
str1 = SvPV(protocol, len1);
str2 = SvPV(packed, len2);
switch (len1) {
case 1:
RETVAL = cdp_address_new(1, 1, str1, len2, str2);
break;
case 3:
case 8:
RETVAL = cdp_address_new(2, len1, str1, len2, str2);
default:
croak("Invalid protocol");
}
OUTPUT:
RETVAL
Net_CDP_Address
_new_by_id(CLASS, protocol_id, packed)
SV *CLASS
unsigned int protocol_id
SV *packed
PROTOTYPE: $$$
INIT:
STRLEN len;
void *str;
CODE:
str = SvPV(packed, len);
if (protocol_id <= CDP_ADDR_PROTO_MAX)
RETVAL = cdp_address_new(
cdp_predefs[protocol_id].protocol_type,
cdp_predefs[protocol_id].protocol_length,
cdp_predefs[protocol_id].protocol,
len, str
);
else
croak("Invalid protocol");
OUTPUT:
RETVAL
Net_CDP_Address
clone(self)
Net_CDP_Address self
( run in 1.186 second using v1.01-cache-2.11-cpan-5511b514fd6 )