📄 opnetwork_capture_mode_inoise.ps.c
字号:
/* opnetwork_capture_mode_inoise.ps.c */
/*
/****************************************/
/* Copyright (c) 1993 */
/* by MIL 3, Inc. */
/* (A Delaware Corporation) */
/* 3400 International Drive, N.W. */
/* Washington, D.C., U.S.A. */
/* All Rights Reserved. */
/****************************************/
#include <opnet.h>
void
opnetwork_capture_mode_inoise (pkptr_prev, pkptr_arriv)
Packet* pkptr_prev;
Packet* pkptr_arriv;
{
int arriv_match, prev_match;
double prev_rcvd_power, arriv_rcvd_power;
double arriv_noise_accum, prev_noise_accum;
/** Evaluate a collision due to arrival of 'pkptr_arriv' **/
/** at site where 'pkptr_prev' was already arriving. **/
FIN (opnetwork_capture_mode_inoise (pkptr_prev, pkptr_arriv))
/* If the previous packet ends just as the new one begins, this is not */
/* a collision (just a near miss, or perhaps back-to-back packets). */
if (op_td_get_dbl (pkptr_prev, OPC_TDA_RA_END_RX) != op_sim_time ())
{
/* Increment the number of collisions in previous packet. */
op_td_set_int (pkptr_prev, OPC_TDA_RA_NUM_COLLS,
op_td_get_int (pkptr_prev, OPC_TDA_RA_NUM_COLLS) + 1);
/* Increment number of collisions in arriving packet. */
op_td_set_int (pkptr_arriv, OPC_TDA_RA_NUM_COLLS,
op_td_get_int (pkptr_arriv, OPC_TDA_RA_NUM_COLLS) + 1);
/* Determine if previous packet is valid or noise. */
prev_match = op_td_get_int (pkptr_prev, OPC_TDA_RA_MATCH_STATUS);
/* Determine if arriving packet is valid or noise. */
arriv_match = op_td_get_int (pkptr_arriv, OPC_TDA_RA_MATCH_STATUS);
/* Get received power levels for both packets. */
prev_rcvd_power = op_td_get_dbl (pkptr_prev, OPC_TDA_RA_RCVD_POWER);
arriv_rcvd_power = op_td_get_dbl (pkptr_arriv, OPC_TDA_RA_RCVD_POWER);
/* If the arriving packet is valid, calculate */
/* interference of previous packet on arriving one. */
if (arriv_match == OPC_TDA_RA_MATCH_VALID)
{
arriv_noise_accum = op_td_get_dbl (pkptr_arriv, OPC_TDA_RA_NOISE_ACCUM);
op_td_set_dbl (pkptr_arriv, OPC_TDA_RA_NOISE_ACCUM,
arriv_noise_accum + prev_rcvd_power);
}
/* And vice-versa. */
if (prev_match == OPC_TDA_RA_MATCH_VALID)
{
prev_noise_accum = op_td_get_dbl (pkptr_prev, OPC_TDA_RA_NOISE_ACCUM);
op_td_set_dbl (pkptr_prev, OPC_TDA_RA_NOISE_ACCUM,
prev_noise_accum + arriv_rcvd_power);
}
/* Place flag indicating reject in transmission data block */
/* for the packet with lower received power */
if (prev_rcvd_power <= arriv_rcvd_power)
{
op_td_set_int (pkptr_prev, OPC_TDA_RA_PK_ACCEPT, OPC_FALSE);
}
else
{
op_td_set_int (pkptr_arriv, OPC_TDA_RA_PK_ACCEPT, OPC_FALSE);
}
}
FOUT
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -