/src/suricata/rust/src/enip/logger.rs
Line | Count | Source |
1 | | /* Copyright (C) 2023 Open Information Security Foundation |
2 | | * |
3 | | * You can copy, redistribute or modify this Program under the terms of |
4 | | * the GNU General Public License version 2 as published by the Free |
5 | | * Software Foundation. |
6 | | * |
7 | | * This program is distributed in the hope that it will be useful, |
8 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
9 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
10 | | * GNU General Public License for more details. |
11 | | * |
12 | | * You should have received a copy of the GNU General Public License |
13 | | * version 2 along with this program; if not, write to the Free Software |
14 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
15 | | * 02110-1301, USA. |
16 | | */ |
17 | | |
18 | | use super::constant::{EnipCommand, EnipStatus}; |
19 | | use super::enip::EnipTransaction; |
20 | | use super::parser::{ |
21 | | cip_segment_type_string, CipData, CipDir, EnipCIP, EnipCipPathSegment, EnipCipRequestPayload, |
22 | | EnipCipResponsePayload, EnipHeader, EnipItemPayload, EnipPayload, |
23 | | }; |
24 | | use crate::detect::EnumString; |
25 | | use crate::jsonbuilder::{JsonBuilder, JsonError}; |
26 | | use std; |
27 | | |
28 | 5.54k | fn log_enip_header(h: &EnipHeader, js: &mut JsonBuilder) -> Result<(), JsonError> { |
29 | 5.54k | if let Some(cmd) = EnipCommand::from_u(h.cmd) { |
30 | 5.54k | js.set_string("command", cmd.to_str())?; |
31 | | } else { |
32 | 0 | js.set_string("command", &format!("unknown-{}", h.cmd))?; |
33 | | } |
34 | 5.54k | if let Some(status) = EnipStatus::from_u(h.status) { |
35 | 5.52k | js.set_string("status", status.to_str())?; |
36 | | } else { |
37 | 25 | js.set_string("status", &format!("unknown-{}", h.status))?; |
38 | | } |
39 | 5.54k | if h.options != 0 { |
40 | 34 | js.set_uint("options", h.options)?; |
41 | 5.51k | } |
42 | 5.54k | Ok(()) |
43 | 5.54k | } |
44 | | |
45 | | // These lists come from other open source programs like Wireshark, Zeek or scapy |
46 | 9 | fn enip_vendorid_string(p: u16) -> Option<&'static str> { |
47 | 9 | match p { |
48 | 5 | 1 => Some("Rockwell Automation/Allen-Bradley"), |
49 | 0 | 2 => Some("Namco Controls Corp."), |
50 | 0 | 3 => Some("Honeywell Inc."), |
51 | 0 | 4 => Some("Parker Hannifin Corp. (Veriflo Division)"), |
52 | 0 | 5 => Some("Rockwell Automation/Reliance Elec."), |
53 | 0 | 7 => Some("SMC Corporation"), |
54 | 0 | 8 => Some("Molex Incorporated"), |
55 | 0 | 9 => Some("Western Reserve Controls Corp."), |
56 | 0 | 10 => Some("Advanced Micro Controls Inc. (AMCI)"), |
57 | 0 | 11 => Some("ASCO Pneumatic Controls"), |
58 | 0 | 12 => Some("Banner Engineering Corp."), |
59 | 0 | 13 => Some("Belden Wire & Cable Company"), |
60 | 0 | 14 => Some("Cooper Interconnect"), |
61 | 0 | 16 => Some("Daniel Woodhead Co. (Woodhead Connectivity)"), |
62 | 0 | 17 => Some("Dearborn Group Inc."), |
63 | 0 | 19 => Some("Helm Instrument Company"), |
64 | 0 | 20 => Some("Huron Net Works"), |
65 | 0 | 21 => Some("Lumberg Inc."), |
66 | 0 | 22 => Some("Online Development Inc.(Automation Value)"), |
67 | 0 | 23 => Some("Vorne Industries Inc."), |
68 | 0 | 24 => Some("ODVA Special Reserve"), |
69 | 0 | 26 => Some("Festo Corporation"), |
70 | 0 | 30 => Some("Unico Inc."), |
71 | 0 | 31 => Some("Ross Controls"), |
72 | 0 | 34 => Some("Hohner Corp."), |
73 | 0 | 35 => Some("Micro Mo Electronics Inc."), |
74 | 0 | 36 => Some("MKS Instruments Inc."), |
75 | 0 | 37 => Some("Yaskawa Electric America (formerly Magnetek Drives)"), |
76 | 0 | 39 => Some("AVG Automation (Uticor)"), |
77 | 0 | 40 => Some("Wago Corporation"), |
78 | 0 | 41 => Some("Kinetics (Unit Instruments)"), |
79 | 0 | 42 => Some("IMI Norgren Limited"), |
80 | 0 | 43 => Some("BALLUFF Inc."), |
81 | 0 | 44 => Some("Yaskawa Electric America Inc."), |
82 | 0 | 45 => Some("Eurotherm Controls Inc"), |
83 | 0 | 46 => Some("ABB Industrial Systems"), |
84 | 0 | 47 => Some("Omron Corporation"), |
85 | 0 | 48 => Some("Turck Inc."), |
86 | 0 | 49 => Some("Grayhill Inc."), |
87 | 0 | 50 => Some("Real Time Automation (C&ID)"), |
88 | 0 | 52 => Some("Numatics Inc."), |
89 | 0 | 53 => Some("Lutze Inc."), |
90 | 0 | 56 => Some("Softing GmbH"), |
91 | 0 | 57 => Some("Pepperl + Fuchs"), |
92 | 0 | 58 => Some("Spectrum Controls Inc."), |
93 | 0 | 59 => Some("D.I.P. Inc. MKS Inst."), |
94 | 0 | 60 => Some("Applied Motion Products Inc."), |
95 | 0 | 61 => Some("Sencon Inc."), |
96 | 0 | 62 => Some("High Country Tek"), |
97 | 0 | 63 => Some("SWAC Automation Consult GmbH"), |
98 | 0 | 64 => Some("Clippard Instrument Laboratory"), |
99 | 0 | 68 => Some("Eaton Electrical"), |
100 | 0 | 71 => Some("Toshiba International Corp."), |
101 | 0 | 72 => Some("Control Technology Incorporated"), |
102 | 0 | 73 => Some("TCS (NZ) Ltd."), |
103 | 0 | 74 => Some("Hitachi Ltd."), |
104 | 0 | 75 => Some("ABB Robotics Products AB"), |
105 | 0 | 76 => Some("NKE Corporation"), |
106 | 0 | 77 => Some("Rockwell Software Inc."), |
107 | 0 | 78 => Some("Escort Memory Systems (A Datalogic Group Co.)"), |
108 | 0 | 79 => Some("Berk-Tek"), |
109 | 0 | 80 => Some("Industrial Devices Corporation"), |
110 | 0 | 81 => Some("IXXAT Automation GmbH"), |
111 | 0 | 82 => Some("Mitsubishi Electric Automation Inc."), |
112 | 0 | 83 => Some("OPTO-22"), |
113 | 0 | 86 => Some("Horner Electric"), |
114 | 0 | 87 => Some("Burkert Werke GmbH & Co. KG"), |
115 | 0 | 88 => Some("Industrial Indexing Systems, Inc."), |
116 | 0 | 89 => Some("Industrial Indexing Systems Inc."), |
117 | 0 | 90 => Some("HMS Industrial Networks AB"), |
118 | 0 | 91 => Some("Robicon"), |
119 | 0 | 92 => Some("Helix Technology (Granville-Phillips)"), |
120 | 0 | 93 => Some("Arlington Laboratory"), |
121 | 0 | 94 => Some("Advantech Co. Ltd."), |
122 | 0 | 95 => Some("Square D Company"), |
123 | 0 | 96 => Some("Digital Electronics Corp."), |
124 | 0 | 97 => Some("Danfoss"), |
125 | 0 | 100 => Some("Bosch Rexroth Corporation, Pneumatics"), |
126 | 0 | 101 => Some("Applied Materials Inc."), |
127 | 0 | 102 => Some("Showa Electric Wire & Cable Co."), |
128 | 0 | 103 => Some("Pacific Scientific (API Controls Inc.)"), |
129 | 0 | 104 => Some("Sharp Manufacturing Systems Corp."), |
130 | 0 | 105 => Some("Olflex Wire & Cable Inc."), |
131 | 0 | 107 => Some("Unitrode"), |
132 | 0 | 108 => Some("Beckhoff Automation GmbH"), |
133 | 0 | 109 => Some("National Instruments"), |
134 | 0 | 110 => Some("Mykrolis Corporations (Millipore)"), |
135 | 0 | 111 => Some("International Motion Controls Corp."), |
136 | 0 | 113 => Some("SEG Kempen GmbH"), |
137 | 0 | 116 => Some("MTS Systems Corp."), |
138 | 0 | 117 => Some("Krones Inc"), |
139 | 0 | 119 => Some("EXOR Electronic R&D"), |
140 | 0 | 120 => Some("SIEI S.p.A."), |
141 | 0 | 121 => Some("KUKA Roboter GmbH"), |
142 | 0 | 123 => Some("SEC (Samsung Electronics Co. Ltd.)"), |
143 | 0 | 124 => Some("Binary Electronics Ltd"), |
144 | 0 | 125 => Some("Flexible Machine Controls"), |
145 | 0 | 127 => Some("ABB Inc. (Entrelec)"), |
146 | 0 | 128 => Some("MAC Valves Inc."), |
147 | 0 | 129 => Some("Auma Actuators Inc."), |
148 | 0 | 130 => Some("Toyoda Machine Works Ltd."), |
149 | 0 | 133 => Some("Balogh T.A.G. Corporation"), |
150 | 0 | 134 => Some("TR Systemtechnik GmbH"), |
151 | 0 | 135 => Some("UNIPULSE Corporation"), |
152 | 0 | 138 => Some("Conxall Corporation Inc."), |
153 | 0 | 141 => Some("Kuramo Electric Co. Ltd."), |
154 | 0 | 142 => Some("Creative Micro Designs"), |
155 | 0 | 143 => Some("GE Industrial Systems"), |
156 | 0 | 144 => Some("Leybold Vacuum GmbH"), |
157 | 0 | 145 => Some("Siemens Energy & Automation/Drives"), |
158 | 0 | 146 => Some("Kodensha Ltd."), |
159 | 0 | 147 => Some("Motion Engineering Inc."), |
160 | 0 | 148 => Some("Honda Engineering Co. Ltd."), |
161 | 0 | 149 => Some("EIM Valve Controls"), |
162 | 0 | 150 => Some("Melec Inc."), |
163 | 0 | 151 => Some("Sony Manufacturing Systems Corporation"), |
164 | 0 | 152 => Some("North American Mfg."), |
165 | 0 | 153 => Some("WATLOW"), |
166 | 0 | 154 => Some("Japan Radio Co. Ltd."), |
167 | 0 | 155 => Some("NADEX Co. Ltd."), |
168 | 0 | 156 => Some("Ametek Automation & Process Technologies"), |
169 | 0 | 157 => Some("FACTS, Inc."), |
170 | 0 | 158 => Some("KVASER AB"), |
171 | 0 | 159 => Some("IDEC IZUMI Corporation"), |
172 | 0 | 160 => Some("Mitsubishi Heavy Industries Ltd."), |
173 | 0 | 161 => Some("Mitsubishi Electric Corporation"), |
174 | 0 | 162 => Some("Horiba-STEC Inc."), |
175 | 0 | 163 => Some("ESD Electronic System Design GmbH"), |
176 | 0 | 164 => Some("DAIHEN Corporation"), |
177 | 0 | 165 => Some("Tyco Valves & Controls/Keystone"), |
178 | 0 | 166 => Some("EBARA Corporation"), |
179 | 0 | 169 => Some("Hokuyo Electric Co. Ltd."), |
180 | 0 | 170 => Some("Pyramid Solutions Inc."), |
181 | 0 | 171 => Some("Denso Wave Incorporated"), |
182 | 0 | 172 => Some("HLS Hard-Line Solutions Inc."), |
183 | 0 | 173 => Some("Caterpillar Inc."), |
184 | 0 | 174 => Some("PDL Electronics Ltd."), |
185 | 0 | 176 => Some("Red Lion Controls"), |
186 | 0 | 177 => Some("ANELVA Corporation"), |
187 | 0 | 178 => Some("Toyo Denki Seizo KK"), |
188 | 0 | 179 => Some("Sanyo Denki Co. Ltd."), |
189 | 0 | 180 => Some("Advanced Energy Japan K.K. (Aera Japan)"), |
190 | 0 | 181 => Some("Pilz GmbH & Co"), |
191 | 0 | 182 => Some("Marsh Bellofram-Bellofram PCD Division"), |
192 | 0 | 184 => Some("M-SYSTEM Co. Ltd."), |
193 | 0 | 185 => Some("Nissin Electric Co. Ltd."), |
194 | 0 | 186 => Some("Hitachi Metals Ltd."), |
195 | 0 | 187 => Some("Oriental Motor Company"), |
196 | 0 | 188 => Some("A&D Co. Ltd."), |
197 | 0 | 189 => Some("Phasetronics Inc."), |
198 | 0 | 190 => Some("Cummins Engine Company"), |
199 | 0 | 191 => Some("Deltron Inc."), |
200 | 0 | 192 => Some("Geneer Corporation"), |
201 | 0 | 193 => Some("Anatol Automation Inc."), |
202 | 0 | 196 => Some("Medar Inc."), |
203 | 0 | 197 => Some("Comdel Inc."), |
204 | 0 | 198 => Some("Advanced Energy Industries Inc."), |
205 | 0 | 200 => Some("DAIDEN Co. Ltd."), |
206 | 0 | 201 => Some("CKD Corporation"), |
207 | 0 | 202 => Some("Toyo Electric Corporation"), |
208 | 0 | 204 => Some("AuCom Electronics Ltd."), |
209 | 0 | 205 => Some("Shinko Electric Co. Ltd."), |
210 | 0 | 206 => Some("Vector Informatik GmbH"), |
211 | 0 | 208 => Some("Moog Inc."), |
212 | 0 | 209 => Some("Contemporary Controls"), |
213 | 0 | 210 => Some("Tokyo Sokki Kenkyujo Co. Ltd."), |
214 | 0 | 211 => Some("Schenck-AccuRate Inc."), |
215 | 0 | 212 => Some("The Oilgear Company"), |
216 | 0 | 214 => Some("ASM Japan K.K."), |
217 | 0 | 215 => Some("HIRATA Corp."), |
218 | 0 | 216 => Some("SUNX Limited"), |
219 | 0 | 217 => Some("Meidensha Corp."), |
220 | 0 | 218 => Some("NIDEC SANKYO CORPORATION (Sankyo Seiki Mfg. Co. Ltd.)"), |
221 | 0 | 219 => Some("KAMRO Corp."), |
222 | 0 | 220 => Some("Nippon System Development Co. Ltd."), |
223 | 0 | 221 => Some("EBARA Technologies Inc."), |
224 | 0 | 224 => Some("SG Co. Ltd."), |
225 | 0 | 225 => Some("Vaasa Institute of Technology"), |
226 | 0 | 226 => Some("MKS Instruments (ENI Technology)"), |
227 | 0 | 227 => Some("Tateyama System Laboratory Co. Ltd."), |
228 | 0 | 228 => Some("QLOG Corporation"), |
229 | 0 | 229 => Some("Matric Limited Inc."), |
230 | 0 | 230 => Some("NSD Corporation"), |
231 | 0 | 232 => Some("Sumitomo Wiring Systems Ltd."), |
232 | 0 | 233 => Some("Group 3 Technology Ltd."), |
233 | 0 | 234 => Some("CTI Cryogenics"), |
234 | 0 | 235 => Some("POLSYS CORP"), |
235 | 0 | 236 => Some("Ampere Inc."), |
236 | 0 | 238 => Some("Simplatroll Ltd."), |
237 | 0 | 241 => Some("Leading Edge Design"), |
238 | 0 | 242 => Some("Humphrey Products"), |
239 | 0 | 243 => Some("Schneider Automation Inc."), |
240 | 0 | 244 => Some("Westlock Controls Corp."), |
241 | 0 | 245 => Some("Nihon Weidmuller Co. Ltd."), |
242 | 0 | 246 => Some("Brooks Instrument (Div. of Emerson)"), |
243 | 0 | 248 => Some("Moeller GmbH"), |
244 | 0 | 249 => Some("Varian Vacuum Products"), |
245 | 0 | 250 => Some("Yokogawa Electric Corporation"), |
246 | 0 | 251 => Some("Electrical Design Daiyu Co. Ltd."), |
247 | 0 | 252 => Some("Omron Software Co. Ltd."), |
248 | 0 | 253 => Some("BOC Edwards"), |
249 | 0 | 254 => Some("Control Technology Corporation"), |
250 | 0 | 255 => Some("Bosch Rexroth"), |
251 | 1 | 256 => Some("Turck"), |
252 | 0 | 257 => Some("Control Techniques PLC"), |
253 | 0 | 258 => Some("Hardy Instruments Inc."), |
254 | 0 | 259 => Some("LS Industrial Systems"), |
255 | 0 | 260 => Some("E.O.A. Systems Inc."), |
256 | 0 | 262 => Some("New Cosmos Electric Co. Ltd."), |
257 | 0 | 263 => Some("Sense Eletronica LTDA"), |
258 | 0 | 264 => Some("Xycom Inc."), |
259 | 0 | 265 => Some("Baldor Electric"), |
260 | 0 | 267 => Some("Patlite Corporation"), |
261 | 0 | 269 => Some("Mogami Wire & Cable Corporation"), |
262 | 0 | 270 => Some("Welding Technology Corporation (WTC)"), |
263 | 0 | 272 => Some("Deutschmann Automation GmbH"), |
264 | 0 | 273 => Some("ICP Panel-Tec Inc."), |
265 | 0 | 274 => Some("Bray Controls USA"), |
266 | 0 | 276 => Some("Status Technologies"), |
267 | 0 | 277 => Some("Trio Motion Technology Ltd."), |
268 | 0 | 278 => Some("Sherrex Systems Ltd."), |
269 | 0 | 279 => Some("Adept Technology Inc."), |
270 | 0 | 280 => Some("Spang Power Electronics"), |
271 | 0 | 282 => Some("Acrosser Technology Co. Ltd."), |
272 | 0 | 283 => Some("Hilscher GmbH"), |
273 | 0 | 284 => Some("IMAX Corporation"), |
274 | 0 | 285 => Some("Electronic Innovation Inc. (Falter Engineering)"), |
275 | 0 | 286 => Some("Netlogic Inc."), |
276 | 0 | 287 => Some("Bosch Rexroth Corporation, Indramat"), |
277 | 0 | 290 => Some("Murata Machinery Ltd."), |
278 | 0 | 291 => Some("MTT Company Ltd."), |
279 | 0 | 292 => Some("Kanematsu Semiconductor Corp."), |
280 | 0 | 293 => Some("Takebishi Electric Sales Co."), |
281 | 0 | 294 => Some("Tokyo Electron Device Ltd."), |
282 | 0 | 295 => Some("PFU Limited"), |
283 | 0 | 296 => Some("Hakko Automation Co. Ltd."), |
284 | 0 | 297 => Some("Advanet Inc."), |
285 | 0 | 298 => Some("Tokyo Electron Software Technologies Ltd."), |
286 | 0 | 300 => Some("Shinagawa Electric Wire Co. Ltd."), |
287 | 0 | 301 => Some("Yokogawa M&C Corporation"), |
288 | 0 | 302 => Some("KONAN Electric Co. Ltd."), |
289 | 0 | 303 => Some("Binar Elektronik AB"), |
290 | 0 | 304 => Some("Furukawa Electric Co."), |
291 | 0 | 305 => Some("Cooper Energy Services"), |
292 | 0 | 306 => Some("Schleicher GmbH & Co."), |
293 | 0 | 307 => Some("Hirose Electric Co. Ltd."), |
294 | 0 | 308 => Some("Western Servo Design Inc."), |
295 | 0 | 309 => Some("Prosoft Technology"), |
296 | 0 | 311 => Some("Towa Shoko Co. Ltd."), |
297 | 0 | 312 => Some("Kyopal Co. Ltd."), |
298 | 0 | 313 => Some("Extron Co."), |
299 | 0 | 314 => Some("Wieland Electric GmbH"), |
300 | 0 | 315 => Some("SEW Eurodrive GmbH"), |
301 | 0 | 316 => Some("Aera Corporation"), |
302 | 0 | 317 => Some("STA Reutlingen"), |
303 | 0 | 319 => Some("Fuji Electric Co. Ltd."), |
304 | 0 | 322 => Some("ifm efector, inc."), |
305 | 0 | 324 => Some("IDEACOD-Hohner Automation S.A."), |
306 | 0 | 325 => Some("CommScope Inc."), |
307 | 0 | 326 => Some("GE Fanuc Automation North America Inc."), |
308 | 0 | 327 => Some("Matsushita Electric Industrial Co. Ltd."), |
309 | 0 | 328 => Some("Okaya Electronics Corporation"), |
310 | 0 | 329 => Some("KASHIYAMA Industries Ltd."), |
311 | 0 | 330 => Some("JVC"), |
312 | 0 | 331 => Some("Interface Corporation"), |
313 | 0 | 332 => Some("Grape Systems Inc."), |
314 | 0 | 334 => Some("KEBA AG"), |
315 | 0 | 335 => Some("Toshiba IT & Control Systems Corporation"), |
316 | 0 | 336 => Some("Sanyo Machine Works Ltd."), |
317 | 0 | 337 => Some("Vansco Electronics Ltd."), |
318 | 0 | 338 => Some("Dart Container Corp."), |
319 | 0 | 339 => Some("Livingston & Co. Inc."), |
320 | 0 | 340 => Some("Alfa Laval LKM A/S"), |
321 | 0 | 341 => Some("BF ENTRON Ltd. (British Federal)"), |
322 | 0 | 342 => Some("Bekaert Engineering NV"), |
323 | 0 | 343 => Some("Ferran Scientific Inc."), |
324 | 0 | 344 => Some("KEBA AG"), |
325 | 0 | 345 => Some("Endress + Hauser"), |
326 | 0 | 346 => Some("Lincoln Electric Company"), |
327 | 0 | 347 => Some("ABB ALSTOM Power UK Ltd. (EGT)"), |
328 | 0 | 348 => Some("Berger Lahr GmbH"), |
329 | 0 | 350 => Some("Federal Signal Corp."), |
330 | 0 | 351 => Some("Kawasaki Robotics (USA) Inc."), |
331 | 0 | 352 => Some("Bently Nevada Corporation"), |
332 | 0 | 354 => Some("FRABA Posital GmbH"), |
333 | 0 | 355 => Some("Elsag Bailey Inc."), |
334 | 0 | 356 => Some("Fanuc Robotics America"), |
335 | 0 | 358 => Some("Surface Combustion Inc."), |
336 | 0 | 360 => Some("AILES Electronics Ind. Co. Ltd."), |
337 | 0 | 361 => Some("Wonderware Corporation"), |
338 | 0 | 362 => Some("Particle Measuring Systems Inc."), |
339 | 0 | 365 => Some("BITS Co. Ltd."), |
340 | 0 | 366 => Some("Japan Aviation Electronics Industry Ltd."), |
341 | 0 | 367 => Some("Keyence Corporation"), |
342 | 0 | 368 => Some("Kuroda Precision Industries Ltd."), |
343 | 0 | 369 => Some("Mitsubishi Electric Semiconductor Application"), |
344 | 0 | 370 => Some("Nippon Seisen Cable Ltd."), |
345 | 0 | 371 => Some("Omron ASO Co. Ltd."), |
346 | 0 | 372 => Some("Seiko Seiki Co. Ltd."), |
347 | 0 | 373 => Some("Sumitomo Heavy IndustriesLtd."), |
348 | 0 | 374 => Some("Tango Computer Service Corporation"), |
349 | 0 | 375 => Some("Technology Service Inc."), |
350 | 0 | 376 => Some("Toshiba Information Systems (Japan) Corporation"), |
351 | 0 | 377 => Some("TOSHIBA Schneider Inverter Corporation"), |
352 | 0 | 378 => Some("Toyooki Kogyo Co. Ltd."), |
353 | 0 | 379 => Some("XEBEC"), |
354 | 0 | 380 => Some("Madison Cable Corporation"), |
355 | 0 | 381 => Some("Hitati Engineering & Services Co. Ltd."), |
356 | 0 | 382 => Some("TEM-TECH Lab Co. Ltd."), |
357 | 0 | 383 => Some("International Laboratory Corporation"), |
358 | 0 | 384 => Some("Dyadic Systems Co. Ltd."), |
359 | 0 | 385 => Some("SETO Electronics Industry Co. Ltd."), |
360 | 0 | 386 => Some("Tokyo Electron Kyushu Limited"), |
361 | 0 | 387 => Some("KEI System Co. Ltd."), |
362 | 0 | 389 => Some("Asahi Engineering Co. Ltd."), |
363 | 0 | 390 => Some("Contrex Inc."), |
364 | 0 | 391 => Some("Paradigm Controls Ltd."), |
365 | 0 | 393 => Some("Ohm Electric Co. Ltd."), |
366 | 0 | 394 => Some("RKC Instrument Inc."), |
367 | 0 | 395 => Some("Suzuki Motor Corporation"), |
368 | 0 | 396 => Some("Custom Servo Motors Inc."), |
369 | 0 | 397 => Some("PACE Control Systems"), |
370 | 0 | 398 => Some("Selectron Systems AG"), |
371 | 0 | 400 => Some("LINTEC Co. Ltd."), |
372 | 0 | 401 => Some("Hitachi Cable Ltd."), |
373 | 0 | 402 => Some("BUSWARE Direct"), |
374 | 0 | 403 => Some("Eaton Electric B.V. (formerly Holec Holland N.V.)"), |
375 | 0 | 404 => Some("VAT Vakuumventile AG"), |
376 | 0 | 405 => Some("Scientific Technologies Incorporated"), |
377 | 0 | 406 => Some("Alfa Instrumentos Eletronicos Ltda."), |
378 | 0 | 407 => Some("TWK Elektronik GmbH"), |
379 | 0 | 408 => Some("ABB Welding Systems AB"), |
380 | 0 | 409 => Some("BYSTRONIC Maschinen AG"), |
381 | 0 | 410 => Some("Kimura Electric Co. Ltd."), |
382 | 0 | 411 => Some("Nissei Plastic Industrial Co. Ltd."), |
383 | 0 | 413 => Some("Kistler-Morse Corporation"), |
384 | 0 | 414 => Some("Proteous Industries Inc."), |
385 | 0 | 415 => Some("IDC Corporation"), |
386 | 0 | 416 => Some("Nordson Corporation"), |
387 | 0 | 417 => Some("Rapistan Systems"), |
388 | 0 | 418 => Some("LP-Elektronik GmbH"), |
389 | 0 | 419 => Some("GERBI & FASE S.p.A. (Fase Saldatura)"), |
390 | 0 | 420 => Some("Phoenix Digital Corporation"), |
391 | 0 | 421 => Some("Z-World Engineering"), |
392 | 0 | 422 => Some("Honda R&D Co. Ltd."), |
393 | 0 | 423 => Some("Bionics Instrument Co. Ltd."), |
394 | 0 | 424 => Some("Teknic Inc."), |
395 | 0 | 425 => Some("R.Stahl Inc."), |
396 | 0 | 427 => Some("Ryco Graphic Manufacturing Inc."), |
397 | 0 | 428 => Some("Giddings & Lewis Inc."), |
398 | 0 | 429 => Some("Koganei Corporation"), |
399 | 0 | 431 => Some("Nichigoh Communication Electric Wire Co. Ltd."), |
400 | 0 | 433 => Some("Fujikura Ltd."), |
401 | 0 | 434 => Some("AD Link Technology Inc."), |
402 | 0 | 435 => Some("StoneL Corporation"), |
403 | 0 | 436 => Some("Computer Optical Products Inc."), |
404 | 0 | 437 => Some("CONOS Inc."), |
405 | 0 | 438 => Some("Erhardt + Leimer GmbH"), |
406 | 0 | 439 => Some("UNIQUE Co. Ltd."), |
407 | 0 | 440 => Some("Roboticsware Inc."), |
408 | 0 | 441 => Some("Nachi Fujikoshi Corporation"), |
409 | 0 | 442 => Some("Hengstler GmbH"), |
410 | 0 | 443 => Some("Vacon Plc"), |
411 | 0 | 444 => Some("SUNNY GIKEN Inc."), |
412 | 0 | 445 => Some("Lenze Drive Systems GmbH"), |
413 | 0 | 446 => Some("CD Systems B.V."), |
414 | 0 | 447 => Some("FMT/Aircraft Gate Support Systems AB"), |
415 | 0 | 448 => Some("Axiomatic Technologies Corp"), |
416 | 0 | 449 => Some("Embedded System Products Inc."), |
417 | 0 | 451 => Some("Mencom Corporation"), |
418 | 0 | 452 => Some("Kollmorgen"), |
419 | 0 | 453 => Some("Matsushita Welding Systems Co. Ltd."), |
420 | 0 | 454 => Some("Dengensha Mfg. Co. Ltd."), |
421 | 0 | 455 => Some("Quinn Systems Ltd."), |
422 | 0 | 456 => Some("Tellima Technology Ltd."), |
423 | 0 | 457 => Some("MDT Software"), |
424 | 0 | 458 => Some("Taiwan Keiso Co. Ltd."), |
425 | 0 | 459 => Some("Pinnacle Systems"), |
426 | 0 | 460 => Some("Ascom Hasler Mailing Sys."), |
427 | 0 | 461 => Some("INSTRUMAR Limited"), |
428 | 0 | 463 => Some("Navistar International Transportation Corp."), |
429 | 0 | 464 => Some("Huettinger Elektronik GmbH + Co. KG"), |
430 | 0 | 465 => Some("OCM Technology Inc."), |
431 | 0 | 466 => Some("Professional Supply Inc."), |
432 | 0 | 467 => Some("Control Solutions"), |
433 | 0 | 468 => Some("Baumer IVO GmbH & Co. KG"), |
434 | 0 | 469 => Some("Worcester Controls Corporation"), |
435 | 0 | 470 => Some("Pyramid Technical Consultants Inc."), |
436 | 0 | 471 => Some("Eilersen Electric A/S"), |
437 | 0 | 472 => Some("Apollo Fire Detectors Limited"), |
438 | 0 | 473 => Some("Avtron Manufacturing Inc."), |
439 | 0 | 475 => Some("Tokyo Keiso Co. Ltd."), |
440 | 0 | 476 => Some("Daishowa Swiki Co. Ltd."), |
441 | 0 | 477 => Some("Kojima Instruments Inc."), |
442 | 0 | 478 => Some("Shimadzu Corporation"), |
443 | 0 | 479 => Some("Tatsuta Electric Wire & Cable Co. Ltd."), |
444 | 0 | 480 => Some("MECS Corporation"), |
445 | 0 | 481 => Some("Tahara Electric"), |
446 | 0 | 482 => Some("Koyo Electronics"), |
447 | 0 | 483 => Some("Clever Devices"), |
448 | 0 | 484 => Some("GCD Hardware & Software GmbH"), |
449 | 0 | 486 => Some("Miller Electric Mfg. Co."), |
450 | 0 | 487 => Some("GEA Tuchenhagen GmbH"), |
451 | 0 | 488 => Some("Riken Keiki Co., Ltd."), |
452 | 0 | 489 => Some("Keisokugiken Corporation"), |
453 | 0 | 490 => Some("Fuji Machine Mfg. Co. Ltd."), |
454 | 0 | 492 => Some("Nidec-Shimpo Corp."), |
455 | 0 | 493 => Some("UTEC Corporation"), |
456 | 0 | 494 => Some("Sanyo Electric Co. Ltd."), |
457 | 0 | 497 => Some("Okano Electric Wire Co. Ltd."), |
458 | 0 | 498 => Some("Shimaden Co. Ltd."), |
459 | 0 | 499 => Some("Teddington Controls Ltd"), |
460 | 0 | 501 => Some("VIPA GmbH"), |
461 | 0 | 502 => Some("Warwick Manufacturing Group"), |
462 | 0 | 503 => Some("Danaher Controls"), |
463 | 0 | 506 => Some("American Science & Engineering"), |
464 | 0 | 507 => Some("Accutron Controls International Inc."), |
465 | 0 | 508 => Some("Norcott Technologies Ltd."), |
466 | 0 | 509 => Some("TB Woods Inc."), |
467 | 0 | 510 => Some("Proportion-Air Inc."), |
468 | 0 | 511 => Some("SICK Stegmann GmbH"), |
469 | 0 | 513 => Some("Edwards Signaling"), |
470 | 0 | 514 => Some("Sumitomo Metal Industries Ltd."), |
471 | 0 | 515 => Some("Cosmo Instruments Co. Ltd."), |
472 | 0 | 516 => Some("Denshosha Co. Ltd."), |
473 | 0 | 517 => Some("Kaijo Corp."), |
474 | 0 | 518 => Some("Michiproducts Co. Ltd."), |
475 | 0 | 519 => Some("Miura Corporation"), |
476 | 0 | 520 => Some("TG Information Network Co. Ltd."), |
477 | 0 | 521 => Some("Fujikin Inc."), |
478 | 0 | 522 => Some("Estic Corp."), |
479 | 0 | 523 => Some("GS Hydraulic Sales"), |
480 | 0 | 524 => Some("Leuze Electronic GmbH & Co. KG"), |
481 | 0 | 525 => Some("MTE Limited"), |
482 | 0 | 526 => Some("Hyde Park Electronics Inc."), |
483 | 0 | 527 => Some("Pfeiffer Vacuum GmbH"), |
484 | 0 | 528 => Some("Cyberlogic Technologies"), |
485 | 0 | 529 => Some("OKUMA Corporation FA Systems Division"), |
486 | 0 | 531 => Some("Hitachi Kokusai Electric Co. Ltd."), |
487 | 0 | 532 => Some("SHINKO TECHNOS Co. Ltd."), |
488 | 0 | 533 => Some("Itoh Electric Co. Ltd."), |
489 | 0 | 534 => Some("Colorado Flow Tech Inc."), |
490 | 0 | 535 => Some("Love Controls Division/Dwyer Inst."), |
491 | 0 | 536 => Some("Alstom Drives and Controls"), |
492 | 0 | 537 => Some("The Foxboro Company"), |
493 | 0 | 538 => Some("Tescom Corporation"), |
494 | 0 | 540 => Some("Atlas Copco Controls UK"), |
495 | 0 | 542 => Some("Autojet Technologies"), |
496 | 0 | 543 => Some("Prima Electronics S.p.A."), |
497 | 0 | 544 => Some("PMA GmbH"), |
498 | 0 | 545 => Some("Shimafuji Electric Co. Ltd."), |
499 | 0 | 546 => Some("Oki Electric Industry Co. Ltd."), |
500 | 0 | 547 => Some("Kyushu Matsushita Electric Co. Ltd."), |
501 | 0 | 548 => Some("Nihon Electric Wire & Cable Co. Ltd."), |
502 | 0 | 549 => Some("Tsuken Electric Ind Co. Ltd."), |
503 | 0 | 550 => Some("Tamadic Co."), |
504 | 0 | 551 => Some("MAATEL SA"), |
505 | 0 | 552 => Some("OKUMA America"), |
506 | 0 | 553 => Some("Control Techniques PLC-NA"), |
507 | 0 | 554 => Some("TPC Wire & Cable"), |
508 | 0 | 555 => Some("ATI Industrial Automation"), |
509 | 0 | 556 => Some("Microcontrol (Australia) Pty Ltd."), |
510 | 0 | 557 => Some("Serra Soldadura, S.A."), |
511 | 0 | 558 => Some("Southwest Research Institute"), |
512 | 0 | 559 => Some("Cabinplant International"), |
513 | 0 | 560 => Some("Sartorius Mechatronics T&H GmbH"), |
514 | 0 | 561 => Some("Comau S.p.A. Robotics & Final Assembly Division"), |
515 | 0 | 562 => Some("Phoenix Contact"), |
516 | 0 | 563 => Some("Yokogawa MAT Corporation"), |
517 | 0 | 564 => Some("Asahi Sangyo Co., Ltd."), |
518 | 0 | 566 => Some("Akita Myotoku Ltd."), |
519 | 0 | 567 => Some("OBARA Corp."), |
520 | 0 | 568 => Some("Suetron Electronic GmbH"), |
521 | 0 | 570 => Some("Serck Controls Limited"), |
522 | 0 | 571 => Some("Fairchild Industrial Products Company"), |
523 | 0 | 572 => Some("ARO S.A."), |
524 | 0 | 573 => Some("M2C GmbH"), |
525 | 0 | 574 => Some("Shin Caterpillar Mitsubishi Ltd."), |
526 | 0 | 575 => Some("Santest Co. Ltd."), |
527 | 0 | 576 => Some("Cosmotechs Co. Ltd."), |
528 | 0 | 577 => Some("Hitachi Electric Systems"), |
529 | 0 | 578 => Some("Smartscan Ltd."), |
530 | 0 | 579 => Some("Woodhead Software & Electronics France"), |
531 | 0 | 580 => Some("Athena Controls Inc."), |
532 | 0 | 581 => Some("Syron Engineering & Manufacturing Inc."), |
533 | 0 | 582 => Some("Asahi Optical Co. Ltd."), |
534 | 0 | 583 => Some("Sansha Electric Mfg. Co. Ltd."), |
535 | 0 | 584 => Some("Nikki Denso Co. Ltd."), |
536 | 0 | 585 => Some("Star Micronics => Some( Co. Ltd."), |
537 | 0 | 586 => Some("Ecotecnia Socirtat Corp."), |
538 | 0 | 587 => Some("AC Technology Corp."), |
539 | 0 | 588 => Some("West Instruments Limited"), |
540 | 0 | 589 => Some("NTI Limited"), |
541 | 0 | 590 => Some("Delta Computer Systems Inc."), |
542 | 0 | 591 => Some("FANUC Ltd."), |
543 | 0 | 592 => Some("Hearn-Gu Lee"), |
544 | 0 | 593 => Some("ABB Automation Products"), |
545 | 0 | 594 => Some("Orion Machinery Co. Ltd."), |
546 | 0 | 596 => Some("Wire-Pro Inc."), |
547 | 0 | 597 => Some("Beijing Huakong Technology Co. Ltd."), |
548 | 0 | 598 => Some("Yokoyama Shokai Co. Ltd."), |
549 | 0 | 599 => Some("Toyogiken Co. Ltd."), |
550 | 0 | 600 => Some("Coester Equipamentos Eletronicos Ltda."), |
551 | 0 | 601 => Some("Kawasaki Heavy Industries, Ltd."), |
552 | 0 | 602 => Some("Electroplating Engineers of Japan Ltd."), |
553 | 0 | 603 => Some("ROBOX S.p.A."), |
554 | 0 | 604 => Some("Spraying Systems Company"), |
555 | 0 | 605 => Some("Benshaw Inc."), |
556 | 0 | 606 => Some("ZPA-DP A.S."), |
557 | 0 | 607 => Some("Wired Rite Systems"), |
558 | 0 | 608 => Some("Tandis Research Inc."), |
559 | 0 | 609 => Some("SSD Drives GmbH"), |
560 | 0 | 610 => Some("ULVAC Japan Ltd."), |
561 | 0 | 611 => Some("DYNAX Corporation"), |
562 | 0 | 612 => Some("Nor-Cal Products Inc."), |
563 | 0 | 613 => Some("Aros Electronics AB"), |
564 | 0 | 614 => Some("Jun-Tech Co. Ltd."), |
565 | 0 | 615 => Some("HAN-MI Co. Ltd."), |
566 | 0 | 616 => Some("uniNtech (formerly SungGi Internet)"), |
567 | 0 | 617 => Some("Hae Pyung Electronics Research Institute"), |
568 | 0 | 618 => Some("Milwaukee Electronics"), |
569 | 0 | 619 => Some("OBERG Industries"), |
570 | 0 | 620 => Some("Parker Hannifin/Compumotor Division"), |
571 | 0 | 621 => Some("TECHNO DIGITAL CORPORATION"), |
572 | 0 | 622 => Some("Network Supply Co. Ltd."), |
573 | 0 | 623 => Some("Union Electronics Co. Ltd."), |
574 | 0 | 624 => Some("Tritronics Services PM Ltd."), |
575 | 0 | 625 => Some("Rockwell Automation-Sprecher+Schuh"), |
576 | 0 | 626 => Some("Matsushita Electric Industrial Co. Ltd. Motor Co."), |
577 | 0 | 627 => Some("Rolls-Royce Energy Systems Inc."), |
578 | 0 | 628 => Some("Jeongil Intercom Co., Ltd."), |
579 | 0 | 629 => Some("Interroll Corp."), |
580 | 0 | 630 => Some("Hubbell Wiring Device-Kellems (Delaware)"), |
581 | 0 | 631 => Some("Intelligent Motion Systems"), |
582 | 0 | 633 => Some("INFICON AG"), |
583 | 0 | 634 => Some("Hirschmann Inc."), |
584 | 0 | 635 => Some("The Siemon Company"), |
585 | 0 | 636 => Some("YAMAHA Motor Co. Ltd."), |
586 | 0 | 637 => Some("aska corporation"), |
587 | 0 | 638 => Some("Woodhead Connectivity"), |
588 | 0 | 639 => Some("Trimble AB"), |
589 | 0 | 640 => Some("Murrelektronik GmbH"), |
590 | 0 | 641 => Some("Creatrix Labs Inc."), |
591 | 0 | 642 => Some("TopWorx"), |
592 | 0 | 643 => Some("Kumho Industrial Co. Ltd."), |
593 | 0 | 644 => Some("Wind River Systems Inc."), |
594 | 0 | 645 => Some("Bihl & Wiedemann GmbH"), |
595 | 0 | 646 => Some("Harmonic Drive Systems Inc."), |
596 | 0 | 647 => Some("Rikei Corporation"), |
597 | 0 | 648 => Some("BL Autotec Ltd."), |
598 | 0 | 649 => Some("Hana Information & Technology Co. Ltd."), |
599 | 0 | 650 => Some("Seoil Electric Co. Ltd."), |
600 | 0 | 651 => Some("Fife Corporation"), |
601 | 0 | 652 => Some("Shanghai Electrical Apparatus Research Institute"), |
602 | 0 | 653 => Some("Detector Electronics"), |
603 | 0 | 654 => Some("Parasense Development Centre"), |
604 | 0 | 657 => Some("Six Tau S.p.A."), |
605 | 0 | 658 => Some("Aucos GmbH"), |
606 | 0 | 659 => Some("Rotork Controls"), |
607 | 0 | 660 => Some("Automationdirect.com"), |
608 | 0 | 661 => Some("Thermo BLH"), |
609 | 0 | 662 => Some("System Controls Ltd."), |
610 | 0 | 663 => Some("Univer S.p.A."), |
611 | 0 | 664 => Some("MKS-Tenta Technology"), |
612 | 0 | 665 => Some("Lika Electronic SNC"), |
613 | 0 | 666 => Some("Mettler-Toledo Inc."), |
614 | 0 | 667 => Some("DXL USA Inc."), |
615 | 0 | 668 => Some("Rockwell Automation/Entek IRD Intl."), |
616 | 0 | 669 => Some("Nippon Otis Elevator Company"), |
617 | 0 | 670 => Some("Sinano Electric => Some( Co. Ltd."), |
618 | 0 | 671 => Some("Sony Manufacturing Systems"), |
619 | 0 | 673 => Some("Contec Co. Ltd."), |
620 | 0 | 674 => Some("Automated Solutions"), |
621 | 0 | 675 => Some("Controlweigh"), |
622 | 0 | 677 => Some("Fincor Electronics"), |
623 | 0 | 678 => Some("Cognex Corporation"), |
624 | 0 | 679 => Some("Qualiflow"), |
625 | 0 | 680 => Some("Weidmuller Inc."), |
626 | 0 | 681 => Some("Morinaga Milk Industry Co. Ltd."), |
627 | 0 | 682 => Some("Takagi Industrial Co. Ltd."), |
628 | 0 | 683 => Some("Wittenstein AG"), |
629 | 0 | 684 => Some("Sena Technologies Inc."), |
630 | 0 | 686 => Some("APV Products Unna"), |
631 | 0 | 687 => Some("Creator Teknisk Utvedkling AB"), |
632 | 0 | 689 => Some("Mibu Denki Industrial Co. Ltd."), |
633 | 0 | 690 => Some("Takamastsu Machineer Section"), |
634 | 0 | 691 => Some("Startco Engineering Ltd."), |
635 | 0 | 693 => Some("Holjeron"), |
636 | 0 | 694 => Some("ALCATEL High Vacuum Technology"), |
637 | 0 | 695 => Some("Taesan LCD Co. Ltd."), |
638 | 0 | 696 => Some("POSCON"), |
639 | 0 | 697 => Some("VMIC"), |
640 | 0 | 698 => Some("Matsushita Electric Works Ltd."), |
641 | 0 | 699 => Some("IAI Corporation"), |
642 | 0 | 700 => Some("Horst GmbH"), |
643 | 0 | 701 => Some("MicroControl GmbH & Co."), |
644 | 0 | 702 => Some("Leine & Linde AB"), |
645 | 0 | 704 => Some("EC Elettronica Srl"), |
646 | 0 | 705 => Some("VIT Software HB"), |
647 | 0 | 706 => Some("Bronkhorst High-Tech B.V."), |
648 | 0 | 707 => Some("Optex Co. Ltd."), |
649 | 0 | 708 => Some("Yosio Electronic Co."), |
650 | 0 | 709 => Some("Terasaki Electric Co. Ltd."), |
651 | 0 | 710 => Some("Sodick Co. Ltd."), |
652 | 0 | 711 => Some("MTS Systems Corporation-Automation Division"), |
653 | 0 | 712 => Some("Mesa Systemtechnik"), |
654 | 0 | 713 => Some("SHIN HO SYSTEM Co. Ltd."), |
655 | 0 | 714 => Some("Goyo Electronics Co. Ltd."), |
656 | 0 | 715 => Some("Loreme"), |
657 | 0 | 716 => Some("SAB Brockskes GmbH & Co. KG"), |
658 | 0 | 717 => Some("Trumpf Laser GmbH + Co. KG"), |
659 | 0 | 718 => Some("Niigata Electronic Instruments Co. Ltd."), |
660 | 0 | 719 => Some("Yokogawa Digital Computer Corporation"), |
661 | 0 | 720 => Some("O.N. Electronic Co. Ltd."), |
662 | 0 | 721 => Some("Industrial Control Communication Inc."), |
663 | 0 | 722 => Some("ABB Inc."), |
664 | 0 | 723 => Some("ElectroWave USA Inc."), |
665 | 0 | 724 => Some("Industrial Network Controls, LC"), |
666 | 0 | 725 => Some("KDT Systems Co. Ltd."), |
667 | 0 | 726 => Some("SEFA Technology Inc."), |
668 | 0 | 727 => Some("Nippon POP Rivets and Fasteners Ltd."), |
669 | 0 | 728 => Some("Yamato Scale Co. Ltd."), |
670 | 0 | 729 => Some("Zener Electric"), |
671 | 0 | 730 => Some("GSE Scale Systems"), |
672 | 0 | 731 => Some("ISAS (Integrated Switchgear & Sys. Pty Ltd.)"), |
673 | 0 | 732 => Some("Beta LaserMike Limited"), |
674 | 0 | 733 => Some("TOEI Electric Co. Ltd."), |
675 | 0 | 734 => Some("Hakko Electronics Co. Ltd"), |
676 | 0 | 736 => Some("RFID Inc."), |
677 | 0 | 737 => Some("Adwin Corporation"), |
678 | 0 | 738 => Some("Osaka Vacuum Ltd."), |
679 | 0 | 739 => Some("A-Kyung Motion Inc."), |
680 | 0 | 740 => Some("Camozzi S.P.A."), |
681 | 0 | 741 => Some("Crevis Co., Ltd."), |
682 | 0 | 742 => Some("Rice Lake Weighing Systems"), |
683 | 0 | 743 => Some("Linux Network Services"), |
684 | 0 | 744 => Some("KEB Antriebstechnik GmbH"), |
685 | 0 | 745 => Some("Hagiwara Electric Co. Ltd."), |
686 | 0 | 746 => Some("Glass Inc. International"), |
687 | 0 | 748 => Some("DVT Corporation"), |
688 | 0 | 749 => Some("Woodward Governor"), |
689 | 0 | 750 => Some("Mosaic Systems Inc."), |
690 | 0 | 751 => Some("Laserline GmbH"), |
691 | 0 | 752 => Some("COM-TEC Inc."), |
692 | 0 | 753 => Some("Weed Instrument"), |
693 | 0 | 754 => Some("Prof-face European Technology Center"), |
694 | 0 | 755 => Some("Fuji Automation Co. Ltd."), |
695 | 0 | 756 => Some("Matsutame Co. Ltd."), |
696 | 0 | 757 => Some("Hitachi Via Mechanics Ltd."), |
697 | 0 | 758 => Some("Dainippon Screen Mfg. Co. Ltd."), |
698 | 0 | 759 => Some("FLS Automation A/S"), |
699 | 0 | 760 => Some("ABB Stotz Kontakt GmbH"), |
700 | 0 | 761 => Some("Technical Marine Service"), |
701 | 0 | 762 => Some("Advanced Automation Associates Inc."), |
702 | 0 | 763 => Some("Baumer Ident GmbH"), |
703 | 0 | 764 => Some("Tsubakimoto Chain Co."), |
704 | 0 | 766 => Some("Furukawa Co. Ltd."), |
705 | 0 | 767 => Some("Active Power"), |
706 | 0 | 768 => Some("CSIRO Mining Automation"), |
707 | 0 | 769 => Some("Matrix Integrated Systems"), |
708 | 0 | 770 => Some("Digitronic Automationsanlagen GmbH"), |
709 | 0 | 771 => Some("SICK STEGMANN Inc."), |
710 | 0 | 772 => Some("TAE-Antriebstechnik GmbH"), |
711 | 0 | 773 => Some("Electronic Solutions"), |
712 | 0 | 774 => Some("Rocon L.L.C."), |
713 | 0 | 775 => Some("Dijitized Communications Inc."), |
714 | 0 | 776 => Some("Asahi Organic Chemicals Industry Co. Ltd."), |
715 | 0 | 777 => Some("Hodensha"), |
716 | 0 | 778 => Some("Harting Inc. NA"), |
717 | 0 | 779 => Some("Kubler GmbH"), |
718 | 0 | 780 => Some("Yamatake Corporation"), |
719 | 0 | 781 => Some("JEOL"), |
720 | 0 | 782 => Some("Yamatake Industrial Systems Co.Ltd."), |
721 | 0 | 783 => Some("HAEHNE Elektronische Messgerate GmbH"), |
722 | 0 | 784 => Some("Ci Technologies Pty Ltd (for Pelamos Industries)"), |
723 | 0 | 785 => Some("N. SCHLUMBERGER & CIE"), |
724 | 0 | 786 => Some("Teijin Seiki Co. Ltd."), |
725 | 0 | 787 => Some("DAIKIN Industries Ltd."), |
726 | 0 | 788 => Some("RyuSyo Industrial Co. Ltd."), |
727 | 0 | 789 => Some("Saginomiya Seisakusho, Inc."), |
728 | 0 | 790 => Some("Seishin Engineering Co. Ltd."), |
729 | 0 | 791 => Some("Japan Support System Ltd."), |
730 | 0 | 792 => Some("Decsys"), |
731 | 0 | 793 => Some("Metronix Messgerate u. Elektronik GmbH"), |
732 | 0 | 794 => Some("ROPEX Industrie - Elektronik GmbH"), |
733 | 0 | 795 => Some("Vaccon Company Inc."), |
734 | 0 | 796 => Some("Siemens Energy & Automation Inc."), |
735 | 0 | 797 => Some("Ten X Technology Inc."), |
736 | 0 | 798 => Some("Tyco Electronics"), |
737 | 0 | 799 => Some("Delta Power Electronics Center"), |
738 | 0 | 800 => Some("Denker"), |
739 | 0 | 801 => Some("Autonics Corporation"), |
740 | 0 | 802 => Some("JFE Electronic Engineering Pty. Ltd."), |
741 | 0 | 804 => Some("Electro-Sensors Inc."), |
742 | 0 | 805 => Some("Digi International Inc."), |
743 | 0 | 806 => Some("Texas Instruments"), |
744 | 0 | 807 => Some("ADTEC Plasma Technology Co. Ltd."), |
745 | 0 | 808 => Some("SICK AG"), |
746 | 0 | 809 => Some("Ethernet Peripherals Inc."), |
747 | 0 | 810 => Some("Animatics Corporation"), |
748 | 0 | 812 => Some("Process Control Corporation"), |
749 | 0 | 813 => Some("SystemV. Inc."), |
750 | 0 | 814 => Some("Danaher Motion SRL"), |
751 | 0 | 815 => Some("SHINKAWA Sensor Technology Inc."), |
752 | 0 | 816 => Some("Tesch GmbH & Co. KG"), |
753 | 0 | 818 => Some("Trend Controls Systems Ltd."), |
754 | 0 | 819 => Some("Guangzhou ZHIYUAN Electronic Co. Ltd."), |
755 | 0 | 820 => Some("Mykrolis Corporation"), |
756 | 0 | 821 => Some("Bethlehem Steel Corporation"), |
757 | 0 | 822 => Some("KK ICP"), |
758 | 0 | 823 => Some("Takemoto Denki Corporation"), |
759 | 0 | 824 => Some("The Montalvo Corporation"), |
760 | 0 | 826 => Some("LEONI Special Cables GmbH"), |
761 | 0 | 828 => Some("ONO SOKKI CO., LTD."), |
762 | 0 | 829 => Some("Rockwell Samsung Automation"), |
763 | 0 | 830 => Some("SHINDENGEN ELECTRIC MFG. CO. LTD"), |
764 | 0 | 831 => Some("Origin Electric Co. Ltd."), |
765 | 0 | 832 => Some("Quest Technical Solutions Inc."), |
766 | 0 | 833 => Some("LS CableLtd."), |
767 | 0 | 834 => Some("Enercon-Nord Electronic GmbH"), |
768 | 0 | 835 => Some("Northwire Inc."), |
769 | 0 | 836 => Some("Engel Elektroantriebe GmbH"), |
770 | 0 | 837 => Some("The Stanley Works"), |
771 | 0 | 838 => Some("Celesco Transducer Products Inc."), |
772 | 0 | 839 => Some("Chugoku Electric Wire and Cable Co."), |
773 | 0 | 840 => Some("Kongsberg Simrad AS"), |
774 | 0 | 841 => Some("Panduit Corporation"), |
775 | 0 | 842 => Some("Spellman High Voltage Electronics Corp."), |
776 | 0 | 843 => Some("Kokusai Electric Alpha Co. Ltd."), |
777 | 0 | 844 => Some("Brooks Automation Inc."), |
778 | 0 | 845 => Some("ANYWIRE CORPORATION"), |
779 | 0 | 846 => Some("Honda Electronics Co. Ltd"), |
780 | 0 | 847 => Some("REO Elektronik AG"), |
781 | 0 | 848 => Some("Fusion UV Systems Inc."), |
782 | 0 | 849 => Some("ASI Advanced Semiconductor Instruments GmbH"), |
783 | 0 | 850 => Some("Datalogic Inc."), |
784 | 0 | 851 => Some("SoftPLC Corporation"), |
785 | 0 | 852 => Some("Dynisco Instruments LLC"), |
786 | 0 | 853 => Some("WEG Industrias SA"), |
787 | 0 | 854 => Some("Frontline Test Equipment Inc."), |
788 | 0 | 855 => Some("Tamagawa Seiki Co. Ltd."), |
789 | 0 | 856 => Some("Multi Computing Co. Ltd."), |
790 | 0 | 857 => Some("RVSI"), |
791 | 0 | 858 => Some("Commercial Timesharing Inc."), |
792 | 0 | 859 => Some("Tennessee Rand Automation LLC"), |
793 | 0 | 860 => Some("Wacogiken Co. Ltd"), |
794 | 0 | 861 => Some("Reflex Integration Inc."), |
795 | 0 | 862 => Some("Siemens AG, A&D PI Flow Instruments"), |
796 | 0 | 863 => Some("G. Bachmann Electronic GmbH"), |
797 | 0 | 864 => Some("NT International"), |
798 | 0 | 865 => Some("Schweitzer Engineering Laboratories"), |
799 | 0 | 866 => Some("ATR Industrie-Elektronik GmbH Co."), |
800 | 0 | 867 => Some("PLASMATECH Co. Ltd."), |
801 | 0 | 869 => Some("GEMU GmbH & Co. KG"), |
802 | 0 | 870 => Some("Alcorn McBride Inc."), |
803 | 0 | 871 => Some("Mori Seiki Co., Ltd."), |
804 | 0 | 872 => Some("NodeTech Systems Ltd."), |
805 | 0 | 873 => Some("Emhart Teknologies"), |
806 | 0 | 874 => Some("Cervis Inc."), |
807 | 0 | 875 => Some("FieldServer Technologies (Div Sierra Monitor Corp)"), |
808 | 0 | 876 => Some("NEDAP Power Supplies"), |
809 | 0 | 877 => Some("Nippon Sanso Corporation"), |
810 | 0 | 878 => Some("Mitomi Giken Co. Ltd."), |
811 | 0 | 879 => Some("PULS GmbH"), |
812 | 0 | 881 => Some("Japan Control Engineering Ltd."), |
813 | 0 | 882 => Some("Embedded Systems Korea (Former Zues Emtek Co Ltd.)"), |
814 | 0 | 883 => Some("Automa SRL"), |
815 | 0 | 884 => Some("Harms+Wende GmbH & Co KG"), |
816 | 0 | 885 => Some("SAE-STAHL GmbH"), |
817 | 0 | 886 => Some("Microwave Data Systems"), |
818 | 0 | 887 => Some("Bernecker + Rainer Industrie-Elektronik GmbH"), |
819 | 0 | 888 => Some("Hiprom Technologies"), |
820 | 0 | 890 => Some("Nitta Corporation"), |
821 | 0 | 891 => Some("Kontron Modular Computers GmbH"), |
822 | 0 | 892 => Some("Marlin Controls"), |
823 | 0 | 893 => Some("ELCIS s.r.l."), |
824 | 0 | 894 => Some("Acromag Inc."), |
825 | 0 | 895 => Some("Avery Weigh-Tronix"), |
826 | 0 | 899 => Some("Practicon Ltd"), |
827 | 0 | 900 => Some("Schunk GmbH & Co. KG"), |
828 | 0 | 901 => Some("MYNAH Technologies"), |
829 | 0 | 902 => Some("Defontaine Groupe"), |
830 | 0 | 903 => Some("Emerson Process Management Power & Water Solutions"), |
831 | 0 | 904 => Some("F.A. Elec"), |
832 | 0 | 905 => Some("Hottinger Baldwin Messtechnik GmbH"), |
833 | 0 | 906 => Some("Coreco Imaging Inc."), |
834 | 0 | 907 => Some("London Electronics Ltd."), |
835 | 0 | 908 => Some("HSD SpA"), |
836 | 0 | 909 => Some("Comtrol Corporation"), |
837 | 0 | 910 => Some("TEAM => Some( S.A. (Tecnica Electronica de Automatismo Y Medida)"), |
838 | 0 | 911 => Some("MAN B&W Diesel Ltd. Regulateurs Europa"), |
839 | 0 | 914 => Some("Micro Motion Inc."), |
840 | 0 | 915 => Some("Eckelmann AG"), |
841 | 0 | 916 => Some("Hanyoung Nux"), |
842 | 0 | 917 => Some("Ransburg Industrial Finishing KK"), |
843 | 0 | 918 => Some("Kun Hung Electric Co. Ltd."), |
844 | 0 | 919 => Some("Brimos wegbebakening b.v."), |
845 | 0 | 920 => Some("Nitto Seiki Co. Ltd."), |
846 | 0 | 921 => Some("PPT Vision Inc."), |
847 | 0 | 922 => Some("Yamazaki Machinery Works"), |
848 | 0 | 923 => Some("SCHMIDT Technology GmbH"), |
849 | 0 | 924 => Some("Parker Hannifin SpA (SBC Division)"), |
850 | 0 | 925 => Some("HIMA Paul Hildebrandt GmbH"), |
851 | 0 | 926 => Some("RivaTek Inc."), |
852 | 0 | 927 => Some("Misumi Corporation"), |
853 | 0 | 928 => Some("GE Multilin"), |
854 | 0 | 929 => Some("Measurement Computing Corporation"), |
855 | 0 | 930 => Some("Jetter AG"), |
856 | 0 | 931 => Some("Tokyo Electronics Systems Corporation"), |
857 | 0 | 932 => Some("Togami Electric Mfg. Co. Ltd."), |
858 | 0 | 933 => Some("HK Systems"), |
859 | 0 | 934 => Some("CDA Systems Ltd."), |
860 | 0 | 935 => Some("Aerotech Inc."), |
861 | 0 | 936 => Some("JVL Industrie Elektronik A/S"), |
862 | 0 | 937 => Some("NovaTech Process Solutions LLC"), |
863 | 0 | 939 => Some("Cisco Systems"), |
864 | 0 | 940 => Some("Grid Connect"), |
865 | 0 | 941 => Some("ITW Automotive Finishing"), |
866 | 0 | 942 => Some("HanYang System"), |
867 | 0 | 943 => Some("ABB K.K. Technical Center"), |
868 | 0 | 944 => Some("Taiyo Electric Wire & Cable Co.Ltd."), |
869 | 0 | 946 => Some("SEREN IPS INC"), |
870 | 0 | 947 => Some("Belden CDT Electronics Division"), |
871 | 0 | 948 => Some("ControlNet International"), |
872 | 0 | 949 => Some("Gefran S.P.A."), |
873 | 0 | 950 => Some("Jokab Safety AB"), |
874 | 0 | 951 => Some("SUMITA OPTICAL GLASS => Some( INC."), |
875 | 0 | 952 => Some("Biffi Italia srl"), |
876 | 0 | 953 => Some("Beck IPC GmbH"), |
877 | 0 | 954 => Some("Copley Controls Corporation"), |
878 | 0 | 955 => Some("Fagor Automation S. Coop."), |
879 | 0 | 956 => Some("DARCOM"), |
880 | 0 | 957 => Some("Frick Controls (div. of York International)"), |
881 | 0 | 958 => Some("SymCom Inc."), |
882 | 0 | 959 => Some("Infranor"), |
883 | 0 | 960 => Some("Kyosan CableLtd."), |
884 | 0 | 961 => Some("Varian Vacuum Technologies"), |
885 | 0 | 962 => Some("Messung Systems"), |
886 | 0 | 963 => Some("Xantrex Technology Inc."), |
887 | 0 | 964 => Some("StarThis Inc."), |
888 | 0 | 965 => Some("Chiyoda Co.Ltd."), |
889 | 0 | 966 => Some("Flowserve Corporation"), |
890 | 0 | 967 => Some("Spyder Controls Corp."), |
891 | 0 | 968 => Some("IBA AG"), |
892 | 0 | 969 => Some("SHIMOHIRA ELECTRIC MFG.CO.,LTD"), |
893 | 0 | 971 => Some("Siemens L&A"), |
894 | 0 | 972 => Some("Micro Innovations AG"), |
895 | 0 | 973 => Some("Switchgear & Instrumentation"), |
896 | 0 | 974 => Some("PRE-TECH CO. => Some( LTD."), |
897 | 0 | 975 => Some("National Semiconductor"), |
898 | 0 | 976 => Some("Invensys Process Systems"), |
899 | 0 | 977 => Some("Ametek HDR Power Systems"), |
900 | 0 | 979 => Some("TETRA-K Corporation"), |
901 | 0 | 980 => Some("C & M Corporation"), |
902 | 0 | 981 => Some("Siempelkamp Maschinen"), |
903 | 0 | 983 => Some("Daifuku America Corporation"), |
904 | 0 | 984 => Some("Electro-Matic Products Inc."), |
905 | 0 | 985 => Some("BUSSAN MICROELECTRONICS CORP."), |
906 | 0 | 986 => Some("ELAU AG"), |
907 | 0 | 987 => Some("Hetronic USA"), |
908 | 0 | 988 => Some("NIIGATA POWER SYSTEMS Co.Ltd."), |
909 | 0 | 989 => Some("Software Horizons Inc."), |
910 | 0 | 990 => Some("B3 Systems Inc."), |
911 | 0 | 991 => Some("Moxa Networking Co.Ltd."), |
912 | 0 | 993 => Some("S4 Integration"), |
913 | 0 | 994 => Some("Elettro Stemi S.R.L."), |
914 | 0 | 995 => Some("AquaSensors"), |
915 | 0 | 996 => Some("Ifak System GmbH"), |
916 | 0 | 997 => Some("SANKEI MANUFACTURING Co.,LTD."), |
917 | 0 | 998 => Some("Emerson Network Power Co.Ltd."), |
918 | 0 | 999 => Some("Fairmount Automation Inc."), |
919 | 0 | 1000 => Some("Bird Electronic Corporation"), |
920 | 0 | 1001 => Some("Nabtesco Corporation"), |
921 | 0 | 1002 => Some("AGM Electronics Inc."), |
922 | 0 | 1003 => Some("ARCX Inc."), |
923 | 0 | 1004 => Some("DELTA I/O Co."), |
924 | 0 | 1005 => Some("Chun IL Electric Ind. Co."), |
925 | 0 | 1006 => Some("N-Tron"), |
926 | 0 | 1007 => Some("Nippon Pneumatics/Fludics System CO., LTD."), |
927 | 0 | 1008 => Some("DDK Ltd."), |
928 | 0 | 1009 => Some("Seiko Epson Corporation"), |
929 | 0 | 1010 => Some("Halstrup-Walcher GmbH"), |
930 | 0 | 1011 => Some("ITT"), |
931 | 0 | 1012 => Some("Ground Fault Systems bv"), |
932 | 0 | 1013 => Some("Scolari Engineering S.p.A."), |
933 | 0 | 1014 => Some("Vialis Traffic bv"), |
934 | 0 | 1015 => Some("Weidmueller Interface GmbH & Co. KG"), |
935 | 0 | 1016 => Some("Shanghai Sibotech Automation Co. Ltd."), |
936 | 0 | 1017 => Some("AEG Power Supply Systems GmbH"), |
937 | 0 | 1018 => Some("Komatsu Electronics Inc."), |
938 | 0 | 1019 => Some("Souriau"), |
939 | 0 | 1020 => Some("Baumuller Chicago Corp."), |
940 | 0 | 1021 => Some("J. Schmalz GmbH"), |
941 | 0 | 1022 => Some("SEN Corporation"), |
942 | 0 | 1023 => Some("Korenix Technology Co. Ltd"), |
943 | 0 | 1024 => Some("Cooper Power Tools"), |
944 | 0 | 1025 => Some("INNOBIS"), |
945 | 0 | 1026 => Some("Shinho System"), |
946 | 0 | 1027 => Some("Xm Services Ltd."), |
947 | 0 | 1028 => Some("KVC Co.Ltd."), |
948 | 0 | 1029 => Some("Sanyu Seiki Co.Ltd."), |
949 | 0 | 1030 => Some("TuxPLC"), |
950 | 0 | 1031 => Some("Northern Network Solutions"), |
951 | 0 | 1032 => Some("Converteam GmbH"), |
952 | 0 | 1033 => Some("Symbol Technologies"), |
953 | 0 | 1034 => Some("S-TEAM Lab"), |
954 | 0 | 1035 => Some("Maguire Products Inc."), |
955 | 0 | 1036 => Some("AC&T"), |
956 | 0 | 1037 => Some("MITSUBISHI HEAVY INDUSTRIES, LTD. KOBE SHIPYARD & MACHINERY WORKS"), |
957 | 0 | 1038 => Some("Hurletron Inc."), |
958 | 0 | 1039 => Some("Chunichi Denshi Co.Ltd"), |
959 | 0 | 1040 => Some("Cardinal Scale Mfg. Co."), |
960 | 0 | 1041 => Some("BTR NETCOM via RIA Connect Inc."), |
961 | 0 | 1042 => Some("Base2"), |
962 | 0 | 1043 => Some("ASRC Aerospace"), |
963 | 0 | 1044 => Some("Beijing Stone Automation"), |
964 | 0 | 1045 => Some("Changshu Switchgear Manufacture Ltd."), |
965 | 0 | 1046 => Some("METRONIX Corp."), |
966 | 0 | 1047 => Some("WIT"), |
967 | 0 | 1048 => Some("ORMEC Systems Corp."), |
968 | 0 | 1049 => Some("ASATech (China) Inc."), |
969 | 0 | 1050 => Some("Controlled Systems Limited"), |
970 | 0 | 1051 => Some("Mitsubishi Heavy Ind. Digital System Co.Ltd. (M.H.I.)"), |
971 | 0 | 1052 => Some("Electrogrip"), |
972 | 0 | 1053 => Some("TDS Automation"), |
973 | 0 | 1054 => Some("T&C Power Conversion Inc."), |
974 | 0 | 1055 => Some("Robostar Co.Ltd"), |
975 | 0 | 1056 => Some("Scancon A/S"), |
976 | 0 | 1057 => Some("Haas Automation Inc."), |
977 | 0 | 1058 => Some("Eshed Technology"), |
978 | 0 | 1059 => Some("Delta Electronic Inc."), |
979 | 0 | 1060 => Some("Innovasic Semiconductor"), |
980 | 0 | 1061 => Some("SoftDEL Systems Limited"), |
981 | 0 | 1062 => Some("FiberFin Inc."), |
982 | 0 | 1063 => Some("Nicollet Technologies Corp."), |
983 | 0 | 1064 => Some("B.F. Systems"), |
984 | 0 | 1065 => Some("Empire Wire and Supply LLC"), |
985 | 0 | 1066 => Some("ENDO KOGYO CO., LTD"), |
986 | 0 | 1067 => Some("Elmo Motion Control LTD"), |
987 | 0 | 1069 => Some("Asahi Keiki Co. Ltd."), |
988 | 0 | 1070 => Some("Joy Mining Machinery"), |
989 | 0 | 1071 => Some("MPM Engineering Ltd."), |
990 | 0 | 1072 => Some("Wolke Inks & Printers GmbH"), |
991 | 0 | 1073 => Some("Mitsubishi Electric Engineering Co. Ltd."), |
992 | 0 | 1074 => Some("COMET AG"), |
993 | 0 | 1075 => Some("Real Time Objects & Systems, LLC"), |
994 | 0 | 1076 => Some("MISCO Refractometer"), |
995 | 0 | 1077 => Some("JT Engineering Inc."), |
996 | 0 | 1078 => Some("Automated Packing Systems"), |
997 | 0 | 1079 => Some("Niobrara R&D Corp."), |
998 | 0 | 1080 => Some("Garmin Ltd."), |
999 | 0 | 1081 => Some("Japan Mobile Platform Co. Ltd"), |
1000 | 0 | 1082 => Some("Advosol Inc."), |
1001 | 0 | 1083 => Some("ABB Global Services Limited"), |
1002 | 0 | 1084 => Some("Sciemetric Instruments Inc."), |
1003 | 0 | 1085 => Some("Tata Elxsi Ltd."), |
1004 | 0 | 1086 => Some("TPC Mechatronics => Some( Co. Ltd."), |
1005 | 0 | 1087 => Some("Cooper Bussmann"), |
1006 | 0 | 1088 => Some("Trinite Automatisering B.V."), |
1007 | 0 | 1089 => Some("Peek Traffic B.V."), |
1008 | 0 | 1090 => Some("Acrison Inc."), |
1009 | 0 | 1091 => Some("Applied Robotics Inc."), |
1010 | 0 | 1092 => Some("FireBus Systems Inc."), |
1011 | 0 | 1093 => Some("Beijing Sevenstar Huachuang Electronics"), |
1012 | 0 | 1094 => Some("Magnetek"), |
1013 | 0 | 1095 => Some("Microscan"), |
1014 | 0 | 1096 => Some("Air Water Inc."), |
1015 | 0 | 1097 => Some("Sensopart Industriesensorik GmbH"), |
1016 | 0 | 1098 => Some("Tiefenbach Control Systems GmbH"), |
1017 | 0 | 1099 => Some("INOXPA S.A"), |
1018 | 0 | 1100 => Some("Zurich University of Applied Sciences"), |
1019 | 0 | 1101 => Some("Ethernet Direct"), |
1020 | 0 | 1102 => Some("GSI-Micro-E Systems"), |
1021 | 0 | 1103 => Some("S-Net Automation Co.Ltd."), |
1022 | 0 | 1104 => Some("Power Electronics S.L."), |
1023 | 0 | 1105 => Some("Renesas Technology Corp."), |
1024 | 0 | 1106 => Some("NSWCCD-SSES"), |
1025 | 0 | 1107 => Some("Porter Engineering Ltd."), |
1026 | 0 | 1108 => Some("Meggitt Airdynamics Inc."), |
1027 | 0 | 1109 => Some("Inductive Automation"), |
1028 | 0 | 1110 => Some("Neural ID"), |
1029 | 0 | 1111 => Some("EEPod LLC"), |
1030 | 0 | 1112 => Some("Hitachi Industrial Equipment Systems Co. Ltd."), |
1031 | 0 | 1113 => Some("Salem Automation"), |
1032 | 0 | 1114 => Some("port GmbH"), |
1033 | 0 | 1115 => Some("B & PLUS"), |
1034 | 0 | 1116 => Some("Graco Inc."), |
1035 | 0 | 1117 => Some("Altera Corporation"), |
1036 | 0 | 1118 => Some("Technology Brewing Corporation"), |
1037 | 0 | 1121 => Some("CSE Servelec"), |
1038 | 0 | 1124 => Some("Fluke Networks"), |
1039 | 0 | 1125 => Some("Tetra Pak Packaging Solutions SPA"), |
1040 | 0 | 1126 => Some("Racine Federated Inc."), |
1041 | 0 | 1127 => Some("Pureron Japan Co. Ltd."), |
1042 | 0 | 1130 => Some("Brother Industries Ltd."), |
1043 | 0 | 1132 => Some("Leroy Automation"), |
1044 | 0 | 1134 => Some("THK CO., LTD."), |
1045 | 0 | 1137 => Some("TR-Electronic GmbH"), |
1046 | 0 | 1138 => Some("ASCON S.p.A."), |
1047 | 0 | 1139 => Some("Toledo do Brasil Industria de Balancas Ltda."), |
1048 | 0 | 1140 => Some("Bucyrus DBT Europe GmbH"), |
1049 | 0 | 1141 => Some("Emerson Process Management Valve Automation"), |
1050 | 0 | 1142 => Some("Alstom Transport"), |
1051 | 0 | 1144 => Some("Matrox Electronic Systems"), |
1052 | 0 | 1145 => Some("Littelfuse"), |
1053 | 0 | 1146 => Some("PLASMART Inc."), |
1054 | 0 | 1147 => Some("Miyachi Corporation"), |
1055 | 0 | 1150 => Some("Promess Incorporated"), |
1056 | 0 | 1151 => Some("COPA-DATA GmbH"), |
1057 | 0 | 1152 => Some("Precision Engine Controls Corporation"), |
1058 | 0 | 1153 => Some("Alga Automacao e controle LTDA"), |
1059 | 0 | 1154 => Some("U.I. Lapp GmbH"), |
1060 | 0 | 1155 => Some("ICES"), |
1061 | 0 | 1156 => Some("Philips Lighting bv"), |
1062 | 0 | 1157 => Some("Aseptomag AG"), |
1063 | 0 | 1158 => Some("ARC Informatique"), |
1064 | 0 | 1159 => Some("Hesmor GmbH"), |
1065 | 0 | 1160 => Some("Kobe SteelLtd."), |
1066 | 0 | 1161 => Some("FLIR Systems"), |
1067 | 0 | 1162 => Some("Simcon A/S"), |
1068 | 0 | 1163 => Some("COPALP"), |
1069 | 0 | 1164 => Some("Zypcom Inc."), |
1070 | 0 | 1165 => Some("Swagelok"), |
1071 | 0 | 1166 => Some("Elspec"), |
1072 | 0 | 1167 => Some("ITT Water & Wastewater AB"), |
1073 | 0 | 1168 => Some("Kunbus GmbH Industrial Communication"), |
1074 | 0 | 1170 => Some("Performance Controls Inc."), |
1075 | 0 | 1171 => Some("ACS Motion ControlLtd."), |
1076 | 0 | 1173 => Some("IStar Technology Limited"), |
1077 | 0 | 1174 => Some("Alicat Scientific Inc."), |
1078 | 0 | 1176 => Some("ADFweb.com SRL"), |
1079 | 0 | 1177 => Some("Tata Consultancy Services Limited"), |
1080 | 0 | 1178 => Some("CXR Ltd."), |
1081 | 0 | 1179 => Some("Vishay Nobel AB"), |
1082 | 0 | 1181 => Some("SolaHD"), |
1083 | 0 | 1182 => Some("Endress+Hauser"), |
1084 | 0 | 1183 => Some("Bartec GmbH"), |
1085 | 0 | 1185 => Some("AccuSentry Inc."), |
1086 | 0 | 1186 => Some("Exlar Corporation"), |
1087 | 0 | 1187 => Some("ILS Technology"), |
1088 | 0 | 1188 => Some("Control Concepts Inc."), |
1089 | 0 | 1190 => Some("Procon Engineering Limited"), |
1090 | 0 | 1191 => Some("Hermary Opto Electronics Inc."), |
1091 | 0 | 1192 => Some("Q-Lambda"), |
1092 | 0 | 1194 => Some("VAMP Ltd"), |
1093 | 0 | 1195 => Some("FlexLink"), |
1094 | 0 | 1196 => Some("Office FA.com Co. Ltd."), |
1095 | 0 | 1197 => Some("SPMC (Changzhou) Co. Ltd."), |
1096 | 0 | 1198 => Some("Anton Paar GmbH"), |
1097 | 0 | 1199 => Some("Zhuzhou CSR Times Electric Co. Ltd."), |
1098 | 0 | 1200 => Some("DeStaCo"), |
1099 | 0 | 1201 => Some("Synrad Inc"), |
1100 | 0 | 1202 => Some("Bonfiglioli Vectron GmbH"), |
1101 | 0 | 1203 => Some("Pivotal Systems"), |
1102 | 0 | 1204 => Some("TKSCT"), |
1103 | 0 | 1205 => Some("Randy Nuernberger"), |
1104 | 0 | 1206 => Some("CENTRALP"), |
1105 | 0 | 1207 => Some("Tengen Group"), |
1106 | 0 | 1208 => Some("OES Inc."), |
1107 | 0 | 1209 => Some("Actel Corporation"), |
1108 | 0 | 1210 => Some("Monaghan Engineering Inc."), |
1109 | 0 | 1211 => Some("wenglor sensoric gmbh"), |
1110 | 0 | 1212 => Some("HSA Systems"), |
1111 | 0 | 1213 => Some("MK Precision Co.Ltd."), |
1112 | 0 | 1214 => Some("Tappan Wire and Cable"), |
1113 | 0 | 1215 => Some("Heinzmann GmbH & Co. KG"), |
1114 | 0 | 1216 => Some("Process Automation International Ltd."), |
1115 | 0 | 1217 => Some("Secure Crossing"), |
1116 | 0 | 1218 => Some("SMA Railway Technology GmbH"), |
1117 | 0 | 1219 => Some("FMS Force Measuring Systems AG"), |
1118 | 0 | 1220 => Some("ABT Endustri Enerji Sistemleri Sanayi Tic. Ltd. Sti."), |
1119 | 0 | 1221 => Some("MagneMotion Inc."), |
1120 | 0 | 1222 => Some("STS Co.Ltd."), |
1121 | 0 | 1223 => Some("MERAK SIC => Some( SA"), |
1122 | 0 | 1224 => Some("ABOUNDI Inc."), |
1123 | 0 | 1225 => Some("Rosemount Inc."), |
1124 | 0 | 1226 => Some("GEA FES Inc."), |
1125 | 0 | 1227 => Some("TMG Technologie und Engineering GmbH"), |
1126 | 0 | 1228 => Some("embeX GmbH"), |
1127 | 0 | 1229 => Some("GH Electrotermia, S.A."), |
1128 | 0 | 1230 => Some("Tolomatic"), |
1129 | 0 | 1231 => Some("Dukane"), |
1130 | 0 | 1232 => Some("Elco (Tian Jin) Electronics Co.Ltd."), |
1131 | 0 | 1233 => Some("Jacobs Automation"), |
1132 | 0 | 1234 => Some("Noda Radio Frequency Technologies Co.Ltd."), |
1133 | 0 | 1235 => Some("MSC Tuttlingen GmbH"), |
1134 | 0 | 1236 => Some("Hitachi Cable Manchester"), |
1135 | 0 | 1237 => Some("ACOREL SAS"), |
1136 | 0 | 1238 => Some("Global Engineering Solutions Co.Ltd."), |
1137 | 0 | 1239 => Some("ALTE Transportation, S.L."), |
1138 | 0 | 1240 => Some("Penko Engineering B.V."), |
1139 | 0 | 1241 => Some("Z-Tec Automation Systems Inc."), |
1140 | 0 | 1242 => Some("ENTRON Controls LLC"), |
1141 | 0 | 1243 => Some("Johannes Huebner Fabrik Elektrischer Maschinen GmbH"), |
1142 | 0 | 1244 => Some("RF IDeas, Inc."), |
1143 | 0 | 1245 => Some("Pentronic AB"), |
1144 | 0 | 1246 => Some("SCA Schucker GmbH & Co. KG"), |
1145 | 0 | 1247 => Some("TDK-Lambda"), |
1146 | 0 | 1250 => Some("Altronic LLC"), |
1147 | 0 | 1251 => Some("Siemens AG"), |
1148 | 0 | 1252 => Some("Liebherr Transportation Systems GmbH & Co KG"), |
1149 | 0 | 1254 => Some("SKF USA Inc."), |
1150 | 0 | 1256 => Some("LMI Technologies"), |
1151 | 0 | 1259 => Some("EN Technologies Inc."), |
1152 | 0 | 1261 => Some("CEPHALOS Automatisierung mbH"), |
1153 | 0 | 1262 => Some("Atronix Engineering, Inc."), |
1154 | 0 | 1263 => Some("Monode Marking Products, Inc."), |
1155 | 0 | 1265 => Some("Quabbin Wire & Cable Co., Inc."), |
1156 | 0 | 1266 => Some("GPSat Systems Australia"), |
1157 | 0 | 1269 => Some("Tri-Tronics Co., Inc."), |
1158 | 0 | 1270 => Some("Rovema GmbH"), |
1159 | 0 | 1272 => Some("IEP GmbH"), |
1160 | 0 | 1277 => Some("Control Chief Corporation"), |
1161 | 0 | 1280 => Some("Jacktek Systems Inc."), |
1162 | 0 | 1282 => Some("PRIMES GmbH"), |
1163 | 0 | 1283 => Some("Branson Ultrasonics"), |
1164 | 0 | 1284 => Some("DEIF A/S"), |
1165 | 0 | 1285 => Some("3S-Smart Software Solutions GmbH"), |
1166 | 0 | 1287 => Some("Smarteye Corporation"), |
1167 | 0 | 1288 => Some("Toshiba Machine"), |
1168 | 0 | 1289 => Some("eWON"), |
1169 | 0 | 1290 => Some("OFS"), |
1170 | 0 | 1291 => Some("KROHNE"), |
1171 | 0 | 1293 => Some("General Cable Industries, Inc."), |
1172 | 0 | 1295 => Some("Kistler Instrumente AG"), |
1173 | 0 | 1296 => Some("YJS Co., Ltd."), |
1174 | 0 | 1301 => Some("Xylem Analytics Germany GmbH"), |
1175 | 0 | 1302 => Some("Lenord, Bauer & Co. GmbH"), |
1176 | 0 | 1303 => Some("Carlo Gavazzi Controls"), |
1177 | 0 | 1304 => Some("Faiveley Transport"), |
1178 | 0 | 1306 => Some("vMonitor"), |
1179 | 0 | 1307 => Some("Kepware Technologies"), |
1180 | 0 | 1308 => Some("duagon AG"), |
1181 | 0 | 1310 => Some("Xylem Water Solutions"), |
1182 | 0 | 1311 => Some("Automation Professionals, LLC"), |
1183 | 0 | 1313 => Some("CEIA SpA"), |
1184 | 0 | 1314 => Some("Marine Technologies LLC"), |
1185 | 0 | 1315 => Some("Alphagate Automatisierungstechnik GmbH"), |
1186 | 0 | 1316 => Some("Mecco Partners, LLC"), |
1187 | 0 | 1317 => Some("LAP GmbH Laser Applikationen"), |
1188 | 0 | 1318 => Some("ABB S.p.A. - SACE Division"), |
1189 | 0 | 1319 => Some("ABB S.p.A. - SACE Division"), |
1190 | 0 | 1322 => Some("Thermo Ramsey Inc."), |
1191 | 0 | 1323 => Some("Helmholz GmbH & Co. KG"), |
1192 | 0 | 1324 => Some("EUCHNER GmbH + Co. KG"), |
1193 | 0 | 1325 => Some("AMK GmbH & Co. KG"), |
1194 | 0 | 1326 => Some("Badger Meter"), |
1195 | 0 | 1328 => Some("Fisher-Rosemount Systems, Inc."), |
1196 | 0 | 1329 => Some("LJU Automatisierungstechnik GmbH"), |
1197 | 0 | 1330 => Some("Fairbanks Scales, Inc."), |
1198 | 0 | 1331 => Some("Imperx, Inc."), |
1199 | 0 | 1332 => Some("FRONIUS International GmbH"), |
1200 | 0 | 1333 => Some("Hoffman Enclosures"), |
1201 | 0 | 1334 => Some("Elecsys Corporation"), |
1202 | 0 | 1335 => Some("Bedrock Automation"), |
1203 | 0 | 1336 => Some("RACO Manufacturing and Engineering"), |
1204 | 0 | 1337 => Some("Hein Lanz Industrial Tech."), |
1205 | 0 | 1338 => Some("Synopsys, Inc. (formerly Codenomicon)"), |
1206 | 0 | 1341 => Some("Sensirion AG"), |
1207 | 0 | 1342 => Some("SIKO GmbH"), |
1208 | 0 | 1344 => Some("GRUNDFOS"), |
1209 | 0 | 1346 => Some("Beijer Electronics Products AB"), |
1210 | 0 | 1348 => Some("AIMCO"), |
1211 | 0 | 1350 => Some("Coval Vacuum Managers"), |
1212 | 0 | 1351 => Some("Powell Industries"), |
1213 | 0 | 1353 => Some("IPDisplays"), |
1214 | 0 | 1354 => Some("SCAIME SAS"), |
1215 | 0 | 1355 => Some("Metal Work SpA"), |
1216 | 0 | 1356 => Some("Telsonic AG"), |
1217 | 0 | 1358 => Some("Hauch & Bach ApS"), |
1218 | 0 | 1359 => Some("Pago AG"), |
1219 | 0 | 1360 => Some("ULTIMATE Europe Transportation Equipment GmbH"), |
1220 | 0 | 1362 => Some("Enovation Controls"), |
1221 | 0 | 1363 => Some("Lake Cable LLC"), |
1222 | 0 | 1367 => Some("Laird"), |
1223 | 0 | 1368 => Some("Nanotec Electronic GmbH & Co. KG"), |
1224 | 0 | 1369 => Some("SAMWON ACT Co., Ltd."), |
1225 | 0 | 1370 => Some("Aparian Inc."), |
1226 | 0 | 1371 => Some("Cosys Inc."), |
1227 | 0 | 1372 => Some("Insight Automation Inc."), |
1228 | 0 | 1374 => Some("FASTECH"), |
1229 | 0 | 1375 => Some("K.A. Schmersal GmbH & Co. KG"), |
1230 | 0 | 1377 => Some("Chromalox"), |
1231 | 0 | 1378 => Some("SEIDENSHA ELECTRONICS CO., LTD"), |
1232 | 0 | 1380 => Some("Don Electronics Ltd"), |
1233 | 0 | 1381 => Some("burster gmbh & co kg"), |
1234 | 0 | 1382 => Some("Unitronics (1989) (RG) LTD"), |
1235 | 0 | 1383 => Some("OEM Technology Solutions"), |
1236 | 0 | 1384 => Some("Allied Motion"), |
1237 | 0 | 1385 => Some("Mitron Oy"), |
1238 | 0 | 1386 => Some("Dengensha TOA"), |
1239 | 0 | 1387 => Some("Systec Systemtechnik und Industrieautomation GmbH"), |
1240 | 0 | 1389 => Some("Jenny Science AG"), |
1241 | 0 | 1390 => Some("Baumer Optronic GmbH"), |
1242 | 0 | 1391 => Some("Invertek Drives Ltd"), |
1243 | 0 | 1392 => Some("High Grade Controls Corporation"), |
1244 | 0 | 1394 => Some("Ishida Europe Limited"), |
1245 | 0 | 1396 => Some("Actia Systems"), |
1246 | 0 | 1398 => Some("Beijing Tiandi-Marco Electro-Hydraulic Control System Co., Ltd."), |
1247 | 0 | 1399 => Some("Universal Robots A/S"), |
1248 | 0 | 1401 => Some("Dialight"), |
1249 | 0 | 1402 => Some("E-T-A Elektrotechnische Apparate GmbH"), |
1250 | 0 | 1403 => Some("Kemppi Oy"), |
1251 | 0 | 1404 => Some("Tianjin Geneuo Technology Co., Ltd."), |
1252 | 0 | 1405 => Some("ORing Industrial Networking Corp."), |
1253 | 0 | 1406 => Some("Benchmark Electronics"), |
1254 | 0 | 1408 => Some("ELAP S.R.L."), |
1255 | 0 | 1409 => Some("Applied Mining Technologies"), |
1256 | 0 | 1410 => Some("KITZ SCT Corporation"), |
1257 | 0 | 1411 => Some("VTEX Corporation"), |
1258 | 0 | 1412 => Some("ESYSE GmbH Embedded Systems Engineering"), |
1259 | 0 | 1413 => Some("Automation Controls"), |
1260 | 0 | 1415 => Some("Cincinnati Test Systems"), |
1261 | 0 | 1417 => Some("Zumbach Electronics Corp."), |
1262 | 0 | 1418 => Some("Emerson Process Management"), |
1263 | 0 | 1419 => Some("CCS Inc."), |
1264 | 0 | 1420 => Some("Videojet, Inc."), |
1265 | 0 | 1421 => Some("Zebra Technologies"), |
1266 | 0 | 1422 => Some("Anritsu Infivis"), |
1267 | 0 | 1423 => Some("Dimetix AG"), |
1268 | 0 | 1424 => Some("General Measure (China)"), |
1269 | 0 | 1425 => Some("Fortress Interlocks"), |
1270 | 0 | 1427 => Some("Task Force Tips"), |
1271 | 0 | 1428 => Some("SERVO-ROBOT INC."), |
1272 | 0 | 1429 => Some("Flow Devices and Systems, Inc."), |
1273 | 0 | 1430 => Some("nLIGHT, Inc."), |
1274 | 0 | 1431 => Some("Microchip Technology Inc."), |
1275 | 0 | 1432 => Some("DENT Instruments"), |
1276 | 0 | 1433 => Some("CMC Industrial Electronics Ltd."), |
1277 | 0 | 1434 => Some("Accutron Instruments Inc."), |
1278 | 0 | 1435 => Some("Kaeser Kompressoren SE"), |
1279 | 0 | 1436 => Some("Optoelectronics"), |
1280 | 0 | 1437 => Some("Coherix, Inc."), |
1281 | 0 | 1438 => Some("FLSmidth A/S"), |
1282 | 0 | 1439 => Some("Kyland Corporation"), |
1283 | 0 | 1440 => Some("Cole-Parmer Instrument Company"), |
1284 | 0 | 1441 => Some("Wachendorff Automation GmbH & Co., KG"), |
1285 | 0 | 1442 => Some("SMAC Moving Coil Actuators"), |
1286 | 0 | 1444 => Some("PushCorp, Inc."), |
1287 | 0 | 1445 => Some("Fluke Process Instruments GmbH"), |
1288 | 0 | 1446 => Some("Mini Motor srl"), |
1289 | 0 | 1447 => Some("I-CON Industry Tech."), |
1290 | 0 | 1448 => Some("Grace Engineered Products, Inc."), |
1291 | 0 | 1449 => Some("Zaxis Inc."), |
1292 | 0 | 1450 => Some("Lumasense Technologies"), |
1293 | 0 | 1451 => Some("Domino Printing"), |
1294 | 0 | 1452 => Some("LightMachinery Inc"), |
1295 | 0 | 1453 => Some("DEUTA-WERKE GmbH"), |
1296 | 0 | 1454 => Some("Altus Sistemas de Automação S.A."), |
1297 | 0 | 1455 => Some("Criterion NDT"), |
1298 | 0 | 1456 => Some("InterTech Development Company"), |
1299 | 0 | 1457 => Some("Action Labs, Incorporated"), |
1300 | 0 | 1458 => Some("Perle Systems Limited"), |
1301 | 0 | 1459 => Some("Utthunga Technologies Pvt Ltd."), |
1302 | 0 | 1460 => Some("Dong IL Vision, Co., Ltd."), |
1303 | 0 | 1461 => Some("Wipotec Wiege-und Positioniersysteme GmbH"), |
1304 | 0 | 1462 => Some("Atos spa"), |
1305 | 0 | 1463 => Some("Solartron Metrology LTD"), |
1306 | 0 | 1464 => Some("Willowglen Systems Inc."), |
1307 | 0 | 1465 => Some("Analog Devices"), |
1308 | 0 | 1466 => Some("Power Electronics International, Inc."), |
1309 | 0 | 1468 => Some("Campbell Wrapper Corporatio"), |
1310 | 0 | 1469 => Some("Herkules-Resotec Elektronik GmbH"), |
1311 | 0 | 1470 => Some("aignep spa"), |
1312 | 0 | 1471 => Some("SHANGHAI CARGOA M.&E.EQUIPMENT CO. LTD"), |
1313 | 0 | 1472 => Some("PMV Automation AB"), |
1314 | 0 | 1473 => Some("K-Patents Oy"), |
1315 | 0 | 1474 => Some("Dynatronix"), |
1316 | 0 | 1475 => Some("Atop Technologies"), |
1317 | 0 | 1476 => Some("Bitronics, LLC."), |
1318 | 0 | 1477 => Some("Delta Tau Data Systems"), |
1319 | 0 | 1478 => Some("WITZ Corporation"), |
1320 | 0 | 1479 => Some("AUTOSOL"), |
1321 | 0 | 1480 => Some("ADB Safegate"), |
1322 | 0 | 1481 => Some("VersaBuilt, Inc"), |
1323 | 0 | 1482 => Some("Visual Technologies, Inc."), |
1324 | 0 | 1483 => Some("Artis GmbH"), |
1325 | 0 | 1484 => Some("Reliance Electric Limited"), |
1326 | 0 | 1485 => Some("Vanderlande"), |
1327 | 0 | 1486 => Some("Packet Power"), |
1328 | 0 | 1487 => Some("ima-tec gmbh"), |
1329 | 0 | 1488 => Some("Vision Automation A/S"), |
1330 | 0 | 1489 => Some("PROCENTEC BV"), |
1331 | 0 | 1490 => Some("HETRONIK GmbH"), |
1332 | 0 | 1491 => Some("Lanmark Controls Inc."), |
1333 | 0 | 1492 => Some("profichip GmbH"), |
1334 | 0 | 1493 => Some("flexlog GmbH"), |
1335 | 0 | 1494 => Some("YUCHANGTECH"), |
1336 | 0 | 1495 => Some("Dynapower Company"), |
1337 | 0 | 1496 => Some("TAKIKAWA ENGINEERING"), |
1338 | 0 | 1497 => Some("Ingersoll Rand"), |
1339 | 0 | 1498 => Some("ASA-RT s.r.l"), |
1340 | 0 | 1499 => Some("Trumpf Laser- und Systemtectechnik Gmbh"), |
1341 | 0 | 1500 => Some("SYNTEC TECHNOLOGY CORPORATION COMPANY"), |
1342 | 0 | 1501 => Some("Rinstrum"), |
1343 | 0 | 1502 => Some("Symbotic LLC"), |
1344 | 0 | 1503 => Some("GE Healthcare Life Sciences"), |
1345 | 0 | 1504 => Some("BlueBotics SA"), |
1346 | 0 | 1505 => Some("Dynapar Corporation"), |
1347 | 0 | 1506 => Some("Blum-Novotest"), |
1348 | 0 | 1507 => Some("CIMON"), |
1349 | 0 | 1508 => Some("Dalian SeaSky Automation Co., Ltd."), |
1350 | 0 | 1509 => Some("Rethink Robotics, Inc."), |
1351 | 0 | 1510 => Some("Ingeteam"), |
1352 | 0 | 1511 => Some("TOSEI ENGINEERING CORP."), |
1353 | 0 | 1512 => Some("SAMSON AG"), |
1354 | 0 | 1513 => Some("TGW Mechanics GmbH"), |
1355 | 3 | _ => None, |
1356 | | } |
1357 | 9 | } |
1358 | | |
1359 | 9 | fn enip_devicetype_string(p: u16) -> Option<&'static str> { |
1360 | 9 | match p { |
1361 | 3 | 0 => Some("Generic Device (deprecated)"), |
1362 | 0 | 1 => Some("Control Station (deprecated)"), |
1363 | 0 | 2 => Some("AC Drive Device"), |
1364 | 0 | 3 => Some("Motor Overload"), |
1365 | 0 | 4 => Some("Limit Switch"), |
1366 | 0 | 5 => Some("Inductive Proximity Switch"), |
1367 | 0 | 6 => Some("Photoelectric Sensor"), |
1368 | 0 | 7 => Some("General Purpose Discrete I/O"), |
1369 | 0 | 8 => Some("Encoder (deprecated)"), |
1370 | 0 | 9 => Some("Resolver"), |
1371 | 0 | 10 => Some("General Purpose Analog I/O (deprecated)"), |
1372 | 6 | 12 => Some("Communications Adapter"), |
1373 | 0 | 13 => Some("Barcode Scanner (deprecated)"), |
1374 | 0 | 14 => Some("Programmable Logic Controller"), |
1375 | 0 | 16 => Some("Position Controller"), |
1376 | 0 | 17 => Some("Weigh Scale (deprecated)"), |
1377 | 0 | 18 => Some("Message Display (deprecated)"), |
1378 | 0 | 19 => Some("DC Drive"), |
1379 | 0 | 20 => Some("Servo Drives (deprecated)"), |
1380 | 0 | 21 => Some("Contactor"), |
1381 | 0 | 22 => Some("Motor Starter"), |
1382 | 0 | 23 => Some("Softstart Starter"), |
1383 | 0 | 24 => Some("Human-Machine Interface"), |
1384 | 0 | 25 => Some("Pneumatic Valve(s) (deprecated)"), |
1385 | 0 | 26 => Some("Mass Flow Controller"), |
1386 | 0 | 27 => Some("Pneumatic Valve(s)"), |
1387 | 0 | 28 => Some("Vacuum Pressure Gauge"), |
1388 | 0 | 29 => Some("Process Control Value"), |
1389 | 0 | 30 => Some("Residual Gas Analyzer"), |
1390 | 0 | 31 => Some("DC Power Generator"), |
1391 | 0 | 32 => Some("RF Power Generator"), |
1392 | 0 | 33 => Some("Turbomolecular Vacuum Pump"), |
1393 | 0 | 34 => Some("Encoder"), |
1394 | 0 | 35 => Some("Safety Discrete I/O Device"), |
1395 | 0 | 36 => Some("Fluid Flow Controller"), |
1396 | 0 | 37 => Some("CIP Motion Drive"), |
1397 | 0 | 38 => Some("CompoNet Repeater"), |
1398 | 0 | 39 => Some("Mass Flow Controller Enhanced"), |
1399 | 0 | 40 => Some("CIP Modbus Device"), |
1400 | 0 | 41 => Some("CIP Modbus Translator"), |
1401 | 0 | 42 => Some("Safety Analog I/O Device"), |
1402 | 0 | 43 => Some("Generic Device (keyable)"), |
1403 | 0 | 44 => Some("Managed Ethernet Switch"), |
1404 | 0 | 45 => Some("CIP Motion Safety Drive Device"), |
1405 | 0 | 46 => Some("Safety Drive Device"), |
1406 | 0 | 47 => Some("CIP Motion Encoder"), |
1407 | 0 | 48 => Some("CIP Motion Converter"), |
1408 | 0 | 49 => Some("CIP Motion I/O"), |
1409 | 0 | 50 => Some("ControlNet Physical Layer Component"), |
1410 | 0 | 100 => Some("In-Sight 2000 Series"), |
1411 | 0 | 200 => Some("Embedded Component"), |
1412 | 0 | 150 => Some("PowerFlex 525"), |
1413 | 0 | 773 => Some("DataMan Series Reader"), |
1414 | 0 | _ => None, |
1415 | | } |
1416 | 9 | } |
1417 | | |
1418 | 48.4k | fn cip_service_string(p: u8) -> Option<&'static str> { |
1419 | 48.4k | match p { |
1420 | 46 | 0x01 => Some("Get Attributes All"), |
1421 | 13 | 0x02 => Some("Set Attributes All"), |
1422 | 44.2k | 0x03 => Some("Get Attribute List"), |
1423 | 9 | 0x04 => Some("Set Attribute List"), |
1424 | 0 | 0x05 => Some("Reset"), |
1425 | 9 | 0x06 => Some("Start"), |
1426 | 13 | 0x07 => Some("Stop"), |
1427 | 7 | 0x08 => Some("Create"), |
1428 | 14 | 0x09 => Some("Delete"), |
1429 | 3.93k | 0x0A => Some("Multiple Service Packet"), |
1430 | 0 | 0x0D => Some("Apply Attributes"), |
1431 | 0 | 0x0E => Some("Get Attributes Single"), |
1432 | 2 | 0x10 => Some("Set Attributes Single"), |
1433 | 0 | 0x11 => Some("Find Next Object Instance"), |
1434 | 3 | 0x15 => Some("Restore"), |
1435 | 0 | 0x16 => Some("Save"), |
1436 | 0 | 0x17 => Some("No Forward Open"), |
1437 | 11 | 0x18 => Some("Get Member"), |
1438 | 3 | 0x19 => Some("Set Member"), |
1439 | 3 | 0x1A => Some("Insert Member"), |
1440 | 0 | 0x1B => Some("Remove Member"), |
1441 | 1 | 0x1C => Some("Group Sync"), |
1442 | 0 | 0x1D => Some("Get Connection Point Member List"), |
1443 | | // these next ones are class-specific |
1444 | 0 | 0x4B => Some("Execute PCCC Service"), |
1445 | 1 | 0x4C => Some("Read Data"), |
1446 | 1 | 0x4D => Some("Write Data"), |
1447 | 0 | 0x4E => Some("Read Write Modify Data"), |
1448 | 0 | 0x52 => Some("Read Data Fragmented"), |
1449 | 0 | 0x53 => Some("Write Data Fragmented"), |
1450 | 4 | 0x54 => Some("Forward Open"), |
1451 | 146 | _ => None, |
1452 | | } |
1453 | 48.4k | } |
1454 | | |
1455 | 23.7k | fn cip_status_string(p: u8) -> Option<&'static str> { |
1456 | 23.7k | match p { |
1457 | 23.7k | 0x00 => Some("Success"), |
1458 | 1 | 0x01 => Some("Connection Failure"), |
1459 | 0 | 0x02 => Some("Resource Unavailable"), |
1460 | 1 | 0x03 => Some("Invalid Parameter Value"), |
1461 | 0 | 0x04 => Some("Path Segment Error"), |
1462 | 0 | 0x05 => Some("Path Destination Unknown"), |
1463 | 0 | 0x06 => Some("Partial Transfer"), |
1464 | 1 | 0x07 => Some("Connection Lost"), |
1465 | 0 | 0x08 => Some("Service Not Supported"), |
1466 | 0 | 0x09 => Some("Invalid Attribute Value"), |
1467 | 0 | 0x0A => Some("Attribute List Error"), |
1468 | 0 | 0x0B => Some("Already In Requested Mode/State"), |
1469 | 0 | 0x0C => Some("Object State Conflict"), |
1470 | 0 | 0x0D => Some("Object Already Exists"), |
1471 | 0 | 0x0E => Some("Attribute Not Settable"), |
1472 | 0 | 0x0F => Some("Privilege Violation"), |
1473 | 0 | 0x10 => Some("Device State Conflict"), |
1474 | 0 | 0x11 => Some("Reply Data Too Large"), |
1475 | 0 | 0x12 => Some("Fragmentation Of A Primitive Value"), |
1476 | 0 | 0x13 => Some("Not Enough Data"), |
1477 | 0 | 0x14 => Some("Attribute Not Supported"), |
1478 | 0 | 0x15 => Some("Too Much Data"), |
1479 | 0 | 0x16 => Some("Object Does Not Exist"), |
1480 | 0 | 0x17 => Some("Service Fragmentation Sequence Not In Progress"), |
1481 | 0 | 0x18 => Some("No Stored Attribute Data"), |
1482 | 0 | 0x19 => Some("Store Operation Failure"), |
1483 | 0 | 0x1A => Some("Routing Failure, Request Packet Too Large"), |
1484 | 0 | 0x1B => Some("Routing Failure, Response Packet Too Large"), |
1485 | 0 | 0x1C => Some("Missing Attribute List Entry Data"), |
1486 | 0 | 0x1D => Some("Invalid Attribute Value List"), |
1487 | 0 | 0x1E => Some("Embedded Service Error"), |
1488 | 0 | 0x1F => Some("Vendor Specific Error"), |
1489 | 2 | 0x20 => Some("Invalid Parameter"), |
1490 | 0 | 0x21 => Some("Write-Once Value Or Medium Already Written"), |
1491 | 0 | 0x22 => Some("Invalid Reply Received"), |
1492 | 0 | 0x23 => Some("Buffer Overflow"), |
1493 | 0 | 0x24 => Some("Invalid Message Format"), |
1494 | 0 | 0x25 => Some("Key Failure In Path"), |
1495 | 0 | 0x26 => Some("Path Size Invalid"), |
1496 | 0 | 0x27 => Some("Unexpected Attribute In List"), |
1497 | 0 | 0x28 => Some("Invalid Member ID"), |
1498 | 3 | 0x29 => Some("Member Not Settable"), |
1499 | 0 | 0x2A => Some("Group 2 Only Server General Failure"), |
1500 | 0 | 0x2B => Some("Unknown Modbus Error"), |
1501 | 0 | 0x2C => Some("Attribute Not Gettable"), |
1502 | 0 | 0xFF => Some("Still Processing"), |
1503 | 15 | _ => None, |
1504 | | } |
1505 | 23.7k | } |
1506 | | |
1507 | 19 | fn cip_status_extended_string(p: &[u8]) -> Option<&'static str> { |
1508 | 19 | if p.len() == 2 { |
1509 | 4 | let val = ((p[1] as u16) << 8) | (p[0] as u16); |
1510 | 4 | return match val { |
1511 | 0 | 0x100 => Some( "Connection in use or duplicate Forward Open"), |
1512 | 0 | 0x103 => Some( "Transport class and trigger combination not supported"), |
1513 | 0 | 0x106 => Some( "Ownership conflict"), |
1514 | 0 | 0x107 => Some( "Target connection not found"), |
1515 | 0 | 0x108 => Some( "Invalid network connection parameter"), |
1516 | 0 | 0x109 => Some( "Invalid connection size"), |
1517 | 0 | 0x110 => Some( "Target for connection not configured"), |
1518 | 0 | 0x111 => Some( "RPI not supported"), |
1519 | 0 | 0x112 => Some( "RPI value(s) not acceptable"), |
1520 | 0 | 0x113 => Some( "Out of connections"), |
1521 | 0 | 0x114 => Some( "Vendor ID or product code mismatch"), |
1522 | 0 | 0x115 => Some( "Device type mismatch"), |
1523 | 0 | 0x116 => Some( "Revision mismatch"), |
1524 | 0 | 0x117 => Some( "Invalid produced or consumed application path"), |
1525 | 0 | 0x118 => Some( "Invalid or inconsistent configuration application path"), |
1526 | 0 | 0x119 => Some( "Non-listen only connection not opened"), |
1527 | 0 | 0x11A => Some( "Target object out of connections"), |
1528 | 0 | 0x11B => Some( "RPI is smaller than the production inhibit time"), |
1529 | 0 | 0x11C => Some( "Transport class not supported"), |
1530 | 0 | 0x11D => Some( "Production trigger not supported"), |
1531 | 0 | 0x11E => Some( "Direction not supported"), |
1532 | 0 | 0x11F => Some( "Invalid O->T Fixed/Variable"), |
1533 | 0 | 0x120 => Some( "Invalid T->O Fixed/Variable"), |
1534 | 0 | 0x121 => Some( "Invalid O->T Priority"), |
1535 | 0 | 0x122 => Some( "Invalid T->O Priority"), |
1536 | 0 | 0x123 => Some( "Invalid O->T connection type"), |
1537 | 2 | 0x124 => Some( "Invalid T->O connection type"), |
1538 | 0 | 0x125 => Some( "Invalid O->T redundant owner"), |
1539 | 0 | 0x126 => Some( "Invalid configuration size"), |
1540 | 0 | 0x127 => Some( "Invalid O->T size"), |
1541 | 0 | 0x128 => Some( "Invalid T->O size"), |
1542 | 0 | 0x129 => Some( "Invalid configuration application path"), |
1543 | 0 | 0x12A => Some( "Invalid consuming application path"), |
1544 | 0 | 0x12B => Some( "Invalid producing application path"), |
1545 | 0 | 0x12C => Some( "Configuration symbol does not exist"), |
1546 | 0 | 0x12D => Some( "Consuming symbol does not exist"), |
1547 | 0 | 0x12E => Some( "Producing symbol does not exist"), |
1548 | 0 | 0x12F => Some( "Inconsistent application path combination"), |
1549 | 0 | 0x130 => Some( "Inconsistent consume data format"), |
1550 | 0 | 0x131 => Some( "Inconsistent produce data format"), |
1551 | 0 | 0x132 => Some( "NULL ForwardOpen not supported"), |
1552 | 0 | 0x203 => Some( "Connection timed out"), |
1553 | 0 | 0x204 => Some( "Unconnected request timed out"), |
1554 | 0 | 0x205 => Some( "Parameter error in unconnected request"), |
1555 | 0 | 0x206 => Some( "Message too large for UnconnectedSend"), |
1556 | 0 | 0x207 => Some( "Unconnected acknowledged without reply"), |
1557 | 0 | 0x301 => Some( "No buffer memory available"), |
1558 | 0 | 0x302 => Some( "Network bandwidth not available for data"), |
1559 | 0 | 0x303 => Some( "No consumed connection ID filter available"), |
1560 | 0 | 0x304 => Some( "Not configured to send scheduled priority data"), |
1561 | 0 | 0x305 => Some( "Schedule signature mismatch"), |
1562 | 0 | 0x306 => Some( "Schedule signature validation not possible"), |
1563 | 0 | 0x311 => Some( "Port not available"), |
1564 | 0 | 0x312 => Some( "Link address not valid"), |
1565 | 0 | 0x315 => Some( "Invalid segment in connection path"), |
1566 | 0 | 0x316 => Some( "ForwardClose connection path mismatch"), |
1567 | 0 | 0x317 => Some( "Scheduling not specified"), |
1568 | 0 | 0x318 => Some( "Link address to self invalid"), |
1569 | 0 | 0x319 => Some( "Secondary resources unavailable"), |
1570 | 0 | 0x31A => Some( "Rack connection already established"), |
1571 | 0 | 0x31B => Some( "Module connection already established"), |
1572 | 0 | 0x31C => Some( "Miscellaneous"), |
1573 | 0 | 0x31D => Some( "Redundant connection mismatch"), |
1574 | 0 | 0x31E => Some( "No more user configurable link consumer resources available in the producing module"), |
1575 | 0 | 0x31F => Some( "No more user configurable link consumer resources configured in the producing module"), |
1576 | 0 | 0x800 => Some( "Network link offline"), |
1577 | 0 | 0x801 => Some( "Incompatible Multicast RPI"), |
1578 | 0 | 0x802 => Some( "Invalid Safety Connection Size"), |
1579 | 0 | 0x803 => Some( "Invalid Safety Connection Format"), |
1580 | 0 | 0x804 => Some( "Invalid Time Correction Connection Parameters"), |
1581 | 0 | 0x805 => Some( "Invalid Ping Interval EPI Multiplier"), |
1582 | 0 | 0x806 => Some( "Time Coordination Msg Min Multiplier"), |
1583 | 0 | 0x807 => Some( "Network Time Expectation Multiplier"), |
1584 | 0 | 0x808 => Some( "Timeout Multiplier"), |
1585 | 0 | 0x809 => Some( "Invalid Max Consumer Number"), |
1586 | 0 | 0x80A => Some( "Invalid CPCRC"), |
1587 | 0 | 0x80B => Some( "Time Correction Connection ID Invalid"), |
1588 | 0 | 0x80C => Some( "SCID Mismatch"), |
1589 | 0 | 0x80D => Some( "TUNID not set"), |
1590 | 0 | 0x80E => Some( "TUNID Mismatch"), |
1591 | 0 | 0x80F => Some( "Configuration operation not allowed"), |
1592 | 0 | 0x810 => Some( "No target application data available"), |
1593 | 0 | 0x811 => Some( "No originator application data available"), |
1594 | 0 | 0x812 => Some( "Node address has changed since the network was scheduled"), |
1595 | 0 | 0x813 => Some( "Not configured for off-subnet multicast"), |
1596 | 0 | 0x814 => Some( "Invalid produce/consume data format"), |
1597 | 2 | _ => None, |
1598 | | }; |
1599 | 15 | } |
1600 | 15 | None |
1601 | 19 | } |
1602 | | |
1603 | 24.4k | fn cip_class_string(p: u32) -> Option<&'static str> { |
1604 | 24.4k | match p { |
1605 | 5 | 0x00 => Some(""), |
1606 | 1.98k | 0x01 => Some("Identity"), |
1607 | 2.00k | 0x02 => Some("Message Router"), |
1608 | 2 | 0x03 => Some("DeviceNet"), |
1609 | 0 | 0x04 => Some("Assembly"), |
1610 | 0 | 0x05 => Some("Connection"), |
1611 | 0 | 0x06 => Some("Connection Manager"), |
1612 | 0 | 0x07 => Some("Register"), |
1613 | 0 | 0x08 => Some("Discrete Input Point"), |
1614 | 0 | 0x09 => Some("Discrete Output Point"), |
1615 | 0 | 0x0A => Some("Analog Input Point"), |
1616 | 0 | 0x0B => Some("Analog Output Point"), |
1617 | 0 | 0x0E => Some("Presence Sensing"), |
1618 | 0 | 0x0F => Some("Parameter"), |
1619 | 0 | 0x10 => Some("Parameter Group"), |
1620 | 0 | 0x12 => Some("Group"), |
1621 | 0 | 0x1D => Some("Discrete Input Group"), |
1622 | 0 | 0x1E => Some("Discrete Output Group"), |
1623 | 0 | 0x1F => Some("Discrete Group"), |
1624 | 0 | 0x20 => Some("Analog Input Group"), |
1625 | 0 | 0x21 => Some("Analog Output Group"), |
1626 | 0 | 0x22 => Some("Analog Group"), |
1627 | 0 | 0x23 => Some("Position Sensor"), |
1628 | 8 | 0x24 => Some("Position Controller Supervisor"), |
1629 | 2 | 0x25 => Some("Position Controller"), |
1630 | 0 | 0x26 => Some("Block Sequencer"), |
1631 | 0 | 0x27 => Some("Command Block"), |
1632 | 0 | 0x28 => Some("Motor Data"), |
1633 | 0 | 0x29 => Some("Control Supervisor"), |
1634 | 0 | 0x2A => Some("AC/DC Drive"), |
1635 | 0 | 0x2B => Some("Acknowledge Handler"), |
1636 | 0 | 0x2C => Some("Overload"), |
1637 | 0 | 0x2D => Some("Softstart"), |
1638 | 0 | 0x2E => Some("Selection"), |
1639 | 0 | 0x30 => Some("S-Device Supervisor"), |
1640 | 0 | 0x31 => Some("S-Analog Sensor"), |
1641 | 0 | 0x32 => Some("S-Analog Actuator"), |
1642 | 0 | 0x33 => Some("S-Single Stage Controller"), |
1643 | 0 | 0x34 => Some("S-Gas Calibration"), |
1644 | 0 | 0x35 => Some("Trip Point"), |
1645 | 0 | 0x37 => Some("File"), |
1646 | 0 | 0x38 => Some("S-Partial Pressure"), |
1647 | 0 | 0x39 => Some("Safety Supervisor"), |
1648 | 0 | 0x3A => Some("Safety Validator"), |
1649 | 0 | 0x3B => Some("Safety Discrete Output Point"), |
1650 | 0 | 0x3C => Some("Safety Discrete Output Group"), |
1651 | 0 | 0x3D => Some("Safety Discrete Input Point"), |
1652 | 0 | 0x3E => Some("Safety Discrete Input Group"), |
1653 | 0 | 0x3F => Some("Safety Dual Channel Output"), |
1654 | 0 | 0x40 => Some("S-Sensor Calibration"), |
1655 | 0 | 0x41 => Some("Event Log"), |
1656 | 0 | 0x42 => Some("Motion Device Axis"), |
1657 | 0 | 0x43 => Some("Time Sync"), |
1658 | 0 | 0x44 => Some("Modbus"), |
1659 | 0 | 0x45 => Some("Originator Connection List"), |
1660 | 0 | 0x46 => Some("Modbus Serial Link"), |
1661 | 0 | 0x47 => Some("Device Level Ring (DLR)"), |
1662 | 0 | 0x48 => Some("QoS"), |
1663 | 0 | 0x49 => Some("Safety Analog Input Point"), |
1664 | 0 | 0x4A => Some("Safety Analog Input Group"), |
1665 | 0 | 0x4B => Some("Safety Dual Channel Analog Input"), |
1666 | 0 | 0x4C => Some("SERCOS III Link"), |
1667 | 0 | 0x4D => Some("Target Connection List"), |
1668 | 0 | 0x4E => Some("Base Energy"), |
1669 | 0 | 0x4F => Some("Electrical Energy"), |
1670 | 0 | 0x50 => Some("Non-Electrical Energy"), |
1671 | 0 | 0x51 => Some("Base Switch"), |
1672 | 0 | 0x52 => Some("SNMP"), |
1673 | 0 | 0x53 => Some("Power Management"), |
1674 | 0 | 0x54 => Some("RSTP Bridge"), |
1675 | 0 | 0x55 => Some("RSTP Port"), |
1676 | 0 | 0x56 => Some("PRP/HSR Protocol"), |
1677 | 0 | 0x57 => Some("PRP/HSR Nodes Table"), |
1678 | 0 | 0x58 => Some("Safety Feedback"), |
1679 | 0 | 0x59 => Some("Safety Dual Channel Feedback"), |
1680 | 0 | 0x5A => Some("Safety Stop Functions"), |
1681 | 0 | 0x5B => Some("Safety Limit Functions"), |
1682 | 0 | 0x5C => Some("Power Curtailment"), |
1683 | 2 | 0x5D => Some("CIP Security"), |
1684 | 0 | 0x5E => Some("EtherNet/IP Security"), |
1685 | 0 | 0x5F => Some("Certificate Management"), |
1686 | 0 | 0x67 => Some("PCCC Class"), |
1687 | 2 | 0xF0 => Some("ControlNet"), |
1688 | 0 | 0xF1 => Some("ControlNet Keeper"), |
1689 | 0 | 0xF2 => Some("ControlNet Scheduling"), |
1690 | 0 | 0xF3 => Some("Connection Configuration"), |
1691 | 0 | 0xF4 => Some("Port"), |
1692 | 0 | 0xF5 => Some("TCP/IP Interface"), |
1693 | 0 | 0xF6 => Some("Ethernet Link"), |
1694 | 0 | 0xF7 => Some("CompoNet"), |
1695 | 0 | 0xF8 => Some("CompoNet Repeater"), |
1696 | 20.4k | _ => None, |
1697 | | } |
1698 | 24.4k | } |
1699 | | |
1700 | 48.8k | fn log_cip_path_segment(c: &EnipCipPathSegment) -> Result<JsonBuilder, JsonError> { |
1701 | 48.8k | let mut js = JsonBuilder::try_new_object()?; |
1702 | 48.8k | match cip_segment_type_string(c.segment_type) { |
1703 | 48.8k | Some(val) => { |
1704 | 48.8k | js.set_string("segment_type", val)?; |
1705 | | } |
1706 | | None => { |
1707 | 3 | js.set_string("segment_type", &format!("unknown-{}", c.segment_type))?; |
1708 | | } |
1709 | | } |
1710 | 48.8k | js.set_uint("value", c.value)?; |
1711 | 48.8k | js.close()?; |
1712 | 48.8k | Ok(js) |
1713 | 48.8k | } |
1714 | | |
1715 | 5.42k | fn log_cip(c: &EnipCIP, js: &mut JsonBuilder) -> Result<(), JsonError> { |
1716 | 10.8k | for item in c.items.iter() { |
1717 | 10.8k | if let EnipItemPayload::Data(d) = &item.payload { |
1718 | 5.39k | js.open_object("cip")?; |
1719 | 5.39k | log_cip_data(&d.cip, js)?; |
1720 | 5.39k | js.close()?; |
1721 | 5.39k | return Ok(()); |
1722 | 5.41k | } |
1723 | | } |
1724 | 34 | return Ok(()); |
1725 | 5.42k | } |
1726 | | |
1727 | 48.4k | fn log_cip_data(d: &CipData, js: &mut JsonBuilder) -> Result<(), JsonError> { |
1728 | 48.4k | match cip_service_string(d.service) { |
1729 | 48.3k | Some(val) => { |
1730 | 48.3k | js.set_string("service", val)?; |
1731 | | } |
1732 | | None => { |
1733 | 146 | js.set_string("service", &format!("unknown-{}", d.service))?; |
1734 | | } |
1735 | | } |
1736 | 48.4k | match &d.cipdir { |
1737 | 23.7k | CipDir::Response(resp) => { |
1738 | 23.7k | match cip_status_string(resp.status) { |
1739 | 23.7k | Some(val) => { |
1740 | 23.7k | js.set_string("status", val)?; |
1741 | | } |
1742 | | None => { |
1743 | 15 | js.set_string("status", &format!("unknown-{}", resp.status))?; |
1744 | | } |
1745 | | } |
1746 | 23.7k | if !resp.status_extended.is_empty() { |
1747 | 19 | js.set_hex("status_extended", &resp.status_extended)?; |
1748 | 19 | if let Some(val) = cip_status_extended_string(&resp.status_extended) { |
1749 | 2 | js.set_string("status_extended_meaning", val)?; |
1750 | 17 | } |
1751 | 23.7k | } |
1752 | 23.7k | if let EnipCipResponsePayload::Multiple(m) = &resp.payload { |
1753 | 1.93k | if !m.packet_list.is_empty() { |
1754 | 1.92k | js.open_array("multiple")?; |
1755 | 21.2k | for p in m.packet_list.iter() { |
1756 | 21.2k | let mut js2 = JsonBuilder::try_new_object()?; |
1757 | | // parsing has already limited recursion |
1758 | 21.2k | log_cip_data(p, &mut js2)?; |
1759 | 21.2k | js2.close()?; |
1760 | 21.2k | js.append_object(&js2)?; |
1761 | | } |
1762 | 1.92k | js.close()?; |
1763 | 8 | } |
1764 | 21.8k | } |
1765 | | } |
1766 | 24.6k | CipDir::Request(req) => { |
1767 | 24.6k | if !req.path.is_empty() { |
1768 | 24.4k | js.open_array("path")?; |
1769 | 48.8k | for seg in req.path.iter() { |
1770 | 48.8k | js.append_object(&log_cip_path_segment(seg)?)?; |
1771 | | } |
1772 | 24.4k | js.close()?; |
1773 | 48.8k | for i in 0..req.path.len() { |
1774 | | //take last class |
1775 | 48.8k | let idx = req.path.len() - 1 - i; |
1776 | 48.8k | if (req.path[idx].segment_type & 0xFC) == 0x20 { |
1777 | 24.4k | match cip_class_string(req.path[idx].value) { |
1778 | 4.00k | Some(val) => { |
1779 | 4.00k | js.set_string("class_name", val)?; |
1780 | | } |
1781 | | None => { |
1782 | 20.4k | js.set_string( |
1783 | 20.4k | "class_name", |
1784 | 20.4k | &format!("unknown-{}", req.path[idx].value), |
1785 | 0 | )?; |
1786 | | } |
1787 | | } |
1788 | 24.4k | break; |
1789 | 24.4k | } |
1790 | | } |
1791 | 227 | } |
1792 | 24.6k | if let EnipCipRequestPayload::Multiple(m) = &req.payload { |
1793 | 1.99k | if !m.packet_list.is_empty() { |
1794 | 1.98k | js.open_array("multiple")?; |
1795 | 21.8k | for p in m.packet_list.iter() { |
1796 | 21.8k | let mut js2 = JsonBuilder::try_new_object()?; |
1797 | | // parsing has already limited recursion |
1798 | 21.8k | log_cip_data(p, &mut js2)?; |
1799 | 21.8k | js2.close()?; |
1800 | 21.8k | js.append_object(&js2)?; |
1801 | | } |
1802 | 1.98k | js.close()?; |
1803 | 13 | } |
1804 | 22.6k | } |
1805 | | } |
1806 | 0 | CipDir::None => {} |
1807 | | } |
1808 | 48.4k | Ok(()) |
1809 | 48.4k | } |
1810 | | |
1811 | 3.16k | fn log_enip(tx: &EnipTransaction, js: &mut JsonBuilder) -> Result<(), JsonError> { |
1812 | 3.16k | js.open_object("enip")?; |
1813 | 3.16k | if let Some(ref request) = tx.request { |
1814 | 2.82k | js.open_object("request")?; |
1815 | 2.82k | log_enip_header(&request.header, js)?; |
1816 | 2.82k | match &request.payload { |
1817 | 2.75k | EnipPayload::Cip(cip) => { |
1818 | 2.75k | log_cip(cip, js)?; |
1819 | | } |
1820 | 0 | EnipPayload::RegisterSession(rs) => { |
1821 | 0 | js.open_object("register_session")?; |
1822 | 0 | js.set_uint("protocol_version", rs.protocol_version)?; |
1823 | 0 | js.set_uint("options", rs.options)?; |
1824 | 0 | js.close()?; |
1825 | | } |
1826 | 65 | _ => {} |
1827 | | } |
1828 | 2.82k | js.close()?; |
1829 | 339 | } |
1830 | 3.16k | if let Some(ref response) = tx.response { |
1831 | 2.72k | js.open_object("response")?; |
1832 | 2.72k | log_enip_header(&response.header, js)?; |
1833 | 9 | match &response.payload { |
1834 | 0 | EnipPayload::RegisterSession(rs) => { |
1835 | 0 | js.open_object("register_session")?; |
1836 | 0 | js.set_uint("protocol_version", rs.protocol_version)?; |
1837 | 0 | js.set_uint("options", rs.options)?; |
1838 | 0 | js.close()?; |
1839 | | } |
1840 | 2.66k | EnipPayload::Cip(cip) => { |
1841 | 2.66k | log_cip(cip, js)?; |
1842 | | } |
1843 | 0 | EnipPayload::ListServices(lsp) if !lsp.is_empty() => { |
1844 | 0 | if let EnipItemPayload::Services(ls) = &lsp[0].payload { |
1845 | 0 | js.open_object("list_services")?; |
1846 | 0 | js.set_uint("protocol_version", ls.protocol_version)?; |
1847 | 0 | js.set_uint("capabilities", ls.capabilities)?; |
1848 | 0 | js.set_string("service_name", &String::from_utf8_lossy(&ls.service_name))?; |
1849 | 0 | js.close()?; |
1850 | 0 | } |
1851 | | } |
1852 | 9 | EnipPayload::ListIdentity(lip) if !lip.is_empty() => { |
1853 | 9 | if let EnipItemPayload::Identity(li) = &lip[0].payload { |
1854 | 9 | js.open_object("identity")?; |
1855 | 9 | js.set_uint("protocol_version", li.protocol_version)?; |
1856 | 9 | js.set_string( |
1857 | 9 | "revision", |
1858 | 9 | &format!("{}.{}", li.revision_major, li.revision_minor), |
1859 | 0 | )?; |
1860 | 9 | match enip_vendorid_string(li.vendor_id) { |
1861 | 6 | Some(val) => { |
1862 | 6 | js.set_string("vendor_id", val)?; |
1863 | | } |
1864 | | None => { |
1865 | 3 | js.set_string("vendor_id", &format!("unknown-{}", li.vendor_id))?; |
1866 | | } |
1867 | | } |
1868 | 9 | match enip_devicetype_string(li.device_type) { |
1869 | 9 | Some(val) => { |
1870 | 9 | js.set_string("device_type", val)?; |
1871 | | } |
1872 | | None => { |
1873 | 0 | js.set_string("device_type", &format!("unknown-{}", li.device_type))?; |
1874 | | } |
1875 | | } |
1876 | 9 | js.set_uint("product_code", li.product_code)?; |
1877 | 9 | js.set_uint("status", li.status)?; |
1878 | 9 | js.set_uint("serial", li.serial)?; |
1879 | 9 | js.set_string("product_name", &String::from_utf8_lossy(&li.product_name))?; |
1880 | 9 | js.set_uint("state", li.state)?; |
1881 | 9 | js.close()?; |
1882 | 0 | } |
1883 | | } |
1884 | 46 | _ => {} |
1885 | | } |
1886 | 2.72k | js.close()?; |
1887 | 439 | } |
1888 | 3.16k | js.close()?; |
1889 | 3.16k | Ok(()) |
1890 | 3.16k | } |
1891 | | |
1892 | | #[no_mangle] |
1893 | 3.16k | pub unsafe extern "C" fn SCEnipLoggerLog( |
1894 | 3.16k | tx: *mut std::os::raw::c_void, js: &mut JsonBuilder, |
1895 | 3.16k | ) -> bool { |
1896 | 3.16k | let tx = cast_pointer!(tx, EnipTransaction); |
1897 | 3.16k | if tx.request.is_none() && tx.response.is_none() { |
1898 | 0 | return false; |
1899 | 3.16k | } |
1900 | 3.16k | log_enip(tx, js).is_ok() |
1901 | 3.16k | } |