?? snmp.h
字號(hào):
#ifndef _H_SNMP
#define _H_SNMP
#define DHCP_NOCHANGE
//ASN.1定義的數(shù)據(jù)格式
#define TAG_INTERGER 0x2 //-2,147,483,648 ~ 2,147,483,647之間整數(shù)
//TruthValue|true(1)false(2)|
//TestAndIncr(0~2147483647)
//RowStatus|active(1)notInService(2)notReady(3)createAndGo(4)createAndWait(5)destroy(6)|
//TimeInterval(0~2147483647)
//StorageType|other(1)volatile(2)nonVolatile(3)permanent(4)readOnly(5)
#define TAG_OCTET 0x4 //任意長度字符串,推薦不超過255字節(jié)
//DisplayString(size(0~255))
//IPAddress(size(4))
//PhysAddress
//MacAddress(size(6))
//DateAndTime(size(8|11))
//TAddress(size(1~255))
#define TAG_NULL 0x5 //占位符
#define TAG_OBJIDT 0x6 //U32 oid[128],最大128×4字節(jié)數(shù)
//TDomain
//RowPoint
//VariablePointer
//InstancePointer
//AutonomousType
#define TAG_SEQUENCE 0x30
#define TAG_IP 0x40
#define TAG_COUNTER 0x41
#define TAG_GAUGE32 0x42 //0 ~ 4,294,967,295 非負(fù)整數(shù),最大值后鎖定
#define TAG_TIMETICK 0x43 //0 ~ 4,294,967,295 非負(fù)整數(shù),最大歸零,0.01sec
//TimeStamp
#define TAG_OPAQUE 0x44
#define TAG_GETPDU 0xa0
#define TAG_GETNEXT 0xa1
#define TAG_GETRESPONSE 0xa2
#define TAG_SETPDU 0xa3
#define TAG_TRAPPDU 0xa4
//PDU指定的錯(cuò)誤信息,屬于SNMPV1
#define PDU_NOERROR 0
#define PDU_TOOBIG 1
#define PDU_NOSUCHNAME 2
#define PDU_BADVALUE 3
#define PDU_READONLY 4
#define PDU_GENERR 5
//打印機(jī)組MIB中hrDeviceStatus的指定信息
#define PRN1_UNKNOWN 1
#define PRN1_RUNNING 2
#define PRN1_WARNING 3
#define PRN1_TESTING 4
#define PRN1_DOWN 5
//打印機(jī)組MIB中hrPrinterStatus的指定信息
#define PRN2_OTHER 1
#define PRN2_UNKNOWN 2
#define PRN2_IDLE 3
#define PRN2_PRINTING 4
#define PRN2_WARMUP 5
//SNMP版本號(hào)
#define SNMPV1 0
#define SNMPV2 1
#define SNMPV3 2
//TRAP消息定義
#define MSG_NMS_TRAP 1
#define MSG_SYS_UP 2
//設(shè)備狀態(tài),OID為{1.3.6.1.2.1.25.3.2.1.5}時(shí)查詢
#define STAT_UNKNOWN 1
#define STAT_RUNNING 2
#define STAT_WARNING 3
#define STAT_TESTING 4
#define STAT_DOWN 5
//打印機(jī)狀態(tài),OID為{1.3.6.1.2.1.25.3.5.1.1}時(shí)查詢
#define PRN_OTHER 1
#define PRN_UNKNOWN 2
#define PRN_IDLE 3
#define PRN_PRINTING 4
#define PRN_WARMUP 5
//HR組中ERR_STATUS的定義,需要引擎將當(dāng)前狀況按下面的代碼合成一個(gè)字節(jié)
#define ERR_READY (u_char)0
#define ERR_SERVICECALL (u_char)1
#define ERR_OFFLINE (u_char)(1<<1)
#define ERR_JAMMED (u_char)(1<<2)
#define ERR_COVEROPEN (u_char)(1<<3)
#define ERR_NOTONER (u_char)(1<<4)
#define ERR_LOWTONER (u_char)(1<<5)
#define ERR_NOPAPER (u_char)(1<<6)
#define ERR_LOWPAPER (u_char)(1<<6)
//打印機(jī)COVER狀態(tài)
#define DOOR_OTHER 1
#define DOOR_OPEN 3
#define DOOR_CLOSE 4
#define DOOR_INTEROPEN 5
#define DOOR_INTERCLOSE 6
//打印機(jī)輸入紙盒定義
#define IN_OTHER 1
#define IN_UNKNOWN 2
#define IN_SHEETFEEDAUTOREMOVABLETRAY 3
#define IN_SHEETFEEDAUTONONREMOVABLETRAY 4
#define IN_SHEETFEEDMANUAL 5
#define IN_CONTINUOUSROLL 6
#define IN_CONTINUOUSFANFOLD 7
//雜七雜八的定義
#define MAX_STRLEN 256
#define MAX_OIDLEN (128*sizeof(long))
#define SNMP_UDP 161
#define SNMP_TRAP 162
#define SERVER_MAX_CONNECTIONS 4 //服務(wù)器允許的最大連接數(shù)
#define snmPoolSize (102400*1)
typedef unsigned long Counter;
typedef unsigned long Gauge;
typedef unsigned long TimeTicks;
typedef long INTEGER;
typedef char* PhysAddress;
typedef char* DispStr;
typedef char* OID;
typedef char* IpAddress;
typedef struct _snmp_start_mib
{
//實(shí)達(dá)打印服務(wù)器專用MIB庫
DispStr startPassword; //RW
INTEGER startPasswdLen; //密碼長度
DispStr startSeries;
INTEGER startSWVersion;
INTEGER startLPTNumber; //有效并口數(shù)目
INTEGER startLPTIndex; //
INTEGER startLPTStatus; //index并口狀態(tài)
INTEGER startUSBNumber; //有效USB數(shù)目
INTEGER startUSBIndex; //
INTEGER startUSBStatus; //index USB狀態(tài)
INTEGER startCOMNumber; //有效COM數(shù)目
INTEGER startCOMIndex; //
INTEGER startCOM1Status; //index COM狀態(tài)
//作業(yè)管理專用MIB
DispStr startLastJobInfo;
DispStr startLPTJobInfo; //上面的index指定LPT
DispStr startUSBJobInfo;
//實(shí)達(dá)打印機(jī)專用MIB庫
INTEGER startTonerLevel;
INTEGER startInputNumber; //有幾個(gè)輸入紙盒
INTEGER startInputIndex; //指示當(dāng)前讀取第幾紙盒
INTEGER startInputStatus; //index紙盒狀態(tài),bit1代表是否安裝,bit2代表是否有紙,bit3代表是否可設(shè)置紙張大小
INTEGER startInputPaper; //紙盒1紙張規(guī)格,若狀態(tài)顯示可以更改紙張大小,則RW
INTEGER startLEDNumber; //LED燈的數(shù)目
INTEGER startLEDIndex; //指定某燈
INTEGER startLEDStatus; //每個(gè)LED燈亮滅狀態(tài)
INTEGER startLCDStatus; //是否有LCD面板
DispStr startLCDMsg; //LCD字符串信息
INTEGER startPrtStatus; //打印機(jī)狀態(tài)碼
INTEGER startPrtOffline; //設(shè)定打印機(jī)脫機(jī)聯(lián)機(jī)
INTEGER startPrtReboot; //設(shè)定打印機(jī)重啟
//端口管理專用MIB
INTEGER startLPTMode;
INTEGER startLPTManage;
INTEGER startLPTTimeout;
DispStr startLPTMemo;
}STARTMIBLIB;
typedef struct _snmp_snmp_mib
{
//以下部分都無需系統(tǒng)支持
//SNMP MIB(無需系統(tǒng)提供)
Counter SnmpInPkts;
Counter snmpOutPkts;
Counter snmpInBadVersions;
Counter snmpInBadCommunityNames;
Counter snmpInBadCommunityUses;
Counter snmpInASNParseErrs;
Counter snmpInTooBigs;
Counter snmpInNoSuchNames;
Counter snmpInBadValues;
Counter snmpInReadOnlys;
Counter snmpInGenErrs;
Counter snmpInTotalReqVars;
Counter snmpInTotalSetVars;
Counter snmpInGetRequests;
Counter snmpInGetNexts;
Counter snmpInSetRequests;
Counter snmpInGetResponses;
Counter snmpInTraps;
Counter snmpOutTooBigs;
Counter snmpOutNoSuchNames;
Counter snmpOutBadValues;
Counter snmpOutGenErrs;
Counter snmpOutGenRequests;
Counter snmpOutGetNexts;
Counter snmpOutSetRequests;
Counter snmpOutGetResponses;
Counter snmpOutTraps;
INTEGER SnmpEnableAuthenTraps; //RW
}SNMPMIBLIB;
typedef struct _snmp_prt_snmp
{
//Printer MIB中需要的全局變量
long prtGeneralConfigChanges; //引擎變化次數(shù)
long prtGeneralCurrentLocalization;//本地化代碼
long prtGeneralReset; //當(dāng)前RESET的狀態(tài)
long prtCoverIndex; //
long prtCoverStatus;
long prtLocalizationCharacterSet;
long prtInputDefaultIndex; //
long prtInputIndex;
long prtInputType;
long prtInputDimUnit;
long prtInputMediaDimFeedDirDeclared; //紙張長
long prtInputMediaDimXFeedDirDeclared; //紙張寬
long prtInputMediaDimFeedDirChosen;
long prtInputMediaDimXFeedDirChosen;
long prtInputCapacityUnit;
long prtInputMaxCapacity;
long prtInputCurrentLevel;
long prtInputStatus;
long prtInputSecurity;
long InputMediaWeight;
long InputMediaFormParts;
long prtOutputDefaultIndex;
long prtOutputIndex;
long prtOutputType;
long prtOutputCapacityUnit;
long prtOutputMaxCapacity;
long prtOutputRemainingCapacity;
long prtOutputStatus;
long prtOutputSecurity;
long prtOutputDimUnit;
long prtOutputMaxDimFeedDir;
long prtOutputMaxDimXFeedDir;
long prtOutputMinDimFeedDir;
long prtOutputMinDimXFeedDir;
long prtOutputStackingOrder;
long prtOutputPageDeliveryOrientation;
long prtOutputBursting;
long prtOutputDecollating;
long prtOutputPageCollated;
long prtOutputOffsetStacking;
}PRTMIBLIB;
typedef struct _snmp_hr_snmp
{
/*
打印機(jī)狀態(tài) -->hrDeviceStatus -->hrPrinterStatus -->hrPrinterDetectedErrorState
Normal running(2) idle(3) none set
Busy/ running(2) printing(4)
Temporarily
Unavailable
Non Critical warning(3) idle(3) or could be: lowPaper,
Alert Active printing(4) lowToner, or serviceRequested
Critical down(5) other(1) could be: jammed,noPaper,
Alert Active noToner,coverOpen, or serviceRequested
Unavailable down(5) other(1)
Moving off- warning(3) idle(3) or offline
line printing(4)
Off-line down(5) other(1) offline
Moving down(5) warmup(5)
on-line
Standby running(2) other(1)
*/
//HR MIB組中需要的全局變量
long errStatus; //需要引擎賦值
long DeviceStatus; //需要引擎賦值
long PrinterStatus; //需要引擎賦值
long hrDeviceErrors;
long hrDeviceIndex;
}HRMIBLIB;
typedef unsigned char u_char;
typedef unsigned long u_long;
typedef unsigned char oid;
typedef u_char *(FindVar)(char magic,int *buflen);
typedef int WriteVar(char magic,char *buf,int buflen);
typedef struct _var_bind_list
{
struct _var_bind_list *next;
int oid_len;
u_char oid[MAX_OIDLEN]; //防止出現(xiàn)負(fù)數(shù)
char type;
void *value;
}VARLIST;
typedef struct _nametree {
u_char oid[MAX_OIDLEN];
struct _nametree* parent; //父級(jí)
struct _nametree* children; //子級(jí)
struct _nametree* sibling; //同級(jí)
char* name;
unsigned char type;
}nametree;
typedef struct _snmp_pdu {
long version; //SNMPV1 == 0
int command; //0xA(n)
long reqid; //Request id
long errstat; //Error status
long errindex; //Error index
u_char *community; //Community Name
int community_len;
//>>>>>>>>>>>>> Trap PDU <<<<<<<<<<<<<<<<<
oid *enterprise; //System OID
int enterprise_length;
long trap_type; //trap type
long specific_type; //廠商指定 trap type
u_long time; //初始化到發(fā)送TRAP之間的時(shí)間
u_char agent_addr[4]; //其實(shí)是NMS的IP地址
// struct sockaddr_in clientAddr; //回送TRAP到這個(gè)地方
int sFd; //回送TRAP的本機(jī)端口
//>>>>>>>>>>>>> VARBINDLIST <<<<<<<<<<<<<<
VARLIST *variables;
}SNMP_PDU;
//給TRAP任務(wù)發(fā)送snmp包
typedef struct _trap_msg
{
u_char msg;
SNMP_PDU *snmp;
}TRAPMSG;
typedef struct _log
{
struct _log * next;
struct _log * prev;
unsigned int size; //xxxBytes
unsigned int flag;
unsigned int pagecnt;
unsigned long time;
char list[18]; //192.168.3.4 etc
char paper[10]; //A4,A3 etc.
char emu[10]; //PCL,LQ,PS,XL,Unkown
char dest[5]; //LPT1,LPT2,USB1,USB2
char remoteName[16]; //Netbios Name
char type[5]; //RAW,FTP,LPD,HTTP,IPP,NB
}logParam;
#define MAXLOG 100
extern PRTMIBLIB *prtMibLib;
extern STARTMIBLIB *startMibLib;
extern SNMPMIBLIB *snmpMibLib;
extern HRMIBLIB *hrMibLib;
int TrapTask(void);
int snmpTrap(void);
//啟動(dòng)SNMP的代理進(jìn)程
int snmpAgent(void);
//開始接收檢驗(yàn)輸入數(shù)據(jù)包
int Exam_startdata(int sFd,int count);
//接收到的數(shù)據(jù)經(jīng)過SNMP格式校驗(yàn)后,用本函數(shù)按要求獲取MIB
int ExecSnmp(SNMP_PDU *snmp);
//按照給定的PDU,打包出一個(gè)完整的返回?cái)?shù)據(jù)包
int PrepareRC(SNMP_PDU *snmp,char **buf,int *packetlen);
//調(diào)用下面的幾種打包程序,PrepareRC才可以生成最終數(shù)據(jù)
int Encode_bindlist(SNMP_PDU *snmp,char **buf,int *buflen);
int Encode_ErrorIndex(SNMP_PDU *snmp,char **buf,int *buflen);
int Encode_ErrorStatus(SNMP_PDU *snmp,char **buf,int *buflen);
int Encode_RequestID(SNMP_PDU *snmp,char **buf,int *buflen);
int Encode_PDUfield(SNMP_PDU *snmp,char **buf,int *buflen);
int Encode_wrapper(SNMP_PDU *snmp,char **buf,int *buflen);
//初始化給定的PDU
void initSNMP(SNMP_PDU *snmp);
//按照ASN.1格式(TAG + ASNLEN + VALUE)生成數(shù)據(jù)包
int packet(char type,int asnlen,char *data,char **buf,int *buflen);
//將給定的PDU中的VARBINDLIST中的所有參數(shù)賦值
int GetOidValue(SNMP_PDU *snmp,VARLIST *vartemp);
//用給定的PDU中的VARBINDLIST中的參數(shù),更新自身的MIB參數(shù)
int SetOidValue(SNMP_PDU *snmp,VARLIST *vartemp);
//釋放PDU內(nèi)存
void freesnmpPDU(SNMP_PDU *snmp);
void *snmpMalloc(int nBytes);
void snmpFree(void *pBlock);
int netStart();
int getLongSize(long len);
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -