Ejemplo n.º 1
0
/*********************************************************************************************************
** 函数名称: __uuidGen
** 功能描述: 获得 uuid
** 输 入  : ptimeNow      当前时间
**           uuid          产生一个结果
** 输 出  : NONE
** 全局变量: 
** 调用模块: 
*********************************************************************************************************/
static VOID __uuidGen (time_t timeNow, clock_t clock, uuid_t *uuid)
{
    UINT32  uiTemp;

    uuid->time_low = (UINT32)timeNow;
    uuid->time_mid = (UINT16)(timeNow >> 32);
    uuid->time_hi_and_version = (UINT16)(((timeNow >> 48) & 0xfff) | (1 << 12));
    uuid->clock_seq_hi_and_reserved = (UINT8)(clock >> 8);
    uuid->clock_seq_low = (UINT8)clock;
    
    uiTemp = (UINT32)lib_random();
    uuid->node[0] = (UINT8)(uiTemp >> 24);
    uuid->node[1] = (UINT8)(uiTemp >> 16);
    uuid->node[2] = (UINT8)(uiTemp >> 8);
    uuid->node[3] = (UINT8)(uiTemp);
    
    uiTemp = (UINT32)lib_random();
    uuid->node[4] = (UINT8)(uiTemp >> 24);
    uuid->node[5] = (UINT8)(uiTemp >> 16);
}
Ejemplo n.º 2
0
void appflooding()
{
  fromnode = 2; 
  __asm__ __volatile__("sei" ::); 
 
  nodeid = lib_get_node_id();
  while (1)
 	{
      if (nodeid == fromnode)
      {    
      sig = lib_random();
      msg[0] = nodeid%256;
	  msg[1] = nodeid/256;
	  msg[2] = sig%256;
	  msg[3] = sig/256;
	  msg[4] = 90; 
	  msg[5] = 0xff;
	  msg[6] = 0xff;
	  msg[7] = 'h';
	  msg[8] = 'e';
	  msg[9] = 'l';
	  msg[10] = 'l';
	  msg[11] = 'o';
	  msg[12] = floodingcounter++; 
	 
	  lib_radio_send_msg(20, 0, 16, msg);
	  
	   if (floodingcounter%3==0)
	   { lib_red_on();
		 lib_green_off();
		 lib_yellow_off();
	   }
	   else if (floodingcounter%3==1)
	    {lib_red_off();
		 lib_green_on();
		 lib_yellow_off();
	    }
		else 
	   {
		 lib_red_off();
		 lib_green_off();
		 lib_yellow_on();
	   }				
	   
      sleepThread(2000);
      }
    else 
 	  {
	  lib_radio_receive(90, 16, msg); 
      incomingnode = (uint16_t)msg[0]+ (((uint16_t)msg[1]) *256); 
	  floodingcounter = msg[12]; 
	  if (floodingcounter%3==0)
	   { lib_red_on();
		 lib_green_off();
		 lib_yellow_off();
	   }
	   else if (floodingcounter%3==1)
	    {lib_red_off();
		 lib_green_on();
		 lib_yellow_off();
	    }
		else 
	   {
		 lib_red_off();
		 lib_green_off();
		 lib_yellow_on();
	   }				
	  }
	
	  
  	}	 
	  
	//should never reach here.
	return; 
}
Ejemplo n.º 3
0
/* racer create a new thread and access the metadata/itb file randomizely
 */
void *racer(void *arg)
{
    struct itb *itb;
    struct fdhash_entry *fde;
    struct itb_info ii;
    u64 duuid = (u64)arg;
    struct mmap_args ma = {0, };
    range_t *range;
    int len, range_begin, range_end, err, counter = 0;

    itb = xmalloc(sizeof(*itb) + ITB_SIZE * sizeof(struct ite));
    if (!itb) {
        hvfs_err(mdsl, "xmalloc ITB failed\n");
        racer_stop = 1;
    }
    range_begin = sizeof(itb->h);
    range_end = sizeof(*itb) + ITB_SIZE * sizeof(struct ite);

    while (!racer_stop) {
        xsleep(lib_random(0xffff));
        /* try to append more itb to the itb file */
        len = lib_random(range_end - range_begin) + range_begin;
        atomic_set(&itb->h.len, len);
        itb->h.itbid = lib_random(0xfff);
        itb->h.puuid = duuid;

        err = itb_append(itb, &ii, hmo.site_id, 0);
        if (err) {
            hvfs_err(mdsl, "Append itb <> to disk file failed w/ %d\n",
                     err);
            continue;
        } else {
            hvfs_info(mdsl, "Append (%d) itb %ld len %d to itb file %ld\n",
                      (++counter), itb->h.itbid, atomic_read(&itb->h.len),
                      ii.master);
        }
        /* open the md file and try to update the ranges */
        fde = mdsl_storage_fd_lookup_create(duuid, MDSL_STORAGE_MD, 0);
        if (IS_ERR(fde)) {
            hvfs_err(mdsl, "lookup create MD file failed w/ %ld\n",
                     PTR_ERR(fde));
            continue;
        }
        if (ii.master < fde->mdisk.itb_master) {
            hvfs_info(mdsl, "Drop obsolete itb %ld appending %ld\n",
                      itb->h.itbid, ii.location);
            goto put_fde;
        }
        ma.win = MDSL_STORAGE_DEFAULT_RANGE_SIZE;
    relookup:
        xlock_lock(&fde->lock);
        err = __mdisk_lookup_nolock(fde, MDSL_MDISK_RANGE, itb->h.itbid,
                                    &range);
        if (err == -ENOENT) {
            /* create a new range now */
            u64 i;
            
            i = MDSL_STORAGE_idx2range(itb->h.itbid);
            __mdisk_add_range_nolock(fde, i * MDSL_STORAGE_RANGE_SLOTS,
                                     (i + 1) * MDSL_STORAGE_RANGE_SLOTS - 1,
                                     fde->mdisk.range_aid++);
            __mdisk_range_sort(fde->mdisk.new_range, fde->mdisk.new_size);
            xlock_unlock(&fde->lock);
            goto relookup;
        } else if (err) {
            hvfs_err(mdsl, "mdisk_lookup_nolock failed w/ %d\n", err);
            xlock_unlock(&fde->lock);
            goto put_fde;
        }
        xlock_unlock(&fde->lock);

        ma.foffset = 0;
        ma.range_id = range->range_id;
        ma.range_begin = range->begin;
        ma.flag = MA_OFFICIAL;

        err = __range_write(duuid, itb->h.itbid, &ma, ii.location);
        if (err) {
            hvfs_err(mdsl, "range write failed w/ %d\n", err);
            goto put_fde;
        }
        err = __mdisk_write(fde, NULL);
        if (err) {
            hvfs_err(mdsl, "sync md file failed w/ %d\n", err);
        }
    put_fde:
        mdsl_storage_fd_put(fde);
    }

    pthread_exit(0);
}