This commit is contained in:
2021-09-06 15:20:34 +02:00
parent 8f26389348
commit 441fb8064f
7 changed files with 64 additions and 13 deletions

View File

@ -45,5 +45,6 @@ int startWritingFPGAprogram(FILE **filefp);
int stopWritingFPGAprogram(FILE *filefp);
int startCopyingFPGAProgram(FILE **fd, uint64_t fsize, char *mess);
int writeFPGAProgram(uint64_t fsize, FILE *fd, char *src, char *msg,
int writeFPGAProgram(FILE *fd, char *src, uint64_t fsize, char *msg,
char *mess);
int verifyCheckSumofProgram(char* clientChecksum, char* mess);

View File

@ -179,7 +179,7 @@ int startCopyingFPGAProgram(FILE **fd, uint64_t fsize, char *mess) {
return OK;
}
int writeFPGAProgram(uint64_t fsize, FILE *fd, char *src, char* msg, char* mess) {
int writeFPGAProgram(FILE *fd, char *src, uint64_t fsize, char* msg, char* mess) {
LOG(logDEBUG1,
("%s [fsize:%lu,fd:%p,src:%p\n", msg, (long long unsigned int)fsize, (void *)fd, (void *)src));
@ -192,3 +192,33 @@ int writeFPGAProgram(uint64_t fsize, FILE *fd, char *src, char* msg, char* mess)
return OK;
}
int verifyCheckSumofProgram(char* clientChecksum, char* mess) {
LOG(logINFOBLUE, ("\tVerifying Checksum\n"));
// get checksum from copied file
char cmd[MAX_STR_LENGTH] = {0};
memset(cmd, 0, MAX_STR_LENGTH);
sprintf(cmd, "md5sum %s", TEMP_PROG_FILE_NAME);
char retvals[MAX_STR_LENGTH] = {0};
memset(retvals, 0, MAX_STR_LENGTH);
if (FAIL == executeCommand(cmd, retvals, logDEBUG1)) {
strcpy(mess, retvals);
// LOG(logERROR, (mess)); already printed in executecommand
return FAIL;
}
char checksum[MAX_STR_LENGTH];
memset(checksum, 0, sizeof(checksum));
if (sscanf(retvals, "%s", checksum) != 1) {
sprintf(mess, "Could not get checksum of fpga program copied over");
LOG(logERROR, (mess));
return FAIL;
}
// compare checksum
if (strcmp(clientChecksum, checksum)) {
sprintf(mess, "Checksum of copied fpga program does not match. Client checksum:%s, copied checksum:%s\n", clientChecksum, checksum);
LOG(logERROR, (mess));
return FAIL;
}
LOG(logINFO, ("\tChecksum verified from copied program\n"));
return OK;
}

View File

@ -3730,7 +3730,7 @@ int program_fpga(int file_des) {
memset(checksum, 0, MAX_STR_LENGTH);
if (receiveData(file_des, checksum, MAX_STR_LENGTH, OTHER) < 0)
return printSocketReadError();
LOG(logINFOBLUE, ("checksum is: %s\n\n", checksum));
LOG(logDEBUG1, ("checksum is: %s\n\n", checksum));
// open file and allocate memory for part program
FILE *fd = NULL;
@ -3746,15 +3746,20 @@ int program_fpga(int file_des) {
}
Server_SendResult(file_des, INT32, NULL, 0);
if (ret == FAIL) {
if (src != NULL) {
free(src);
}
if (fd != NULL) {
fclose(fd);
}
LOG(logERROR, ("Program FPGA FAIL1!\n"));
return FAIL;
}
// copying program part by part
uint64_t totalsize = filesize;
while (ret != FAIL && filesize) {
while (ret == OK && filesize) {
uint64_t unitprogramsize = MAX_FPGAPROGRAMSIZE; // 2mb
if (unitprogramsize > filesize) // less than 2mb
unitprogramsize = filesize;
@ -3776,7 +3781,7 @@ int program_fpga(int file_des) {
filesize -= unitprogramsize;
// copy program
ret = writeFPGAProgram(unitprogramsize, fd, src, "copy program to /var/tmp", mess);
ret = writeFPGAProgram(fd, src, unitprogramsize, "copy program to /var/tmp", mess);
Server_SendResult(file_des, INT32, NULL, 0);
if (ret == FAIL) {
break;
@ -3787,15 +3792,23 @@ int program_fpga(int file_des) {
(int)(((double)(totalsize - filesize) / totalsize) * 100)));
fflush(stdout);
}
if (ret == FAIL) {
if (src != NULL) {
free(src);
}
if (fd != NULL) {
fclose(fd);
}
// checksum of copied program
if (ret == OK) {
ret = verifyCheckSumofProgram(checksum, mess);
}
Server_SendResult(file_des, INT32, NULL, 0);
if (ret == FAIL) {
LOG(logERROR, ("Program FPGA FAIL!\n"));
return FAIL;
}
free(src);
fclose(fd);
LOG(logINFO, ("\n\tCopying done\n"));
/* if (ret != FAIL) {
fpgasrc[totalsize] = '\0';