net-snmp的dateandtime数据类型
net-snmp的dateandtime数据类型
2015/06/12 16:35:59
DateAndTime是Snmpv2中的一种数据类型,它主要提供了对日期时间的描述。
在开发一个snmp相关程序的时候,碰到了这个东西。
本文由乌合之众瞎写http://www.cnblogs.com/oloroso
原由
在开发的时候,某个节点的值是DateAndTime类型的,因为是通过挂载脚本来获取的值,是一个字符串,形似 "2015-06-12 17:04:03" 这样的。现在要将这个值转换为net-snmp管理端可以获取的DateAndTime值。
关于这个结构的描述,在net-snmp源代码目录下的snmplib/snmp-tc.c文件中可以找到。
net-snmp中没有定义这个类型,而是当做一个unsigned char类型的数组,根据各个字段的宽度来操作。
结构描述如下
| 字段 | 字节数 | 内容 | 取值范围 |
|---|---|---|---|
| 1 | 1-2 | year* | 0..65536 |
| 2 | 3 | month | 1..12 |
| 3 | 4 | day | 1..31 |
| 4 | 5 | hour | 0..23 |
| 5 | 6 | minutes | 0..59 |
| 6 | 7 | seconds | 0..60 |
| (use 60 for leap-second) | |||
| 7 | 8 | deci-seconds | 0..9 |
| 8 | 9 | direction from UTC | '+' / '-' |
| 9 | 10 | hours from UTC* | 0..13 |
| 10 | 11 | minutes from UTC | 0..59 |
| * 注意:-年份这个值使用网络字节序 |
下面是文件中的内容拷贝过来的。
#ifndef NETSNMP_FEATURE_REMOVE_NETSNMP_DATEANDTIME_SET_BUF_FROM_VARS
/*
DateAndTime ::= TEXTUAL-CONVENTION
DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"
STATUS current
DESCRIPTION
"A date-time specification.
field octets contents range
----- ------ -------- -----
1 1-2 year* 0..65536
2 3 month 1..12
3 4 day 1..31
4 5 hour 0..23
5 6 minutes 0..59
6 7 seconds 0..60
(use 60 for leap-second)
7 8 deci-seconds 0..9
8 9 direction from UTC '+' / '-'
9 10 hours from UTC* 0..13
10 11 minutes from UTC 0..59
* Notes:
- the value of year is in network-byte order
- daylight saving time in New Zealand is +13
For example, Tuesday May 26, 1992 at 1:30:15 PM EDT would be
displayed as:
1992-5-26,13:30:15.0,-4:0
Note that if only local time is known, then timezone
information (fields 8-10) is not present."
SYNTAX OCTET STRING (SIZE (8 | 11))
*/
数据操作
net-snmp这个库已经提供了一些操作这个"数据类型"(这里当做一个数据类型)的操作函数,比较游泳的就是netsnmp_dateandtime_set_buf_from_vars这个函数。这个函数用于利用相关的日期时间数值来构建这个数据。注意参数bufsize是传入传出参数,传入buf的大小,传出构建后的数据内存字节数。
int
netsnmp_dateandtime_set_buf_from_vars(u_char *buf, size_t *bufsize,
u_short year, u_char month, u_char day,
u_char hour, u_char minutes,
u_char seconds, u_char deci_seconds,
int utc_offset_direction,
u_char utc_offset_hours,
u_char utc_offset_minutes)
{
u_short tmp_year = htons(year);
/*
* if we have a utc offset, need 11 bytes. Otherwise we
* just need 8 bytes.
*/
if(utc_offset_direction) {
if(*bufsize < 11)
return SNMPERR_RANGE;
/*
* set utc offset data
*/
buf[8] = (utc_offset_direction < 0) ? '-' : '+';
buf[9] = utc_offset_hours;
buf[10] = utc_offset_minutes;
*bufsize = 11;
}
else if(*bufsize < 8)
return SNMPERR_RANGE;
else
*bufsize = 8;
/*
* set basic date/time data
*/
memcpy(buf, &tmp_year, sizeof(tmp_year));
buf[2] = month;
buf[3] = day;
buf[4] = hour;
buf[5] = minutes;
buf[6] = seconds;
buf[7] = deci_seconds;
return SNMPERR_SUCCESS;
}
#endif /* NETSNMP_FEATURE_REMOVE_NETSNMP_DATEANDTIME_SET_BUF_FROM_VARS */
net-snmp的dateandtime数据类型的更多相关文章
- linux服务之snmp
背景信息 http://datatracker.ietf.org/doc/rfc1213/ http://oid-info.com/get/1.3.6.1 http://oid-info.com/ge ...
- SNMP常用数据操作
SNMP常用数据操作 snmp编程中常见的数据类型基本上就是integer32/oct_str(字节数组)/counter64/timeticks/dateAndTime这些.很多其它的比如Truth ...
- SNMP简单网络管理协议
声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...
- 我开发的SNMP编译器和浏览器
我开发的SNMP编译器和浏览器 什么是SNMP SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进 ...
- SNMP详解
简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议.在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案:由于SNMP的简单性,在Inter ...
- SNMP进阶
管理信息库:MIB 我们要扩展mib首先必须清楚mib是如何定义的,用的什么语言,有哪些约定,遵循哪些规则等等.这些基本东西掌握过后,我们就可以很轻松的来写自己的mib文件了. 所谓管理信息库,或者M ...
- SNMP协议入门
SNMP协议入门 1.引言 基于TCP/IP的网络管理包含3个组成部分: 1) 一个管理信息库MIB(Management Information Base).管理信息库包含所有代理进程的所有可被查询 ...
- 基于php的snmp管理端开发
一.系统环境: 操作系统:CentOS 5.4 内核:Linux_2.6 编译环境:gcc 4.1.2 代码版本:php-5.2.8.tar ...
- SNMP简单网络管理协议(转载)
SNMP SNMP 网络管理的历史 美国国防部设计了世界上头几个包交换网之一的ARPANET,在70年代,TCP/IP协议族正式被定为军方通信标准,随着此协议的广泛使用,网络管理成了一件大事.在80年 ...
随机推荐
- 枚举类型Enum
包java.dataStructure中,文件名Enum_demo.java 在JDK5中引入了一个新的关键字——enum,可以直接定义枚举类型 在申明枚举类的时候,也可以申明属性.方法和构造函数,但 ...
- Nginx:Pitfalls and Common Mistakes
New and old users alike can run into a pitfall. Below we outline issues that we see frequently as we ...
- Eratosthenes筛选法构造1-n 素数表
筛选法:对于不超过n的每个非负整数p,删除2p,3p,4p...当处理完所有数之后,还没没删除的就是素数. 代码中进行了相应的优化. 本代码功能,输入一个数,输出从1-该数之间的素数.功能待完善,可将 ...
- clipboard复制剪贴板功能,以及用requirejs时报错---Uncaught ReferenceError: Clipboard is not defined
zeroclipboard是走的flash插件,手机浏览器是不支持的,所以不得不舍弃之,用clipboard,clipboard不需要flash就可以完成复制剪切等功能,而且可以兼容pc,移动端,下面 ...
- Debian 8安装ibus输入法
# apt-get install ibus ibus-sunpinyin ibus-table-wubi
- JQM弹出对话框
<div data-role="page" id="pageone"> <div data-role="header"&g ...
- Hmmer安装与使用
Hmmer的安装与使用 从功能基因研究的角度来讲,相关的搜索,比如从序列数据库中,找同源的序列,或者对一个对一个新的基因功能进行鉴定,使用hmmer比使用blast有着更高的灵敏度已经更高的搜索速 ...
- sufeinet
http://www.sufeinet.com http://tool.sufeinet.com/
- svn 切出指定版本、更改版本名称、删除分支
1,切出指定版本 svn copy svn://192.168.1.52/help/branches/help_forShop_140307 -r 170 svn://192.168.1.52/hel ...
- PHP中9大缓存技术总结
1.全页面静态化缓存 也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程.此种方式,在CMS系统中比较常见,比如dedecms: 一种比较常用的实现方 ...