⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nsmib.h

📁 包括EPA协议栈
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _NSMIB_H
#define _NSMIB_H

#include "global.h"

#ifdef NSMIB_GLOBALS
	#define NSMIB_EXTERN
#else
	#define NSMIB_EXTERN extern
#endif	// MIB_EXTERN

#define NSMIB_BASE_OBJID_MIBHDR         (10)
#define	NSMIB_BASE_OBJID_KEY_MAN        (8001)
#define	NSMIB_BASE_OBJID_SEC_MEASURE    (8002)
#define	NSMIB_BASE_OBJID_PTCL_MAN       (8003)
#define	NSMIB_BASE_OBJID_AUTHEN         (8004)
#define NSMIB_BASE_OBJID_ACCTRL_OBJ     (8500)

#define MIB_NUM_ACCTRL_OBJ              (5)

#define NS_SEC_ID_LEN                   (32)
#define NS_SEC_KEY_LEN                  (32)
#define NS_SEC_KEY_TBL_LEN              (64)

typedef uint8 SECKeyTbl[NS_SEC_KEY_TBL_LEN];

typedef struct {
	uint16       obj_id;
	uint16       revision;
	uint16       num_sec_measeure;
	uint16       total_sec_measeure;
	uint16       obj_id_key_man;
	uint16       obj_id_sec_man;
	uint16       obj_id_pctl_man;
	uint16       obj_id_authen;
	uint16       first_acctrl_obj;
	uint16       num_acctrl_obj;
} NSMIBHdr, *PNSMIBHdr;

typedef struct {
	uint16       obj_id;
	uint16       revision;
	SECKeyTbl    key_tbl;
	uint16       key_off;
	uint16       key_len;
	Octet        pub_key[NS_SEC_KEY_LEN];
	Octet        prv_key[NS_SEC_KEY_LEN];
} KeyMan, *PKeyMan;

typedef struct {
	uint16       obj_id;
	uint16       revision;
	uint8        sec_mode;
	uint8        authen_mode;
	uint8        encypt_mode;
} SecMeasure, *PSecMeasure;

typedef struct {
	uint16       obj_id;
	uint16       revision;
	uint16       time_limit;
	uint8        run_mode;
	uint8        link_mode;
	uint8        authen_mode;
	uint8        Ptcl_type;
} SecPtclMan, *PSecPtclMan;

typedef struct {
	uint16       obj_id;
	uint16       revision;
	Octet        sec_id[NS_SEC_ID_LEN];
	Time         stamp;
	uint8        state;
} AuthenObj, *PAuthenObj;

typedef struct {
	uint16       obj_id;
	uint16       local_app;
	uint16       local_obj;
	uint16       rmt_app;
	uint16       rmt_obj;
	uint8        srv_op;
	uint8        srv_role;
	uint32       rmt_ip;
	TimeDiff     send_time_offset;
	uint8        right;
	uint8        group;
	uint16       psw;
} ACCtrlObj, *PACCtrlObj;

NSMIB_EXTERN NSMIBHdr      gns_mib_hdr;
NSMIB_EXTERN KeyMan        gns_key_man;
NSMIB_EXTERN SecMeasure    gns_sec_measure;
NSMIB_EXTERN SecPtclMan    gns_sec_ptcl_man;
NSMIB_EXTERN AuthenObj     gns_authen_obj;

#if MIB_NUM_ACCTRL_OBJ > 0
NSMIB_EXTERN ACCtrlObj     gns_acctrl_obj[MIB_NUM_ACCTRL_OBJ];
#endif	// MIB_NUM_ACCTRL_OBJ

/*----------------------------------------------------------------------------------*
 *- Get & Set Interface of Authen Object
 *----------------------------------------------------------------------------------*/
__inline void GetSecID(OctetString secid) {
	memcpy(secid, gns_authen_obj.sec_id, 32);
}

/*----------------------------------------------------------------------------------*
 *- Get & Set Interface of Acctrl Object
 *----------------------------------------------------------------------------------*/
