OpENer - Open Source EtherNet/IP(TM) I/O Target Stack  2.1
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cipconnectionobject.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * Copyright (c) 2017, Rockwell Automation, Inc.
3  * All rights reserved.
4  *
5  ******************************************************************************/
6 
7 #ifndef SRC_CIP_CIPCONNECTIONOBJECT_H_
8 #define SRC_CIP_CIPCONNECTIONOBJECT_H_
9 
10 #include "typedefs.h"
11 #include "ciptypes.h"
12 #include "opener_user_conf.h"
13 #include "opener_api.h"
14 #include "doublylinkedlist.h"
15 #include "cipelectronickey.h"
16 #include "cipepath.h"
17 
18 #define CIP_CONNECTION_OBJECT_CODE 0x05
19 
20 typedef enum {
30 
31 typedef enum {
40 
41 typedef enum {
45 
46 typedef enum {
52 
53 typedef enum {
59  /* Higher transport classes not supported */
61 
66 typedef enum {
73 
74 typedef enum {
80 
81 typedef enum {
87 
88 typedef enum {
92 
93 typedef enum {
97 
99 
101  const connection_object,
102  ConnectionObjectState new_state);
103 
105  CipUsint state; /*< Attribute 1 */
106  CipUsint instance_type; /*< Attribute 2 */
107  CipByte transport_class_trigger; /*< Attribute 3 */
108  /* Attribute 4-6 only for device net*/
109  CipUint produced_connection_size; /*< Attribute 7 - Limits produced connection size - for explicit messaging 0xFFFF means no predefined limit */
110  CipUint consumed_connection_size; /*< Attribute 8 - Limits produced connection size - for explicit messaging 0xFFFF means no predefined limit */
111  CipUint expected_packet_rate; /*< Attribute 9 - Resolution in Milliseconds */
114  CipUsint watchdog_timeout_action; /*< Attribute 12 */
116  CipOctet *produced_connection_path; /*< Attribute 14 */
119  CipOctet *consumed_connection_path; /*< Attribute 16 */
121  CipUint production_inhibit_time; /*< Attribute 17 */
123  /* Attribute 19 not supported as Connection Bind service not supported */
124 
125  /* End of CIP attributes */
126  /* Start of needed non-object variables */
127  CipElectronicKey electronic_key; //TODO: Check if really needed
128 
130 
133 
136 
141 
145 
148 
151 
170 
171  /* Sockets for consuming and producing connection */
172  int socket[2];
173 
174  struct sockaddr_in remote_address; /* socket address for produce */
175  struct sockaddr_in originator_address; /* the address of the originator that
176  established the connection. needed
177  for scanning if the right packet is
178  arriving */
179 
180  size_t associated_encapsulation_session; /* The session handle ID via which the forward open was sent */
181 
182  /* pointers to connection handling functions */
184 
189 
191 };
192 
194  );
196 
201 
205 void CipConnectionObjectDelete(CipConnectionObject **connection_object);
206 
208  CipConnectionObject *const connection_object);
209 
211  const CipOctet **message,
212  CipConnectionObject *const
213  connection_object);
214 
216  const CipConnectionObject *const connection_object);
217 
218 void ConnectionObjectSetState(CipConnectionObject *const connection_object,
219  const ConnectionObjectState state);
220 
222  const CipConnectionObject *const connection_object);
223 
225  CipConnectionObject *const connection_object,
226  const ConnectionObjectInstanceType instance_type);
227 
229  const CipConnectionObject *const connection_object);
230 
233  const CipConnectionObject *const connection_object);
234 
237  const CipConnectionObject *const connection_object);
238 
241  const CipConnectionObject *const connection_object);
242 
244  const CipConnectionObject *const connection_object);
245 
247  CipConnectionObject *const connection_object,
248  const CipUint
249  produced_connection_size);
250 
252  const CipConnectionObject *const connection_object);
253 
255  CipConnectionObject *const connection_object,
256  const CipUint
257  consumed_connection_size);
258 
260  const CipConnectionObject *const connection_object);
261 
263  const CipConnectionObject *const connection_object);
264 
272  CipConnectionObject *const connection_object);
273 
275  const CipConnectionObject *const connection_object);
276 
278  CipConnectionObject *const connection_object,
279  const CipUdint
280  cip_produced_connection_id);
281 
283  const CipConnectionObject *const connection_object);
284 
286  CipConnectionObject *const connection_object,
287  const CipUdint
288  cip_consumed_connection_id);
289 
291  const CipConnectionObject *const connection_object);
292 
294  CipConnectionObject *const connection_object,
295  const CipUsint
296  watchdog_timeout_action);
297 
299  const CipConnectionObject *const connection_object);
300 
302  CipConnectionObject *const connection_object,
303  const CipUint
304  produced_connection_path_length);
305 
307  const CipConnectionObject *const connection_object);
308 
310  CipConnectionObject *const connection_object,
311  const CipUint
312  consumed_connection_path_length);
313 
315  const CipConnectionObject *const connection_object);
316 
318  CipConnectionObject *const connection_object,
319  const CipUint
320  production_inhibit_time);
321 
323  const CipConnectionObject *const connection_object);
324 
326  CipConnectionObject *const connection_object,
327  const CipUsint
328  connection_timeout_multiplier);
329 
331  CipConnectionObject *const connection_object);
332 
334  CipConnectionObject *const connection_object);
335 
337  const CipConnectionObject *const connection_object);
338 
340  CipConnectionObject *connection_object,
341  const CipUint connection_serial_number);
342 
344  const CipConnectionObject *const connection_object);
345 
347  CipConnectionObject *connection_object,
348  const CipUint vendor_id);
349 
351  const CipConnectionObject *const connection_object);
352 
354  CipConnectionObject *connection_object,
355  CipUdint originator_serial_number);
356 
358  const CipConnectionObject *const connection_object);
359 
361  CipConnectionObject *connection_object,
362  const CipUdint requested_packet_interval);
363 
365  const CipConnectionObject *const connection_object);
366 
368  const CipConnectionObject *const connection_object);
369 
371  const CipConnectionObject *const connection_object);
372 
374  const CipConnectionObject *const connection_object);
375 
377  const CipConnectionObject *const connection_object);
378 
379 /* T to O */
381  const CipConnectionObject *const connection_object);
382 
384  CipConnectionObject *connection_object,
385  const CipUdint requested_packet_interval);
386 
388  const CipConnectionObject *const connection_object);
389 
391  const CipConnectionObject *const connection_object);
392 
394  const CipConnectionObject *const connection_object);
395 
397  const CipConnectionObject *const connection_object);
398 
400  const CipConnectionObject *const connection_object);
401 
407 void ConnectionObjectDeepCopy(CipConnectionObject *RESTRICT destination,
408  const CipConnectionObject *RESTRICT const source);
409 
411  CipConnectionObject *const connection_object);
412 
420  CipConnectionObject *const connection_object);
421 
423  const CipConnectionObject *const connection_object);
424 
426  const CipConnectionObject *const connection_object);
427 
428 bool ConnectionObjectEqualOriginator(const CipConnectionObject *const object1,
429  const CipConnectionObject *const object2);
430 
431 bool EqualConnectionTriad(const CipConnectionObject *const object1,
432  const CipConnectionObject *const object2);
433 
435  const CipConnectionObject *const connection_object,
436  const struct sockaddr *const originator_address);
437 
438 #endif /* SRC_CIP_CIPCONNECTIONOBJECT_H_ */
CipUint ConnectionObjectGetExpectedPacketRate(const CipConnectionObject *const connection_object)
void CipConnectionObjectListArrayFree(DoublyLinkedListNode **node)
ConnectionObjectConnectionType
void ConnectionObjectResetProductionInhibitTimer(CipConnectionObject *const connection_object)
bool EqualConnectionTriad(const CipConnectionObject *const object1, const CipConnectionObject *const object2)
ConnectionObjectState
CipInstance * producing_instance
void ConnectionObjectSetInstanceType(CipConnectionObject *const connection_object, const ConnectionObjectInstanceType instance_type)
void CipConnectionObjectDelete(CipConnectionObject **connection_object)
Array deallocator.
CipUint ConnectionObjectGetConsumedConnectionPathLength(const CipConnectionObject *const connection_object)
void(* ConnectionTimeoutFunction)(CipConnectionObject *connection_object)
Function prototype for handling the timeout of connections.
Definition: opener_api.h:327
struct sockaddr_in remote_address
ConnectionReceiveDataFunction connection_receive_data_function
void ConnectionObjectSetProducedConnectionSize(CipConnectionObject *const connection_object, const CipUint produced_connection_size)
ConnectionObjectSocketType
CipUdint ConnectionObjectGetTToORequestedPacketInterval(const CipConnectionObject *const connection_object)
CipUint ConnectionObjectGetProductionInhibitTime(const CipConnectionObject *const connection_object)
bool ConnectionObjectIsTToORedundantOwner(const CipConnectionObject *const connection_object)
CipUdint ConnectionObjectGetCipProducedConnectionID(const CipConnectionObject *const connection_object)
EipUint32 eip_level_sequence_count_producing
bool ConnectionObjectIsTypeNonLOIOConnection(const CipConnectionObject *const connection_object)
ConnectionObjectPriority ConnectionObjectGetOToTPriority(const CipConnectionObject *const connection_object)
size_t ConnectionObjectGetTToOConnectionSize(const CipConnectionObject *const connection_object)
EipStatus(* CipConnectionStateHandler)(CipConnectionObject *RESTRICT const connection_object, ConnectionObjectState new_state)
CipConnectionStateHandler current_state_handler
CipUint ConnectionObjectGetConsumedConnectionSize(const CipConnectionObject *const connection_object)
CipConnectionObject * CipConnectionObjectCreate(const CipOctet *message)
Array allocator.
bool ConnectionObjectEqualOriginator(const CipConnectionObject *const object1, const CipConnectionObject *const object2)
size_t ConnectionObjectGetOToTConnectionSize(const CipConnectionObject *const connection_object)
ConnectionObjectTransportClassTriggerDirection ConnectionObjectGetTransportClassTriggerDirection(const CipConnectionObject *const connection_object)
ConnectionObjectWatchdogTimeoutAction
Possible values for the watch dog time out action of a connection.
void ConnectionObjectInitializeEmpty(CipConnectionObject *const connection_object)
CipUdint ConnectionObjectGetCipConsumedConnectionID(const CipConnectionObject *const connection_object)
ConnectionObjectConnectionType ConnectionObjectGetTToOConnectionType(const CipConnectionObject *const connection_object)
void ConnectionObjectSetCipProducedConnectionID(CipConnectionObject *const connection_object, const CipUdint cip_produced_connection_id)
void ConnectionObjectResetInactivityWatchdogTimerValue(CipConnectionObject *const connection_object)
CipUsint ConnectionObjectGetConnectionTimeoutMultiplier(const CipConnectionObject *const connection_object)
ConnectionObjectConnectionSizeType
int16_t CipInt
Definition: typedefs.h:50
CipUint ConnectionObjectGetProducedConnectionSize(const CipConnectionObject *const connection_object)
void ConnectionObjectResetLastPackageInactivityTimerValue(CipConnectionObject *const connection_object)
ConnectionCloseFunction connection_close_function
bool ConnectionObjectIsOToTRedundantOwner(const CipConnectionObject *const connection_object)
CipUint ConnectionObjectGetOriginatorVendorId(const CipConnectionObject *const connection_object)
void ConnectionObjectSetConsumedConnectionPathLength(CipConnectionObject *const connection_object, const CipUint consumed_connection_path_length)
void ConnectionObjectInitializeFromMessage(const CipOctet **message, CipConnectionObject *const connection_object)
ConnectionObjectState ConnectionObjectGetState(const CipConnectionObject *const connection_object)
uint8_t CipOctet
Data types as defined in the CIP Specification Vol 1 Appendix C.
Definition: typedefs.h:41
CipUint ConnectionObjectGetConnectionSerialNumber(const CipConnectionObject *const connection_object)
EipStatus
EIP stack status enum.
Definition: typedefs.h:93
void ConnectionObjectSetExpectedPacketRate(CipConnectionObject *const connection_object)
Sets the expected packet rate according to the rules of the CIP specification.
DoublyLinkedListNode * CipConnectionObjectListArrayAllocator()
uint32_t EipUint32
Definition: typedefs.h:34
ConnectionObjectInstanceType
CipInstance * consuming_instance
ConnectionObjectTransportClassTriggerTransportClass
void ConnectionObjectSetConnectionTimeoutMultiplier(CipConnectionObject *const connection_object, const CipUsint connection_timeout_multiplier)
ConnectionObjectConnectionSizeType ConnectionObjectGetOToTConnectionSizeType(const CipConnectionObject *const connection_object)
void ConnectionObjectSetConsumedConnectionSize(CipConnectionObject *const connection_object, const CipUint consumed_connection_size)
uint8_t CipByte
Definition: typedefs.h:43
CIP Electronic Key Segment struct.
CipUdint ConnectionObjectGetOriginatorSerialNumber(const CipConnectionObject *const connection_object)
CipConnectionPathEpath produced_path
ConnectionObjectWatchdogTimeoutAction ConnectionObjectGetWatchdogTimeoutAction(const CipConnectionObject *const connection_object)
void ConnectionObjectSetWatchdogTimeoutAction(CipConnectionObject *const connection_object, const CipUsint watchdog_timeout_action)
void ConnectionObjectSetProducedConnectionPathLength(CipConnectionObject *const connection_object, const CipUint produced_connection_path_length)
void ConnectionObjectSetTToORequestedPacketInterval(CipConnectionObject *connection_object, const CipUdint requested_packet_interval)
uint8_t CipUsint
Definition: typedefs.h:46
EipStatus(* ConnectionSendDataFunction)(CipConnectionObject *connection_object)
Function prototype for sending data via a connection.
Definition: opener_api.h:337
CipConnectionPathEpath configuration_path
CipUint ConnectionObjectGetRequestedPacketInterval(const CipConnectionObject *const connection_object)
void ConnectionObjectSetProductionInhibitTime(CipConnectionObject *const connection_object, const CipUint production_inhibit_time)
ConnectionObjectPriority ConnectionObjectGetTToOPriority(const CipConnectionObject *const connection_object)
CipUdint ConnectionObjectGetOToTRequestedPacketInterval(const CipConnectionObject *const connection_object)
void ConnectionObjectSetOriginatorVendorId(CipConnectionObject *connection_object, const CipUint vendor_id)
CipUsint ConnectionObjectGetInstanceTypeForAttribute(const CipConnectionObject *const connection_object)
ConnectionTimeoutFunction connection_timeout_function
CipElectronicKey electronic_key
ConnectionObjectTransportClassTriggerProductionTrigger ConnectionObjectGetTransportClassTriggerProductionTrigger(const CipConnectionObject *const connection_object)
ConnectionObjectConnectionType ConnectionObjectGetOToTConnectionType(const CipConnectionObject *const connection_object)
CipWord o_to_t_network_connection_parameters
CipUint ConnectionObjectGetProducedConnectionPathLength(const CipConnectionObject *const connection_object)
ConnectionObjectTransportClassTriggerDirection
CipConnectionPathEpath consumed_path
ConnectionObjectConnectionSizeType ConnectionObjectGetTToOConnectionSizeType(const CipConnectionObject *const connection_object)
void ConnectionObjectSetConnectionSerialNumber(CipConnectionObject *connection_object, const CipUint connection_serial_number)
ConnectionObjectPriority
void ConnectionObjectDeepCopy(CipConnectionObject *RESTRICT destination, const CipConnectionObject *RESTRICT const source)
Copy the given connection data from source to destination.
void ConnectionObjectSetOToTRequestedPacketInterval(CipConnectionObject *connection_object, const CipUdint requested_packet_interval)
void ConnectionObjectSetCipConsumedConnectionID(CipConnectionObject *const connection_object, const CipUdint cip_consumed_connection_id)
EipUint32 eip_level_sequence_count_consuming
uint32_t CipUdint
Definition: typedefs.h:48
uint16_t CipUint
Definition: typedefs.h:47
ConnectionObjectTransportClassTriggerProductionTrigger
bool ConnectionObjectIsTypeIOConnection(const CipConnectionObject *const connection_object)
ConnectionSendDataFunction connection_send_data_function
ConnectionObjectTransportClassTriggerTransportClass ConnectionObjectGetTransportClassTriggerTransportClass(const CipConnectionObject *const connection_object)
ConnectionObjectInstanceType ConnectionObjectGetInstanceType(const CipConnectionObject *const connection_object)
CipWord t_to_o_network_connection_parameters
uint16_t CipWord
Definition: typedefs.h:44
struct sockaddr_in originator_address
void(* ConnectionCloseFunction)(CipConnectionObject *connection_object)
Function prototype for handling the closing of connections.
Definition: opener_api.h:320
EipStatus(* ConnectionReceiveDataFunction)(CipConnectionObject *connection_object, const EipUint8 *data, const EipUint16 data_length)
Function prototype for receiving data via a connection.
Definition: opener_api.h:349
bool CipConnectionObjectOriginatorHasSameIP(const CipConnectionObject *const connection_object, const struct sockaddr *const originator_address)
void ConnectionObjectSetOriginatorSerialNumber(CipConnectionObject *connection_object, CipUdint originator_serial_number)
void ConnectionObjectSetState(CipConnectionObject *const connection_object, const ConnectionObjectState state)
void ConnectionObjectGeneralConfiguration(CipConnectionObject *const connection_object)
Generate the ConnectionIDs and set the general configuration parameter in the given connection object...