OpENer - Open Source EtherNet/IP(TM) I/O Target Stack  2.1
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
encap.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * Copyright (c) 2009, Rockwell Automation, Inc.
3  * All rights reserved.
4  *
5  ******************************************************************************/
6 #ifndef OPENER_ENCAP_H_
7 #define OPENER_ENCAP_H_
8 
9 #include "typedefs.h"
10 #include "cipconnectionobject.h"
11 
20 /*** defines ***/
21 
22 #define ENCAPSULATION_HEADER_LENGTH 24
23 
25 static const int kOpenerEthernetPort = 0xAF12;
26 
30 typedef enum {
39 
40 /*** structs ***/
41 typedef struct encapsulation_data {
51 
59 
60 /*** global variables (public) ***/
61 
62 /*** public functions ***/
66 void EncapsulationInit(void);
67 
73 void EncapsulationShutDown(void);
74 
82 void ManageEncapsulationMessages(const MilliSeconds elapsed_time);
83 
84 size_t GetSessionFromSocket(const int socket_handle);
85 
86 void RemoveSession(const int socket);
87 
89  const CipConnectionObject *const connection_object);
90 
92  const CipConnectionObject *const connection_object);
93 
94 void CloseClass3ConnectionBasedOnSession(size_t encapsulation_session_handle);
95 
96 /* No reason to use this functions outside the encapsulation layer, they are here for testing */
97 typedef struct enip_message ENIPMessage;
98 
100  const EncapsulationData *const receive_data,
101  ENIPMessage *const outgoing_message);
102 
103 EipInt16 CreateEncapsulationStructure(const EipUint8 *receive_buffer,
104  int receive_buffer_length,
106 
107 void SkipEncapsulationHeader(ENIPMessage *const outgoing_message);
108 
109 void GenerateEncapsulationHeader(const EncapsulationData *const receive_data,
110  const size_t command_specific_data_length,
111  const size_t session_handle,
112  const EncapsulationProtocolErrorCode encapsulation_protocol_status,
113  ENIPMessage *const outgoing_message);
114 
116  const EncapsulationData *const receive_data,
117  ENIPMessage *const outgoing_message);
118 
120  const EncapsulationData *const receive_data,
121  ENIPMessage *const outgoing_message);
122 
124  const EncapsulationData *const receive_data,
125  ENIPMessage *const outgoing_message);
126 
128  const EncapsulationData *const receive_data,
129  const struct sockaddr *const originator_address,
130  ENIPMessage *const outgoing_message);
131 
132 #endif /* OPENER_ENCAP_H_ */
CipUdint options
Definition: encap.h:47
struct encapsulation_data EncapsulationData
void EncapsulateListIdentityResponseMessage(const EncapsulationData *const receive_data, ENIPMessage *const outgoing_message)
Definition: encap.c:436
const EipUint8 * current_communication_buffer_position
Definition: encap.h:49
size_t GetSessionFromSocket(const int socket_handle)
Definition: encap.c:897
void HandleReceivedListInterfacesCommand(const EncapsulationData *const receive_data, ENIPMessage *const outgoing_message)
Definition: encap.c:381
void ManageEncapsulationMessages(const MilliSeconds elapsed_time)
Handle delayed encapsulation message responses.
Definition: encap.c:857
EncapsulationProtocolErrorCode
definition of status codes in encapsulation protocol All other codes are either legacy codes...
Definition: encap.h:30
EipUint16 encapsulation_protocol_version
Definition: encap.h:55
void GenerateEncapsulationHeader(const EncapsulationData *const receive_data, const size_t command_specific_data_length, const size_t session_handle, const EncapsulationProtocolErrorCode encapsulation_protocol_status, ENIPMessage *const outgoing_message)
Definition: encap.c:317
uint8_t CipOctet
Data types as defined in the CIP Specification Vol 1 Appendix C.
Definition: typedefs.h:41
EipStatus
EIP stack status enum.
Definition: typedefs.h:93
uint8_t EipUint8
Definition: typedefs.h:32
int8_t EipInt8
Definition: typedefs.h:29
void EncapsulationShutDown(void)
Shutdown the encapsulation layer.
Definition: encap.c:847
void CloseEncapsulationSessionBySockAddr(const CipConnectionObject *const connection_object)
Definition: encap.c:874
CipOctet sender_context[8]
Definition: encap.h:46
void RemoveSession(const int socket)
Definition: encap.c:835
CipUdint session_handle
Definition: encap.h:44
void EncapsulationInit(void)
Initialize the encapsulation layer.
Definition: encap.c:123
CipUdint status
Definition: encap.h:45
CipUint data_length
Definition: encap.h:43
int16_t EipInt16
Definition: typedefs.h:30
EipStatus HandleReceivedSendRequestResponseDataCommand(const EncapsulationData *const receive_data, const struct sockaddr *const originator_address, ENIPMessage *const outgoing_message)
Call UCMM or Message Router if UCMM not implemented.
Definition: encap.c:698
void SkipEncapsulationHeader(ENIPMessage *const outgoing_message)
Definition: encap.c:312
unsigned long MilliSeconds
Definition: typedefs.h:68
void HandleReceivedListServicesCommand(const EncapsulationData *const receive_data, ENIPMessage *const outgoing_message)
generate reply with "Communications Services" + compatibility Flags.
Definition: encap.c:345
const EipUint8 * communication_buffer_start
Definition: encap.h:48
EipInt16 CreateEncapsulationStructure(const EipUint8 *receive_buffer, int receive_buffer_length, EncapsulationData *const encapsulation_data)
copy data from pa_buf in little endian to host in structure.
Definition: encap.c:774
uint32_t CipUdint
Definition: typedefs.h:48
uint16_t CipUint
Definition: typedefs.h:47
void CloseClass3ConnectionBasedOnSession(size_t encapsulation_session_handle)
Definition: encap.c:906
void CloseSessionBySessionHandle(const CipConnectionObject *const connection_object)
Definition: encap.c:813
struct encapsulation_interface_information EncapsulationInterfaceInformation
CipUint command_code
Definition: encap.h:42
uint16_t EipUint16
Definition: typedefs.h:33
void HandleReceivedRegisterSessionCommand(int socket, const EncapsulationData *const receive_data, ENIPMessage *const outgoing_message)
Definition: encap.c:556