__inline PACCtrlObj GetACCtrlObj(uint16 local_app, uint16 local_obj, uint16 rmt_app, uint16 rmt_obj) {
	uint16 idx;
	
	for(idx = 0; idx < MIB_NUM_ACCTRL_OBJ; ++idx) {
		if(gns_acctrl_obj[idx].local_app == local_app &&
			 gns_acctrl_obj[idx].local_obj == local_obj &&
			 gns_acctrl_obj[idx].rmt_app == rmt_app) {
			 	return (&gns_acctrl_obj[idx]);
			}
	}
	return (0);
}

__inline void SetLocalACCtrlOP(PACCtrlObj pacc_obj, uint8 op) {
	
	pacc_obj->srv_op = op;
}

/*----------------------------------------------------------------------------------*
 *- Get & Set Interface of Acctrl Object
 *----------------------------------------------------------------------------------*/
__inline uint8 GetSecMode(void) {
	return (gns_sec_measure.sec_mode);
}

/*----------------------------------------------------------------------------------*
 *- Read & Write Interface of objects
 *----------------------------------------------------------------------------------*/
void NSMIBHdr_Init(void);

__inline uint8 NSMIBHdr_Read(uint16 idx, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {
	OctetString payload;
	
	switch (idx) {
		case 0:
			h2n16(gns_mib_hdr.obj_id, payload);
			h2n16(gns_mib_hdr.revision, payload + 2);
			h2n16(gns_mib_hdr.num_sec_measeure, payload + 4);
			h2n16(gns_mib_hdr.total_sec_measeure, payload + 6);
			h2n16(gns_mib_hdr.obj_id_key_man, payload + 8);
			h2n16(gns_mib_hdr.obj_id_sec_man, payload + 10);
			h2n16(gns_mib_hdr.obj_id_pctl_man, payload + 12);
			h2n16(gns_mib_hdr.obj_id_authen, payload + 14);
			h2n16(gns_mib_hdr.first_acctrl_obj, payload + 16);
			h2n16(gns_mib_hdr.num_acctrl_obj, payload + 18);
			Read_Pos_Output(src_app, payload, 20, msg_id, src_port, src_ip);
			break;
		case 2:
			h2n16(gns_mib_hdr.revision, payload + 2);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 3:
			h2n16(gns_mib_hdr.num_sec_measeure, payload + 2);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 4:
			h2n16(gns_mib_hdr.total_sec_measeure, payload + 2);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 5:
			h2n16(gns_mib_hdr.obj_id_key_man, payload + 2);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 6:
			h2n16(gns_mib_hdr.obj_id_sec_man, payload + 2);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 7:
			h2n16(gns_mib_hdr.obj_id_pctl_man, payload + 2);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 8:
			h2n16(gns_mib_hdr.obj_id_authen, payload + 2);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 9:
			h2n16(gns_mib_hdr.first_acctrl_obj, payload + 2);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 10:
			h2n16(gns_mib_hdr.num_acctrl_obj, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		default:
			Read_Neg_Output(src_app, 1, 2, 0, msg_id, src_port, src_ip);
			return EPA_SUBINDEX_ILLEGAL;
	}
	return EPA_NO_ERR;
}

__inline uint8 NSMIBHdr_Write(uint16 idx, OctetString payload, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {
	if(idx > 10) {
		Write_Neg_Output(src_app, 1, 2, 0, msg_id, src_port, src_ip);
		return EPA_SUBINDEX_ILLEGAL;
	}
	Write_Neg_Output(src_app, 1, 3, 0, msg_id, src_port, src_ip);
	return EPA_OBJ_UNWRITABLE;
}

void KeyMan_Init(void);

__inline uint8 KeyMan_Read(uint16 idx, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {
	OctetString payload;
	
	switch (idx) {
		case 0:
			h2n16(gns_key_man.obj_id, payload);
			h2n16(gns_key_man.revision, payload + 2);
			memcpy(payload + 4, gns_key_man.key_tbl, 64);
			h2n16(gns_key_man.key_off, payload + 68);
			h2n16(gns_key_man.key_len, payload + 70);
			memcpy(payload + 72, gns_key_man.pub_key, 32);
			memcpy(payload + 104, gns_key_man.prv_key, 32);
			Read_Pos_Output(src_app, payload, 136, msg_id, src_port, src_ip);
			break;
		case 2:
			h2n16(gns_key_man.revision, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 3:
			memcpy(payload, gns_key_man.key_tbl, 64);
			Read_Pos_Output(src_app, payload, 64, msg_id, src_port, src_ip);
			break;
		case 4:
			h2n16(gns_key_man.key_off, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 5:
			h2n16(gns_key_man.key_len, payload);
			Read_Pos_Output(src_app, payload, 16, msg_id, src_port, src_ip);
			break;
		case 6:
			memcpy(payload, gns_key_man.pub_key, 32);
			Read_Pos_Output(src_app, payload, 32, msg_id, src_port, src_ip);
			break;
		case 7:
			memcpy(payload, gns_key_man.prv_key, 32);
			Read_Pos_Output(src_app, payload, 32, msg_id, src_port, src_ip);
			break;
		default:
			Read_Neg_Output(src_app, 1, 2, 0, msg_id, src_port, src_ip);
			return EPA_SUBINDEX_ILLEGAL;
	}
	return EPA_NO_ERR;
}

__inline uint8 KeyMan_Write(uint16 idx, OctetString payload, uint16 msg_id, uint32 src_app, uint16 src_port, uint32 src_ip) {
	switch(idx) {
		case 0:
			memcpy(&gns_key_man.key_tbl, payload, 64);
			n2h16(payload, &gns_key_man.key_off);
			n2h16(payload, &gns_key_man.key_len);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 3:
			memcpy(&gns_key_man.key_tbl, payload, 64);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 4:
			n2h16(payload, &gns_key_man.key_off);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 5:
			n2h16(payload, &gns_key_man.key_len);
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		default:
			if(idx > 7) {
				Write_Neg_Output(src_app, 1, 2, 0, msg_id, src_port, src_ip);
				return EPA_SUBINDEX_ILLEGAL;
			}
			Write_Neg_Output(src_app, 1, 3, 0, msg_id, src_port, src_ip);
			return EPA_OBJ_UNWRITABLE;
	}
	return EPA_NO_ERR;
}

void SecMeasure_Init(void);

__inline uint8 SecMeasure_Read(uint16 idx, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {
	OctetString payload;
	
	switch (idx) {
		case 0:
			h2n16(gns_sec_measure.obj_id, payload);
			h2n16(gns_sec_measure.revision, payload + 2);
			payload[4] = gns_sec_measure.sec_mode;
			payload[5] = gns_sec_measure.authen_mode;
			payload[6] = gns_sec_measure.encypt_mode;
			Read_Pos_Output(src_app, payload, 7, msg_id, src_port, src_ip);
			break;
		case 2:
			h2n16(gns_sec_measure.obj_id, payload);
			Read_Pos_Output(src_app, payload, 2, msg_id, src_port, src_ip);
			break;
		case 3:
			payload[0] = gns_sec_measure.sec_mode;
			Read_Pos_Output(src_app, payload, 1, msg_id, src_port, src_ip);
			break;
		case 4:
			payload[0] = gns_sec_measure.authen_mode;
			Read_Pos_Output(src_app, payload, 1, msg_id, src_port, src_ip);
			break;
		case 5:
			payload[0] = gns_sec_measure.encypt_mode;
			Read_Pos_Output(src_app, payload, 1, msg_id, src_port, src_ip);
			break;
		default:
			Read_Neg_Output(src_app, 1, 2, 0, msg_id, src_port, src_ip);
			return EPA_SUBINDEX_ILLEGAL;
	}
	return EPA_NO_ERR;
}

__inline uint8 SecMeasure_Write(uint16 idx, OctetString payload, uint16 msg_id, uint16 src_app, uint16 src_port, uint32 src_ip) {
	switch (idx) {
		case 0:
			gns_sec_measure.sec_mode = payload[4];
			gns_sec_measure.authen_mode = payload[5];
			gns_sec_measure.encypt_mode = payload[6];
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);
			break;
		case 3:
			gns_sec_measure.sec_mode = payload[0];
			Write_Pos_Output(src_app, msg_id, src_port, src_ip);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -