Exemplo n.º 1
0
char* x123_decode(const char* in_str, const char* key, char* out_str)
{
	Cdbg(DBE, "in_str=%s, key=%s", in_str, key);

	char* ibinstr;
	hexstr2binstr( in_str, &ibinstr );
	//Cdbg(DBE, "ibinstr=%s", ibinstr);

	char* binstr;
	deinterleave( ibinstr, 8, &binstr );
	//Cdbg(DBE, "deinterleave, binstr=%s", binstr);

	int shiftamount = getshiftamount( key, binstr );
	//Cdbg(DBE, "shiftamount %d %s", shiftamount, key);

	char* unshiftbinstr;
	strleftshift( binstr, shiftamount, &unshiftbinstr );
	//Cdbg(DBE, "unshiftbinstr %s", unshiftbinstr);

	binstr2str(unshiftbinstr, &out_str);
	Cdbg(DBE, "out_str %s", out_str);

	free(ibinstr);
	free(binstr);
	free(unshiftbinstr);
	
	return out_str;
}
Exemplo n.º 2
0
char* x123_encode(const char* in_str, const char* key, char* out_str)
{
	//Cdbg(DBE, "in_str=%s, key=%s", in_str, key);

	char* ibinstr;
	str2binstr( in_str, &ibinstr );
	//Cdbg(DBE, "ibinstr = %s", ibinstr);

	int shiftamount = getshiftamount( key, ibinstr );
	//Cdbg(DBE, "shiftamount = %d", shiftamount);

	char* unshiftbinstr = NULL;
	strrightshift( ibinstr, shiftamount, &unshiftbinstr );
	//Cdbg(DBE, "unshiftbinstr = %s", unshiftbinstr);

	char* binstr;
	interleave( unshiftbinstr, 8, &binstr );
	//Cdbg(DBE, "binstr = %s", binstr);

	char* hexstr;
	binstr2hexstr(binstr, &hexstr);
	//Cdbg(DBE, "hexstr = %s", hexstr);

	int out_len = strlen(hexstr)+9;
	//Cdbg(DBE, "out_len = %d, %d", out_len, strlen(hexstr));
	
	out_str = (char*)malloc(out_len);
	memset(out_str , '\0', out_len);
	strcpy(out_str, "ASUSHARE");
	strcat(out_str, hexstr);

	free(unshiftbinstr);
	free(ibinstr);
	free(binstr);
	free(hexstr);
	
	return out_str;
}
Exemplo n.º 3
0
/* 
 * MAIN 
 * 
 */
