void switch_fcf(struct fins_module *module, struct finsFrame *ff) { PRINT_DEBUG("Entered: module=%p, ff=%p, meta=%p", module, ff, ff->metaData); //TODO fill out switch (ff->ctrlFrame.opcode) { case CTRL_ALERT: PRINT_DEBUG("opcode=CTRL_ALERT (%d)", CTRL_ALERT); PRINT_WARN("todo"); module_reply_fcf(module, ff, FCF_FALSE, 0); break; case CTRL_ALERT_REPLY: PRINT_DEBUG("opcode=CTRL_ALERT_REPLY (%d)", CTRL_ALERT_REPLY); PRINT_WARN("todo"); freeFinsFrame(ff); break; case CTRL_READ_PARAM: PRINT_DEBUG("opcode=CTRL_READ_PARAM (%d)", CTRL_READ_PARAM); PRINT_WARN("todo"); module_reply_fcf(module, ff, FCF_FALSE, 0); break; case CTRL_READ_PARAM_REPLY: PRINT_DEBUG("opcode=CTRL_READ_PARAM_REPLY (%d)", CTRL_READ_PARAM_REPLY); PRINT_WARN("todo"); freeFinsFrame(ff); break; case CTRL_SET_PARAM: PRINT_DEBUG("opcode=CTRL_SET_PARAM (%d)", CTRL_SET_PARAM); switch_set_param(module, ff); break; case CTRL_SET_PARAM_REPLY: PRINT_DEBUG("opcode=CTRL_SET_PARAM_REPLY (%d)", CTRL_SET_PARAM_REPLY); PRINT_WARN("todo"); freeFinsFrame(ff); break; case CTRL_EXEC: PRINT_DEBUG("opcode=CTRL_EXEC (%d)", CTRL_EXEC); PRINT_WARN("todo"); module_reply_fcf(module, ff, FCF_FALSE, 0); break; case CTRL_EXEC_REPLY: PRINT_DEBUG("opcode=CTRL_EXEC_REPLY (%d)", CTRL_EXEC_REPLY); PRINT_WARN("todo"); freeFinsFrame(ff); break; case CTRL_ERROR: PRINT_DEBUG("opcode=CTRL_ERROR (%d)", CTRL_ERROR); PRINT_WARN("todo"); freeFinsFrame(ff); break; default: PRINT_ERROR("opcode=default (%d)", ff->ctrlFrame.opcode); exit(-1); break; } }
void rtm_fcf(struct fins_module *module, struct finsFrame *ff) { PRINT_DEBUG("Entered: module=%p, ff=%p, meta=%p", module, ff, ff->metaData); //TODO when recv FCF, pull params from meta to figure out connection, send through socket switch (ff->ctrlFrame.opcode) { case CTRL_ALERT: PRINT_DEBUG("opcode=CTRL_ALERT (%d)", CTRL_ALERT); PRINT_ERROR("todo"); module_reply_fcf(module, ff, 0, 0); break; case CTRL_ALERT_REPLY: PRINT_DEBUG("opcode=CTRL_ALERT_REPLY (%d)", CTRL_ALERT_REPLY); PRINT_ERROR("todo"); freeFinsFrame(ff); break; case CTRL_READ_PARAM: PRINT_DEBUG("opcode=CTRL_READ_PARAM (%d)", CTRL_READ_PARAM); PRINT_ERROR("todo"); module_reply_fcf(module, ff, 0, 0); break; case CTRL_READ_PARAM_REPLY: PRINT_DEBUG("opcode=CTRL_READ_PARAM_REPLY (%d)", CTRL_READ_PARAM_REPLY); rtm_read_param_reply(module, ff); break; case CTRL_SET_PARAM: PRINT_DEBUG("opcode=CTRL_SET_PARAM (%d)", CTRL_SET_PARAM); rtm_set_param(module, ff); break; case CTRL_SET_PARAM_REPLY: PRINT_DEBUG("opcode=CTRL_SET_PARAM_REPLY (%d)", CTRL_SET_PARAM_REPLY); rtm_set_param_reply(module, ff); break; case CTRL_EXEC: PRINT_DEBUG("opcode=CTRL_EXEC (%d)", CTRL_EXEC); PRINT_ERROR("todo"); module_reply_fcf(module, ff, 0, 0); break; case CTRL_EXEC_REPLY: PRINT_DEBUG("opcode=CTRL_EXEC_REPLY (%d)", CTRL_EXEC_REPLY); rtm_exec_reply(module, ff); break; case CTRL_ERROR: PRINT_DEBUG("opcode=CTRL_ERROR (%d)", CTRL_ERROR); PRINT_ERROR("todo"); freeFinsFrame(ff); break; default: PRINT_DEBUG("opcode=default (%d)", ff->ctrlFrame.opcode); PRINT_ERROR("todo"); exit(-1); break; } }
void udp_exec(struct fins_module *module, struct finsFrame *ff) { PRINT_DEBUG("Entered: module=%p, ff=%p, meta=%p", module, ff, ff->metaData); uint32_t host_ip = 0; uint32_t host_port = 0; uint32_t rem_ip = 0; uint32_t rem_port = 0; switch (ff->ctrlFrame.param_id) { case UDP_EXEC_CLEAR_SENT: PRINT_DEBUG("param_id=UDP_EXEC_CLEAR_SENT (%d)", ff->ctrlFrame.param_id); secure_metadata_readFromElement(ff->metaData, "host_ip", &host_ip); secure_metadata_readFromElement(ff->metaData, "host_port", &host_port); secure_metadata_readFromElement(ff->metaData, "rem_ip", &rem_ip); secure_metadata_readFromElement(ff->metaData, "rem_port", &rem_port); udp_exec_clear_sent(module, ff, host_ip, (uint16_t) host_port, rem_ip, (uint16_t) rem_port); break; default: PRINT_ERROR("Error unknown param_id=%d", ff->ctrlFrame.param_id); PRINT_WARN("todo"); module_reply_fcf(module, ff, FCF_FALSE, 0); break; } }
void ipv4_fcf(struct fins_module *module, struct finsFrame *ff) { PRINT_DEBUG("Entered: module=%p, ff=%p, meta=%p", module, ff, ff->metaData); //TODO make sure is meant for IP, filter out FCF sent through flows w/multi dest //TODO fill out switch (ff->ctrlFrame.opcode) { case CTRL_ALERT: PRINT_DEBUG("opcode=CTRL_ALERT (%d)", CTRL_ALERT); PRINT_WARN("todo"); module_reply_fcf(module, ff, FCF_FALSE, 0); break; case CTRL_ALERT_REPLY: PRINT_DEBUG("opcode=CTRL_ALERT_REPLY (%d)", CTRL_ALERT_REPLY); PRINT_WARN("todo"); freeFinsFrame(ff); break; case CTRL_READ_PARAM: PRINT_DEBUG("opcode=CTRL_READ_PARAM (%d)", CTRL_READ_PARAM); ipv4_read_param(module, ff); break; case CTRL_READ_PARAM_REPLY: PRINT_DEBUG("opcode=CTRL_READ_PARAM_REPLY (%d)", CTRL_READ_PARAM_REPLY); PRINT_WARN("todo"); freeFinsFrame(ff); break; case CTRL_SET_PARAM: PRINT_DEBUG("opcode=CTRL_SET_PARAM (%d)", CTRL_SET_PARAM); ipv4_set_param(module, ff); break; case CTRL_SET_PARAM_REPLY: PRINT_DEBUG("opcode=CTRL_SET_PARAM_REPLY (%d)", CTRL_SET_PARAM_REPLY); PRINT_WARN("todo"); freeFinsFrame(ff); break; case CTRL_EXEC: PRINT_DEBUG("opcode=CTRL_EXEC (%d)", CTRL_EXEC); ipv4_exec(module, ff); break; case CTRL_EXEC_REPLY: PRINT_DEBUG("opcode=CTRL_EXEC_REPLY (%d)", CTRL_EXEC_REPLY); ipv4_exec_reply(module, ff); break; case CTRL_ERROR: PRINT_DEBUG("opcode=CTRL_ERROR (%d)", CTRL_ERROR); ipv4_error(module, ff); break; default: PRINT_ERROR("opcode=default (%d)", ff->ctrlFrame.opcode); exit(-1); break; } }
void module_read_param_links(struct fins_module *module, struct finsFrame *ff) { PRINT_DEBUG("Entered: module=%p, ff=%p, meta=%p", module, ff, ff->metaData); struct fins_module_table *mt = (struct fins_module_table *) module->data; if (mt->link_list != NULL) { ff->ctrlFrame.data_len = sizeof(struct linked_list); ff->ctrlFrame.data = (uint8_t *) list_clone(mt->link_list, link_clone); #ifdef DEBUG list_for_each(mt->link_list, link_print); #endif } else { ff->ctrlFrame.data_len = 0; ff->ctrlFrame.data = NULL; } module_reply_fcf(module, ff, FCF_TRUE, 0); }
void module_read_param_dual(struct fins_module *module, struct finsFrame *ff) { PRINT_DEBUG("Entered: module=%p, ff=%p, meta=%p", module, ff, ff->metaData); struct fins_module_table *mt = (struct fins_module_table *) module->data; ff->ctrlFrame.data_len = sizeof(struct fins_module_table); ff->ctrlFrame.data = (uint8_t *) secure_malloc(ff->ctrlFrame.data_len); struct fins_module_table *table = (struct fins_module_table *) ff->ctrlFrame.data; if (mt->link_list != NULL) { table->link_list = list_clone(mt->link_list, link_clone); } else { table->link_list = NULL; } table->flows_num = mt->flows_num; int i; for (i = 0; i < table->flows_num; i++) { table->flows[i].link_id = mt->flows[i].link_id; table->flows[i].link = (struct link_record *) list_find1(table->link_list, link_id_test, &table->flows[i].link_id); } #ifdef DEBUG uint8_t buf[1000]; uint8_t *pt = buf; int ret; for (i = 0; i < mt->flows_num; i++) { //ret = sprintf((char *) pt, "%u, ", mt->flows[i].link_id); ret = sprintf((char *) pt, "%u (%p), ", mt->flows[i].link_id, mt->flows[i].link); pt += ret; } *pt = '\0'; PRINT_DEBUG("flows: max=%u, num=%u, ['%s']", module->flows_max, mt->flows_num, buf); if (mt->link_list != NULL) { list_for_each(mt->link_list, link_print); } #endif module_reply_fcf(module, ff, FCF_TRUE, 0); }
void udp_set_param(struct fins_module *module, struct finsFrame *ff) { PRINT_DEBUG("Entered: module=%p, ff=%p, meta=%p", module, ff, ff->metaData); switch (ff->ctrlFrame.param_id) { case UDP_SET_PARAM_FLOWS: PRINT_DEBUG("param_id=UDP_SET_PARAM_FLOWS (%d)", ff->ctrlFrame.param_id); module_set_param_flows(module, ff); break; case UDP_SET_PARAM_LINKS: PRINT_DEBUG("param_id=UDP_SET_PARAM_LINKS (%d)", ff->ctrlFrame.param_id); module_set_param_links(module, ff); break; case UDP_SET_PARAM_DUAL: PRINT_DEBUG("param_id=UDP_SET_PARAM_DUAL (%d)", ff->ctrlFrame.param_id); module_set_param_dual(module, ff); break; default: PRINT_DEBUG("param_id=default (%d)", ff->ctrlFrame.param_id); PRINT_WARN("todo"); module_reply_fcf(module, ff, FCF_FALSE, 0); break; } }
void rtm_set_param(struct fins_module *module, struct finsFrame *ff) { PRINT_DEBUG("Entered: module=%p, ff=%p, meta=%p", module, ff, ff->metaData); switch (ff->ctrlFrame.param_id) { case RTM_SET_PARAM_FLOWS: PRINT_DEBUG("RTM_SET_PARAM_FLOWS"); module_set_param_flows(module, ff); break; case RTM_SET_PARAM_LINKS: PRINT_DEBUG("RTM_SET_PARAM_LINKS"); module_set_param_links(module, ff); break; case RTM_SET_PARAM_DUAL: PRINT_DEBUG("RTM_SET_PARAM_DUAL"); module_set_param_dual(module, ff); break; default: PRINT_DEBUG("param_id=default (%d)", ff->ctrlFrame.param_id); PRINT_ERROR("todo"); module_reply_fcf(module, ff, 0, 0); break; } }
void module_read_param_flows(struct fins_module *module, struct finsFrame *ff) { PRINT_DEBUG("Entered: module=%p, ff=%p, meta=%p", module, ff, ff->metaData); struct fins_module_table *mt = (struct fins_module_table *) module->data; int i; ff->ctrlFrame.data_len = mt->flows_num; if (mt->flows_num != 0) { ff->ctrlFrame.data = (uint8_t *) secure_malloc(ff->ctrlFrame.data_len * sizeof(struct fins_module_flow)); struct fins_module_flow *flows = (struct fins_module_flow *) ff->ctrlFrame.data; for (i = 0; i < ff->ctrlFrame.data_len; i++) { flows[i].link_id = mt->flows[i].link_id; } #ifdef DEBUG uint8_t buf[1000]; uint8_t *pt = buf; int ret; for (i = 0; i < mt->flows_num; i++) { //ret = sprintf((char *) pt, "%u, ", mt->flows[i].link_id); ret = sprintf((char *) pt, "%u (%p), ", flows[i].link_id, flows[i].link); pt += ret; } *pt = '\0'; PRINT_DEBUG("flows: max=%u, num=%u, ['%s']", module->flows_max, mt->flows_num, buf); #endif } else { ff->ctrlFrame.data = NULL; #ifdef DEBUG PRINT_DEBUG("flows: max=%u, num=%u, ['']", module->flows_max, mt->flows_num); #endif } module_reply_fcf(module, ff, FCF_TRUE, 0); }
void udp_read_param(struct fins_module *module, struct finsFrame *ff) { PRINT_DEBUG("Entered: module=%p, ff=%p, meta=%p", module, ff, ff->metaData); PRINT_WARN("todo"); module_reply_fcf(module, ff, FCF_FALSE, 0); }