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将概念模型中定义的实体和关系映射到数据源,利用实体框架可以将数据源返回的数据具体化为对象:跟踪对象所做的更改:并发处理:将对象更改传播到数据源等.今天我们就一起讨论如何 ...
随机推荐
- <摘录>如何在64位linux强制编译32位应用程序
GDC注:因为需要解决在linux64机上编译32位的mongodb(没办法,因为编译的php是32位,然后我想将mongdb扩展添加到php中),在网上搜了很多文章,感觉这篇好懂,而且好用.我使用的 ...
- Java Connection.setAutoCommit
Java setAutoCommit 默认为true,即每条SQL语句在各自的一个事务中执行. 很多时候需要有多个操作在一个事务执行,如循环插入,此时可在插入开始前设置 conn.setAutoCom ...
- 端口扫描(TCP)
还待优化... #include <string.h> #include <WinSock.h> #include <stdio.h> #pragma commen ...
- css input checkbox和radio样式美化
参考:https://segmentfault.com/a/1190000004553258 http://www.haorooms.com/post/css_mh_ck_radio 思路都一样的,先 ...
- jQM基本代码
<div data-role="page"> <div data-role="header" data-position="fixe ...
- json最简单的跨域
html代码 <html> <head> <title>index.html</title> <script type="text/ja ...
- RHEL本地yum源
一.挂载本地镜像做yum源(环境:RHEL6.5 64位 VM11) 1.进入/etc/yum.repos.d目录, [root@localhost yum.repos.d]# ls packagek ...
- 【Delphi】获取EIP
var EIP: Cardinal; procedure GetEIP(); stdcall; asm pop eax; mov EIP,eax; push eax; end; procedure T ...
- Jquery中的$().each() 方法
先举例子, 输出每个 li 元素的文本: <html> <head> <script type="text/javascript" src=" ...
- 微信C# SDK
微信C# SDK # 模块功能 DLL 1 基础库 Senparc.Weixin.dll 2 微信公众号 / 微信支付 / JSSDK / 摇周边 / 等等 Senparc.Weixin.MP.dll ...