124 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * systest.c -- Test code for nooks system calls
 | 
						|
 *
 | 
						|
 * Copyright (C) 2002 Mike Swift
 | 
						|
 *
 | 
						|
 * The source code in this file can be freely used, adapted,
 | 
						|
 * and redistributed in source or binary form, so long as an
 | 
						|
 * acknowledgment appears in derived source files.  
 | 
						|
 * No warranty is attached;
 | 
						|
 * we cannot take responsibility for errors or fitness for use.
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#include <sys/types.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <stdio.h>
 | 
						|
#if 0
 | 
						|
#include <asm/unistd.h>
 | 
						|
#endif
 | 
						|
#include <string.h>
 | 
						|
#include <errno.h>
 | 
						|
 | 
						|
#define swifi_inject_fault sys_inject_fault
 | 
						|
 | 
						|
#include "swifi-user.h"
 | 
						|
#include "extra.h"
 | 
						|
 | 
						|
 | 
						|
#if 0
 | 
						|
_syscall6(long, swifi_inject_fault, 
 | 
						|
	  char *, module_name,
 | 
						|
	  unsigned long, faultType,
 | 
						|
	  unsigned long, randSeed,
 | 
						|
	  unsigned long, numFaults,
 | 
						|
	  void *, result,
 | 
						|
	  unsigned long, do_inject);
 | 
						|
#endif
 | 
						|
 | 
						|
int
 | 
						|
main(int argc, char * argv[])
 | 
						|
{
 | 
						|
  char * module_name = NULL;
 | 
						|
  int i;
 | 
						|
  long result = 0;
 | 
						|
  unsigned int cmd = 0;
 | 
						|
  unsigned long arg = 0;
 | 
						|
  unsigned long seed = 157;
 | 
						|
  swifi_result_t * res = NULL;
 | 
						|
 | 
						|
  if (argc < 2) {
 | 
						|
    goto Usage;
 | 
						|
  }
 | 
						|
 | 
						|
  for (i = 1; i < argc; i++ ) {
 | 
						|
    if (strcmp(argv[i], "-f") == 0) {
 | 
						|
      if (argc <= i+5) {
 | 
						|
	goto Usage;
 | 
						|
      }
 | 
						|
      module_name = victim_exe = argv[++i];
 | 
						|
      sscanf(argv[++i],"%u", &victim_pid);
 | 
						|
      sscanf(argv[++i],"%u", &cmd);
 | 
						|
      sscanf(argv[++i],"%lu", &arg);
 | 
						|
      sscanf(argv[++i],"%lu", &seed);
 | 
						|
    } else {
 | 
						|
      printf("Unknown command %s\n", argv[i]);
 | 
						|
      goto Usage;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  res = malloc(arg * sizeof(swifi_result_t));
 | 
						|
  if (res == NULL) {
 | 
						|
    printf("Out of memory\n");
 | 
						|
    goto Cleanup;
 | 
						|
  }
 | 
						|
 | 
						|
  memset(res, 0, sizeof(res));
 | 
						|
 | 
						|
  /*
 | 
						|
  // Find out where the faults will be injected
 | 
						|
  */
 | 
						|
  
 | 
						|
  result = swifi_inject_fault(module_name, 
 | 
						|
			      cmd,         /* fault type */
 | 
						|
			      seed,           /* random seed */
 | 
						|
			      arg,         /* numFaults */
 | 
						|
			      res,
 | 
						|
			      0);  /* don't inject now */
 | 
						|
  
 | 
						|
  for (i = 0; (i < arg) && (res[i].address != 0) ; i++) {
 | 
						|
    printf("Changed 0x%lx from 0x%lx to 0x%lx\n",
 | 
						|
	   res[i].address,
 | 
						|
	   res[i].old,
 | 
						|
	   res[i].new);
 | 
						|
  }
 | 
						|
  
 | 
						|
  /*
 | 
						|
  // do the injection
 | 
						|
  */
 | 
						|
  
 | 
						|
 | 
						|
  result = swifi_inject_fault(module_name, 
 | 
						|
			      cmd,         /* fault type */
 | 
						|
			      seed,           /* random seed */
 | 
						|
			      arg,         /* numFaults */
 | 
						|
			      res,
 | 
						|
			      1);  /* do inject now */
 | 
						|
 | 
						|
  printf("swifi_inject_fault returned %ld (%d)\n", result,errno);
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 Cleanup:
 | 
						|
  if (res != NULL) {
 | 
						|
    free(res);
 | 
						|
  }
 | 
						|
  return(0);
 | 
						|
 | 
						|
 Usage:
 | 
						|
  printf("Usage: %s -f module_name pid fault-type fault-count seed\n", argv[0]);
 | 
						|
  goto Cleanup;
 | 
						|
}
 | 
						|
 | 
						|
 |