blob: 9695c59d92ab0a67613027f3d8813bd23d2aaf94 [file] [log] [blame]
Rich Lane7708c182013-10-01 23:27:27 -07001:: # Copyright 2013, Big Switch Networks, Inc.
2:: #
3:: # LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
4:: # the following special exception:
5:: #
6:: # LOXI Exception
7:: #
8:: # As a special exception to the terms of the EPL, you may distribute libraries
9:: # generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
10:: # that copyright and licensing notices generated by LoxiGen are not altered or removed
11:: # from the LoxiGen Libraries and the notice provided below is (i) included in
12:: # the LoxiGen Libraries, if distributed in source code form and (ii) included in any
13:: # documentation for the LoxiGen Libraries, if distributed in binary form.
14:: #
15:: # Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
16:: #
17:: # You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
18:: # a copy of the EPL at:
19:: #
20:: # http://www.eclipse.org/legal/epl-v10.html
21:: #
22:: # Unless required by applicable law or agreed to in writing, software
23:: # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
24:: # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
25:: # EPL for the specific language governing permissions and limitations
26:: # under the EPL.
27
28function read_scalar(reader, subtree, field_name, length)
29 subtree:add(fields[field_name], reader.read(length))
30end
31
32function read_uint8_t(reader, version, subtree, field_name)
33 read_scalar(reader, subtree, field_name, 1)
34end
35
36function read_uint16_t(reader, version, subtree, field_name)
37 read_scalar(reader, subtree, field_name, 2)
38end
39
40function read_uint32_t(reader, version, subtree, field_name)
41 read_scalar(reader, subtree, field_name, 4)
42end
43
44function read_uint64_t(reader, version, subtree, field_name)
45 read_scalar(reader, subtree, field_name, 8)
46end
47
Tomasz24d059a2013-12-19 09:29:24 -080048function read_of_bitmap_128_t(reader, version, subtree, field_name)
tomaszklimczyk656f8ea2014-01-19 23:27:17 -080049 read_scalar(reader, subtree, field_name, 16)
Tomasz24d059a2013-12-19 09:29:24 -080050end
51
Rich Lane3b2e9cd2014-12-01 13:48:46 -080052function read_of_bitmap_512_t(reader, version, subtree, field_name)
53 read_scalar(reader, subtree, field_name, 64)
54end
55
Rich Lanee6fc8152014-01-08 15:21:23 -080056function read_of_checksum_128_t(reader, version, subtree, field_name)
57 read_scalar(reader, subtree, field_name, 16)
58end
59
Rich Lane7708c182013-10-01 23:27:27 -070060function read_of_octets_t(reader, version, subtree, field_name)
Rich Lane4a868262013-10-02 15:19:44 -070061 if not reader.is_empty() then
62 subtree:add(fields[field_name], reader.read_all())
63 end
Rich Lane7708c182013-10-01 23:27:27 -070064end
65
66function read_list_of_hello_elem_t(reader, version, subtree, field_name)
67 -- TODO
68end
Rich Lanea6e650e2013-10-02 16:30:06 -070069
70function read_of_match_t(reader, version, subtree, field_name)
71 if version == 1 then
Tomasza0dfec02013-12-14 21:51:04 -080072 dissect_of_match_v1_v1(reader, subtree:add("of_match"))
Rich Lanea6e650e2013-10-02 16:30:06 -070073 elseif version == 2 then
Tomasza0dfec02013-12-14 21:51:04 -080074 dissect_of_match_v2_v2(reader, subtree:add("of_match"))
Rich Lane18032782014-10-10 14:03:08 -070075 elseif version == 3 then
Tomasza0dfec02013-12-14 21:51:04 -080076 dissect_of_match_v3_v3(reader, subtree:add("of_match"))
Rich Lane18032782014-10-10 14:03:08 -070077 elseif version == 4 then
78 dissect_of_match_v3_v4(reader, subtree:add("of_match"))
Rich Lane250d59b2015-01-23 13:15:00 -080079 elseif version == 5 then
80 dissect_of_match_v3_v5(reader, subtree:add("of_match"))
Rich Lane18032782014-10-10 14:03:08 -070081 else
82 error("Unsupported match version")
Rich Lanea6e650e2013-10-02 16:30:06 -070083 end
84end
85
86function read_of_wc_bmap_t(reader, version, subtree, field_name)
87 if version <= 2 then
88 read_scalar(reader, subtree, field_name, 4)
89 else
90 read_scalar(reader, subtree, field_name, 8)
91 end
92end
93
94function read_of_port_no_t(reader, version, subtree, field_name)
95 if version == 1 then
96 read_scalar(reader, subtree, field_name, 2)
97 else
98 read_scalar(reader, subtree, field_name, 4)
99 end
100end
101
Tomaszc595d5b2013-11-02 13:30:32 -0700102function read_of_port_name_t(reader, version, subtree, field_name)
103 read_scalar(reader, subtree, field_name, 16)
104end
105
Rich Lanea6e650e2013-10-02 16:30:06 -0700106function read_of_mac_addr_t(reader, version, subtree, field_name)
107 read_scalar(reader, subtree, field_name, 6)
108end
109
110function read_of_ipv4_t(reader, version, subtree, field_name)
111 read_scalar(reader, subtree, field_name, 4)
112end
113
Rich Lane5c56c3b2013-10-25 14:39:29 -0700114function read_of_ipv6_t(reader, version, subtree, field_name)
115 read_scalar(reader, subtree, field_name, 16)
116end
117
Rich Lanea6e650e2013-10-02 16:30:06 -0700118function read_of_fm_cmd_t(reader, version, subtree, field_name)
119 if version == 1 then
120 read_scalar(reader, subtree, field_name, 2)
121 else
122 read_scalar(reader, subtree, field_name, 1)
123 end
124end
125
Tomaszc595d5b2013-11-02 13:30:32 -0700126function read_of_desc_str_t(reader, version, subtree, field_name)
127 read_scalar(reader, subtree, field_name, 256)
128end
129
130function read_of_serial_num_t(reader, version, subtree, field_name)
131 read_scalar(reader, subtree, field_name, 32)
Rich Lanea6e650e2013-10-02 16:30:06 -0700132end
Tomasze0584352013-10-23 16:43:26 -0700133
tomaszklimczyk4f357762014-01-19 23:50:08 -0800134function read_of_table_name_t(reader, version, subtree, field_name)
135 read_scalar(reader, subtree, field_name, 32)
136end
137
Rich Lane245edc42015-01-23 13:15:25 -0800138function read_of_str64_t(reader, version, subtree, field_name)
139 read_scalar(reader, subtree, field_name, 64)
140end
141
Tomasz359147c2013-12-17 18:34:20 -0800142function read_of_port_desc_t(reader, version, subtree, field_name)
143 if reader.is_empty() then
144 return
145 end
146 local child_subtree = subtree:add(fields[field_name], reader.peek_all(0))
147 local info = of_port_desc_dissectors[version](reader, child_subtree)
148 child_subtree:set_text(info)
149end
150
Tomasza17a6692013-10-30 17:34:18 -0700151function read_of_oxm_t(reader, version, subtree, field_name)
152 if reader.is_empty() then
153 return
154 end
155 local child_subtree = subtree:add(fields[field_name], reader.peek_all(0))
Tomasz2663f4f2013-12-10 05:12:42 -0800156 local info = of_oxm_dissectors[version](reader, child_subtree)
Tomasza17a6692013-10-30 17:34:18 -0700157 child_subtree:set_text(info)
158end
Tomaszabaeac32013-12-16 21:22:13 -0800159
160function read_list(reader, dissector, subtree, field_name)
161 if not reader.is_empty() then
162 local list_subtree = subtree:add(field_name .. " list", reader.peek_all(0))
163 while not reader.is_empty() do
164 local atom_subtree = list_subtree:add(field_name, reader.peek_all(0))
165 local info = dissector(reader, atom_subtree)
166 atom_subtree:set_text(info)
167 end
168 else
169 return
170 end
171end
tomaszklimczyk8d18d722014-01-19 23:17:05 -0800172
173function read_ethernet(reader, version, subtree, field_name)
174 if reader.is_empty() then
175 return
176 end
177 local child_subtree = subtree:add(fields[field_name], reader.peek_all(0))
178 child_subtree:set_text("Ethernet packet")
179 ethernet_dissector:call(reader.read_all():tvb(), current_pkt, child_subtree)
180end
tomaszklimczyk8c833852014-01-19 23:18:12 -0800181
182function read_of_bsn_vport_q_in_q_t(reader, version, subtree, field_name)
183 if reader.is_empty() then
184 return
185 end
186 local child_subtree = subtree:add(fields[field_name], reader.peek_all(0))
187 local info = of_bsn_vport_q_in_q_dissectors[version](reader, child_subtree)
188 child_subtree:set_text(info)
189end
Rich Lane88fe6c22014-07-17 10:25:10 -0700190
191function read_openflow(reader, version, subtree, field_name)
192 if reader.is_empty() then
193 return
194 end
195 local child_subtree = subtree:add(fields[field_name], reader.peek_all(0))
196 child_subtree:set_text("OpenFlow message")
197 pcall(function () -- Message may be truncated, ignore errors dissecting
198 p_of.dissector:call(reader.read_all():tvb(), current_pkt, child_subtree)
199 end)
200end