| 174 | } |
| 175 | |
| 176 | EipStatus 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: |
nothing calls this directly
no test coverage detected