From cb583ccdc4e363813826bb36aa1eb8502b787d33 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Fri, 11 Sep 2009 04:48:31 +0000 Subject: First truely working implementation. --- Makefile | 4 +-- netnuke.c | 91 +++++++++++++++++++++++++++------------------------------------ netnuke.h | 4 +-- 3 files changed, 43 insertions(+), 56 deletions(-) diff --git a/Makefile b/Makefile index b3dfff8..b360f6c 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ -CFLAGS=-Wall -pipe -O2 -funroll-loops +CFLAGS=-Wall -pipe -O2 OUTPUT=netnuke all: - cc -std=c99 -o ${OUTPUT} -lutil ${CFLAGS} netnuke.c + cc -std=c99 -o ${OUTPUT} -lutil ${CFLAGS} netnuke.c diff --git a/netnuke.c b/netnuke.c index 1b7c072..96dbf6e 100644 --- a/netnuke.c +++ b/netnuke.c @@ -131,16 +131,16 @@ void fillRandom(char buffer[], uint64_t length) } -int nuke(const char* media, uint64_t size) +int nuke(char* media, uint64_t size) { /* test with 1G worth of data */ - size = (1024 * 1024) * 1000; + //size = (1024 * 1024) * 1000; char mediaSize[BUFSIZ]; char writeSize[BUFSIZ]; char writePerSecond[BUFSIZ]; int32_t pass; - uint64_t byteSize = 1024; + uint64_t byteSize = udef_blocksize; uint64_t times, block; char wTable[byteSize]; uint32_t startTime, currentTime, endTime; @@ -150,6 +150,9 @@ int nuke(const char* media, uint64_t size) int O_UFLAG = udef_wmode ? O_ASYNC : O_SYNC; //char* testflag = udef_testmode ? "/dev/null" : media; + if(udef_testmode == true) + sprintf(media, "%s", "/dev/null"); + int fd = open(media, O_WRONLY | O_UFLAG); if(!fd) { @@ -162,9 +165,6 @@ int nuke(const char* media, uint64_t size) HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL); printf("Wiping %s: %ju (%s)\n", media, (intmax_t)size, mediaSize); - /* Determine how many writes to perform, and at what byte size */ - times = size / byteSize; - /* Dump random garbage to the write table */ if(udef_nukelevel == NUKE_RANDOM_SLOW || udef_nukelevel == NUKE_RANDOM_FAST) fillRandom(wTable, byteSize); @@ -173,9 +173,12 @@ int nuke(const char* media, uint64_t size) else staticPattern(wTable, byteSize); - + /* Begin write passes */ for( pass = 1; pass <= udef_passes ; pass++ ) { + /* Determine how many writes to perform, and at what byte size */ + times = size / byteSize; + startTime = time(NULL); for( block = 0 ; block <= times ; block++) { @@ -258,9 +261,6 @@ void echoList() sprintf(media, "/dev/%s%c", mediaList[mt], 'a' + i); #endif - if(udef_testmode) - sprintf(media, "/dev/null"); - /* Set media size */ size = getSize(media); @@ -446,9 +446,6 @@ int main(int argc, char* argv[]) { ARGVALINT(udef_wmode); } - - if(udef_verbose) - printf("Write mode: %cSYNC\n", udef_wmode ? 'A' : 0); } if(ARGMATCH("--nuke-level") || ARGMATCH("-n")) { @@ -465,31 +462,6 @@ int main(int argc, char* argv[]) printf("*** Rewrite mode is not implemented, using default.\n"); udef_nukelevel = NUKE_PATTERN; } - - if(udef_verbose) - { - char* nlstr = {0}; - switch(udef_nukelevel) - { - case NUKE_ZERO: - nlstr = "Zeroing"; - break; - case NUKE_PATTERN: - nlstr = "Pattern"; - break; - case NUKE_RANDOM_SLOW: - nlstr = "Slow Random"; - break; - case NUKE_RANDOM_FAST: - nlstr = "Fast Random"; - break; - default: - nlstr = "Unknown"; - break; - } - - printf("Wipe method: %s\n", nlstr); - } } if(ARGMATCH("--passes") || ARGMATCH("-p")) { @@ -500,17 +472,10 @@ int main(int argc, char* argv[]) if(udef_passes < 1) udef_passes = 1; } - - if(udef_verbose) - printf("Pass #: %u\n", udef_passes); - } if(ARGMATCH("--disable-test")) { udef_testmode = false; - - if(udef_verbose) - printf("testmode disabled\n"); } if(ARGMATCH("--block-size") || ARGMATCH("-b")) { @@ -518,10 +483,7 @@ int main(int argc, char* argv[]) if(filterArg(argv[tok-1], argv[tok+1], NONEGATIVE|NOZERO|NEEDNUM) == 0) { ARGVALINT(udef_blocksize); - } - - if(udef_verbose) - printf("Block size: %d\n", udef_blocksize); + } } if(argv[tok+1] == NULL) @@ -535,6 +497,34 @@ int main(int argc, char* argv[]) int i = 0; int mt = 0; + if(udef_verbose) + { + char* nlstr = {0}; + switch(udef_nukelevel) + { + case NUKE_ZERO: + nlstr = "Zeroing"; + break; + case NUKE_PATTERN: + nlstr = "Pattern"; + break; + case NUKE_RANDOM_SLOW: + nlstr = "Slow Random"; + break; + case NUKE_RANDOM_FAST: + nlstr = "Fast Random"; + break; + default: + nlstr = "Unknown"; + break; + } + + printf("Test mode: %s\n", udef_testmode ? "ENABLED" : "DISABLED"); + printf("Block size: %d\n", udef_blocksize); + printf("Wipe method: %s\n", nlstr); + printf("Pass #: %u\n", udef_passes); + printf("Write mode: %cSYNC\n", udef_wmode ? 'A' : 0); + } echoList(); do @@ -551,9 +541,6 @@ int main(int argc, char* argv[]) sprintf(media, "/dev/%s%c", mediaList[mt], 'a' + i); #endif - if(udef_testmode) - sprintf(media, "/dev/null"); - /* Set media size */ size = getSize(media); diff --git a/netnuke.h b/netnuke.h index 9147beb..4328521 100644 --- a/netnuke.h +++ b/netnuke.h @@ -4,7 +4,7 @@ /* Prototypes */ void fillRandom(char buffer[], uint64_t length); void staticPattern() __attribute__((alias("fillRandom"))); -int32_t nuke(const char* media, uint64_t size); +int32_t nuke(char* media, uint64_t size); uint64_t getSize(const char* media); void echoList(void); void usage(const char* cmd); @@ -39,7 +39,7 @@ int humanize_number(char *buf, size_t len, int64_t bytes, along with this program. If not, see ." /* Output update speed based on writes */ -#define RETAINER 512 +#define RETAINER 128 /* Used to assist argument parsing */ #define ARGMATCH(arg) strncmp(argv[tok], arg, strlen(arg)) == 0 -- cgit