%{
/*
 * Copyright 2016 Google Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

%}
struct string_match {
  char *vendor_class;
  char *genus;
  char *species;
};
%%
6328-2Re| "InnoMedia VoIP adapter", "MTA6328-2Re"
AEROHIVE| "Aerohive Wifi AP", "Aerohive Wifi AP"
AirStation Series BUFFALO INC.| "Buffalo Wifi AP", "Buffalo AirStation AP"
ArubaAP| "Aruba Wifi AP", "Aruba Wifi AP"
ArubaInstantAP| "Aruba Wifi AP", "Aruba Wifi AP"
ccp.avaya.com| "Avaya IP Phone", "Avaya IP Phone"
Cisco 802.11n AP Bridge| "Cisco Wifi AP", "Cisco Wifi AP"
Dell Network Printer| "Dell Printer", "Dell Printer"
DUNEHD| "Dune media player", "DuneHD media player"
ecobee1| "ecobee thermostat", "ecobee thermostat"
HD409N| "ZaapTV", "Zaap HD409N"
Hewlett-Packard JetDirect| "HP Printer", "HP Printer"
Hewlett-Packard LaserJet| "HP Printer", "HP LaserJet"
Hewlett-Packard OfficeJet| "HP Printer", "HP OfficeJet"
iDRAC| "Dell Remote Access Controller", "DRAC"
ipphone.mitel.com| "Mitel IP Phone", "Mitel IP Phone"
IP2061| "Icon IP Phone", "IP2061"
IWATSUIP| "Icon IP Phone", "Icon IP Phone"
MC361| "Oki Printer", "Oki MC361"
MC362| "Oki Printer", "Oki MC362"
MERAKI| "Meraki Wifi AP", "Meraki Wifi AP"
MicroChip Network Stack| "Microchip board", "Microchip board"
Motorola_AP| "Motorola Wifi AP", "Motorola Wifi AP"
OptiIpPhone| "Siemens IP Phone", "Siemens IP Phone"
PS3| "Playstation", "3"
PS4| "Playstation", "4"
PS Vita| "Playstation", "Vita"
PS Vita TV| "Playstation", "Vita"
Ruckus CPE| "Ruckus Wifi AP", "Ruckus Wifi AP"
SAMSUNG Network Printer| "Samsung Printer", "Samsung Printer"
SEC_ITP| "Samsung IP Phone", "Samsung IP Phone"
ShoreTel IP Phone| "ShoreTel IP Phone", "ShoreTel IP Phone"
SIP-T38G| "Yealink IP Phone", "SIP-T38G"
SSG5-Serial-WLAN| "Juniper Gateway", "SSG5"
TOSHIBA IPedge| "Toshiba VoIP adapter", "Toshiba VoIP adapter"
ubnt| "Ubiquiti Wifi AP", "Ubiquiti Wifi AP"
VIZIO VIA| "Vizio Smart TV", "Vizio Smart TV"
Withings00| "Withings Scale", "Withings Scale"
XBOX 1.0| "Xbox", "Xbox"
Xbox 360| "Xbox", "Xbox 360"
Xerox Phaser| "Xerox Printer", "Xerox Printer"
XEROX Network Printer| "Xerox Printer", "Xerox Printer"
yealink| "Yealink IP Phone", "Yealink IP Phone"
%%
