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数据类型的更多相关文章

  1. linux服务之snmp

    背景信息 http://datatracker.ietf.org/doc/rfc1213/ http://oid-info.com/get/1.3.6.1 http://oid-info.com/ge ...

  2. SNMP常用数据操作

    SNMP常用数据操作 snmp编程中常见的数据类型基本上就是integer32/oct_str(字节数组)/counter64/timeticks/dateAndTime这些.很多其它的比如Truth ...

  3. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  4. 我开发的SNMP编译器和浏览器

    我开发的SNMP编译器和浏览器 什么是SNMP SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进 ...

  5. SNMP详解

    简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议.在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案:由于SNMP的简单性,在Inter ...

  6. SNMP进阶

    管理信息库:MIB 我们要扩展mib首先必须清楚mib是如何定义的,用的什么语言,有哪些约定,遵循哪些规则等等.这些基本东西掌握过后,我们就可以很轻松的来写自己的mib文件了. 所谓管理信息库,或者M ...

  7. SNMP协议入门

    SNMP协议入门 1.引言 基于TCP/IP的网络管理包含3个组成部分: 1) 一个管理信息库MIB(Management Information Base).管理信息库包含所有代理进程的所有可被查询 ...

  8. 基于php的snmp管理端开发

    一.系统环境: 操作系统:CentOS 5.4                内核:Linux_2.6 编译环境:gcc 4.1.2                代码版本:php-5.2.8.tar ...

  9. SNMP简单网络管理协议(转载)

    SNMP SNMP 网络管理的历史 美国国防部设计了世界上头几个包交换网之一的ARPANET,在70年代,TCP/IP协议族正式被定为军方通信标准,随着此协议的广泛使用,网络管理成了一件大事.在80年 ...

随机推荐

  1. 9月9日下午HTML样式表(宽度和高度、背景字体、对齐方式边界与边框)

    样式表 一.大小 1.width   宽度 2.height  高度 <div style="width:200px; height:200px"></div&g ...

  2. WEB开发基本知识

    参考文献:http://www.cnblogs.com/xdp-gacl/p/3729033.html 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示I ...

  3. validate jquery 注册页面使用实例 详解

    官方使用文档:http://jqueryvalidation.org/documentation/ 参考资料:http://www.w3cschool.cc/jquery/jquery-plugin- ...

  4. 使用pt-fifo-split 工具往mysql插入海量数据

    在<mysql插入/更新数据>这篇文章提到,使用LOAD DATA INFILE语句,可以从一个文件直接加载数据到mysql中,但如果文件非常大,可能还需要对文件进行切割,分多次加载,这种 ...

  5. 清除inline-block元素间距

    方法1 .clear{ letter-spacing: -4px;/*根据不同字体字号或许需要做一定的调整*/ word-spacing: -4px; font-size: 0;} 方法2 .clea ...

  6. Java并发编程核心方法与框架-CompletionService的使用

    接口CompletionService的功能是以异步的方式一边生产新的任务,一边处理已完成任务的结果,这样可以将执行任务与处理任务分离.使用submit()执行任务,使用take取得已完成的任务,并按 ...

  7. 在github上创建新分支

    在github上创建仓库: Create a new repository on the command line touch README.md git init git add README.md ...

  8. twoSum

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...

  9. vs2010 中无法打开 源文件 "stdafx.h" 未定义标识符 “xxx”

    解决方案: 项目属性->配置属性->C/C++->常规->附加包含目录->$(ProjectDir)

  10. [译]git clean

    git clean命令用来从你的工作目录中删除所有没有tracked过的文件. git clean经常和git reset --hard一起结合使用. 记住reset只影响被track过的文件, 所以 ...