SNMP常用数据操作
SNMP常用数据操作
snmp编程中常见的数据类型基本上就是integer32/oct_str(字节数组)/counter64/timeticks/dateAndTime这些。很多其它的比如TruthValue这样的数据在编程的时候一般都比较少用,而且一般都有对应的替代。
Counter32类型
Counter32其实对应C语言中的32位无符号整型(0~2^32-1)。在snmpv1中它的解释是:“计数器是一个非负的整数,它递增至最大值,而后归零”。
对counter32的操作,在32位机器上,其一般使用unsigned int来表示。是比较简单的数据类型,所以无需使用特别的操作。
Counter64类型
Counter64对应64位的计数器,它表示的范围(0~2^64-1)就比counter32大多了,在net-snmp中提供了对它操作的相关函数。
Net-snmp中并没有直接使用C语言中的64位无符号整型,而是使用了一个结构体来表示
struct counter64 {
u_long high;
u_long low;
};
为什么这么做呢?这个不好说,可能是为了操作方便吧。在snmp++中定义了一个类Counter64来提供对这个数据类型的操作,它也是如同此处将其分为高位部分(hipart)和低位(lopart)部分。
同时还定义了一些用于操作counter64数据类型的函数。
typedef struct counter64 U64;
#define I64CHARSZ 21
void divBy10(U64, U64 *, unsigned int *);
void multBy10(U64, U64 *);
void incrByU16(U64 *, unsigned int);
void incrByU32(U64 *, unsigned int);
NETSNMP_IMPORT
void zeroU64(U64 *);
int isZeroU64(const U64 *);
NETSNMP_IMPORT
void printU64(char *, const U64 *);
NETSNMP_IMPORT
void printI64(char *, const U64 *);
int read64(U64 *, const char *);
NETSNMP_IMPORT
void u64Subtract(const U64 * pu64one, const U64 * pu64two,
U64 * pu64out);
void u64Incr(U64 * pu64out, const U64 * pu64one);
void u64UpdateCounter(U64 * pu64out, const U64 * pu64one,
const U64 * pu64two);
void u64Copy(U64 * pu64one, const U64 * pu64two);
int netsnmp_c64_check_for_32bit_wrap(U64 *old_val, U64 *new_val,
int adjust);
NETSNMP_IMPORT
int netsnmp_c64_check32_and_update(struct counter64 *prev_val,
struct counter64 *new_val,
struct counter64 *old_prev_val,
int *need_wrap_check);
在net-snmp中对Counter64数据的操作应该使用下面的函数来进行,而不用直接使用unsigned long long等原生的数据类型。为什么要这么做呢?因为这涉及到将counter64数据的解析转换等操作。
具体可见asn_build_unsigned_int64函数,它在net-snmp-5.7.3\snmplib\asn1.c文件中。
u_char *
asn_build_unsigned_int64(u_char * data,
size_t * datalength,
u_char type,
const struct counter64 * cp, size_t countersize)
time ticks类型
time ticks:是一个时间单位,表示以0.01秒为单位计算的时间;
这其实就是一个32位无符号整型。这里要注意一下的是它的单位,在使用的时候应该进行单位换算。
DateAndTime类型
这是一个用来表示时间的数据类型,长度为11个字节。
在snmp中有具体的规定,每一个字节表示什么。
以前解释过它,这里就不详述的了。可用看这里http://www.cnblogs.com/oloroso/p/4595127.html
SNMP常用数据操作的更多相关文章
- Android 常用数据操作封装类案例
1.DbHelper类 继承自SQLiteOpenHelper类,实现对数据库的基本操作 package com.example.utils; import android.content.Conte ...
- mybatis 2 -常用数据操作
1.写入数据并获取自增ID XML配置: <!-- 写入数据获取自增ID --> <insert id="insertLog" parameterType=&qu ...
- MySql常用数据操作
1.数据库操作: MySQL服务管理命令: 1.启动服务:sudo service mysql start 2.停止服务:sudo service mysql stop 3.重新启动服务:sudo s ...
- 大数据(5) - HDFS中的常用API操作
一.安装java 二.IntelliJ IDEA(2018)安装和破解与初期配置 参考链接 1.进入官网下载IntelliJ IDEA https://www.jetbrains.com/idea/d ...
- 配置监听器 服务器启动时 检索常用数据 保存在application中 减少数据的查询操作(OA项目)
模型 大致介绍一下:左侧菜单是用户登录成功之后显示的页面 这些数据就是通过查询数据库 然后在页面中把查到的数据 循环遍历出来 构成了操作菜单 第一个解决的问题:常用数据 在服务器启动的时候 ...
- 入门大数据---Hive常用DML操作
Hive 常用DML操作 一.加载文件数据到表 1.1 语法 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename ...
- Mysql常用表操作 | 单表查询
160905 常用表操作 1. mysql -u root -p 回车 输入密码 2. 显示数据库列表 show databases 3. 进入某数据库 use database data ...
- Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页
models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...
- Entity Framework 5.0系列之数据操作
Entity Framework将概念模型中定义的实体和关系映射到数据源,利用实体框架可以将数据源返回的数据具体化为对象:跟踪对象所做的更改:并发处理:将对象更改传播到数据源等.今天我们就一起讨论如何 ...
随机推荐
- dos命令复制当天生成的以日期为文件名的文件
1.利用SqlServer的自动备份功能,将数据自动备份,备份出的文件格式如下: db_backup_201001270930.bak 2.编辑bat脚本 ...
- 最大似然估计 (MLE) 最大后验概率(MAP)
1) 最大似然估计 MLE 给定一堆数据,假如我们知道它是从某一种分布中随机取出来的,可是我们并不知道这个分布具体的参,即"模型已定,参数未知". 例如,我们知道这个分布是正态分布 ...
- JSP传统标签开发
1.标签技术的API类继承关系 1).JspTag接口是所有自定义标签的父接口 该接口中没有任何属性和方法,只有两个直接子接口,Tag接口和SimpleTag接口,把实现Tag接口的自定义标签叫做传统 ...
- JavaWeb学习笔记——XML简介
- MySQL学习笔记——多表连接和子查询
多表连接查询 # 返回的是两张表的乘积 SELECT * FROM tb_emp,tb_dept SELECT COUNT(*) FROM tb_emp,tb_dept # 标准写法,每个数据库都能这 ...
- html 表格head头部不动 body部分滚动,每格宽同内容增加
如下图同Excel表格首行固定: <style> .table{ width: 100%; border-collapse:collapse; border-spacing:0;} .ta ...
- jQuery里$(this)和this的区别在哪?
$(this)是jquery对象,能调用jquery的方法,例如click(), keyup().而this,则是html元素对象,能调用元素属性,例如this.id,this.value.例如假设已 ...
- Java中符号位扩展
第一个例子: byte b=-100;b在内存中是以补码的形式存贮的:1001 1100 如果执行char c=(char)b;如3楼企鹅先生所说:b要先变为int,这时增加的位全要用b的符号位填充( ...
- angularjs DOM操作之jqLite篇
angular.element(el).find("input").attr({value:1}); * ## Angular's jqLite * jqLite provides ...
- 【采集层】Kafka 与 Flume 如何选择--转自悟性的博文
[采集层]Kafka 与 Flume 如何选择 收藏 悟性 发表于 2年前 阅读 23167 收藏 16 点赞 4 评论 1 摘要: Kafka, Flume 采集层 主要可以使用Flume, Kaf ...