Wiki
Clone wikimobilityfirst / Computing_MF_click
This page describes how to integrate the computing services in the click MF router (based on the May 23, 2014 version):
To trigger a transparent services, there are three steps:
- intercept a complete chunk from the router (from mf_segmentor)
- update the chunk payload, note that the chunk size might be changed (e.g., compression services)
- ship back the processed chunk for further delivery
When need to change the mf_segmentor.cc accordingly:
add a ``computing'' parameter, to specify the service number (0 - doing nothing, 1 - a simple encryption service)
#!c++ int MF_Segmentor::configure(Vector<String> &conf, ErrorHandler *errh){ if(cp_va_kparse(conf, this, errh, "ROUTER_STATS", cpkP+cpkM, cpElement, &_routerStats, "CHUNK_MANAGER", cpkP+cpkM, cpElement, &_chunkManager, "WINDOW_SIZE", cpkP, cpUnsigned, &_window_size, "COMPUTING", cpkP, cpUnsigned, &_computing_service, // 0 - no service, 1 - simple encryption cpEnd) < 0) { return -1; } return 0; }
also
we need to put
#!c++ #include "Core_Computing_Func.hh"
in the beginning
also
we need to add
#!c++ while ((!isSendingPoolFull()) && (_readyCache->size() > 0)) { uint32_t hop_ID = findMinReadyHopID(); logger.log(MF_DEBUG, "seg: starting trxfr hop ID: %d; ready chks: %d", hop_ID, _readyCache->size()); Chunk *chunk = _readyCache->find(hop_ID).value(); Computing_Core_Func(chunk); //find ready chunks, erase from readyQ ReadyChunkMap::iterator it = _readyCache->find(hop_ID); Chunk *readyChunk = it.value(); _readyCache->erase(it);
accordingly, we need some updates in the mf_segmentor.hh
#!c++ private: void Computing_Core_Func(Chunk *chunk); void Computing_parse_chunk_info(Chunk *chunk); void Computing_chunk_processing(uint32_t _service_type, Chunk *chunk, uint32_t ori_chunk_size); void Computing_updated_chunk(Chunk *chunk, uint32_t new_chunk_size, uint32_t hop_id_log, uint32_t _pkt_size); uint32_t _computing_service;
- Computing_Core_Function is the main interface for the router to trigger the computing service
- Computing_parse_chunk_info is used for parsing the basic information of a received chunk
- Computing_chunk_processing is the main part of the computing function, you can add as many services as you wish here
- Computing_updated_chunk is used for clearing the old chunk payload, and adding the new chunk payload
Updated