📄 nicenode.cc
字号:
/************************************************** * File: nicenode.cc Author: Suman Banerjee <suman@cs.umd.edu> Date: July 31, 2001 Terms: GPL NICE implementation in myns This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * **************************************************/#include <stdio.h>#include <stdlib.h>#include <constants.h>#include "nicenode.h"#include "app-packet.h"#include "common.h"#define MAX_DATA_PACKETS (max_data_packets.getval().u.i)NamedConstant max_data_packets("max_data_packets",3000);NiceNode::NiceNode (void) : Node () { m_data_packet_count = 0; m_control_packet_count = 0; m_control_byte_count = 0; if (MAX_DATA_PACKETS > 0) m_per_node_data_pkt_count = (int *) safe_malloc (sizeof(int) * MAX_DATA_PACKETS); else m_per_node_data_pkt_count = NULL; for (int i = 0; i < MAX_DATA_PACKETS; i++) m_per_node_data_pkt_count[i] = 0;}NiceNode::~NiceNode (void) { if (m_per_node_data_pkt_count != NULL) free(m_per_node_data_pkt_count);}void NiceNode::specific_tx_pkt (Packet *p, int dst) { AppPacket *ap = (AppPacket *)p; if (ap->st == PACKET_DATA) printf ("[link-data-send] [ %d %d ] at %f seq %d\n", id, dst, Scheduler::Clock(), ap->u.data_p.seq_no); return;}void NiceNode::specific_rx_pkt_handler (Packet *p, bool is_src) { AppPacket *ap = (AppPacket *)p; switch (ap->st) { case PACKET_DATA: m_data_packet_count ++; assert (ap->u.data_p.seq_no >= 0); if (ap->u.data_p.seq_no < MAX_DATA_PACKETS) { m_per_node_data_pkt_count[ap->u.data_p.seq_no] ++; //if (is_src == false) // printf ("[link-data-rcv] [ %d %d ] at %f seq %d\n", ap->src, id, Scheduler::Clock(), ap->u.data_p.seq_no); } break; case JOIN_QUERY: case JOIN_FORWARD: case JOIN_RESPONSE: case CLUSTER_REFRESH: case CLUSTER_MERGE: case PING_QUERY: case PING_RESPONSE: m_control_byte_count += get_app_packet_size(p); m_control_packet_count ++; break; default: printf ("[Err] Illegal App packet type\n"); } return;}void NiceNode::display_on_stop_simulation (void) { printf ("[StopSim Node %d ] data-pkts %d : control-pkts %d bytes %d\n", id, m_data_packet_count, m_control_packet_count, m_control_byte_count); for (int i = 0; i < MAX_DATA_PACKETS; i++) if (m_per_node_data_pkt_count[i] > 0) printf ("[StopSimData Node %d ] seq-no %d : count %d\n", id, i, m_per_node_data_pkt_count[i]); return;}int NiceNode::get_app_packet_size (Packet *p) { AppPacket *ap = (AppPacket *)p; switch (ap->st) { case JOIN_QUERY: case PING_QUERY: return 5; case JOIN_FORWARD: return (2 * HOST_INFO_SIZE + 9); case JOIN_RESPONSE: return (HOST_INFO_SIZE + 7 + HOST_INFO_SIZE * ap->u.joinresp_p.mbr_count); case CLUSTER_REFRESH: return (13 + HOST_INFO_SIZE * (ap->u.clusterrefresh_p.mbr_count+ap->u.clusterrefresh_p.hl_mbr_count)); case CLUSTER_MERGE: return (5 + HOST_INFO_SIZE * ap->u.clustermerge_p.mbr_count); case PING_RESPONSE: return (9 + HOST_INFO_SIZE * ap->u.pingresp_p.mbr_count); case PACKET_DATA: return (2 + HOST_INFO_SIZE); default: return 0; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -