/********************************************************************************************************* ** 函数名称: __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); }
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; }
/* 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); }