{"action":"created","comment":{"url":"https://api.github.com/repos/ipmitool/ipmitool/pulls/comments/206115494","pull_request_review_id":123774593,"id":206115494,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNjExNTQ5NA==","diff_hunk":"@@ -338,6 +365,689 @@ usage(void)\n \tlprintf(LOG_NOTICE,\n \"delloem <command> help\");\n }\n+/*****************************************************************\n+* Function Name:       ipmi_delloem_sysinfo_main\n+*\n+* Description:         This function processes the delloem sysinfo command\n+* Input:               intf    - ipmi interface\n+                       argc    - no of arguments\n+                       argv    - argument string array\n+* Output:\n+*\n+* Return:              return code     0 - success\n+*                         -1 - failure\n+*\n+******************************************************************/\n+\n+static int ipmi_delloem_sysinfo_main (struct ipmi_intf * intf, int argc, char ** argv)\n+{\n+    int rc = 0;\n+\tcurrent_arg++;\n+\n+\tif (argc <= current_arg) {\n+\t\trc = ipmi_sysinfo_id(intf, 0);\n+\t} else {\n+\t\tipmi_sysinfo_usage();\n+\t}\n+\treturn rc;\n+}\n+\n+/*****************************************************************\n+* Function Name: \tipmi_get_bib_info\n+*\n+* Description:\tThis function retrieves following info from BIB (BIOS information block)\n+\t\t\tsection of the FRU:\n+*              \t\to PDRODUCT_MODEL\n+*              \t\to ASSET_TAG\n+*              \t\to SERVICE_TAG\n+*              \t\to BIOS_VERSION\n+*\n+* Input: \t\tfru_data - pointer to fru area\n+*\t\t\tbib_type - Product / Asset tag / Service tag / Bios version\n+* Output:\n+*\n+* Return:\t\tbib_data - BIOS information block data\n+*\n+******************************************************************/\n+static char*  ipmi_get_bib_info(uint8_t * fru_data, uint8_t bib_type)\n+{\n+\tuint16_t bib_offset, bib_info_area, bib_length, bib_end, length;\n+\tuint32_t offset;\n+\tchar * bib_data;\n+\n+\t/* get BIB fields */\n+\tif (fru_data[0x66] == 0xc3) {\n+\t\tbib_offset = (fru_data[0x68] << 8) | fru_data[0x67];\n+\t} else if (fru_data[0x69] == 0xc3) {\n+\t\tbib_offset = (fru_data[0x6B] << 8) | fru_data[0x6A];\n+\t}\n+\n+\n+\tbib_info_area = bib_offset + 6;\n+\tbib_length = (fru_data[bib_info_area+2]<<8) | fru_data[bib_info_area+1];\n+\tbib_end = bib_info_area + bib_length;\n+\n+\t/* find BIB field */\n+\toffset = bib_info_area;\n+\twhile ((fru_data[offset] != bib_type) && (offset <= bib_end)) {\n+\t\toffset += fru_data[offset+1]+3;\n+\t}\n+\tif (fru_data[offset] == bib_type) {\t/* bib info found */\n+\t\tif (bib_type == BIB_TYPE_PDRODUCT_MODEL) {\n+\t\t\tlength = fru_data[offset+1]-6;\n+\t\t} else {\n+\t\t\tlength = fru_data[offset+1];\n+\t\t}\n+\n+\t\tbib_data = malloc(length+1);\n+\t\tmemset(bib_data, 0, length+1);\n+\t\tif (bib_type == BIB_TYPE_PDRODUCT_MODEL) {\n+\t\t\tmemcpy(bib_data, &fru_data[offset+8], length);\n+\t\t} else {\n+\t\t\tmemcpy(bib_data, &fru_data[offset+2], length);\n+\t\t}\n+\t\tbib_data[length] = '\\0';\n+/*\t\tprintf(\"BIOS version: %s\\n\", bib_data);*/\n+\t} else {\n+\t\tbib_data = NULL;\n+\t}\n+\treturn bib_data;\n+}\n+\n+/*****************************************************************\n+* Function Name: \tipmi_sysinfo_get_tag\n+*\n+* Description:\tThis function retrieves tag string\n+*\n+* Input: \t\tintf \t\t- pointer to interface\n+*\t\t\ttag_type - either assettag / servicetag\n+*\t\t\tlength\t- length of the tagstring\n+* Output: \ttagstring - assettag  / servicetag string\n+*\n+* Return:\t\t0\n+*\n+******************************************************************/\n+\n+static int ipmi_sysinfo_get_tag(struct ipmi_intf * intf,\n+\t\t\t\t\tchar* tagstring, uint8_t tag_type, uint8_t length)\n+{\n+\tstruct ipmi_rs * rsp = NULL;\n+\tstruct ipmi_rq req = {0,0,0,0,0,0};\n+\tuint8_t data[4] = {0};\n+\tIPMI_DELL_TAG * tagblock;\n+\n+\t\tmemset (&req,0,sizeof(req));\n+\n+\t\treq.msg.netfn = IPMI_NETFN_APP;\n+\t\treq.msg.lun = 0;\n+\t\treq.msg.cmd = IPMI_GET_SYS_INFO;\n+\t\treq.msg.data_len = 4;\n+\t\treq.msg.data = data;\n+\t\tdata[0] = 0;\t\t/* get parameter*/\n+\t\tdata[1] = tag_type;\t/* get asset tag*/\n+\t\tdata[2] = 0;\n+\t\tdata[3] = 0;\n+\n+\t\trsp = intf->sendrecv(intf, &req);\n+\n+\t\tif (rsp == NULL) {\n+\t\t\tlprintf(LOG_ERR, \" Error getting asset tag\");\n+\t\t\treturn -1;\n+\t\t} else if (rsp->ccode > 0) {\n+\t\t\tlprintf(LOG_ERR, \" Error getting asset tag: %s\",\n+\t\t\t\tval2str(rsp->ccode, completion_code_vals));\n+\t\t\treturn -1;\n+\t\t}\n+\n+\t\ttagblock = (IPMI_DELL_TAG *) (void *) rsp->data;\n+\t\tmemset(tagstring, 0,tagblock->length);\n+\t\tmemcpy (tagstring, &tagblock->tag, tagblock->length);\n+\t\ttagstring[tagblock->length] = '\\0' ;\n+\n+\t\treturn 0;\n+\n+}\n+/*****************************************************************\n+* Function Name: \tipmi_sysinfo_print_board\n+*\n+* Description:\tThis function prints FRU Board Area for sysinfo command\n+* Input: \t\tintf \t\t\t- pointer to ipmi interface\n+*\t\t\tfru\t\t\t- pointer to fru area\n+*\t\t\tid\t\t\t- fru id\n+*\t\t\toffset\t\t- offset to fru area\n+*\t\t\tipmi_version\t- ipmi version\n+* Output:\n+*\n+* Return:\n+*\n+******************************************************************/\n+static void\n+ipmi_sysinfo_print_board(struct ipmi_intf * intf, struct fru_info * fru,\n+\t\t     uint8_t id, uint32_t offset, uint8_t ipmi_version)\n+{\n+\tchar * fru_area;\n+\tuint8_t * fru_data, *fru_data_tmp;\n+\tuint8_t language;\n+\tuint32_t fru_len, area_len, i, j;\n+\tuint16_t length;\n+\n+    fru_area=NULL;\n+\tj = 0;\n+\n+\ti = offset;\n+\tfru_len = 0;\n+\n+\n+\tfru_data_tmp = fru_data = malloc(fru->size + 1);\n+\tif (fru_data == NULL) {\n+\t\tlprintf(LOG_ERR, \" Out of memory!\");\n+\t\treturn;\n+\t}\n+\tmemset(fru_data, 0, fru->size + 1);\n+\n+\t/* read enough to check length field */\n+\tif (read_fru_area(intf, fru, id, i, 2, fru_data_tmp) == 0)\n+//\t\tfru_len = 8 * fru_data[i + 1];\n+\t\tfru_len = 8 * fru_data[1];\n+\tif (fru_len <= 0) {\n+\t\tfree(fru_data);\n+\t\treturn;\n+\t}\n+\n+\tfru_len = 0x200;\n+\ti = 0;\n+\t/* read in the full fru */\n+\tif (read_fru_area(intf, fru, id, i, fru_len, fru_data_tmp) < 0) {\n+\t\tfree(fru_data);\n+\t\treturn;\n+\t}\n+\tBoardOffsetPtr = (fru_data[BOARD_OFFSET])*OFFSETMULTIPLIER;\n+\tProductOffsetPtr = (fru_data[PRODUCT_OFFSET])*OFFSETMULTIPLIER;\n+\tif(iDRAC_FLAG == IDRAC_14G)\n+\t\tlanguage = fru_data[BoardOffsetPtr+BOARDLANGOFFSET];\n+\telse if (iDRAC_FLAG == IDRAC_13G)\n+\t\tlanguage = fru_data[10];\n+\n+\tif (language == 0x00) {\n+\t\tprintf(\"Board Language Code : English\\n\");\n+\t} else {\n+\t\tprintf(\"Board Language Code : Unknown\\n\");\n+\t}\n+\n+\tif(iDRAC_FLAG == IDRAC_14G)\n+\t\ti=BoardOffsetPtr+BOARDPRODUCTMANFLENOFFSET;\n+\telse if (iDRAC_FLAG == IDRAC_13G) {\n+\n+\ti = 8;\n+\n+\ti++;\t/* skip fru area version */\n+\tarea_len = fru_data[i++] * 8; /* fru area length */\n+\ti++;\t/* skip fru board language */\n+\ti += 3;\t/* skip mfg. date time */\n+\n+\t}\n+\n+\tfru_area = get_fru_area_str(fru_data, &i);\n+\tif (fru_area != NULL && strlen(fru_area) > 0) {\n+\t\tfree(fru_area);\n+\t}\n+\n+\tfru_area = get_fru_area_str(fru_data, &i);\n+\tif (fru_area != NULL && strlen(fru_area) > 0) {\n+\t\tprintf(\"Board Product Name  : %s\\n\", fru_area);\n+\n+\t\tfree(fru_area);\n+\t}\n+\n+\tfru_area = get_fru_area_str(fru_data, &i);\n+\tif (fru_area != NULL && strlen(fru_area) > 0) {\n+\t\tprintf(\"Board Serial Number : %s\\n\", fru_area);\n+\n+\n+\t\tfree(fru_area);\n+\t}\n+\n+\tfru_area = get_fru_area_str(fru_data, &i);\n+\tif (fru_area != NULL && strlen(fru_area) > 0)\n+\t{\n+\t\tprintf(\"Board Part Number   : %s\\n\", fru_area);\n+\t\tfree(fru_area);\n+\t}\n+\n+\tfru_area = get_fru_area_str(fru_data, &i);\n+\tif (fru_area != NULL && strlen(fru_area) > 0)\n+\t{\n+\t\tif (*fru_area<48)\n+\t\t\t*fru_area='\\0';\n+        printf(\"Board FRU File ID   : %s\\n\", fru_area);\n+\t\tfree(fru_area);\n+\t}\n+\n+\t/* read any extra fields */\n+\twhile ((fru_data[i] != 0xc1) && (i < offset + area_len))\n+\t{\n+\t\tint j = i;\n+\t\tfru_area = get_fru_area_str(fru_data, &i);\n+\t\tif (fru_area != NULL && strlen(fru_area) > 0) {\n+\t\t\tprintf(\" Board Extra           : %s\\n\", fru_area);\n+\t\t\tfree(fru_area);\n+\t\t}\n+\t\tif (i == j)\n+\t\t\tbreak;\n+\t}\n+\n+\tif (ipmi_version == 0x51) {\n+\n+\n+\t\t/* get host name */\n+\t\tlength = (fru_data[0x72] << 8) | (fru_data[0x71]);\n+\t\tfru_area = malloc(length+1);\n+\t\tmemset(fru_area, 0, length+1);\n+\t\tmemcpy(fru_area, &fru_data[0x75], length);\n+\t\tfru_area[length] = '\\0';\n+\t\tprintf(\"Host Name           : %s\\n\", fru_area);\n+\t\tfree(fru_area);\n+\n+\t\tfru_area = ipmi_get_bib_info(fru_data, BIB_TYPE_PDRODUCT_MODEL);\n+\t\tif (fru_area != NULL && strlen(fru_area) > 0) {\n+\t\t\tprintf(\"Product Model       : %s\\n\", fru_area);\n+\t\t\tfree(fru_area);\n+\t\t}\n+\t\tfru_area = ipmi_get_bib_info(fru_data, BIB_TYPE_ASSET_TAG);\n+\t\tif (fru_area != NULL && strlen(fru_area) > 0) {\n+\t\t\tprintf(\"Asset Tag           : %s\\n\", fru_area);\n+\t\t\tfree(fru_area);\n+\t\t}\n+\t\tfru_area = ipmi_get_bib_info(fru_data, BIB_TYPE_SERVICE_TAG);\n+\t\tif (fru_area != NULL && strlen(fru_area) > 0) {\n+\t\t\tprintf(\"Service Tag         : %s\\n\", fru_area);\n+\t\t\tfree(fru_area);\n+\t\t}\n+\t\tfru_area = ipmi_get_bib_info(fru_data, BIB_TYPE_BIOS_VERSION);\n+\t\tif (fru_area != NULL && strlen(fru_area) > 0) {\n+\t\t\tprintf(\"BIOS version        : %s\\n\", fru_area);\n+\t\t\tfree(fru_area);\n+\t\t}\n+    }\n+\n+\n+\tfree(fru_data);\n+}\n+\n+\n+/*****************************************************************\n+* Function Name: \tipmi_sysinfo_fru\n+*\n+* Description:\tThis function prints the 'fru' portion of the sysinfo command\n+* Input: \t\tintf \t\t\t- pointer to ipmi interface\n+*\t\t\tid\t\t\t- fru id\n+*\t\t\tipmi_version\t- ipmi version\n+* Output:\n+*\n+* Return:\t\t0\n+*\n+******************************************************************/\n+static int\n+ipmi_sysinfo_fru(struct ipmi_intf * intf, uint8_t id, uint8_t ipmi_version)\n+{\n+\tstruct ipmi_rs * rsp;\n+\tstruct ipmi_rq req;\n+\tstruct fru_info fru;\n+\tstruct fru_header header;\n+\tuint8_t msg_data[4] = {0};\n+\n+\n+\n+\tmemset(&fru, 0, sizeof(struct fru_info));\n+\tmemset(&header, 0, sizeof(struct fru_header));\n+\n+\t/*\n+\t * get info about this FRU\n+\t */\n+\tmemset(msg_data, 0, 4);\n+\tmsg_data[0] = id;\n+\n+\tmemset(&req, 0, sizeof(req));\n+\treq.msg.netfn = IPMI_NETFN_STORAGE;\n+\treq.msg.lun = 0;\n+\treq.msg.cmd = GET_FRU_INFO;\n+\treq.msg.data = msg_data;\n+\treq.msg.data_len = 1;\n+\n+\trsp = intf->sendrecv(intf, &req);\n+\tif (rsp == NULL) {\n+\t\tprintf(\" Device not present (No Response)\\n\");\n+\t\treturn -1;\n+\t}\n+\tif (rsp->ccode > 0) {\n+\t\tprintf(\" Device not present (%s)\\n\",\n+\t\t\tval2str(rsp->ccode, completion_code_vals));\n+\t\treturn -1;\n+\t}\n+\n+\tfru.size = (rsp->data[1] << 8) | rsp->data[0];\n+\tfru.access = rsp->data[2] & 0x1;\n+\n+\tlprintf(LOG_DEBUG, \"fru.size = %d bytes (accessed by %s)\",\n+\t\tfru.size, fru.access ? \"words\" : \"bytes\");\n+\n+\tif (fru.size < 1) {\n+\t\tlprintf(LOG_ERR, \" Invalid FRU size %d\", fru.size);\n+\t\treturn -1;\n+\t}\n+\n+\t/*\n+\t * retrieve the FRU header\n+\t */\n+\tmsg_data[0] = id;\n+\tmsg_data[1] = 0;\n+\tmsg_data[2] = 0;\n+\tmsg_data[3] = 8;\n+\n+\tmemset(&req, 0, sizeof(req));\n+\treq.msg.netfn = IPMI_NETFN_STORAGE;\n+\treq.msg.lun = 0;\n+\treq.msg.cmd = GET_FRU_DATA;\n+\treq.msg.data = msg_data;\n+\treq.msg.data_len = 4;\n+\n+\trsp = intf->sendrecv(intf, &req);\n+\tif (rsp == NULL) {\n+\t\tprintf(\" Device not present (No Response)\\n\");\n+\t\treturn 1;\n+\t}\n+\tif (rsp->ccode > 0) {\n+\t\tprintf(\" Device not present (%s)\\n\",\n+\t\t       val2str(rsp->ccode, completion_code_vals));\n+\t\treturn 1;\n+\t}\n+\n+\tif (verbose > 1)\n+\t\tprintbuf(rsp->data, rsp->data_len, \"FRU DATA\");\n+\n+\tmemcpy(&header, rsp->data + 1, 8);\n+\n+\tif (header.version != 1)\n+\t{\n+\t\tlprintf(LOG_ERR, \" Unknown FRU header version 0x%02x\",\n+\t\t\theader.version);\n+\t\treturn -1;\n+\t}\n+\n+\t/* offsets need converted to bytes\n+\t * but that conversion is not done to the structure\n+\t * because we may end up with offset > 255\n+\t * which would overflow our 1-byte offset field */\n+\n+\n+#define IPMI_DELL_OS_NAME_LENGTH_MAX 254\n+\n+\tchar assettag[IPMI_DELL_SYSINFO_ASSET_TAG_LENGTH] = {0};\n+\tchar servicetag[IPMI_DELL_SYSINFO_SERVICE_TAG_LENGTH] = {0};\n+\tchar hostname[IPMI_DELL_LCD_STRING_LENGTH_MAX+1] = {0};\n+\tchar productModel[IPMI_DELL_LCD_STRING_LENGTH_MAX+1] = {0};\n+\tchar osName[IPMI_DELL_OS_NAME_LENGTH_MAX+1] = {0};\n+\tchar biosversion[IPMI_DELL_LCD_STRING_LENGTH_MAX+1] = {0};\n+\tchar osVersion[IPMI_DELL_LCD_STRING_LENGTH_MAX+1] = {0};\n+\n+\t/* Print board area */\n+\tif ((header.offset.board*8) >= sizeof(struct fru_header))\n+\t\tipmi_sysinfo_print_board(intf, &fru, id, header.offset.board*8, ipmi_version);\n+\n+\t/* Print the rest of the sysinfo command */\n+\tif (ipmi_version == 0x51) {\n+\n+/*\t\tall the remaining info for ipmi 1.5 systems is printed in the ipmi_sysinfo_print_board\n+\t\tfunction call above. */\n+\t} else {\n+\t\t/* for IPMI 2.0 we get the remaining info from the \"get system info\" IPMI command rather\n+\t\t * than from the 'get fru data' command */\n+\n+\n+\t\tipmi_lcd_get_platform_model_name(intf, hostname, IPMI_DELL_LCD_STRING_LENGTH_MAX,\n+\t\t\t\t\t\t\tIPMI_DELL_SYSINFO_HOST_NAME);\n+\t\tprintf(\"Host Name           : %s\\n\", hostname);\n+\n+\n+\t\tipmi_lcd_get_platform_model_name(intf, productModel, IPMI_DELL_LCD_STRING_LENGTH_MAX,\n+\t\t\t\t\t\t  IPMI_DELL_PLATFORM_MODEL_NAME_SELECTOR);\n+\t\tprintf(\"Product Model       : %s\\n\", productModel);\n+\n+\t\tipmi_sysinfo_get_tag(intf, assettag, IPMI_DELL_SYSINFO_ASSET_TAG,\n+\t\t\t\t\t\t\t\t\t\t  IPMI_DELL_SYSINFO_ASSET_TAG_LENGTH);\n+\t\tprintf(\"Asset Tag           : %s\\n\", assettag);\n+\n+\t\tipmi_sysinfo_get_tag(intf, servicetag, IPMI_DELL_SYSINFO_SERVICE_TAG,\n+\t\t\t\t\t\t\t\t\t\t  IPMI_DELL_SYSINFO_SERVICE_TAG_LENGTH);\n+\t\tprintf(\"Service Tag         : %s\\n\", servicetag);\n+\n+\t\tipmi_lcd_get_platform_model_name(intf, biosversion, IPMI_DELL_LCD_STRING_LENGTH_MAX,\n+\t\t\t\t\t\t\t\t\t\t\t IPMI_DELL_SYSINFO_BIOS_VERSION);\n+\t\tprintf(\"BIOS Version        : %s\\n\", biosversion);\n+\n+\t\tipmi_lcd_get_platform_model_name(intf, osName, IPMI_DELL_OS_NAME_LENGTH_MAX,\n+\t\t\t\t\t\t\t\t\t\t\t IPMI_DELL_SYSINFO_OS_NAME);\n+\t\tprintf(\"System OS Name      : %s\\n\", osName);\n+\n+\t\tipmi_lcd_get_platform_model_name(intf, osVersion, IPMI_DELL_OS_NAME_LENGTH_MAX,\n+\t\t\t\t\t\t\t\t\t\t\t IPMI_DELL_SYSINFO_OS_VERSION_NUMBER);\n+\t\tprintf(\"System OS Version   : %s\\n\", osVersion);\n+\n+\n+\t}\n+\n+\n+\treturn 0;\n+}\n+\n+/*****************************************************************\n+* Function Name: \tipmi_sysinfo_id\n+*\n+* Description:\tThis function prints the 'id' portion of the sysinfo command\n+* Input: \t\tintf \t\t\t- pointer to ipmi interface\n+*\t\t\ttype\t\t\t- fru type\n+* Output:\n+*\n+* Return:\n+*\n+******************************************************************/\n+static int\n+ipmi_sysinfo_id(struct ipmi_intf * intf, int type)\n+{\n+\tstruct ipmi_rs * rsp = NULL;\n+\tstruct ipmi_rq req = {0,0,0,0,0,0};\n+\tint rc = 0;\n+\tstruct ipm_devid_rsp * dev_id;\n+\tstruct sdr_repo_info_rs * repo_info;\n+\tuint8_t ipmi_version;\n+\tuint8_t data[4]={0};\n+\tstruct FW_VER firmware_ver;\n+\n+\t/* 20 80 01 52 51 9f a2 02 00 00 00 00 00 00 00 <- raw data*/\n+\tmemset(&req, 0, sizeof(req));\n+\n+\tif( (iDRAC_FLAG == IDRAC_12G) || (iDRAC_FLAG == IDRAC_13G) || (iDRAC_FLAG == IDRAC_14G) ) {\n+\t\treq.msg.netfn = DELL_OEM_NETFN;\n+\t\treq.msg.lun = 0;\n+\t\treq.msg.cmd = 0xbf;\n+\t\treq.msg.data = data;\n+\t\treq.msg.data_len = 1;\n+\t\tif((iDRAC_FLAG == IDRAC_13G) || (iDRAC_FLAG == IDRAC_14G))\n+\t\t\tdata[0] = 0x04;\n+\t\telse\n+\t\t\tdata[0] = 0x01;\n+\n+\t\trsp = intf->sendrecv(intf, &req);\n+\t\tif (rsp == NULL) {\n+\t\t\t\tprintf(\" Error Getting the Firmware version \\n\");\n+\t\t\t\treturn -1;\n+\t\t}\n+\t\tif (rsp->ccode == 0xc1) {\n+\t\t\tmemset(&firmware_ver,0,sizeof(struct FW_VER));\n+\t\t}\n+\t\telse if (rsp->ccode > 0) {\n+\t\t\t\tprintf(\" Error getting device ID (%s)\\n\",\n+\t\t\t\t\tval2str(rsp->ccode, completion_code_vals));\n+\t\t\t\treturn -1;\n+\t\t}\n+\t\telse\n+\t\t\tmemcpy(&firmware_ver,(struct FW_VER*)rsp->data,sizeof(struct FW_VER));\n+\t}\n+\n+\tmemset(&req, 0, sizeof(req));\n+\treq.msg.netfn = IPMI_NETFN_APP;\n+\treq.msg.lun = 0;\n+\treq.msg.cmd = BMC_GET_DEVICE_ID;\n+\treq.msg.data = NULL;\n+\treq.msg.data_len = 0;\n+\n+\trsp = intf->sendrecv(intf, &req);\n+\tif (rsp == NULL) {\n+\t\tprintf(\" Error getting device ID (No Response)\\n\");\n+\t\treturn -1;\n+\t}\n+\tif (rsp->ccode > 0) {\n+\t\tprintf(\" Error getting device ID (%s)\\n\",\n+\t\t\tval2str(rsp->ccode, completion_code_vals));\n+\t\treturn -1;\n+\t}\n+\n+\tdev_id = (struct ipm_devid_rsp *)(void *)rsp->data;\n+\n+\tprintf(\"Device ID           : %0.2d\\n\", dev_id->device_id);\n+\tprintf(\"Device Revision     : %0.2d\\n\", dev_id->device_revision & 0x7F);\n+\tif( (iDRAC_FLAG == IDRAC_12G) || (iDRAC_FLAG == IDRAC_13G) || (iDRAC_FLAG == IDRAC_14G)) {\n+\t\tif(firmware_ver.major_ver == 0) {\n+\t\t\tprintf(\"Firmware Version    : %d.%0.2d(Build %02d)\\n\", dev_id->fw_rev1 & 0x7F,\n+\t\t\t\tdev_id->fw_rev2,dev_id->aux_fw_rev[1]);\n+\t\t} else {\n+\t\t\tif((iDRAC_FLAG == IDRAC_13G) || (iDRAC_FLAG == IDRAC_14G)) {\n+\t\t\t\tprintf(\"Firmware Version    : %d.%0.2d.%02d.%02d(Build %02d)\\n\", firmware_ver.major_ver,\n+\t\t\t\tfirmware_ver.minor_ver,(firmware_ver.pla_data_msb << 8 | firmware_ver.pla_data_lsb),\n+\t\t\t\t(firmware_ver.lc_ver_msb << 8 | firmware_ver.lc_ver_lsb),\n+\t\t\t\t(firmware_ver.build_no_msb << 8 | firmware_ver.build_no_lsb));\n+\t\t\t} else {\n+\t\t\t\tprintf(\"Firmware Version    : %d.%0.2d.%02d(Build %02d)\\n\", firmware_ver.major_ver,\n+\t\t\t\tfirmware_ver.minor_ver,(firmware_ver.pla_data_msb << 8 | firmware_ver.pla_data_lsb),\n+\t\t\t\t(firmware_ver.build_no_msb << 8 | firmware_ver.build_no_lsb));\n+\t\t\t}\n+\t\t}\n+\t}else {\n+\t\t// DF427387 Fix for Build Version Number\n+\t\t//\tByte:\t  13\t\t\t\t14\t\t   15\t       16\n+\t\t//\tData: <platform ID> <Build Number> <RES> <RES>\n+\t\tprintf(\"Firmware Version    : %d.%0.2x.%02d\\n\", dev_id->fw_rev1 & 0x7F,\n+\t\t\tdev_id->fw_rev2,dev_id->aux_fw_rev[1]);\n+\t}\n+\n+\t/* BCD value. byte->hex conversion used.*/\n+\tprintf(\"IPMI Version        : %d.%d\\n\", dev_id->ipmi_version & 0x0F, dev_id->ipmi_version >> 4);\n+\tipmi_version = dev_id->ipmi_version;\n+\n+\n+\tprintf(\"Manufacturer ID     : %lu\\n\",\n+\t\t(uint32_t)(dev_id->manufacturer_id[2] & 0x0f) * 65536 +\n+\t\t(uint32_t)(dev_id->manufacturer_id[1] * 256) +\n+\t\t(uint32_t)dev_id->manufacturer_id[0]);\n+\tprintf(\"Product ID          : %d\\n\", dev_id->product_id[1]*256 + dev_id->product_id[0]);\n+\n+\tmemset(&req, 0, sizeof(req));\n+\treq.msg.netfn = IPMI_NETFN_APP;\n+\treq.msg.lun = 0;\n+\treq.msg.cmd = BMC_GET_SELF_TEST;\n+\treq.msg.data = NULL;\n+\treq.msg.data_len = 0;\n+\trsp = intf->sendrecv(intf, &req);\n+\n+\tif (rsp->data[0] == 0x55) {\n+\tprintf(\"Status              : No error\\n\",-1);\n+\t}else if (rsp->data[0] == 0x56) {\n+\tprintf(\"Status              : Self Test Function not implemented in this controller\\n\");\n+\t}else if (rsp->data[0] == 0x58)\n+\t{ printf(\"Status              : Fatal Hardware Error (BMC is inoperative)\\n\");\n+\t}else if (rsp->data[0] == 0x57) {\n+\t\tprintf(\"Status              : \");\n+\t\tif (rsp->data[1] & 0x01) {printf(\"Controller operational firmware corrupte \"); }\n+\t\tif (rsp->data[1] & 0x02) {printf(\"Controller update 'boot block' firmware corrupte \"); }\n+\t\tif (rsp->data[1] & 0x04) {printf(\"Internal Use Area of BMC FRU corrupted \"); }\n+\t\tif (rsp->data[1] & 0x08) {printf(\"SDR Repository Empty \"); }\n+\t\tif (rsp->data[1] & 0x10) {printf(\"IPMB signal lines do not respond \"); }\n+\t\tif (rsp->data[1] & 0x20) {printf(\"Cannot access BMC FRU device \"); }\n+\t\tif (rsp->data[1] & 0x40) {printf(\"Cannot access SDR Repository \"); }\n+\t\tif (rsp->data[1] & 0x80) {printf(\"Cannot access SEL device\"); }\n+\t\tprintf(\"\\n\");\n+\t}\n+\telse if (rsp->data[0] != 0xFF) { printf(\"Status              : Internal Failure. Refer to particular device's specification for definition\\n\"); }\n+\telse { printf(\"Status              : \\n\"); }\n+\n+\tmemset(&req, 0, sizeof(req));\n+\treq.msg.netfn = IPMI_NETFN_STORAGE;\n+\treq.msg.lun = 0;\n+\treq.msg.cmd = GET_SDR_REPO_INFO;\n+\treq.msg.data = NULL;\n+\treq.msg.data_len = 0;\n+\n+\trsp = intf->sendrecv(intf, &req);\n+\tif (rsp == NULL) {\n+\t\tprintf(\" Error getting SDR version (No Response)\\n\");\n+\t\treturn -1;\n+\t}\n+\tif (rsp->ccode > 0) {\n+\t\tprintf(\" Error getting SDR version (%s)\\n\",\n+\t\t\tval2str(rsp->ccode, completion_code_vals));\n+\t\treturn -1;\n+\t}\n+\n+\trepo_info = (struct sdr_repo_info_rs *)(void *)rsp->data;\n+\tprintf(\"SDR Version         : %d.%d\\n\", repo_info->version & 0x0F, repo_info->version >> 4);\n+\n+\n+\tmemset(&req, 0, sizeof(req));\n+\treq.msg.netfn = IPMI_NETFN_APP;\n+\treq.msg.lun = 0;\n+\treq.msg.cmd = BMC_GET_GUID;\n+\treq.msg.data = NULL;\n+\treq.msg.data_len = 0;\n+\n+\trsp = intf->sendrecv(intf, &req);\n+\tif (rsp == NULL) {\n+\t\tprintf(\" Error getting device GUID (No Response)\\n\");\n+\t\treturn -1;\n+\t}\n+\tif (rsp->ccode > 0) {\n+\t\tprintf(\" Error getting device GUID (%s)\\n\",\n+\t\t\tval2str(rsp->ccode, completion_code_vals));\n+\t\treturn -1;\n+\t}\n+\tprintf(\"GUID                : %.2X%.2X%.2X%.2X-%.2X%.2X-%.2X%.2X-%.2X%.2X-%.2X%.2X%.2X%.2X%.2X%.2X\\n\",\n+\t\trsp->data[15], rsp->data[14], rsp->data[13], rsp->data[12],\n+\t\trsp->data[11], rsp->data[10], rsp->data[9], rsp->data[8],\n+\t\trsp->data[7], rsp->data[6], rsp->data[5], rsp->data[4],\n+\t\trsp->data[3], rsp->data[2], rsp->data[1], rsp->data[0]);","path":"lib/ipmi_delloem.c","position":736,"original_position":736,"commit_id":"3892bcaf3b34cc5897a6782322bcc160fa9a11d7","original_commit_id":"3892bcaf3b34cc5897a6782322bcc160fa9a11d7","user":{"login":"AlexanderAmelkin","id":4518124,"node_id":"MDQ6VXNlcjQ1MTgxMjQ=","avatar_url":"https://avatars0.githubusercontent.com/u/4518124?v=4","gravatar_id":"","url":"https://api.github.com/users/AlexanderAmelkin","html_url":"https://github.com/AlexanderAmelkin","followers_url":"https://api.github.com/users/AlexanderAmelkin/followers","following_url":"https://api.github.com/users/AlexanderAmelkin/following{/other_user}","gists_url":"https://api.github.com/users/AlexanderAmelkin/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexanderAmelkin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexanderAmelkin/subscriptions","organizations_url":"https://api.github.com/users/AlexanderAmelkin/orgs","repos_url":"https://api.github.com/users/AlexanderAmelkin/repos","events_url":"https://api.github.com/users/AlexanderAmelkin/events{/privacy}","received_events_url":"https://api.github.com/users/AlexanderAmelkin/received_events","type":"User","site_admin":false},"body":"Now this is copying `ipmitool mc guid`. Why?","created_at":"2018-07-30T12:33:23Z","updated_at":"2018-07-30T12:35:37Z","html_url":"https://github.com/ipmitool/ipmitool/pull/10#discussion_r206115494","pull_request_url":"https://api.github.com/repos/ipmitool/ipmitool/pulls/10","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/ipmitool/ipmitool/pulls/comments/206115494"},"html":{"href":"https://github.com/ipmitool/ipmitool/pull/10#discussion_r206115494"},"pull_request":{"href":"https://api.github.com/repos/ipmitool/ipmitool/pulls/10"}}},"pull_request":{"url":"https://api.github.com/repos/ipmitool/ipmitool/pulls/10","id":190958599,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkwOTU4NTk5","html_url":"https://github.com/ipmitool/ipmitool/pull/10","diff_url":"https://github.com/ipmitool/ipmitool/pull/10.diff","patch_url":"https://github.com/ipmitool/ipmitool/pull/10.patch","issue_url":"https://api.github.com/repos/ipmitool/ipmitool/issues/10","number":10,"state":"open","locked":false,"title":"Added new command \"sysinfo\"under delloem commands","user":{"login":"ravisaripalli","id":39195062,"node_id":"MDQ6VXNlcjM5MTk1MDYy","avatar_url":"https://avatars1.githubusercontent.com/u/39195062?v=4","gravatar_id":"","url":"https://api.github.com/users/ravisaripalli","html_url":"https://github.com/ravisaripalli","followers_url":"https://api.github.com/users/ravisaripalli/followers","following_url":"https://api.github.com/users/ravisaripalli/following{/other_user}","gists_url":"https://api.github.com/users/ravisaripalli/gists{/gist_id}","starred_url":"https://api.github.com/users/ravisaripalli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ravisaripalli/subscriptions","organizations_url":"https://api.github.com/users/ravisaripalli/orgs","repos_url":"https://api.github.com/users/ravisaripalli/repos","events_url":"https://api.github.com/users/ravisaripalli/events{/privacy}","received_events_url":"https://api.github.com/users/ravisaripalli/received_events","type":"User","site_admin":false},"body":"Added new command \"Sysinfo\" under dell oem command. The purpose of the command is to get the system information.\r\n\r\n","created_at":"2018-05-28T15:39:07Z","updated_at":"2018-07-30T12:35:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6b5643961b1d3da4b8755cd01b26df89a3d6d70c","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":969219179,"node_id":"MDU6TGFiZWw5NjkyMTkxNzk=","url":"https://api.github.com/repos/ipmitool/ipmitool/labels/improvement","name":"improvement","color":"0e8a16","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ipmitool/ipmitool/pulls/10/commits","review_comments_url":"https://api.github.com/repos/ipmitool/ipmitool/pulls/10/comments","review_comment_url":"https://api.github.com/repos/ipmitool/ipmitool/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ipmitool/ipmitool/issues/10/comments","statuses_url":"https://api.github.com/repos/ipmitool/ipmitool/statuses/3892bcaf3b34cc5897a6782322bcc160fa9a11d7","head":{"label":"ravisaripalli:DellOem-Commands-Development","ref":"DellOem-Commands-Development","sha":"3892bcaf3b34cc5897a6782322bcc160fa9a11d7","user":{"login":"ravisaripalli","id":39195062,"node_id":"MDQ6VXNlcjM5MTk1MDYy","avatar_url":"https://avatars1.githubusercontent.com/u/39195062?v=4","gravatar_id":"","url":"https://api.github.com/users/ravisaripalli","html_url":"https://github.com/ravisaripalli","followers_url":"https://api.github.com/users/ravisaripalli/followers","following_url":"https://api.github.com/users/ravisaripalli/following{/other_user}","gists_url":"https://api.github.com/users/ravisaripalli/gists{/gist_id}","starred_url":"https://api.github.com/users/ravisaripalli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ravisaripalli/subscriptions","organizations_url":"https://api.github.com/users/ravisaripalli/orgs","repos_url":"https://api.github.com/users/ravisaripalli/repos","events_url":"https://api.github.com/users/ravisaripalli/events{/privacy}","received_events_url":"https://api.github.com/users/ravisaripalli/received_events","type":"User","site_admin":false},"repo":{"id":135017975,"node_id":"MDEwOlJlcG9zaXRvcnkxMzUwMTc5NzU=","name":"ipmitool","full_name":"ravisaripalli/ipmitool","owner":{"login":"ravisaripalli","id":39195062,"node_id":"MDQ6VXNlcjM5MTk1MDYy","avatar_url":"https://avatars1.githubusercontent.com/u/39195062?v=4","gravatar_id":"","url":"https://api.github.com/users/ravisaripalli","html_url":"https://github.com/ravisaripalli","followers_url":"https://api.github.com/users/ravisaripalli/followers","following_url":"https://api.github.com/users/ravisaripalli/following{/other_user}","gists_url":"https://api.github.com/users/ravisaripalli/gists{/gist_id}","starred_url":"https://api.github.com/users/ravisaripalli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ravisaripalli/subscriptions","organizations_url":"https://api.github.com/users/ravisaripalli/orgs","repos_url":"https://api.github.com/users/ravisaripalli/repos","events_url":"https://api.github.com/users/ravisaripalli/events{/privacy}","received_events_url":"https://api.github.com/users/ravisaripalli/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ravisaripalli/ipmitool","description":null,"fork":true,"url":"https://api.github.com/repos/ravisaripalli/ipmitool","forks_url":"https://api.github.com/repos/ravisaripalli/ipmitool/forks","keys_url":"https://api.github.com/repos/ravisaripalli/ipmitool/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ravisaripalli/ipmitool/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ravisaripalli/ipmitool/teams","hooks_url":"https://api.github.com/repos/ravisaripalli/ipmitool/hooks","issue_events_url":"https://api.github.com/repos/ravisaripalli/ipmitool/issues/events{/number}","events_url":"https://api.github.com/repos/ravisaripalli/ipmitool/events","assignees_url":"https://api.github.com/repos/ravisaripalli/ipmitool/assignees{/user}","branches_url":"https://api.github.com/repos/ravisaripalli/ipmitool/branches{/branch}","tags_url":"https://api.github.com/repos/ravisaripalli/ipmitool/tags","blobs_url":"https://api.github.com/repos/ravisaripalli/ipmitool/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ravisaripalli/ipmitool/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ravisaripalli/ipmitool/git/refs{/sha}","trees_url":"https://api.github.com/repos/ravisaripalli/ipmitool/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ravisaripalli/ipmitool/statuses/{sha}","languages_url":"https://api.github.com/repos/ravisaripalli/ipmitool/languages","stargazers_url":"https://api.github.com/repos/ravisaripalli/ipmitool/stargazers","contributors_url":"https://api.github.com/repos/ravisaripalli/ipmitool/contributors","subscribers_url":"https://api.github.com/repos/ravisaripalli/ipmitool/subscribers","subscription_url":"https://api.github.com/repos/ravisaripalli/ipmitool/subscription","commits_url":"https://api.github.com/repos/ravisaripalli/ipmitool/commits{/sha}","git_commits_url":"https://api.github.com/repos/ravisaripalli/ipmitool/git/commits{/sha}","comments_url":"https://api.github.com/repos/ravisaripalli/ipmitool/comments{/number}","issue_comment_url":"https://api.github.com/repos/ravisaripalli/ipmitool/issues/comments{/number}","contents_url":"https://api.github.com/repos/ravisaripalli/ipmitool/contents/{+path}","compare_url":"https://api.github.com/repos/ravisaripalli/ipmitool/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ravisaripalli/ipmitool/merges","archive_url":"https://api.github.com/repos/ravisaripalli/ipmitool/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ravisaripalli/ipmitool/downloads","issues_url":"https://api.github.com/repos/ravisaripalli/ipmitool/issues{/number}","pulls_url":"https://api.github.com/repos/ravisaripalli/ipmitool/pulls{/number}","milestones_url":"https://api.github.com/repos/ravisaripalli/ipmitool/milestones{/number}","notifications_url":"https://api.github.com/repos/ravisaripalli/ipmitool/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ravisaripalli/ipmitool/labels{/name}","releases_url":"https://api.github.com/repos/ravisaripalli/ipmitool/releases{/id}","deployments_url":"https://api.github.com/repos/ravisaripalli/ipmitool/deployments","created_at":"2018-05-27T05:19:55Z","updated_at":"2018-05-27T05:19:57Z","pushed_at":"2018-05-28T15:29:24Z","git_url":"git://github.com/ravisaripalli/ipmitool.git","ssh_url":"git@github.com:ravisaripalli/ipmitool.git","clone_url":"https://github.com/ravisaripalli/ipmitool.git","svn_url":"https://github.com/ravisaripalli/ipmitool","homepage":null,"size":2245,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ipmitool:master","ref":"master","sha":"3aade242971e80abbf16147dc9320ae4638df1e3","user":{"login":"ipmitool","id":38139577,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4MTM5NTc3","avatar_url":"https://avatars2.githubusercontent.com/u/38139577?v=4","gravatar_id":"","url":"https://api.github.com/users/ipmitool","html_url":"https://github.com/ipmitool","followers_url":"https://api.github.com/users/ipmitool/followers","following_url":"https://api.github.com/users/ipmitool/following{/other_user}","gists_url":"https://api.github.com/users/ipmitool/gists{/gist_id}","starred_url":"https://api.github.com/users/ipmitool/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ipmitool/subscriptions","organizations_url":"https://api.github.com/users/ipmitool/orgs","repos_url":"https://api.github.com/users/ipmitool/repos","events_url":"https://api.github.com/users/ipmitool/events{/privacy}","received_events_url":"https://api.github.com/users/ipmitool/received_events","type":"Organization","site_admin":false},"repo":{"id":128686483,"node_id":"MDEwOlJlcG9zaXRvcnkxMjg2ODY0ODM=","name":"ipmitool","full_name":"ipmitool/ipmitool","owner":{"login":"ipmitool","id":38139577,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4MTM5NTc3","avatar_url":"https://avatars2.githubusercontent.com/u/38139577?v=4","gravatar_id":"","url":"https://api.github.com/users/ipmitool","html_url":"https://github.com/ipmitool","followers_url":"https://api.github.com/users/ipmitool/followers","following_url":"https://api.github.com/users/ipmitool/following{/other_user}","gists_url":"https://api.github.com/users/ipmitool/gists{/gist_id}","starred_url":"https://api.github.com/users/ipmitool/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ipmitool/subscriptions","organizations_url":"https://api.github.com/users/ipmitool/orgs","repos_url":"https://api.github.com/users/ipmitool/repos","events_url":"https://api.github.com/users/ipmitool/events{/privacy}","received_events_url":"https://api.github.com/users/ipmitool/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ipmitool/ipmitool","description":"An open-source tool for controlling IPMI-enabled systems","fork":false,"url":"https://api.github.com/repos/ipmitool/ipmitool","forks_url":"https://api.github.com/repos/ipmitool/ipmitool/forks","keys_url":"https://api.github.com/repos/ipmitool/ipmitool/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ipmitool/ipmitool/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ipmitool/ipmitool/teams","hooks_url":"https://api.github.com/repos/ipmitool/ipmitool/hooks","issue_events_url":"https://api.github.com/repos/ipmitool/ipmitool/issues/events{/number}","events_url":"https://api.github.com/repos/ipmitool/ipmitool/events","assignees_url":"https://api.github.com/repos/ipmitool/ipmitool/assignees{/user}","branches_url":"https://api.github.com/repos/ipmitool/ipmitool/branches{/branch}","tags_url":"https://api.github.com/repos/ipmitool/ipmitool/tags","blobs_url":"https://api.github.com/repos/ipmitool/ipmitool/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ipmitool/ipmitool/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ipmitool/ipmitool/git/refs{/sha}","trees_url":"https://api.github.com/repos/ipmitool/ipmitool/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ipmitool/ipmitool/statuses/{sha}","languages_url":"https://api.github.com/repos/ipmitool/ipmitool/languages","stargazers_url":"https://api.github.com/repos/ipmitool/ipmitool/stargazers","contributors_url":"https://api.github.com/repos/ipmitool/ipmitool/contributors","subscribers_url":"https://api.github.com/repos/ipmitool/ipmitool/subscribers","subscription_url":"https://api.github.com/repos/ipmitool/ipmitool/subscription","commits_url":"https://api.github.com/repos/ipmitool/ipmitool/commits{/sha}","git_commits_url":"https://api.github.com/repos/ipmitool/ipmitool/git/commits{/sha}","comments_url":"https://api.github.com/repos/ipmitool/ipmitool/comments{/number}","issue_comment_url":"https://api.github.com/repos/ipmitool/ipmitool/issues/comments{/number}","contents_url":"https://api.github.com/repos/ipmitool/ipmitool/contents/{+path}","compare_url":"https://api.github.com/repos/ipmitool/ipmitool/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ipmitool/ipmitool/merges","archive_url":"https://api.github.com/repos/ipmitool/ipmitool/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ipmitool/ipmitool/downloads","issues_url":"https://api.github.com/repos/ipmitool/ipmitool/issues{/number}","pulls_url":"https://api.github.com/repos/ipmitool/ipmitool/pulls{/number}","milestones_url":"https://api.github.com/repos/ipmitool/ipmitool/milestones{/number}","notifications_url":"https://api.github.com/repos/ipmitool/ipmitool/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ipmitool/ipmitool/labels{/name}","releases_url":"https://api.github.com/repos/ipmitool/ipmitool/releases{/id}","deployments_url":"https://api.github.com/repos/ipmitool/ipmitool/deployments","created_at":"2018-04-08T22:18:30Z","updated_at":"2018-07-28T22:17:58Z","pushed_at":"2018-07-28T22:17:56Z","git_url":"git://github.com/ipmitool/ipmitool.git","ssh_url":"git@github.com:ipmitool/ipmitool.git","clone_url":"https://github.com/ipmitool/ipmitool.git","svn_url":"https://github.com/ipmitool/ipmitool","homepage":"","size":2327,"stargazers_count":25,"watchers_count":25,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":15,"mirror_url":null,"archived":false,"open_issues_count":13,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":15,"open_issues":13,"watchers":25,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ipmitool/ipmitool/pulls/10"},"html":{"href":"https://github.com/ipmitool/ipmitool/pull/10"},"issue":{"href":"https://api.github.com/repos/ipmitool/ipmitool/issues/10"},"comments":{"href":"https://api.github.com/repos/ipmitool/ipmitool/issues/10/comments"},"review_comments":{"href":"https://api.github.com/repos/ipmitool/ipmitool/pulls/10/comments"},"review_comment":{"href":"https://api.github.com/repos/ipmitool/ipmitool/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ipmitool/ipmitool/pulls/10/commits"},"statuses":{"href":"https://api.github.com/repos/ipmitool/ipmitool/statuses/3892bcaf3b34cc5897a6782322bcc160fa9a11d7"}},"author_association":"NONE"}}
{"actor":{"display_login":"AlexanderAmelkin"}}