27#pragma region CONFIG_UTILITY
28SATELLITE_DEVICETYPE SATELLITE_DEVICETYPE_FROM_STR(
const char* type)
30 for (
int i = 0; i < SATELLITE_DEVICETYPE_UNKNOWN; i++)
31 if (!_stricmp(type, strSATELLITE_DEVICETYPE[i]))
return (SATELLITE_DEVICETYPE)i;
32 fnNetSimError(
"Unknown SATELLITE device type %s in function %s\n",
34 return SATELLITE_DEVICETYPE_UNKNOWN;
38#pragma region PROTOCOLDATA
39static ptrSATELLITE_PROTODATA check_for_data_alloc(NETSIM_ID d,
42 if (DEVICE_MACLAYER(d, in) &&
43 DEVICE_MACLAYER(d,in)->nMacProtocolId == MAC_PROTOCOL_SATELLITE &&
45 return DEVICE_MACVAR(d, in);
47 if (DEVICE_PHYLAYER(d, in) &&
48 DEVICE_MACLAYER(d,in)->nMacProtocolId == MAC_PROTOCOL_SATELLITE &&
50 return DEVICE_PHYVAR(d, in);
55static void set_protocol_data(NETSIM_ID d, NETSIM_ID in,
void* data)
57 if (DEVICE_MACLAYER(d, in))
59 DEVICE_MACLAYER(d, in)->nMacProtocolId = MAC_PROTOCOL_SATELLITE;
60 DEVICE_MACVAR(d, in) = data;
63 if (DEVICE_PHYLAYER(d, in))
65 DEVICE_PHYVAR(d, in) = data;
69ptrSATELLITE_PROTODATA SATELLITE_PROTOCOLDATA_ALLOC(NETSIM_ID d,
72 ptrSATELLITE_PROTODATA data = check_for_data_alloc(d, in);
75 set_protocol_data(d, in, data);
79 data = calloc(1,
sizeof * data);
80 set_protocol_data(d, in, data);
83 data->interfaceId = in;
85 data->SATELLITE_LAYER_DATA = calloc(SATELLITE_DEVICETYPE_UNKNOWN,
sizeof * data->SATELLITE_LAYER_DATA);
86 for (
int i = 0; i < SATELLITE_DEVICETYPE_UNKNOWN; i++)
88 data->SATELLITE_LAYER_DATA[i] = calloc(SATELLITE_LAYER_UNKNOWN,
sizeof * data->SATELLITE_LAYER_DATA[i]);
93void SATELLITE_PROTOCOLDATA_FREE(NETSIM_ID d,
96 ptrSATELLITE_PROTODATA data = DEVICE_MACVAR(d, in);
97 free(data->SATELLITE_LAYER_DATA);
99 DEVICE_MACVAR(d, in) = NULL;
100 DEVICE_PHYVAR(d, in) = NULL;
103void* SATELLITE_LAYER_DATA_GET(NETSIM_ID d, NETSIM_ID in,
104 SATELLITE_DEVICETYPE devType,
105 SATELLITE_LAYER layer)
107 ptrSATELLITE_PROTODATA data = check_for_data_alloc(d, in);
110 fnNetSimError(
"Device %d, Interface %d is not an SATELLITE interface\n", d, in);
114 if (data->deviceType != devType)
116 fnNetSimError(
"Device %d, Interface %d is not %s device\n",
118 strSATELLITE_DEVICETYPE[devType]);
122 if (!data->SATELLITE_LAYER_DATA[devType][layer])
124 fnNetSimError(
"%s sublayer is not initialized for device %d, Interface %d\n",
125 strSATELLITE_LAYER[layer], d, in);
129 return data->SATELLITE_LAYER_DATA[devType][layer];
132bool SATELLITE_LAYER_DATA_IsInitialized(NETSIM_ID d, NETSIM_ID in,
133 SATELLITE_DEVICETYPE devType,
134 SATELLITE_LAYER layer)
136 ptrSATELLITE_PROTODATA data = check_for_data_alloc(d, in);
139 fnNetSimError(
"Device %d, Interface %d is not an SATELLITE interface\n", d, in);
143 if (data->deviceType != devType)
145 fnNetSimError(
"Device %d, Interface %d is not %s device\n",
147 strSATELLITE_DEVICETYPE[devType]);
151 if (!data->SATELLITE_LAYER_DATA[devType][layer])
159void SATELLITE_LAYER_DATA_SET(NETSIM_ID d, NETSIM_ID in,
160 SATELLITE_DEVICETYPE devType,
161 SATELLITE_LAYER layer,
164 ptrSATELLITE_PROTODATA PD = check_for_data_alloc(d, in);
167 fnNetSimError(
"Device %d, Interface %d is not an SATELLITE interface\n", d, in);
171 if (PD->deviceType != devType)
173 fnNetSimError(
"Device %d, Interface %d is not %s device\n",
175 strSATELLITE_DEVICETYPE[devType]);
179 PD->SATELLITE_LAYER_DATA[devType][layer] = data;
182SATELLITE_DEVICETYPE SATELLITE_DEVICETYPE_GET(NETSIM_ID d, NETSIM_ID in)
184 ptrSATELLITE_PROTODATA pd = check_for_data_alloc(d, in);
187 fnNetSimError(
"Device %d, Interface %d is not an SATELLITE interface\n", d, in);
188 return SATELLITE_DEVICETYPE_UNKNOWN;
191 return pd->deviceType;
195#pragma region SATELLITE_LOG
196#define MAX_TAB_COUNT 100
197static FILE* fplog = NULL;
198static char tabs[MAX_TAB_COUNT];
199static int tabCount = 0;
201static bool get_satellite_log_status()
203 if (get_protocol_log_status(
"SATELLITE_LOG"))
209void init_satellite_log()
211 if (get_satellite_log_status())
214 sprintf(str,
"%s/%s", pszIOLogPath,
"satellite.log");
215 fplog = fopen(str,
"w");
219 fnSystemError(
"Unable to open satellite.log file");
224void close_satellite_log()
230void print_satellite_log(
char* format, ...)
234 fprintf(fplog,
"%s", tabs);
237 vfprintf(fplog, format, l);
242void satellite_log_add_tab()
244 tabs[tabCount] =
'\t';
246 if (tabCount > 99) tabCount = 99;
249void satellite_log_remove_tab()
253 if (tabCount < 0) tabCount = 0;