blob: 7d13565d8c01b84365154d8d1b6b38b836b90088 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
/* packet-ieee802154.h
*
* $Id$
*
* IEEE 802.15.4 Dissectors for Wireshark
* By Owen Kirby <osk@exegin.com>
* Copyright 2007 Exegin Technologies Limited
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef PACKET_IEEE802154_H
#define PACKET_IEEE802154_H
/* Packet Overhead from MAC header + footer (excluding addressing) */
#define IEEE802154_MAX_FRAME_LEN 127
#define IEEE802154_FCS_LEN 2
/* Command Frame Identifier Types Definions */
#define IEEE802154_CMD_ASRQ 0x01
#define IEEE802154_CMD_ASRSP 0x02
#define IEEE802154_CMD_DISAS 0x03
#define IEEE802154_CMD_DATA_RQ 0x04
#define IEEE802154_CMD_PANID_ERR 0x05
#define IEEE802154_CMD_ORPH_NOTIF 0x06
#define IEEE802154_CMD_BCN_RQ 0x07
#define IEEE802154_CMD_COORD_REAL 0x08
#define IEEE802154_CMD_GTS_REQ 0x09
#define IEEE802145_CMD_MAX_ID 0x09
/* Definitions for Association Response Command */
#define IEEE802154_CMD_ASRSP_AS_SUCCESS 0x00
#define IEEE802154_CMD_ASRSP_PAN_FULL 0x01
#define IEEE802154_CMD_ASRSP_PAN_DENIED 0x02
/* Bit Masks for Capability Information Feild
Included in Association Req. command */
#define IEEE802154_CMD_CINFO_ALT_PAN_COORD 0x01
#define IEEE802154_CMD_CINFO_DEVICE_TYPE 0x02
#define IEEE802154_CMD_CINFO_POWER_SRC 0x04
#define IEEE802154_CMD_CINFO_IDLE_RX 0x08
#define IEEE802154_CMD_CINFO_SEC_CAPABLE 0x40
#define IEEE802154_CMD_CINFO_ALLOC_ADDR 0x80
#define IEEE802154_CMD_GTS_REQ_LEN 0x0F
#define IEEE802154_CMD_GTS_REQ_DIR 0x10
#define IEEE802154_CMD_GTS_REQ_TYPE 0x20
/* Bit masks & shifts for various beacon fields */
#define IEEE802154_BCN_BO_MASK 0x0F
#define IEEE802154_BCN_SFO_MASK 0xF0
#define IEEE802154_BCN_CAP_MASK 0x0F
#define IEEE802154_BCN_BATT_EXTN_MASK 0x10
#define IEEE802154_BCN_COORD_MASK 0x40
#define IEEE802154_BCN_ASSOC_PERM_MASK 0x80
#define IEEE802154_BCN_SFO_SHIFT 4
#define IEEE802154_BCN_GTS_COUNT_MASK 0x03
#define IEEE802154_BCN_GTS_PERMIT_MASK 0x80
#define IEEE802154_BCN_GTS_DIRECTION_SLOT(i) (0x01<<(i))
#define IEEE802154_BCN_GTS_MAX_SLOTS 7
#define IEEE802154_BCN_GTS_DIRECTION_SLOT1 0x01
#define IEEE802154_BCN_GTS_DIRECTION_SLOT2 0x02
#define IEEE802154_BCN_GTS_DIRECTION_SLOT3 0x04
#define IEEE802154_BCN_GTS_DIRECTION_SLOT4 0x08
#define IEEE802154_BCN_GTS_DIRECTION_SLOT5 0x10
#define IEEE802154_BCN_GTS_DIRECTION_SLOT6 0x20
#define IEEE802154_BCN_GTS_DIRECTION_SLOT7 0x40
#define IEEE802154_BCN_GTS_SLOT_MASK 0x0F
#define IEEE802154_BCN_GTS_LENGTH_MASK 0xF0
#define IEEE802154_BCN_GTS_LENGTH_SHIFT 4
#define IEEE802154_BCN_PADDR_SHORT_MASK 0x07
#define IEEE802154_BCN_PADDR_LONG_MASK 0x70
#define IEEE802154_BCN_PADDR_LONG_SHIFT 4
#define IEEE802154_BCN_SFRM_DURATION (IEEE802154_BCN_SLOT_DURATION * IEEE802154_BCN_NUM_SLOTS)
#define IEEE802154_BCN_SLOT_DURATION 60
#define IEEE802154_BCN_NUM_SLOTS 16
/* Bit-masks for the FCF */
#define IEEE802154_FCF_TYPE_MASK 0x0007 /* Frame Type Mask */
#define IEEE802154_FCF_SEC_EN 0x0008
#define IEEE802154_FCF_FRAME_PND 0x0010
#define IEEE802154_FCF_ACK_REQ 0x0020
#define IEEE802154_FCF_INTRA_PAN 0x0040
#define IEEE802154_FCF_DADDR_MASK 0x0C00 /* destination addressing mask */
#define IEEE802154_FCF_VERSION 0x3000
#define IEEE802154_FCF_SADDR_MASK 0xC000 /* source addressing mask */
/* Frame Type Definitions */
#define IEEE802154_FCF_BEACON 0x0000 /* Beacon Frame */
#define IEEE802154_FCF_DATA 0x0001 /* Data Frame */
#define IEEE802154_FCF_ACK 0x0002 /* Acknowlegement Frame */
#define IEEE802154_FCF_CMD 0x0003 /* Command Frame */
/* Address Mode Definitions */
#define IEEE802154_FCF_ADDR_NONE 0x0000
#define IEEE802154_FCF_ADDR_SHORT 0x0002
#define IEEE802154_FCF_ADDR_EXT 0x0003
/* Bit-masks for CC24xx style FCS */
#define IEEE802154_CC24xx_CORRELATION 0x007F
#define IEEE802154_CC24xx_CRC_OK 0x0080
#define IEEE802154_CC24xx_RSSI 0xFF00
/* Special IEEE802.15.4 Addresses */
#define IEEE802154_NO_ADDR16 0xFFFE
#define IEEE802154_BCAST_ADDR 0xFFFF
#define IEEE802154_BCAST_PAN 0xFFFF
/* Bit mask for PHY length field */
#define IEEE802154_PHY_LENGTH_MASK 0x7f
/* Structure containing information regarding all necessary packet feilds. */
typedef struct {
/* Frame control field. */
gint32 version;
gint32 frame_type;
gint32 dst_addr_mode;
gint32 src_addr_mode;
gboolean security_enable;
gboolean frame_pending;
gboolean ack_request;
gboolean intra_pan;
guint8 seqno;
/* Addressing Info. */
guint16 dst_pan;
union {
guint16 addr16;
guint64 addr64;
} dst;
guint16 src_pan;
union {
guint16 addr16;
guint64 addr64;
} src;
} ieee802154_packet;
/* Some Helper Function Definitions. */
extern guint get_by_mask(guint, guint);
extern gchar *print_eui64(guint64);
extern gchar *print_eui64_oui(guint64);
#endif /* PACKET_IEEE802154_H */
|