MCPcopy Create free account
hub / github.com/EIPStackGroup/OpENer / GetAttributeAllTcpIpInterface

Function GetAttributeAllTcpIpInterface

source/src/cip/ciptcpipinterface.c:325–382  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

323}
324
325EipStatus GetAttributeAllTcpIpInterface(
326 CipInstance *instance,
327 CipMessageRouterRequest *message_router_request,
328 CipMessageRouterResponse *message_router_response,
329 struct sockaddr *originator_address,
330 const int encapsulation_session) {
331
332 EipUint8 *response = message_router_response->data; /* pointer into the reply */
333 CipAttributeStruct *attribute = instance->attributes;
334
335 for (int j = 0; j < instance->cip_class->number_of_attributes; j++) /* for each instance attribute of this class */
336 {
337 int attribute_number = attribute->attribute_number;
338 if (attribute_number < 32) /* only return attributes that are flagged as being part of GetAttributeALl */
339 {
340 message_router_request->request_path.attribute_number = attribute_number;
341
342 if (8 == attribute_number) { /* insert 6 zeros for the required empty safety network number according to Table 5-3.10 */
343 memset(message_router_response->data, 0, 6);
344 message_router_response->data += 6;
345 }
346
347 if ( kEipStatusOkSend
348 != GetAttributeSingleTcpIpInterface(instance, message_router_request,
349 message_router_response,
350 originator_address,
351 encapsulation_session) ) {
352 message_router_response->data = response;
353 return kEipStatusError;
354 }
355 message_router_response->data += message_router_response->data_length;
356
357 if (9 == attribute_number) {
358 /* returning default value for unimplemented attributes 10,11 and 12 */
359
360 /* attribute 10, type: BOOL, default value: 0 */
361 message_router_response->data += 6;
362 *(message_router_response->data) = 0;
363 message_router_response->data += 1;
364
365 /* attribute 11, type: STRUCT OF USINT, ARRAY of 6 USINTs, ARRAY of 28 USINTs default value: 0 */
366 memset(message_router_response->data, 0, 29);
367 message_router_response->data += 29;
368
369 /* attribute 12, type: BOOL default value: 0 */
370 *(message_router_response->data) = 0;
371 message_router_response->data += 1;
372 }
373
374 }
375 attribute++;
376 }
377 message_router_response->data_length = message_router_response->data
378 - response;
379 message_router_response->data = response;
380
381 return kEipStatusOkSend;
382}

Callers

nothing calls this directly

Calls 1

Tested by

no test coverage detected