10 #include "opener_user_conf.h"
70 struct sockaddr *originator_address,
71 const int encapsulation_session);
77 struct sockaddr *originator_address,
78 const int encapsulation_session);
84 struct sockaddr *originator_address,
85 const int encapsulation_session) {
92 if (NULL != attribute) {
96 if ( set_bit_mask & ( 1 << ( (attribute_number) % 8 ) ) ) {
97 switch (attribute_number) {
100 &(message_router_request->
data) );
101 if ( (configuration_control_recieved >= 0x03)
102 && (configuration_control_recieved <= 0x0F) ) {
110 if (attribute->
data != NULL) {
112 *(data) = configuration_control_recieved;
124 &(message_router_request->
data) );
126 if (inactivity_timeout_received > 3600) {
133 if (attribute->
data != NULL) {
136 *(data) = inactivity_timeout_received;
161 | message_router_request->
service);
168 if ( ( tcp_ip_class =
CreateCipClass(kCipTcpIpInterfaceClassCode, 0,
175 "TCP/IP interface", 4,
205 "GetAttributeSingleTCPIPInterface");
208 "GetAttributeAllTCPIPInterface");
211 "SetAttributeSingle");
217 if (NULL != hostname_.
string) {
232 struct sockaddr *originator_address,
233 const int encapsulation_session) {
235 EipByte *message = message_router_response->data;
237 message_router_response->data_length = 0;
238 message_router_response->reply_service = (0x80
239 | message_router_request->service);
240 message_router_response->size_of_additional_status = 0;
242 EipUint16 attribute_number = message_router_request->request_path
244 uint8_t get_bit_mask = 0;
248 if (9 == message_router_request->request_path.attribute_number) {
250 get_bit_mask = (instance->cip_class->get_all_bit_mask[
CalculateIndex(
254 get_bit_mask = (instance->cip_class->get_single_bit_mask[
CalculateIndex(
259 if ( 0 == ( get_bit_mask & ( 1 << (attribute_number % 8) ) ) ) {
264 message_router_response->data_length +=
EncodeData(
266 message_router_response->data_length +=
EncodeData(
269 message_router_response->data_length +=
EncodeData(
283 if ( (NULL != attribute) && ( NULL != attribute->
data) ) {
286 message_router_request->request_path.attribute_number);
289 get_bit_mask = (instance->cip_class->get_all_bit_mask[
CalculateIndex(
294 get_bit_mask = (instance->cip_class->get_single_bit_mask[
CalculateIndex(
299 if ( 0 == ( get_bit_mask & ( 1 << ( (attribute_number) % 8 ) ) ) ) {
309 && instance->cip_class->class_id == kCipAssemblyClassCode) {
315 message_router_response->data_length =
EncodeData(attribute->
type,
329 struct sockaddr *originator_address,
330 const int encapsulation_session) {
338 if (attribute_number < 32)
342 if (8 == attribute_number) {
343 memset(message_router_response->
data, 0, 6);
344 message_router_response->
data += 6;
349 message_router_response,
351 encapsulation_session) ) {
352 message_router_response->
data = response;
357 if (9 == attribute_number) {
361 message_router_response->
data += 6;
362 *(message_router_response->
data) = 0;
363 message_router_response->
data += 1;
366 memset(message_router_response->
data, 0, 29);
367 message_router_response->
data += 29;
370 *(message_router_response->
data) = 0;
371 message_router_response->
data += 1;
379 message_router_response->
data = response;
388 EipUint16 encapsulation_inactivity_timeout = *data;
389 return encapsulation_inactivity_timeout;
void InsertAttribute(CipInstance *const instance, const EipUint16 attribute_number, const EipUint8 cip_type, void *const data, const EipByte cip_flags)
Insert an attribute in an instance of a CIP class.
Struct for padded EPATHs.
EipStatus SetAttributeSingleTcp(CipInstance *instance, CipMessageRouterRequest *message_router_request, CipMessageRouterResponse *message_router_response, struct sockaddr *originator_address, const int encapsulation_session)
EipUint16 attribute_number
Tracing infrastructure for OpENer.
EipUint16 number_of_attributes
EipStatus GetAttributeSingleTcpIpInterface(CipInstance *instance, CipMessageRouterRequest *message_router_request, CipMessageRouterResponse *message_router_response, struct sockaddr *originator_address, const int encapsulation_session)
CipAttributeStruct * attributes
CIP Message Router Request.
CipDword configuration_capability_
Class is a subclass of Instance.
#define OPENER_ASSERT(assertion)
EipUint16 GetEncapsulationInactivityTimeout(CipInstance *instance)
Public Method to get Encapsulation Inactivity Timeout Value.
EipUint32 GetDintFromMessage(const EipUint8 **const buffer)
Reads EIP_UINT32 from *buffer and converts little endian to host.
Responsible for Endianess conversion.
size_t CalculateIndex(EipUint16 attribute_number)
Calculates Byte-Index of Attribute.
MulticastAddressConfiguration g_multicast_configuration
#9 The multicast configuration for this device
Multicast Configuration struct, called Mcast config.
EipStatus GetAttributeAllTcpIpInterface(CipInstance *instance, CipMessageRouterRequest *message_router_request, CipMessageRouterResponse *message_router_response, struct sockaddr *originator_address, const int encapsulation_session)
CipUint number_of_allocated_multicast_addresses
CipClass * CreateCipClass(const EipUint32 class_id, const int number_of_class_attributes, const EipUint32 highest_class_attribute_number, const int number_of_class_services, const int number_of_instance_attributes, const EipUint32 highest_instance_attribute_number, const int number_of_instance_services, const int number_of_instances, char *name, const EipUint16 revision, void(*InitializeCipClass)(CipClass *))
EipStatus
EIP stack status enum.
void InsertService(const CipClass *const class, const EipUint8 service_number, const CipServiceFunction service_function, char *const service_name)
Insert a service in an instance of a CIP object.
CipUsint reserved_shall_be_zero
#define OPENER_TRACE_INFO(...)
CipUint g_encapsulation_inactivity_timeout
#13 Number of seconds of inactivity before TCP connection is closed
void CipFree(void *data)
Free memory allocated by the OpENer.
int EncodeData(const EipUint8 cip_type, const void *const cip_data, EipUint8 **cip_message)
Produce the data according to CIP encoding onto the message buffer.
CipInstance * GetCipInstance(const CipClass *RESTRICT const cip_class, EipUint32 instance_number)
Get a pointer to an instance.
CipEpath physical_link_object_
CipAttributeStruct * GetCipAttribute(const CipInstance *const instance, const EipUint16 attribute_number)
Get a pointer to an instance's attribute.
Public interface of the TCP/IP Interface Object.
Struct for saving TCP/IP interface information.
CipTcpIpNetworkInterfaceConfiguration interface_configuration_
EipUint16 attribute_number
uint8_t EipByte
EIP Data type definitions.
#define CIP_ETHERNETLINK_CLASS_CODE
CipDword configuration_control_
EipUint16 GetIntFromMessage(const EipUint8 **const buffer)
Reads EIP_UINT16 from *buffer and converts little endian to host.
CIP Message Router Response.
struct cip_class * cip_class
void ShutdownTcpIpInterface(void)
Clean up the allocated data of the TCP/IP interface object.
EipBool8 BeforeAssemblyDataSend(CipInstance *instance)
Inform the application that the data of an assembly object will be sent.
EipStatus CipTcpIpInterfaceInit()
Initializing the data structures of the TCP/IP interface object.
EipUint8 g_time_to_live_value
#8 the time to live value to be used for multi-cast connections
CipUsint size_of_additional_status
CipUdint starting_multicast_address