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

📄 packet-gryphon.c

📁 ethereal公司开发的aodv路由协议代码
💻 C
📖 第 1 页 / 共 5 页
字号:
static const value_string responses[] = {	{RESP_OK,		"OK - no error"},	{RESP_UNKNOWN_ERR,	"Unknown error"},	{RESP_UNKNOWN_CMD,	"Unrecognised command"},	{RESP_UNSUPPORTED,	"Unsupported command"},	{RESP_INVAL_CHAN,	"Invalid channel specified"},	{RESP_INVAL_DST,	"Invalid destination"},	{RESP_INVAL_PARAM,	"Invalid parameter(s)"},	{RESP_INVAL_MSG,	"Invalid message"},	{RESP_INVAL_LEN,	"Invalid length field"},	{RESP_TX_FAIL,		"Transmit failed"},	{RESP_RX_FAIL,		"Receive failed"},	{RESP_AUTH_FAIL,	"Authorization failed"},	{RESP_MEM_ALLOC_ERR,  	"Memory allocation error"},	{RESP_TIMEOUT,	  	"Command timed out"},	{RESP_UNAVAILABLE,	"Unavailable"},	{RESP_BUF_FULL,		"Buffer full"},	{RESP_NO_SUCH_JOB,	"No such job"},	{-1,	    	    	"- unknown -"},	};	static const value_string filter_data_types[] = {	{FILTER_DATA_TYPE_HEADER_FRAME, "frame header"},	{FILTER_DATA_TYPE_HEADER,   	"data message header"},	{FILTER_DATA_TYPE_DATA,     	"data message data"},	{FILTER_DATA_TYPE_EXTRA_DATA,	"data message extra data"},	{FILTER_EVENT_TYPE_HEADER,  	"event message header"},	{FILTER_EVENT_TYPE_DATA,    	"event message"},	{-1,	    	    	    	"- unknown -"},	};static const value_string operators[] = {	{BIT_FIELD_CHECK,    	"Bit field check"},	{SVALUE_GT,  	    	"Greater than (signed)"},	{SVALUE_GE,  	    	"Greater than or equal to (signed)"},	{SVALUE_LT,  	    	"Less than (signed)"},	{SVALUE_LE,  	    	"Less than or equal to (signed)"},	{VALUE_EQ,   	    	"Equal to"},	{VALUE_NE,   	    	"Not equal to"},	{UVALUE_GT,  	    	"Greater than (unsigned)"},	{UVALUE_GE,  	    	"Greater than or equal to (unsigned)"},	{UVALUE_LT,  	    	"Less than (unsigned)"},	{UVALUE_LE,  	    	"Less than or equal to (unsigned)"},	{DIG_LOW_TO_HIGH,    	"Digital, low to high transistion"},	{DIG_HIGH_TO_LOW,    	"Digital, high to low transistion"},	{DIG_TRANSITION,     	"Digital, change of state"},	{-1,	    	    	"- unknown -"},	};static const value_string modes[] = {	{FILTER_OFF_PASS_ALL,	"Filter off, pass all messages"},	{FILTER_OFF_BLOCK_ALL,	"Filter off, block all messages"},	{FILTER_ON, 	    	"Filter on"},	{-1,	    	    	"- unknown -"},	};static const value_string dmodes[] = {	{DEFAULT_FILTER_BLOCK,	"Block"},	{DEFAULT_FILTER_PASS,	"Pass"},	{-1,	    	    	"- unknown -"},	};static const value_string filtacts[] = {	{DELETE_FILTER,     	"Delete"},	{ACTIVATE_FILTER,   	"Activate"},	{DEACTIVATE_FILTER, 	"Deactivate"},	{-1,	    	    	"- unknown -"},	};static const value_string ioctls[] = {	{GINIT,     	    	"GINIT: Initialize"},	{GLOOPON,   	    	"GLOOPON: Loop on"},	{GLOOPOFF,  	    	"GLOOPOFF: Loop off"},	{GGETHWTYPE,	    	"GGETHWTYPE: Get hardware type"},	{GGETREG,   	    	"GGETREG: Get register"},	{GSETREG,   	    	"GSETREG: Set register"},	{GGETRXCOUNT,	    	"GGETRXCOUNT: Get the receive message counter"},	{GSETRXCOUNT,	    	"GSETRXCOUNT: Set the receive message counter"},	{GGETTXCOUNT,	    	"GGETTXCOUNT: Get the transmit message counter"},	{GSETTXCOUNT,	    	"GSETTXCOUNT: Set the transmit message counter"},	{GGETRXDROP, 	    	"GGETRXDROP: Get the number of dropped receive messages"},	{GSETRXDROP,	    	"GSETRXDROP: Set the number of dropped receive messages"},	{GGETTXDROP,	    	"GGETTXDROP: Get the number of dropped transmit messages"},	{GSETTXDROP,	    	"GSETTXDROP: Set the number of dropped transmit messages"},	{GGETRXBAD, 	    	"GGETRXBAD: Get the number of bad receive messages"},	{GGETTXBAD, 	    	"GGETTXBAD: Get the number of bad transmit messages"},	{GGETCOUNTS,	    	"GGETCOUNTS: Get total message counter"},	{GGETBLMON, 	    	"GGETBLMON: Get bus load monitoring status"},	{GSETBLMON, 	    	"GSETBLMON: Set bus load monitoring status (turn on/off)"},	{GGETERRLEV,	    	"GGETERRLEV: Get error level"},	{GSETERRLEV,	    	"GSETERRLEV: Set error level"},	{GGETBITRATE,	    	"GGETBITRATE: Get bit rate"},	{GGETRAM,   	    	"GGETRAM: Read value from RAM"},	{GSETRAM,   	    	"GSETRAM: Write value to RAM"},	{GCANGETBTRS,	    	"GCANGETBTRS: Read CAN bit timing registers"},	{GCANSETBTRS,	    	"GCANSETBTRS: Write CAN bit timing registers"},	{GCANGETBC, 	    	"GCANGETBC: Read CAN byte count"},	{GCANSETBC, 	    	"GCANSETBC: Write CAN byte count"},	{GCANGETMODE,	    	"GCANGETMODE"},	{GCANSETMODE,	    	"GCANSETMODE"},	{GCANGETTRANS,	    	"GCANGETTRANS"},	{GCANSETTRANS,	    	"GCANSETTRANS"},	{GCANSENDERR,	    	"GCANSENDERR"},	{GCANRGETOBJ,	    	"GCANRGETOBJ"},	{GCANRSETSTDID,     	"GCANRSETSTDID"},	{GCANRSETEXTID,     	"GCANRSETEXTID"},	{GCANRSETDATA,	    	"GCANRSETDATA"},	{GCANRENABLE,	    	"GCANRENABLE"},	{GCANRDISABLE,	    	"GCANRDISABLE"},	{GCANRGETMASKS,     	"GCANRGETMASKS"},	{GCANRSETMASKS,     	"GCANRSETMASKS"},	{GCANSWGETMODE,     	"GCANSWGETMODE"},	{GCANSWSETMODE,     	"GCANSWSETMODE"},	{GDLCGETFOURX,	    	"GDLCGETFOURX"},	{GDLCSETFOURX,	    	"GDLCSETFOURX"},	{GDLCGETLOAD,	    	"GDLCGETLOAD"},	{GDLCSETLOAD,	    	"GDLCSETLOAD"},	{GDLCSENDBREAK,     	"GDLCSENDBREAK"},	{GDLCABORTTX,	    	"GDLCABORTTX"},	{GDLCGETHDRMODE,     	"DLCGETHDRMODE"},	{GDLCSETHDRMODE,    	"GDLCSETHDRMODE"},	{GHONSLEEP, 	    	"GHONSLEEP"},	{GHONSILENCE,	    	"GHONSILENCE"},	{GKWPSETPTIMES,     	"GKWPSETPTIMES"},	{GKWPSETWTIMES,     	"GKWPSETWTIMES"},	{GKWPDOWAKEUP,	    	"GKWPDOWAKEUP"},	{GKWPGETBITTIME,    	"GKWPGETBITTIME"},	{GKWPSETBITTIME,    	"GKWPSETBITTIME"},	{GKWPSETNODEADDR,   	"GKWPSETNODEADDR"},	{GKWPGETNODETYPE,   	"GKWPGETNODETYPE"},	{GKWPSETNODETYPE,   	"GKWPSETNODETYPE"},	{GKWPSETWAKETYPE,   	"GKWPSETWAKETYPE"},	{GKWPSETTARGADDR,   	"GKWPSETTARGADDR"},	{GKWPSETKEYBYTES,   	"GKWPSETKEYBYTES"},	{GKWPSETSTARTREQ,   	"GKWPSETSTARTREQ"},	{GKWPSETSTARTRESP,  	"GKWPSETSTARTRESP"},	{GKWPSETPROTOCOL,   	"GKWPSETPROTOCOL"},	{GKWPGETLASTKEYBYTES,	"GKWPGETLASTKEYBYTES"},	{GKWPSETLASTKEYBYTES,	"GKWPSETLASTKEYBYTES"},	{GSCPGETBBR,	    	"GSCPGETBBR"},	{GSCPSETBBR, 	    	"GSCPSETBBR"},	{GSCPGETID, 	    	"GSCPGETID"},	{GSCPSETID, 	    	"GSCPSETID"},	{GSCPADDFUNCID,     	"GSCPADDFUNCID"},	{GSCPCLRFUNCID,     	"GSCPCLRFUNCID"},	{GUBPGETBITRATE,    	"GUBPGETBITRATE"},	{GUBPSETBITRATE,    	"GUBPSETBITRATE"},	{GUBPGETINTERBYTE,  	"GUBPGETINTERBYTE"},	{GUBPSETINTERBYTE,  	"GUBPSETINTERBYTE"},	{GUBPGETNACKMODE,   	"GUBPGETNACKMODE"},	{GUBPSETNACKMODE,   	"GUBPSETNACKMODE"},	{-1, 	    	    	"- unknown -"},	};static intdecode_command(tvbuff_t *tvb, int offset, int dst, int msglen, proto_tree *pt){    int     	    cmd, padding;    unsigned int    i;    proto_tree	    *ft;    proto_item	    *ti;    cmd = tvb_get_guint8(tvb, offset);    proto_tree_add_uint_hidden(pt, hf_gryph_cmd, tvb, offset, 1, cmd);    if (cmd > 0x3F)    	cmd += dst * 256;    for (i = 0; i < SIZEOF(cmds); i++) {    	if (cmds[i].value == cmd)	    break;    }    if (i >= SIZEOF(cmds) && dst >= SD_KNOWN) {    	cmd = (cmd & 0xFF) + SD_CARD * 256;	for (i = 0; i < SIZEOF(cmds); i++) {    	    if (cmds[i].value == cmd)		break;	}    }    if (i >= SIZEOF(cmds))    	i = SIZEOF(cmds) - 1;    proto_tree_add_text (pt, tvb, offset, 4, "Command: %s", cmds[i].strptr);    offset += 4;    msglen -= 4;    if (cmds[i].cmd_fnct && msglen > 0) {    	padding = 3 - (msglen + 3) % 4; 	ti = proto_tree_add_text(pt, tvb, offset, msglen, "Data: (%d bytes)", msglen);	ft = proto_item_add_subtree(ti, ett_gryphon_command_data);	offset = (*(cmds[i].cmd_fnct)) (tvb, offset, dst, msglen, ft);    }    return offset;}static intdecode_response(tvbuff_t *tvb, int offset, int src, int msglen, proto_tree *pt){    int     	    cmd;    unsigned int    i, j, resp;    proto_tree	    *ft;    proto_item	    *ti;    cmd = tvb_get_guint8(tvb, offset);    if (cmd > 0x3F)    	cmd += src * 256;    for (i = 0; i < SIZEOF(cmds); i++) {    	if (cmds[i].value == cmd)	    break;    }    if (i >= SIZEOF(cmds) && src >= SD_KNOWN) {    	cmd = (cmd & 0xFF) + SD_CARD * 256;	for (i = 0; i < SIZEOF(cmds); i++) {    	    if (cmds[i].value == cmd)		break;	}    }    if (i >= SIZEOF(cmds))    	i = SIZEOF(cmds) - 1;    proto_tree_add_text (pt, tvb, offset, 4, "Command: %s", cmds[i].strptr);    offset += 4;    msglen -= 4;        resp = tvb_get_ntohl (tvb, offset);    for (j = 0; j < SIZEOF(responses); j++) {    	if (responses[j].value == resp)	    break;    }    if (j >= SIZEOF(responses))    	j = SIZEOF(responses) - 1;    proto_tree_add_text (pt, tvb, offset, 4, "Status: %s", responses[j].strptr);    offset += 4;    msglen -= 4;    if (cmds[i].rsp_fnct && msglen > 0) {	ti = proto_tree_add_text(pt, tvb, offset, msglen, "Data: (%d bytes)", msglen);	ft = proto_item_add_subtree(ti, ett_gryphon_response_data);	offset = (*(cmds[i].rsp_fnct)) (tvb, offset, src, msglen, ft);    }    return offset;}static intdecode_data(tvbuff_t *tvb, int offset, int src, int msglen, proto_tree *pt){    proto_item	*item, *item1;    proto_tree	*tree, *tree1;    int     hdrsize, datasize, extrasize, hdrbits, msgsize, padding, mode;    int     hours, minutes, seconds, fraction;    unsigned long   timestamp;    hdrsize = tvb_get_guint8(tvb, offset+0);    hdrbits = tvb_get_guint8(tvb, offset+1);    datasize = tvb_get_ntohs(tvb, offset+2);    extrasize = tvb_get_guint8(tvb, offset+4);    padding = 3 - (hdrsize + datasize + extrasize + 3) % 4;    msgsize = hdrsize + datasize + extrasize + padding + 16;    item = proto_tree_add_text(pt, tvb, offset, 16, "Message header");    tree = proto_item_add_subtree (item, ett_gryphon_data_header);    proto_tree_add_text(tree, tvb, offset, 2, "Header length: %d bytes, %d bits", hdrsize, hdrbits);    proto_tree_add_text(tree, tvb, offset+2, 2, "Data length: %d bytes", datasize);    proto_tree_add_text(tree, tvb, offset+4, 1, "Extra data length: %d bytes", extrasize);    mode = tvb_get_guint8(tvb, offset+5);    item1 = proto_tree_add_text(tree, tvb, offset+5, 1, "Mode: %d", mode);    if (mode) {	tree1 = proto_item_add_subtree (item1, ett_gryphon_flags);	if (mode & 0x80)	    proto_tree_add_text(tree1, tvb, offset+5, 1, "1... .... = Transmitted message");	if (mode & 0x40)	    proto_tree_add_text(tree1, tvb, offset+5, 1, ".1.. .... = Received message");	if (mode & 0x20)	    proto_tree_add_text(tree1, tvb, offset+5, 1, "..1. .... = Local message");	if (mode & 0x10)	    proto_tree_add_text(tree1, tvb, offset+5, 1, "...1 .... = Remote message");	if (mode & 0x01)	    proto_tree_add_text(tree1, tvb, offset+5, 1, ".... ...1 = Internal message");    }    proto_tree_add_text(tree, tvb, offset+6, 1, "Priority: %u",	tvb_get_guint8(tvb, offset+6));    proto_tree_add_text(tree, tvb, offset+7, 1, "Error status: %u",	tvb_get_guint8(tvb, offset+7));    timestamp = tvb_get_ntohl(tvb, offset+8);    hours = timestamp /(100000 * 60 *60);    minutes = (timestamp / (100000 * 60)) % 60;    seconds = (timestamp / 100000) % 60;    fraction = timestamp % 100000;    proto_tree_add_text(tree, tvb, offset+8, 4, "Timestamp: %d:%02d:%02d.%05d", hours, minutes, seconds, fraction);    proto_tree_add_text(tree, tvb, offset+12, 1, "Context: %u",	tvb_get_guint8(tvb, offset+12));    proto_tree_add_text(tree, tvb, offset+13, 3, "reserved:");    offset += 16;    item = proto_tree_add_text(pt, tvb, offset, msgsize-16-padding, "Message Body");    tree = proto_item_add_subtree (item, ett_gryphon_data_body);    if (hdrsize) {	proto_tree_add_text(tree, tvb, offset, hdrsize, "Header");	offset += hdrsize;    }    if (datasize) {	proto_tree_add_text(tree, tvb, offset, datasize, "Data");	offset += datasize;    }    if (extrasize) {	proto_tree_add_text(tree, tvb, offset, extrasize, "Extra data");	offset += extrasize;    }    if (padding) {    	proto_tree_add_text(pt, tvb, offset, padding, "padding");	offset += padding;    }    return offset;}static intdecode_event(tvbuff_t *tvb, int offset, int src, int msglen, proto_tree *pt){    int     	    hours, minutes, seconds, fraction, padding, length;    unsigned long   timestamp;    int		    msgend;    padding = 3 - (msglen + 3) % 4;    msgend = offset + msglen;    proto_tree_add_text(pt, tvb, offset, 1, "Event ID: %u",	tvb_get_guint8(tvb, offset));    proto_tree_add_text(pt, tvb, offset+1, 1, "Event context: %u",	tvb_get_guint8(tvb, offset+1));    proto_tree_add_text(pt, tvb, offset+2, 2, "reserved");    offset += 4;    timestamp = tvb_get_ntohl(tvb, offset);    hours = timestamp /(100000 * 60 *60);    minutes = (timestamp / (100000 * 60)) % 60;    seconds = (timestamp / 100000) % 60;    fraction = timestamp % 100000;    proto_tree_add_text(pt, tvb, offset, 4, "Timestamp: %d:%02d:%02d.%05d", hours, minutes, seconds, fraction);    offset += 4;    if (offset < msgend) {    	length = msgend - offset;    	proto_tree_add_text (pt, tvb, offset, length, "Data (%d bytes)", length);	offset += length;    }    if (padding) {    	proto_tree_add_text(pt, tvb, offset, padding, "padding");	offset += padding;    }    return offset;}static intcmd_init(tvbuff_t *tvb, int offset, int src, int msglen, proto_tree *pt){    char    	*ptr;        if (tvb_get_guint8(tvb, offset) == 0)    	ptr = "Always initialize";    else    	ptr = "Initialize if not previously initialized";    proto_tree_add_text(pt, tvb, offset, 1, "Mode: %s", ptr);    proto_tree_add_text(pt, tvb, offset+1, 3, "reserved");    offset += 4;    return offset;}static inteventnum(tvbuff_t *tvb, int offset, int src, int msglen, proto_tree *pt){    guint8	event = tvb_get_guint8(tvb, offset);        if (event)    	proto_tree_add_text(pt, tvb, offset, 1, "Event number: %u", event);    else    	proto_tree_add_text(pt, tvb, offset, 1, "Event numbers: All");    proto_tree_add_text(pt, tvb, offset+1, 3, "padding");    offset += 4;    return offset;}static intresp_time(tvbuff_t *tvb, int offset, int src, int msglen, proto_tree *pt)

⌨️ 快捷键说明

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