本文整理匯總了C++中ERROR函數的典型用法代碼示例。如果您正苦於以下問題:C++ ERROR函數的具體用法?C++ ERROR怎麽用?C++ ERROR使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了ERROR函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: read_xattrs_from_system
static int read_xattrs_from_system(char *filename, struct xattr_list **xattrs)
{
ssize_t size, vsize;
char *xattr_names, *p;
int i;
struct xattr_list *xattr_list = NULL;
#if 0
while(1) {
size = llistxattr(filename, NULL, 0);
if(size <= 0) {
if(size < 0 && errno != ENOTSUP)
ERROR("llistxattr for %s failed in read_attrs,"
" because %s\n", filename,
strerror(errno));
return 0;
}
xattr_names = malloc(size);
if(xattr_names == NULL) {
ERROR("Out of memory in read_attrs\n");
return 0;
}
size = llistxattr(filename, xattr_names, size);
if(size < 0) {
free(xattr_names);
if(errno == ERANGE)
/* xattr list grew? Try again */
continue;
else {
ERROR("llistxattr for %s failed in read_attrs,"
" because %s\n", filename,
strerror(errno));
return 0;
}
}
break;
}
#else
ERROR("llistxattr not available");
#endif
for(i = 0, p = xattr_names; p < xattr_names + size; i++) {
struct xattr_list *x = realloc(xattr_list, (i + 1) *
sizeof(struct xattr_list));
if(x == NULL) {
ERROR("Out of memory in read_attrs\n");
goto failed;
} else
xattr_list = x;
xattr_list[i].type = get_prefix(&xattr_list[i], p);
p += strlen(p) + 1;
if(xattr_list[i].type == -1) {
ERROR("Unrecognised xattr prefix %s\n",
xattr_list[i].full_name);
free(xattr_list[i].full_name);
i--;
continue;
}
#if 0
while(1) {
vsize = lgetxattr(filename, xattr_list[i].full_name,
NULL, 0);
if(vsize < 0) {
ERROR("lgetxattr failed for %s in read_attrs,"
" because %s\n", filename,
strerror(errno));
free(xattr_list[i].full_name);
goto failed;
}
xattr_list[i].value = malloc(vsize);
if(xattr_list[i].value == NULL) {
ERROR("Out of memory in read_attrs\n");
free(xattr_list[i].full_name);
goto failed;
}
vsize = lgetxattr(filename, xattr_list[i].full_name,
xattr_list[i].value, vsize);
if(vsize < 0) {
free(xattr_list[i].value);
if(errno == ERANGE)
/* xattr grew? Try again */
continue;
else {
ERROR("lgetxattr failed for %s in "
"read_attrs, because %s\n",
filename, strerror(errno));
free(xattr_list[i].full_name);
goto failed;
}
}
break;
}
//.........這裏部分代碼省略.........
示例2: w83977af_open
//.........這裏部分代碼省略.........
goto err_out;
}
/*
* Allocate new instance of the driver
*/
dev = alloc_irdadev(sizeof(struct w83977af_ir));
if (dev == NULL) {
printk( KERN_ERR "IrDA: Can't allocate memory for "
"IrDA control block!\n");
err = -ENOMEM;
goto err_out;
}
self = dev->priv;
spin_lock_init(&self->lock);
/* Initialize IO */
self->io.fir_base = iobase;
self->io.irq = irq;
self->io.fir_ext = CHIP_IO_EXTENT;
self->io.dma = dma;
self->io.fifo_size = 32;
/* Initialize QoS for this device */
irda_init_max_qos_capabilies(&self->qos);
/* The only value we must override it the baudrate */
/* FIXME: The HP HDLS-1100 does not support 1152000! */
self->qos.baud_rate.bits = IR_9600|IR_19200|IR_38400|IR_57600|
IR_115200|IR_576000|IR_1152000|(IR_4000000 << 8);
/* The HP HDLS-1100 needs 1 ms according to the specs */
self->qos.min_turn_time.bits = qos_mtt_bits;
irda_qos_bits_to_value(&self->qos);
/* Max DMA buffer size needed = (data_size + 6) * (window_size) + 6; */
self->rx_buff.truesize = 14384;
self->tx_buff.truesize = 4000;
/* Allocate memory if needed */
self->rx_buff.head =
dma_alloc_coherent(NULL, self->rx_buff.truesize,
&self->rx_buff_dma, GFP_KERNEL);
if (self->rx_buff.head == NULL) {
err = -ENOMEM;
goto err_out1;
}
memset(self->rx_buff.head, 0, self->rx_buff.truesize);
self->tx_buff.head =
dma_alloc_coherent(NULL, self->tx_buff.truesize,
&self->tx_buff_dma, GFP_KERNEL);
if (self->tx_buff.head == NULL) {
err = -ENOMEM;
goto err_out2;
}
memset(self->tx_buff.head, 0, self->tx_buff.truesize);
self->rx_buff.in_frame = FALSE;
self->rx_buff.state = OUTSIDE_FRAME;
self->tx_buff.data = self->tx_buff.head;
self->rx_buff.data = self->rx_buff.head;
self->netdev = dev;
/* Keep track of module usage */
SET_MODULE_OWNER(dev);
/* Override the network functions we need to use */
dev->hard_start_xmit = w83977af_hard_xmit;
dev->open = w83977af_net_open;
dev->stop = w83977af_net_close;
dev->do_ioctl = w83977af_net_ioctl;
dev->get_stats = w83977af_net_get_stats;
err = register_netdev(dev);
if (err) {
ERROR("%s(), register_netdevice() failed!\n", __FUNCTION__);
goto err_out3;
}
MESSAGE("IrDA: Registered device %s\n", dev->name);
/* Need to store self somewhere */
dev_self[i] = self;
return 0;
err_out3:
dma_free_coherent(NULL, self->tx_buff.truesize,
self->tx_buff.head, self->tx_buff_dma);
err_out2:
dma_free_coherent(NULL, self->rx_buff.truesize,
self->rx_buff.head, self->rx_buff_dma);
err_out1:
free_netdev(dev);
err_out:
release_region(iobase, CHIP_IO_EXTENT);
return err;
}
示例3: PRINT
status_t
BTimeSource::HandleMessage(int32 message,
const void *rawdata,
size_t size)
{
PRINT(4, "BTimeSource::HandleMessage %#" B_PRIx32 ", node %" B_PRId32 "\n",
message, fNodeID);
status_t rv;
switch (message) {
case TIMESOURCE_OP:
{
const time_source_op_info *data = static_cast<const time_source_op_info *>(rawdata);
status_t result;
result = TimeSourceOp(*data, NULL);
if (result != B_OK) {
ERROR("BTimeSource::HandleMessage: TimeSourceOp failed\n");
}
switch (data->op) {
case B_TIMESOURCE_START:
DirectStart(data->real_time);
break;
case B_TIMESOURCE_STOP:
DirectStop(data->real_time, false);
break;
case B_TIMESOURCE_STOP_IMMEDIATELY:
DirectStop(data->real_time, true);
break;
case B_TIMESOURCE_SEEK:
DirectSeek(data->performance_time, data->real_time);
break;
}
return B_OK;
}
case TIMESOURCE_ADD_SLAVE_NODE:
{
const timesource_add_slave_node_command *data = static_cast<const timesource_add_slave_node_command *>(rawdata);
DirectAddMe(data->node);
return B_OK;
}
case TIMESOURCE_REMOVE_SLAVE_NODE:
{
const timesource_remove_slave_node_command *data = static_cast<const timesource_remove_slave_node_command *>(rawdata);
DirectRemoveMe(data->node);
return B_OK;
}
case TIMESOURCE_GET_START_LATENCY:
{
const timesource_get_start_latency_request *request = static_cast<const timesource_get_start_latency_request *>(rawdata);
timesource_get_start_latency_reply reply;
rv = GetStartLatency(&reply.start_latency);
request->SendReply(rv, &reply, sizeof(reply));
return B_OK;
}
}
return B_ERROR;
}
示例4: mysql_read
static int mysql_read (user_data_t *ud)
{
mysql_database_t *db;
MYSQL *con;
MYSQL_RES *res;
MYSQL_ROW row;
char *query;
derive_t qcache_hits = 0;
derive_t qcache_inserts = 0;
derive_t qcache_not_cached = 0;
derive_t qcache_lowmem_prunes = 0;
gauge_t qcache_queries_in_cache = NAN;
gauge_t threads_running = NAN;
gauge_t threads_connected = NAN;
gauge_t threads_cached = NAN;
derive_t threads_created = 0;
unsigned long long traffic_incoming = 0ULL;
unsigned long long traffic_outgoing = 0ULL;
unsigned long mysql_version = 0ULL;
if ((ud == NULL) || (ud->data == NULL))
{
ERROR ("mysql plugin: mysql_database_read: Invalid user data.");
return (-1);
}
db = (mysql_database_t *) ud->data;
/* An error message will have been printed in this case */
if ((con = getconnection (db)) == NULL)
return (-1);
mysql_version = mysql_get_server_version(con);
query = "SHOW STATUS";
if (mysql_version >= 50002)
query = "SHOW GLOBAL STATUS";
res = exec_query (con, query);
if (res == NULL)
return (-1);
while ((row = mysql_fetch_row (res)))
{
char *key;
unsigned long long val;
key = row[0];
val = atoll (row[1]);
if (strncmp (key, "Com_",
strlen ("Com_")) == 0)
{
if (val == 0ULL)
continue;
/* Ignore `prepared statements' */
if (strncmp (key, "Com_stmt_", strlen ("Com_stmt_")) != 0)
counter_submit ("mysql_commands",
key + strlen ("Com_"),
val, db);
}
else if (strncmp (key, "Handler_",
strlen ("Handler_")) == 0)
{
if (val == 0ULL)
continue;
counter_submit ("mysql_handler",
key + strlen ("Handler_"),
val, db);
}
else if (strncmp (key, "Qcache_",
strlen ("Qcache_")) == 0)
{
if (strcmp (key, "Qcache_hits") == 0)
qcache_hits = (derive_t) val;
else if (strcmp (key, "Qcache_inserts") == 0)
qcache_inserts = (derive_t) val;
else if (strcmp (key, "Qcache_not_cached") == 0)
qcache_not_cached = (derive_t) val;
else if (strcmp (key, "Qcache_lowmem_prunes") == 0)
qcache_lowmem_prunes = (derive_t) val;
else if (strcmp (key, "Qcache_queries_in_cache") == 0)
qcache_queries_in_cache = (gauge_t) val;
}
else if (strncmp (key, "Bytes_",
strlen ("Bytes_")) == 0)
{
if (strcmp (key, "Bytes_received") == 0)
traffic_incoming += val;
else if (strcmp (key, "Bytes_sent") == 0)
traffic_outgoing += val;
}
else if (strncmp (key, "Threads_",
strlen ("Threads_")) == 0)
{
//.........這裏部分代碼省略.........
示例5: spin_lock
//.........這裏部分代碼省略.........
if (n == cache->entries) {
/*
* Block not in cache, if all cache entries are used
* go to sleep waiting for one to become available.
*/
if (cache->unused == 0) {
cache->num_waiters++;
spin_unlock(&cache->lock);
wait_event(cache->wait_queue, cache->unused);
spin_lock(&cache->lock);
cache->num_waiters--;
continue;
}
/*
* At least one unused cache entry. A simple
* round-robin strategy is used to choose the entry to
* be evicted from the cache.
*/
i = cache->next_blk;
for (n = 0; n < cache->entries; n++) {
if (cache->entry[i].refcount == 0)
break;
i = (i + 1) % cache->entries;
}
cache->next_blk = (i + 1) % cache->entries;
entry = &cache->entry[i];
/*
* Initialise chosen cache entry, and fill it in from
* disk.
*/
cache->unused--;
entry->block = block;
entry->refcount = 1;
entry->pending = 1;
entry->num_waiters = 0;
entry->error = 0;
spin_unlock(&cache->lock);
entry->length = squashfs_read_data(sb, block, length,
&entry->next_index, entry->actor);
spin_lock(&cache->lock);
if (entry->length < 0)
entry->error = entry->length;
entry->pending = 0;
/*
* While filling this entry one or more other processes
* have looked it up in the cache, and have slept
* waiting for it to become available.
*/
if (entry->num_waiters) {
spin_unlock(&cache->lock);
wake_up_all(&entry->wait_queue);
} else
spin_unlock(&cache->lock);
goto out;
}
/*
* Block already in cache. Increment refcount so it doesn't
* get reused until we're finished with it, if it was
* previously unused there's one less cache entry available
* for reuse.
*/
entry = &cache->entry[i];
if (entry->refcount == 0)
cache->unused--;
entry->refcount++;
/*
* If the entry is currently being filled in by another process
* go to sleep waiting for it to become available.
*/
if (entry->pending) {
entry->num_waiters++;
spin_unlock(&cache->lock);
wait_event(entry->wait_queue, !entry->pending);
} else
spin_unlock(&cache->lock);
goto out;
}
out:
TRACE("Got %s %d, start block %lld, refcount %d, error %d\n",
cache->name, i, entry->block, entry->refcount, entry->error);
if (entry->error)
ERROR("Unable to read %s cache entry [%llx]\n", cache->name,
block);
return entry;
}
示例6: fs_identify_partition
float
fs_identify_partition(int fd, partition_data *partition, void **_cookie)
{
NTFS_BOOT_SECTOR boot;
identify_cookie *cookie;
ntfs_volume *ntVolume;
uint8 *buf = (uint8*)&boot;
char devpath[256];
// read in the boot sector
TRACE("fs_identify_partition: read in the boot sector\n");
if (read_pos(fd, 0, (void*)&boot, 512) != 512) {
ERROR("fs_identify_partition: couldn't read boot sector\n");
return -1;
}
// check boot signature
if ((buf[0x1fe] != 0x55 || buf[0x1ff] != 0xaa) && buf[0x15] == 0xf8) {
ERROR("fs_identify_partition: boot signature doesn't match\n");
return -1;
}
// check boot signature NTFS
if (memcmp(buf + 3, "NTFS ", 8) != 0) {
ERROR("fs_identify_partition: boot signature NTFS doesn't match\n");
return -1;
}
// get path for device
if (!ioctl(fd, B_GET_PATH_FOR_DEVICE, devpath)) {
ERROR("fs_identify_partition: couldn't get path for device\n");
return -1;
}
// try mount
ntVolume = utils_mount_volume(devpath, MS_RDONLY, true);
if (!ntVolume) {
ERROR("fs_identify_partition: mount failed\n");
return -1;
}
// allocate identify_cookie
cookie = (identify_cookie *)malloc(sizeof(identify_cookie));
if (!cookie) {
ERROR("fs_identify_partition: cookie allocation failed\n");
return -1;
}
memcpy(&cookie->boot, &boot, 512);
strcpy(cookie->label, "NTFS Volume");
if (ntVolume->vol_name && ntVolume->vol_name[0] != '\0')
strcpy(cookie->label, ntVolume->vol_name);
ntfs_umount(ntVolume, true);
*_cookie = cookie;
return 0.8f;
}
示例7: mysql_config_database
/* Configuration handling functions {{{
*
* <Plugin mysql>
* <Database "plugin_instance1">
* Host "localhost"
* Port 22000
* ...
* </Database>
* </Plugin>
*/
static int mysql_config_database (oconfig_item_t *ci) /* {{{ */
{
mysql_database_t *db;
int status = 0;
int i;
if ((ci->values_num != 1)
|| (ci->values[0].type != OCONFIG_TYPE_STRING))
{
WARNING ("mysql plugin: The `Database' block "
"needs exactly one string argument.");
return (-1);
}
db = (mysql_database_t *) malloc (sizeof (*db));
if (db == NULL)
{
ERROR ("mysql plugin: malloc failed.");
return (-1);
}
memset (db, 0, sizeof (*db));
/* initialize all the pointers */
db->alias = NULL;
db->host = NULL;
db->user = NULL;
db->pass = NULL;
db->database = NULL;
db->socket = NULL;
db->con = NULL;
db->timeout = 0;
/* trigger a notification, if it's not running */
db->slave_io_running = 1;
db->slave_sql_running = 1;
status = cf_util_get_string (ci, &db->instance);
if (status != 0)
{
sfree (db);
return (status);
}
assert (db->instance != NULL);
/* Fill the `mysql_database_t' structure.. */
for (i = 0; i < ci->children_num; i++)
{
oconfig_item_t *child = ci->children + i;
if (strcasecmp ("Alias", child->key) == 0)
status = cf_util_get_string (child, &db->alias);
else if (strcasecmp ("Host", child->key) == 0)
status = cf_util_get_string (child, &db->host);
else if (strcasecmp ("User", child->key) == 0)
status = cf_util_get_string (child, &db->user);
else if (strcasecmp ("Password", child->key) == 0)
status = cf_util_get_string (child, &db->pass);
else if (strcasecmp ("Port", child->key) == 0)
{
status = cf_util_get_port_number (child);
if (status > 0)
{
db->port = status;
status = 0;
}
}
else if (strcasecmp ("Socket", child->key) == 0)
status = cf_util_get_string (child, &db->socket);
else if (strcasecmp ("Database", child->key) == 0)
status = cf_util_get_string (child, &db->database);
else if (strcasecmp ("ConnectTimeout", child->key) == 0)
status = cf_util_get_int (child, &db->timeout);
else if (strcasecmp ("MasterStats", child->key) == 0)
status = cf_util_get_boolean (child, &db->master_stats);
else if (strcasecmp ("SlaveStats", child->key) == 0)
status = cf_util_get_boolean (child, &db->slave_stats);
else if (strcasecmp ("SlaveNotifications", child->key) == 0)
status = cf_util_get_boolean (child, &db->slave_notif);
else if (strcasecmp ("InnodbStats", child->key) == 0)
status = cf_util_get_boolean (child, &db->innodb_stats);
else
{
WARNING ("mysql plugin: Option `%s' not allowed here.", child->key);
status = -1;
}
if (status != 0)
break;
}
//.........這裏部分代碼省略.........
示例8: csnmp_host_open_session
static void csnmp_host_open_session (host_definition_t *host)
{
struct snmp_session sess;
int error;
if (host->sess_handle != NULL)
csnmp_host_close_session (host);
snmp_sess_init (&sess);
sess.peername = host->address;
switch (host->version)
{
case 1:
sess.version = SNMP_VERSION_1;
break;
case 3:
sess.version = SNMP_VERSION_3;
break;
default:
sess.version = SNMP_VERSION_2c;
break;
}
if (host->version == 3)
{
sess.securityName = host->username;
sess.securityNameLen = strlen (host->username);
sess.securityLevel = host->security_level;
if (sess.securityLevel == SNMP_SEC_LEVEL_AUTHNOPRIV || sess.securityLevel == SNMP_SEC_LEVEL_AUTHPRIV)
{
sess.securityAuthProto = host->auth_protocol;
sess.securityAuthProtoLen = host->auth_protocol_len;
sess.securityAuthKeyLen = USM_AUTH_KU_LEN;
error = generate_Ku (sess.securityAuthProto,
sess.securityAuthProtoLen,
(u_char *) host->auth_passphrase,
strlen(host->auth_passphrase),
sess.securityAuthKey,
&sess.securityAuthKeyLen);
if (error != SNMPERR_SUCCESS) {
ERROR ("snmp plugin: host %s: Error generating Ku from auth_passphrase. (Error %d)", host->name, error);
}
}
if (sess.securityLevel == SNMP_SEC_LEVEL_AUTHPRIV)
{
sess.securityPrivProto = host->priv_protocol;
sess.securityPrivProtoLen = host->priv_protocol_len;
sess.securityPrivKeyLen = USM_PRIV_KU_LEN;
error = generate_Ku (sess.securityAuthProto,
sess.securityAuthProtoLen,
(u_char *) host->priv_passphrase,
strlen(host->priv_passphrase),
sess.securityPrivKey,
&sess.securityPrivKeyLen);
if (error != SNMPERR_SUCCESS) {
ERROR ("snmp plugin: host %s: Error generating Ku from priv_passphrase. (Error %d)", host->name, error);
}
}
if (host->context != NULL)
{
sess.contextName = host->context;
sess.contextNameLen = strlen (host->context);
}
}
else /* SNMPv1/2 "authenticates" with community string */
{
sess.community = (u_char *) host->community;
sess.community_len = strlen (host->community);
}
/* snmp_sess_open will copy the `struct snmp_session *'. */
host->sess_handle = snmp_sess_open (&sess);
if (host->sess_handle == NULL)
{
char *errstr = NULL;
snmp_error (&sess, NULL, NULL, &errstr);
ERROR ("snmp plugin: host %s: snmp_sess_open failed: %s",
host->name, (errstr == NULL) ? "Unknown problem" : errstr);
sfree (errstr);
}
} /* void csnmp_host_open_session */
示例9: csnmp_value_list_to_value
/* TODO: Check if negative values wrap around. Problem: negative temperatures. */
static value_t csnmp_value_list_to_value (struct variable_list *vl, int type,
double scale, double shift,
const char *host_name, const char *data_name)
{
value_t ret;
uint64_t tmp_unsigned = 0;
int64_t tmp_signed = 0;
_Bool defined = 1;
/* Set to true when the original SNMP type appears to have been signed. */
_Bool prefer_signed = 0;
if ((vl->type == ASN_INTEGER)
|| (vl->type == ASN_UINTEGER)
|| (vl->type == ASN_COUNTER)
#ifdef ASN_TIMETICKS
|| (vl->type == ASN_TIMETICKS)
#endif
|| (vl->type == ASN_GAUGE))
{
tmp_unsigned = (uint32_t) *vl->val.integer;
tmp_signed = (int32_t) *vl->val.integer;
if ((vl->type == ASN_INTEGER)
|| (vl->type == ASN_GAUGE))
prefer_signed = 1;
DEBUG ("snmp plugin: Parsed int32 value is %"PRIu64".", tmp_unsigned);
}
else if (vl->type == ASN_COUNTER64)
{
tmp_unsigned = (uint32_t) vl->val.counter64->high;
tmp_unsigned = tmp_unsigned << 32;
tmp_unsigned += (uint32_t) vl->val.counter64->low;
tmp_signed = (int64_t) tmp_unsigned;
DEBUG ("snmp plugin: Parsed int64 value is %"PRIu64".", tmp_unsigned);
}
else if (vl->type == ASN_OCTET_STR)
{
/* We'll handle this later.. */
}
else
{
char oid_buffer[1024];
memset (oid_buffer, 0, sizeof (oid_buffer));
snprint_objid (oid_buffer, sizeof (oid_buffer) - 1,
vl->name, vl->name_length);
#ifdef ASN_NULL
if (vl->type == ASN_NULL)
INFO ("snmp plugin: OID \"%s\" is undefined (type ASN_NULL)",
oid_buffer);
else
#endif
WARNING ("snmp plugin: I don't know the ASN type #%i "
"(OID: \"%s\", data block \"%s\", host block \"%s\")",
(int) vl->type, oid_buffer,
(data_name != NULL) ? data_name : "UNKNOWN",
(host_name != NULL) ? host_name : "UNKNOWN");
defined = 0;
}
if (vl->type == ASN_OCTET_STR)
{
int status = -1;
if (vl->val.string != NULL)
{
char string[64];
size_t string_length;
string_length = sizeof (string) - 1;
if (vl->val_len < string_length)
string_length = vl->val_len;
/* The strings we get from the Net-SNMP library may not be null
* terminated. That is why we're using `memcpy' here and not `strcpy'.
* `string_length' is set to `vl->val_len' which holds the length of the
* string. -octo */
memcpy (string, vl->val.string, string_length);
string[string_length] = 0;
status = parse_value (string, &ret, type);
if (status != 0)
{
ERROR ("snmp plugin: csnmp_value_list_to_value: Parsing string as %s failed: %s",
DS_TYPE_TO_STRING (type), string);
}
}
if (status != 0)
{
switch (type)
{
case DS_TYPE_COUNTER:
case DS_TYPE_DERIVE:
case DS_TYPE_ABSOLUTE:
memset (&ret, 0, sizeof (ret));
//.........這裏部分代碼省略.........
示例10: csnmp_read_value
static int csnmp_read_value (host_definition_t *host, data_definition_t *data)
{
struct snmp_pdu *req;
struct snmp_pdu *res;
struct variable_list *vb;
const data_set_t *ds;
value_list_t vl = VALUE_LIST_INIT;
int status;
int i;
DEBUG ("snmp plugin: csnmp_read_value (host = %s, data = %s)",
host->name, data->name);
if (host->sess_handle == NULL)
{
DEBUG ("snmp plugin: csnmp_read_table: host->sess_handle == NULL");
return (-1);
}
ds = plugin_get_ds (data->type);
if (!ds)
{
ERROR ("snmp plugin: DataSet `%s' not defined.", data->type);
return (-1);
}
if (ds->ds_num != data->values_len)
{
ERROR ("snmp plugin: DataSet `%s' requires %i values, but config talks about %i",
data->type, ds->ds_num, data->values_len);
return (-1);
}
vl.values_len = ds->ds_num;
vl.values = (value_t *) malloc (sizeof (value_t) * vl.values_len);
if (vl.values == NULL)
return (-1);
for (i = 0; i < vl.values_len; i++)
{
if (ds->ds[i].type == DS_TYPE_COUNTER)
vl.values[i].counter = 0;
else
vl.values[i].gauge = NAN;
}
sstrncpy (vl.host, host->name, sizeof (vl.host));
sstrncpy (vl.plugin, "snmp", sizeof (vl.plugin));
sstrncpy (vl.type, data->type, sizeof (vl.type));
sstrncpy (vl.type_instance, data->instance.string, sizeof (vl.type_instance));
vl.interval = host->interval;
req = snmp_pdu_create (SNMP_MSG_GET);
if (req == NULL)
{
ERROR ("snmp plugin: snmp_pdu_create failed.");
sfree (vl.values);
return (-1);
}
for (i = 0; i < data->values_len; i++)
snmp_add_null_var (req, data->values[i].oid, data->values[i].oid_len);
res = NULL;
status = snmp_sess_synch_response (host->sess_handle, req, &res);
if ((status != STAT_SUCCESS) || (res == NULL))
{
char *errstr = NULL;
snmp_sess_error (host->sess_handle, NULL, NULL, &errstr);
ERROR ("snmp plugin: host %s: snmp_sess_synch_response failed: %s",
host->name, (errstr == NULL) ? "Unknown problem" : errstr);
if (res != NULL)
snmp_free_pdu (res);
res = NULL;
sfree (errstr);
csnmp_host_close_session (host);
return (-1);
}
for (vb = res->variables; vb != NULL; vb = vb->next_variable)
{
#if COLLECT_DEBUG
char buffer[1024];
snprint_variable (buffer, sizeof (buffer),
vb->name, vb->name_length, vb);
DEBUG ("snmp plugin: Got this variable: %s", buffer);
#endif /* COLLECT_DEBUG */
for (i = 0; i < data->values_len; i++)
if (snmp_oid_compare (data->values[i].oid, data->values[i].oid_len,
vb->name, vb->name_length) == 0)
vl.values[i] = csnmp_value_list_to_value (vb, ds->ds[i].type,
//.........這裏部分代碼省略.........
示例11: csnmp_config_add_host
//.........這裏部分代碼省略.........
WARNING ("snmp plugin: csnmp_config_add_host: Option `%s' not allowed here.", option->key);
status = -1;
}
if (status != 0)
break;
} /* for (ci->children) */
while (status == 0)
{
if (hd->address == NULL)
{
WARNING ("snmp plugin: `Address' not given for host `%s'", hd->name);
status = -1;
break;
}
if (hd->community == NULL && hd->version < 3)
{
WARNING ("snmp plugin: `Community' not given for host `%s'", hd->name);
status = -1;
break;
}
if (hd->version == 3)
{
if (hd->username == NULL)
{
WARNING ("snmp plugin: `Username' not given for host `%s'", hd->name);
status = -1;
break;
}
if (hd->security_level == 0)
{
WARNING ("snmp plugin: `SecurityLevel' not given for host `%s'", hd->name);
status = -1;
break;
}
if (hd->security_level == SNMP_SEC_LEVEL_AUTHNOPRIV || hd->security_level == SNMP_SEC_LEVEL_AUTHPRIV)
{
if (hd->auth_protocol == NULL)
{
WARNING ("snmp plugin: `AuthProtocol' not given for host `%s'", hd->name);
status = -1;
break;
}
if (hd->auth_passphrase == NULL)
{
WARNING ("snmp plugin: `AuthPassphrase' not given for host `%s'", hd->name);
status = -1;
break;
}
}
if (hd->security_level == SNMP_SEC_LEVEL_AUTHPRIV)
{
if (hd->priv_protocol == NULL)
{
WARNING ("snmp plugin: `PrivacyProtocol' not given for host `%s'", hd->name);
status = -1;
break;
}
if (hd->priv_passphrase == NULL)
{
WARNING ("snmp plugin: `PrivacyPassphrase' not given for host `%s'", hd->name);
status = -1;
break;
}
}
}
break;
} /* while (status == 0) */
if (status != 0)
{
csnmp_host_definition_destroy (hd);
return (-1);
}
DEBUG ("snmp plugin: hd = { name = %s, address = %s, community = %s, version = %i }",
hd->name, hd->address, hd->community, hd->version);
ssnprintf (cb_name, sizeof (cb_name), "snmp-%s", hd->name);
memset (&cb_data, 0, sizeof (cb_data));
cb_data.data = hd;
cb_data.free_func = csnmp_host_definition_destroy;
CDTIME_T_TO_TIMESPEC (hd->interval, &cb_interval);
status = plugin_register_complex_read (/* group = */ NULL, cb_name,
csnmp_read_host, /* interval = */ &cb_interval,
/* user_data = */ &cb_data);
if (status != 0)
{
ERROR ("snmp plugin: Registering complex read function failed.");
csnmp_host_definition_destroy (hd);
return (-1);
}
return (0);
} /* int csnmp_config_add_host */
示例12: csnmp_read_table
static int csnmp_read_table (host_definition_t *host, data_definition_t *data)
{
struct snmp_pdu *req;
struct snmp_pdu *res;
struct variable_list *vb;
const data_set_t *ds;
uint32_t oid_list_len = (uint32_t) (data->values_len + 1);
/* Holds the last OID returned by the device. We use this in the GETNEXT
* request to proceed. */
oid_t oid_list[oid_list_len];
/* Set to false when an OID has left its subtree so we don't re-request it
* again. */
_Bool oid_list_todo[oid_list_len];
int status;
int i;
uint32_t j;
/* `value_list_head' and `value_list_tail' implement a linked list for each
* value. `instance_list_head' and `instance_list_tail' implement a linked list of
* instance names. This is used to jump gaps in the table. */
csnmp_list_instances_t *instance_list_head;
csnmp_list_instances_t *instance_list_tail;
csnmp_table_values_t **value_list_head;
csnmp_table_values_t **value_list_tail;
DEBUG ("snmp plugin: csnmp_read_table (host = %s, data = %s)",
host->name, data->name);
if (host->sess_handle == NULL)
{
DEBUG ("snmp plugin: csnmp_read_table: host->sess_handle == NULL");
return (-1);
}
ds = plugin_get_ds (data->type);
if (!ds)
{
ERROR ("snmp plugin: DataSet `%s' not defined.", data->type);
return (-1);
}
if (ds->ds_num != data->values_len)
{
ERROR ("snmp plugin: DataSet `%s' requires %i values, but config talks about %i",
data->type, ds->ds_num, data->values_len);
return (-1);
}
/* We need a copy of all the OIDs, because GETNEXT will destroy them. */
memcpy (oid_list, data->values, data->values_len * sizeof (oid_t));
if (data->instance.oid.oid_len > 0)
memcpy (oid_list + data->values_len, &data->instance.oid, sizeof (oid_t));
else /* no InstanceFrom option specified. */
oid_list_len--;
for (j = 0; j < oid_list_len; j++)
oid_list_todo[j] = 1;
/* We're going to construct n linked lists, one for each "value".
* value_list_head will contain pointers to the heads of these linked lists,
* value_list_tail will contain pointers to the tail of the lists. */
value_list_head = calloc (data->values_len, sizeof (*value_list_head));
value_list_tail = calloc (data->values_len, sizeof (*value_list_tail));
if ((value_list_head == NULL) || (value_list_tail == NULL))
{
ERROR ("snmp plugin: csnmp_read_table: calloc failed.");
sfree (value_list_head);
sfree (value_list_tail);
return (-1);
}
instance_list_head = NULL;
instance_list_tail = NULL;
status = 0;
while (status == 0)
{
int oid_list_todo_num;
req = snmp_pdu_create (SNMP_MSG_GETNEXT);
if (req == NULL)
{
ERROR ("snmp plugin: snmp_pdu_create failed.");
status = -1;
break;
}
oid_list_todo_num = 0;
for (j = 0; j < oid_list_len; j++)
{
/* Do not rerequest already finished OIDs */
if (!oid_list_todo[j])
continue;
oid_list_todo_num++;
snmp_add_null_var (req, oid_list[j].oid, oid_list[j].oid_len);
}
//.........這裏部分代碼省略.........
示例13: csnmp_dispatch_table
static int csnmp_dispatch_table (host_definition_t *host, data_definition_t *data,
csnmp_list_instances_t *instance_list,
csnmp_table_values_t **value_table)
{
const data_set_t *ds;
value_list_t vl = VALUE_LIST_INIT;
csnmp_list_instances_t *instance_list_ptr;
csnmp_table_values_t **value_table_ptr;
int i;
_Bool have_more;
oid_t current_suffix;
ds = plugin_get_ds (data->type);
if (!ds)
{
ERROR ("snmp plugin: DataSet `%s' not defined.", data->type);
return (-1);
}
assert (ds->ds_num == data->values_len);
instance_list_ptr = instance_list;
value_table_ptr = malloc (sizeof (*value_table_ptr) * data->values_len);
if (value_table_ptr == NULL)
return (-1);
for (i = 0; i < data->values_len; i++)
value_table_ptr[i] = value_table[i];
vl.values_len = ds->ds_num;
vl.values = malloc (sizeof (*vl.values) * vl.values_len);
if (vl.values == NULL)
{
ERROR ("snmp plugin: malloc failed.");
sfree (value_table_ptr);
return (-1);
}
sstrncpy (vl.host, host->name, sizeof (vl.host));
sstrncpy (vl.plugin, "snmp", sizeof (vl.plugin));
vl.interval = host->interval;
have_more = 1;
memset (¤t_suffix, 0, sizeof (current_suffix));
while (have_more)
{
_Bool suffix_skipped = 0;
/* Determine next suffix to handle. */
if (instance_list != NULL)
{
if (instance_list_ptr == NULL)
{
have_more = 0;
continue;
}
memcpy (¤t_suffix, &instance_list_ptr->suffix, sizeof (current_suffix));
}
else /* no instance configured */
{
csnmp_table_values_t *ptr = value_table_ptr[0];
if (ptr == NULL)
{
have_more = 0;
continue;
}
memcpy (¤t_suffix, &ptr->suffix, sizeof (current_suffix));
}
/* Update all the value_table_ptr to point at the entry with the same
* trailing partial OID */
for (i = 0; i < data->values_len; i++)
{
while ((value_table_ptr[i] != NULL)
&& (csnmp_oid_compare (&value_table_ptr[i]->suffix, ¤t_suffix) < 0))
value_table_ptr[i] = value_table_ptr[i]->next;
if (value_table_ptr[i] == NULL)
{
have_more = 0;
break;
}
else if (csnmp_oid_compare (&value_table_ptr[i]->suffix, ¤t_suffix) > 0)
{
/* This suffix is missing in the subtree. Indicate this with the
* "suffix_skipped" flag and try the next instance / suffix. */
suffix_skipped = 1;
break;
}
} /* for (i = 0; i < columns; i++) */
if (!have_more)
break;
/* Matching the values failed. Start from the beginning again. */
if (suffix_skipped)
//.........這裏部分代碼省略.........
示例14: csnmp_instance_list_add
static int csnmp_instance_list_add (csnmp_list_instances_t **head,
csnmp_list_instances_t **tail,
const struct snmp_pdu *res,
const host_definition_t *hd, const data_definition_t *dd)
{
csnmp_list_instances_t *il;
struct variable_list *vb;
oid_t vb_name;
int status;
uint32_t i;
uint32_t is_matched;
/* Set vb on the last variable */
for (vb = res->variables;
(vb != NULL) && (vb->next_variable != NULL);
vb = vb->next_variable)
/* do nothing */;
if (vb == NULL)
return (-1);
csnmp_oid_init (&vb_name, vb->name, vb->name_length);
il = malloc (sizeof (*il));
if (il == NULL)
{
ERROR ("snmp plugin: malloc failed.");
return (-1);
}
memset (il, 0, sizeof (*il));
il->next = NULL;
status = csnmp_oid_suffix (&il->suffix, &vb_name, &dd->instance.oid);
if (status != 0)
{
sfree (il);
return (status);
}
/* Get instance name */
if ((vb->type == ASN_OCTET_STR) || (vb->type == ASN_BIT_STR))
{
char *ptr;
csnmp_strvbcopy (il->instance, vb, sizeof (il->instance));
is_matched = 0;
for (i = 0; i < dd->ignores_len; i++)
{
status = fnmatch(dd->ignores[i], il->instance, 0);
if (status == 0)
{
if (dd->invert_match == 0)
{
sfree(il);
return 0;
}
else
{
is_matched = 1;
break;
}
}
}
if (dd->invert_match != 0 && is_matched == 0)
{
sfree(il);
return 0;
}
for (ptr = il->instance; *ptr != '\0'; ptr++)
{
if ((*ptr > 0) && (*ptr < 32))
*ptr = ' ';
else if (*ptr == '/')
*ptr = '_';
}
DEBUG ("snmp plugin: il->instance = `%s';", il->instance);
}
else
{
value_t val = csnmp_value_list_to_value (vb, DS_TYPE_COUNTER,
/* scale = */ 1.0, /* shift = */ 0.0, hd->name, dd->name);
ssnprintf (il->instance, sizeof (il->instance),
"%llu", val.counter);
}
/* TODO: Debugging output */
if (*head == NULL)
*head = il;
else
(*tail)->next = il;
*tail = il;
return (0);
} /* int csnmp_instance_list_add */
示例15: parse_flags
static int parse_flags(char *flags, struct flag_list *fl,
struct fs_mgr_flag_values *flag_vals,
char *fs_options, int fs_options_len)
{
int f = 0;
int i;
char *p;
char *savep;
/* initialize flag values. If we find a relevant flag, we'll
* update the value */
if (flag_vals) {
memset(flag_vals, 0, sizeof(*flag_vals));
flag_vals->partnum = -1;
flag_vals->swap_prio = -1; /* negative means it wasn't specified. */
}
/* initialize fs_options to the null string */
if (fs_options && (fs_options_len > 0)) {
fs_options[0] = '\0';
}
p = strtok_r(flags, ",", &savep);
while (p) {
/* Look for the flag "p" in the flag list "fl"
* If not found, the loop exits with fl[i].name being null.
*/
for (i = 0; fl[i].name; i++) {
if (!strncmp(p, fl[i].name, strlen(fl[i].name))) {
f |= fl[i].flag;
if ((fl[i].flag == MF_CRYPT) && flag_vals) {
/* The encryptable flag is followed by an = and the
* location of the keys. Get it and return it.
*/
flag_vals->key_loc = strdup(strchr(p, '=') + 1);
} else if ((fl[i].flag == MF_VERIFY) && flag_vals) {
/* If the verify flag is followed by an = and the
* location for the verity state, get it and return it.
*/
char *start = strchr(p, '=');
if (start) {
flag_vals->verity_loc = strdup(start + 1);
}
} else if ((fl[i].flag == MF_FORCECRYPT) && flag_vals) {
/* The forceencrypt flag is followed by an = and the
* location of the keys. Get it and return it.
*/
flag_vals->key_loc = strdup(strchr(p, '=') + 1);
} else if ((fl[i].flag == MF_LENGTH) && flag_vals) {
/* The length flag is followed by an = and the
* size of the partition. Get it and return it.
*/
flag_vals->part_length = strtoll(strchr(p, '=') + 1, NULL, 0);
} else if ((fl[i].flag == MF_VOLDMANAGED) && flag_vals) {
/* The voldmanaged flag is followed by an = and the
* label, a colon and the partition number or the
* word "auto", e.g.
* voldmanaged=sdcard:3
* Get and return them.
*/
char *label_start;
char *label_end;
char *part_start;
label_start = strchr(p, '=') + 1;
label_end = strchr(p, ':');
if (label_end) {
flag_vals->label = strndup(label_start,
(int) (label_end - label_start));
part_start = strchr(p, ':') + 1;
if (!strcmp(part_start, "auto")) {
flag_vals->partnum = -1;
} else {
flag_vals->partnum = strtol(part_start, NULL, 0);
}
} else {
ERROR("Warning: voldmanaged= flag malformed\n");
}
} else if ((fl[i].flag == MF_SWAPPRIO) && flag_vals) {
flag_vals->swap_prio = strtoll(strchr(p, '=') + 1, NULL, 0);
} else if ((fl[i].flag == MF_ZRAMSIZE) && flag_vals) {
flag_vals->zram_size = strtoll(strchr(p, '=') + 1, NULL, 0);
}
break;
}
}
if (!fl[i].name) {
if (fs_options) {
/* It's not a known flag, so it must be a filesystem specific
* option. Add it to fs_options if it was passed in.
*/
strlcat(fs_options, p, fs_options_len);
strlcat(fs_options, ",", fs_options_len);
} else {
/* fs_options was not passed in, so if the flag is unknown
* it's an error.
*/
ERROR("Warning: unknown flag %s\n", p);
}
//.........這裏部分代碼省略.........