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

Function GetAttributeSingleEthernetLink

source/src/cip/cipethernetlink.c:176–244  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

174}
175
176EipStatus GetAttributeSingleEthernetLink(
177 CipInstance *RESTRICT const instance,
178 CipMessageRouterRequest *const message_router_request,
179 CipMessageRouterResponse *const message_router_response,
180 struct sockaddr *originator_address,
181 const int encapsulation_session) {
182 /* Mask for filtering get-ability */
183
184 CipAttributeStruct *attribute = GetCipAttribute(
185 instance, message_router_request->request_path.attribute_number);
186 EipByte *message = message_router_response->data;
187
188 message_router_response->data_length = 0;
189 message_router_response->reply_service = (0x80
190 | message_router_request->service);
191 message_router_response->general_status = kCipErrorAttributeNotSupported;
192 message_router_response->size_of_additional_status = 0;
193
194 EipUint16 attribute_number = message_router_request->request_path
195 .attribute_number;
196
197 if ( (NULL != attribute) && (NULL != attribute->data) ) {
198 uint8_t get_bit_mask = 0;
199 if (kGetAttributeAll == message_router_request->service) {
200 get_bit_mask = (instance->cip_class->get_all_bit_mask[CalculateIndex(
201 attribute_number)]);
202 message_router_response->general_status = kCipErrorSuccess;
203 } else {
204 get_bit_mask = (instance->cip_class->get_single_bit_mask[CalculateIndex(
205 attribute_number)
206 ]);
207 }
208 if ( 0 != ( get_bit_mask & ( 1 << (attribute_number % 8) ) ) ) {
209 OPENER_TRACE_INFO("getAttribute %d\n",
210 message_router_request->request_path.attribute_number); /* create a reply message containing the data*/
211
212 switch (attribute_number) {
213 case 4:
214 message_router_response->data_length = EncodeInterfaceCounters(
215 &message);
216 message_router_response->general_status = kCipErrorSuccess;
217 break;
218 case 5:
219 message_router_response->data_length = EncodeMediaCounters(&message);
220 message_router_response->general_status = kCipErrorSuccess;
221 break;
222 case 6:
223 message_router_response->data_length = EncodeInterfaceControl(
224 &message);
225 message_router_response->general_status = kCipErrorSuccess;
226 break;
227 case 11:
228 message_router_response->data_length = EncodeInterfaceCapability(
229 &message);
230 message_router_response->general_status = kCipErrorSuccess;
231 break;
232
233 default:

Callers

nothing calls this directly

Calls 7

GetCipAttributeFunction · 0.85
CalculateIndexFunction · 0.85
EncodeInterfaceCountersFunction · 0.85
EncodeMediaCountersFunction · 0.85
EncodeInterfaceControlFunction · 0.85
GetAttributeSingleFunction · 0.85

Tested by

no test coverage detected