aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-ieee802154.h
blob: e5750ce9a82db46cd7cdf5c5db88abfdc72ed1f1 (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
/* 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

/*  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 */