Coverage Report

Created: 2026-08-14 07:34

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
}