extern int main( int argc, char **argv )
{
	/* vars */
	int ret			= 0;
	uint32_t i		= 0;
	uint32_t num_devs	= 0;
	uint32_t num_links	= 0;
	uint32_t num_vaults	= 0;
	uint32_t queue_depth	= 0;
	uint32_t num_banks	= 0;
	uint32_t num_drams	= 0;
	uint32_t capacity	= 0;
	uint32_t xbar_depth	= 0;		
	uint32_t num_threads	= 2;
	uint32_t bsize		= 128;
	uint32_t simd		= 1;
	uint32_t shiftamt	= 0;
	long num_req		= 0;
	uint64_t *addr_a	= NULL;
	uint64_t *addr_b	= NULL;
	uint64_t *addr_c	= NULL;
	uint64_t addr_scalar	= 0x00ll;
	struct hmcsim_t hmc;
	/* ---- */

	while(( ret = getopt( argc, argv, "b:c:d:hl:m:n:q:s:v:x:N:T:" )) != -1 )
	{
		switch( ret )
		{
			case 'b': 
				num_banks = (uint32_t)(atoi(optarg));
				break;
			case 'c':
				capacity = (uint32_t)(atoi(optarg));
				break;
			case 'd': 
				num_drams = (uint32_t)(atoi(optarg));
				break;
			case 'h': 
				printf( "%s%s%s\n", "usage : ", argv[0], " -bcdhlnqvx" );
				printf( " -b <num_banks>\n" );
				printf( " -c <capacity>\n" );
				printf( " -d <num_drams>\n" );
				printf( " -h ...print help\n" );
				printf( " -l <num_links>\n" );
				printf( " -m <block_size>\n" );
				printf( " -n <num_devs>\n" );
				printf( " -q <queue_depth>\n" );
				printf( " -s <simd_width>\n" );
				printf( " -v <num_vaults>\n" );
				printf( " -x <xbar_depth>\n" );
				printf( " -N <num_requests>\n" );
				printf( " -T <num_threads>\n" );
				return 0;
				break;
			case 'l':
				num_links = (uint32_t)(atoi(optarg));
				break;
			case 'm': 
				bsize = (uint32_t)(atoi(optarg));
				break;
			case 'n':
				num_devs = (uint32_t)(atoi(optarg));
				break;
			case 'q':
				queue_depth = (uint32_t)(atoi(optarg));
				break;
			case 's':
				simd	= (uint32_t)(atoi(optarg));
				break;
			case 'v': 
				num_vaults = (uint32_t)(atoi(optarg));
				break;
			case 'x': 
				xbar_depth = (uint32_t)(atoi(optarg));
				break;
			case 'N':
				num_req	= (long)(atol(optarg));
				break;
			case 'T':
				num_threads = (uint32_t)(atoi(optarg));
				break;
			case '?':
			default:
				printf( "%s%s%s\n", "Unknown option: see ", argv[0], " -bcdhlmnqsvxNT" );
				return -1;
				break;
		}
	}

	if( ((long)(num_req) % (long)( (long)(simd) * (long)(num_threads) )) != 0 ){
		printf( "ERROR : NUM_REQ MUST BE A DIVISIBLE EVENLY BY NUM_THREADS * SIMD\n" );
		return -1;
	}


	/* 
	 * allocate memory 
	 * 
	 */
	addr_a = malloc( sizeof( uint64_t ) * num_req );
	if( addr_a == NULL ){ 
		printf( "FAILED TO ALLOCATE MEMORY FOR ADDR_A\n" );
		return -1;
	}
	addr_b = malloc( sizeof( uint64_t ) * num_req );
	if( addr_b == NULL ){ 
		printf( "FAILED TO ALLOCATE MEMORY FOR ADDR_B\n" );
		free( addr_a );
		return -1;
	}

	addr_c = malloc( sizeof( uint64_t ) * num_req );
	if( addr_c == NULL ){ 
		printf( "FAILED TO ALLOCATE MEMORY FOR ADDR_C\n" );
		free( addr_a );
		free( addr_b );
		return -1;
	}

	/* 
	 * get the shift amount based upon
	 * the max block size, device size and link count
 	 * 
	 */
	if( getshiftamount( num_links, capacity, bsize, &shiftamt ) != 0 ){ 
		printf( "FAILED TO RETRIEVE SHIFT AMOUNT\n" );
		hmcsim_free( &hmc );
		free( addr_a );
		free( addr_b );
		free( addr_c );
	}


	/* 
	 * setup the addressing structure 
	 * decide where to start the respective arrays
	 * 
 	 */
	if( genrands( 	addr_a,
			addr_b,
			addr_c,
			&addr_scalar,
			num_req, 
			num_devs, 
			capacity, 
			shiftamt ) !=0 ){
		printf( "FAILED TO GENERATE ADDRESSING SCHEMA\n" );
		return -1;
	}



	/* 
	 * init the library 
	 * 
	 */

	ret = hmcsim_init(	&hmc, 
				num_devs, 
				num_links, 
				num_vaults, 
				queue_depth, 
				num_banks, 
				num_drams, 
				capacity, 
				xbar_depth );
	if( ret != 0 ){ 
		printf( "FAILED TO INIT HMCSIM\n" );	
		return -1;
	}else {
		printf( "SUCCESS : INITIALIZED HMCSIM\n" );
	}

	/* 
	 * setup the device topology
	 * 
	 */
	if( num_devs > 1 ){ 
		/* 
		 * MULTIPLE DEVICES
		 *
		 */
	}else{
		/* 
		 * SINGLE DEVICE
		 *
		 */

		for( i=0; i<num_links; i++ ){

                        ret = hmcsim_link_config( &hmc,
                                                (num_devs+1),
                                                0,
                                                i,
                                                i,
                                                HMC_LINK_HOST_DEV );

                        if( ret != 0 ){
                                printf( "FAILED TO INIT LINK %d\n", i );
                                hmcsim_free( &hmc );
				free( addr_a );
				free( addr_b );
				free( addr_c );
                                return -1;
                        }else{
                                printf( "SUCCESS : INITIALIZED LINK %d\n", i );
                        }
                }

	}	

	/* 
	 * init the max request block size 
 	 * 
	 */
	ret = hmcsim_util_set_all_max_blocksize( &hmc, bsize );

	if( ret != 0 ){ 
		printf( "FAILED TO INIT MAX BLOCKSIZE\n" );
		hmcsim_free( &hmc );
		return -1;
	}else {
		printf( "SUCCESS : INITIALIZED MAX BLOCK SIZE\n" );
	}


	/* 
	 * execute the test
	 * 
	 */
	if( execute_test(	&hmc,
            	            	addr_a,
               		      	addr_b,
               	            	addr_c,
                             	addr_scalar,
                             	num_req,
                             	num_threads, 
				simd ) != 0 ){ 
		printf( "ERROR : FAILED TO EXECUTE THE TEST\n" );
		ret = -1;
		goto cleanup;
	}

cleanup:
	free( addr_a );
	free( addr_b );
	free( addr_c );
	
	
	/* 
	 * free the library data
	 * 
	 */	
	ret = hmcsim_free( &hmc );
	
	if( ret != 0 ){ 
		printf( "FAILED TO FREE HMCSIM\n" );
		return -1;
	}else {
		printf( "SUCCESS : FREE'D HMCSIM\n" );
	}
	
	return ret;
}