Home | History | Annotate | Download | only in hdt
      1 /* ----------------------------------------------------------------------- *
      2  *
      3  *   Copyright 2011 Erwan Velu - All Rights Reserved
      4  *
      5  *   Permission is hereby granted, free of charge, to any person
      6  *   obtaining a copy of this software and associated documentation
      7  *   files (the "Software"), to deal in the Software without
      8  *   restriction, including without limitation the rights to use,
      9  *   copy, modify, merge, publish, distribute, sublicense, and/or
     10  *   sell copies of the Software, and to permit persons to whom
     11  *   the Software is furnished to do so, subject to the following
     12  *   conditions:
     13  *
     14  *   The above copyright notice and this permission notice shall
     15  *   be included in all copies or substantial portions of the Software.
     16  *
     17  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     18  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
     19  *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     20  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
     21  *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
     22  *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     23  *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     24  *   OTHER DEALINGS IN THE SOFTWARE.
     25  *
     26  * -----------------------------------------------------------------------
     27  */
     28 
     29 #include "hdt-common.h"
     30 #include "hdt-dump.h"
     31 #include <sys/gpxe.h>
     32 #include <netinet/in.h>
     33 
     34 void dump_pxe(struct s_hardware *hardware, ZZJSON_CONFIG *config, ZZJSON **item) {
     35 	struct in_addr in;
     36 
     37 	CREATE_NEW_OBJECT;
     38 	add_hb(is_pxe_valid);
     39 	if (hardware->is_pxe_valid) {
     40 		char buffer[32] = {0};
     41 		snprintf(buffer,sizeof(buffer),"0x%x",hardware->pxe.vendor_id);
     42 		add_s("pxe.vendor_id",buffer);
     43 		snprintf(buffer,sizeof(buffer),"0x%x",hardware->pxe.product_id);
     44 		add_s("pxe.product_id",buffer);
     45 		snprintf(buffer,sizeof(buffer),"0x%x",hardware->pxe.subvendor_id);
     46 		add_s("pxe.subvendor_id",buffer);
     47 		snprintf(buffer,sizeof(buffer),"0x%x",hardware->pxe.subproduct_id);
     48 		add_s("pxe.subproduct_id",buffer);
     49 
     50 		if (hardware->pci_ids_return_code == -ENOPCIIDS || (hardware->pxe.pci_device == NULL)) {
     51 			add_s("Manufacturer_name","no_pci_ids_file or no device found");
     52 			add_s("Product_name","no_pci_ids_file or no device found");
     53 		} else {
     54 			add_s("Manufacturer_name", hardware->pxe.pci_device->dev_info->vendor_name);
     55 			add_s("Product_name", hardware->pxe.pci_device->dev_info->product_name);
     56 		}
     57 
     58 		add_hi(pxe.rev);
     59 		add_hi(pxe.pci_bus);
     60 		add_hi(pxe.pci_dev);
     61 		add_hi(pxe.pci_func);
     62 		add_hi(pxe.base_class);
     63 		add_hi(pxe.sub_class);
     64 		add_hi(pxe.prog_intf);
     65 		add_hi(pxe.nictype);
     66 		add_hs(pxe.mac_addr);
     67 
     68 		in.s_addr = hardware->pxe.dhcpdata.cip;
     69 		add_s("pxe.client_ip", inet_ntoa(in));
     70 		in.s_addr = hardware->pxe.dhcpdata.sip;
     71 		add_s("pxe.next_server_ip",inet_ntoa(in));
     72 		in.s_addr = hardware->pxe.dhcpdata.gip;
     73 		add_s("pxe.relay_agent_ip",inet_ntoa(in));
     74 		memcpy(&in, hardware->pxe.ip_addr, sizeof in);
     75 		add_s("pxe.ipaddr",inet_ntoa(in));
     76 		add_b("gpxe_detected",is_gpxe());
     77 	}
     78 	FLUSH_OBJECT;
     79 	to_cpio("pxe");
     80 }
     81