2 * $Id: protos.h,v 0.0.0.1 2003/08/21
4 * -------------------------------------------------------------------
6 * Open Real-Time Ethernet
8 * Copyright (C) 2001-2006
9 * Department of Control Engineering FEE CTU Prague, Czech Republic
10 * http://dce.felk.cvut.cz
11 * http://www.ocera.org
13 * Author: Petr Smolik petr@smoliku.cz
15 * Project Responsible: Zdenek Hanzalek
16 * --------------------------------------------------------------------
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by
20 * the Free Software Foundation; either version 2 of the License, or
21 * (at your option) any later version.
23 * This program is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
37 ///////////////////////////////////////////////////////////////////////////////
44 sock_init_udp(sock_t *sock);
46 sock_cleanup(sock_t *sock);
48 sock_setsockopt(sock_t *sock, int level, int optname, const char *optval, int optlen);
50 sock_getsockopt(sock_t *sock, int level, int optname, char *optval, int *optlen);
52 sock_bind(sock_t *sock, uint16_t port, IPAddress listen);
54 sock_recvfrom(sock_t *sock, void *buf, int max_len, struct sockaddr_in *des, int des_len);
56 sock_sendto(sock_t *sock, void *buf, int len, struct sockaddr_in *des, int des_len);
58 sock_ioctl(sock_t *sock, long cmd, unsigned long *arg);
60 sock_get_local_interfaces(sock_t *sock, ORTEIFProp *IFProp, char *IFCount);
62 ///////////////////////////////////////////////////////////////////////////////
65 getStringPart(char *string, char divChar, int *iterator, char *buff);
67 ///////////////////////////////////////////////////////////////////////////////
70 UL_HTIMER_DEC(htimerRoot, /* prefix */
71 ObjectEntry, /* queue_t */
72 HTimFncRootNode, /* timer_t */
73 htimRoot, /* queue_field */
74 htim) /* timer_field */
76 htimerRoot_run_expired(ORTEDomain *d,
77 ul_htim_time_t *pact_time);
78 // htimerUnicastCommon
79 UL_HTIMER_DEC(htimerUnicastCommon, /* prefix */
80 ObjectEntryAID, /* queue_t */
81 HTimFncUserNode, /* timer_t */
82 htimUnicast.common, /* queue_field */
83 htim) /* timer_field */
85 htimerUnicastCommon_update_root_timer(ObjectEntry *objectEntry,
86 ObjectEntryAID *objectEntryAID);
88 htimerUnicastCommon_run_expired(ORTEDomain *d,
89 ObjectEntryAID *objectEntryAID,
90 ul_htim_time_t *pact_time);
91 // htimerUnicastSendMetatraffic
92 UL_HTIMER_DEC(htimerUnicastSendMetatraffic, /* prefix */
93 ObjectEntryAID, /* queue_t */
94 HTimFncUserNode, /* timer_t */
95 htimUnicast.sendMetatraffic, /* queue_field */
96 htim) /* timer_field */
98 htimerUnicastSendMetatraffic_update_root_timer(ObjectEntry *objectEntry,
99 ObjectEntryAID *objectEntryAID);
101 htimerUnicastSendMetatraffic_run_expired(ORTEDomain *d,
102 ObjectEntryAID *objectEntryAID,
103 ul_htim_time_t *pact_time);
104 // htimerUnicastSendUserData
105 UL_HTIMER_DEC(htimerUnicastSendUserData, /* prefix */
106 ObjectEntryAID, /* queue_t */
107 HTimFncUserNode, /* timer_t */
108 htimUnicast.sendUserData, /* queue_field */
109 htim) /* timer_field */
111 htimerUnicastSendUserData_update_root_timer(ObjectEntry *objectEntry,
112 ObjectEntryAID *objectEntryAID);
114 htimerUnicastSendUserData_run_expired(ORTEDomain *d,
115 ObjectEntryAID *objectEntryAID,
116 ul_htim_time_t *pact_time);
118 getActualNtpTime(void);
121 ///////////////////////////////////////////////////////////////////////////////
124 db_init(const char *logfile, const char *options);
126 debug_options(const char *options);
128 db_print(const char *format, ...);
130 debug_open_log(const char *logfile);
131 #ifdef ENABLE_MEM_CHECK
133 mem_check_malloc(size_t size);
135 mem_check_free(void *ptr);
138 ///////////////////////////////////////////////////////////////////////////////
141 fnmatch(const char *__pattern, const char *__string, int __flags);
143 ///////////////////////////////////////////////////////////////////////////////
145 UL_LIST_CUST_DEC(ObjectEntryMulticast, /* prefix */
146 ObjectEntryOID, /* head_t */
147 CSTRemoteReader, /* item_t */
148 multicastRemoteReaders, /* head_field */
149 multicastNode); /* node_field */
151 GAVL_CUST_NODE_INT_DEC(ObjectEntryHID, /* prefix */
152 ObjectEntry, /* root_t */
153 ObjectEntryHID, /* item_t */
155 objRoot, /* root_node */
156 hidNode, /* item_node */
158 gavl_cmp_int) /* cmp_fnc */
160 GAVL_CUST_NODE_INT_DEC(ObjectEntryAID, /* prefix */
161 ObjectEntryHID, /* root_t */
162 ObjectEntryAID, /* item_t */
164 aidRoot, /* root_node */
165 aidNode, /* item_node */
167 gavl_cmp_int) /* cmp_fnc */
169 GAVL_CUST_NODE_INT_DEC(ObjectEntryOID, /* prefix */
170 ObjectEntryAID, /* root_t */
171 ObjectEntryOID, /* item_t */
172 ObjectId, /* key_t */
173 oidRoot, /* root_node */
174 oidNode, /* item_node */
176 gavl_cmp_int) /* cmp_fnc */
179 objectEntryRefreshApp(ORTEDomain *d, ObjectEntryOID *objectEntryOID);
180 extern ObjectEntryOID *
181 objectEntryFind(ORTEDomain *d, GUID_RTPS *guid);
182 extern ObjectEntryOID *
183 objectEntryAdd(ORTEDomain *d, GUID_RTPS *guid, void *params);
185 objectEntryDelete(ORTEDomain *d, ObjectEntryOID *objectEntryOID, Boolean destroy);
187 objectEntryDeleteAll(ORTEDomain *d, ObjectEntry *objectEntry);
189 objectEntryDump(ObjectEntry *objectEntry);
191 ///////////////////////////////////////////////////////////////////////////////
194 AppParamsInit(AppParams *ap);
196 PublParamsInit(ORTEPublProp *sp);
198 SubsParamsInit(ORTESubsProp *sp);
200 updateORTEAppInfo(AppParams *appParams, ORTEAppInfo *appInfo);
202 generateEvent(ORTEDomain *d, GUID_RTPS *guid, void *params, Boolean live);
204 getTypeApp(ORTEDomain *d, AppParams *ap, IPAddress senderIPAddress);
206 appSelfParamChanged(ORTEDomain *d, Boolean lock, Boolean unlock,
207 Boolean forWM, Boolean alive);
209 matchMulticastAddresses(ObjectEntryOID *o1, ObjectEntryOID *o2);
210 extern ObjectEntryOID *
211 getAppO2SRemoteReader(ORTEDomain *d, ObjectEntryOID *objectEntryOID,
213 extern ObjectEntryOID *
214 getSubsO2SRemoteReader(ORTEDomain *d, ObjectEntryOID *objectEntryOID,
217 ///////////////////////////////////////////////////////////////////////////////
220 eventAdd(ORTEDomain *d, ObjectEntryAID *objectEntryAID, HTimFncUserNode *fncNode,
221 int where, const char *name, EVH2 *func, pthread_rwlock_t *lock,
222 void *arg1, NtpTime *when_expire);
224 eventDetach(ORTEDomain *d,
225 ObjectEntryAID *objectEntryAID,
226 HTimFncUserNode *fncNode,
229 ///////////////////////////////////////////////////////////////////////////////
231 UL_LIST_CUST_DEC(CSChangeAttributes, /* prefix */
232 CSChange, /* head_t */
233 ParameterSequence, /* item_t */
234 attributes, /* head_field */
235 node); /* node_field */
237 parameterGetDataLength(CSChange *csChange);
239 parameterDelete(CSChange *csChange);
241 parameterCodeCodecFromCSChange(CSChange *csChange, CDR_Codec *cdrCodec);
243 parameterDecodeCodecToCSChange(CSChange *csChange, CDR_Codec *cdrCodec);
245 parameterUpdateCSChange(
246 CSChange *csChange, AppParams *ap, Boolean Manager);
248 parameterUpdateCSChangeFromPublication(CSChange *csChange, ORTEPublProp *pp);
250 parameterUpdateCSChangeFromSubscription(CSChange *csChange, ORTESubsProp *sp);
252 parameterUpdateApplication(CSChange *csChange, AppParams *ap);
254 parameterUpdatePublication(CSChange *csChange, ORTEPublProp *pp);
256 parameterUpdateSubscription(CSChange *csChange, ORTESubsProp *sp);
258 ///////////////////////////////////////////////////////////////////////////////
259 // objectEntryTimer.c
261 objectEntryPurgeTimer(ORTEDomain *d, void *vobjectEntryOID);
263 objectEntryExpirationTimer(ORTEDomain *d, void *vobjectEntryOID);
265 ///////////////////////////////////////////////////////////////////////////////
266 // ORTETypeRegister.c
267 GAVL_CUST_NODE_INT_DEC(ORTEType, /* prefix */
268 TypeEntry, /* root_t */
269 TypeNode, /* item_t */
270 const char *, /* key_t */
271 types, /* root_node */
272 node, /* item_node */
273 typeRegister.typeName, /* item_key */
274 gavl_cmp_str) /* cmp_fnc */
277 ///////////////////////////////////////////////////////////////////////////////
280 ORTEDomainWakeUpReceivingThread(ORTEDomain *d, sock_t *sock, uint16_t port);
282 ORTEDomainWakeUpSendingThread(ObjectEntry *objectEntry);
284 ///////////////////////////////////////////////////////////////////////////////
285 // ORTEAppRecvMetatrafficThread.c
287 ORTEAppRecvThread(TaskProp *tp);
290 ///////////////////////////////////////////////////////////////////////////////
291 // ORTEAppSendThread.c
293 ORTESendData(ORTEDomain *d, ObjectEntryAID *objectEntryAID, Boolean meta);
295 ORTEAppSendThread(TaskProp *tp);
297 ///////////////////////////////////////////////////////////////////////////////
300 RTPSHeaderCreate(CDR_Codec *cdrCodec, HostId hid, AppId aid);
302 RTPSHeaderCheck(CDR_Codec *cdrCodec, int32_t len, MessageInterpret *mi);
304 ///////////////////////////////////////////////////////////////////////////////
307 RTPSPad(CDR_Codec *cdrCodec, MessageInterpret *mi);
309 ///////////////////////////////////////////////////////////////////////////////
312 RTPSInfoDST(CDR_Codec *cdrCodec, MessageInterpret *mi);
314 ///////////////////////////////////////////////////////////////////////////////
317 RTPSInfoREPLYCreate(CDR_Codec *cdrCodec, IPAddress ipaddress, Port port);
319 RTPSInfoREPLY(CDR_Codec *cdrCodec, MessageInterpret *mi);
321 ///////////////////////////////////////////////////////////////////////////////
324 RTPSInfoSRC(CDR_Codec *cdrCodec, MessageInterpret *mi);
326 ///////////////////////////////////////////////////////////////////////////////
329 RTPSInfoTSCreate(CDR_Codec *cdrCodec, NtpTime time);
331 RTPSInfoTS(CDR_Codec *cdrCodec, MessageInterpret *mi);
333 ///////////////////////////////////////////////////////////////////////////////
336 RTPSVarCreate(CDR_Codec *cdrCodec, ObjectId roid, ObjectId woid, CSChange *csChange);
338 RTPSVar(ORTEDomain *d, CDR_Codec *cdrCodec, MessageInterpret *mi, IPAddress senderIPAddress);
340 ///////////////////////////////////////////////////////////////////////////////
343 RTPSAckCreate(CDR_Codec *cdrCodec,
344 SequenceNumber *seqNumber,
345 ObjectId roid, ObjectId woid, Boolean f_bit);
347 RTPSAck(ORTEDomain *d, CDR_Codec *cdrCodec, MessageInterpret *mi, IPAddress senderIPAddress);
349 ///////////////////////////////////////////////////////////////////////////////
352 RTPSHeartBeatCreate(CDR_Codec *cdrCodec,
353 SequenceNumber *fsn, SequenceNumber *lsn,
354 ObjectId roid, ObjectId woid, Boolean f_bit);
356 RTPSHeartBeat(ORTEDomain *d, CDR_Codec *cdrCodec, MessageInterpret *mi);
358 ///////////////////////////////////////////////////////////////////////////////
361 RTPSGapCreate(CDR_Codec *cdrCodec, ObjectId roid, ObjectId woid, CSChange *csChange);
363 RTPSGap(ORTEDomain *d, CDR_Codec *cdrCodec, MessageInterpret *mi, IPAddress senderIPAddress);
365 ///////////////////////////////////////////////////////////////////////////////
368 RTPSIssueCreateHeader(CDR_Codec *cdrCodec, uint32_t length,
369 ObjectId roid, ObjectId woid, SequenceNumber sn);
371 RTPSIssue(ORTEDomain *d, CDR_Codec *cdrCodec, MessageInterpret *mi, IPAddress senderIPAddress);
373 ///////////////////////////////////////////////////////////////////////////////
376 gavl_cmp_ntp_time(const NtpTime *a, const NtpTime *b);
378 gavl_cmp_sn(const SequenceNumber *a, const SequenceNumber *b);
380 gavl_cmp_guid(const GUID_RTPS *a, const GUID_RTPS *b);
382 gavl_cmp_str(const char *const *a, const char *const *b);
384 ///////////////////////////////////////////////////////////////////////////////
386 UL_LIST_CUST_DEC(CSTWriterCSChange, /* prefix */
387 CSTWriter, /* head_t */
388 CSChange, /* item_t */
389 csChanges, /* head_field */
390 nodeList); /* node_field */
392 UL_LIST_CUST_DEC(CSChangeParticipant, /* prefix */
393 CSChange, /* head_t */
394 CSChangeForReader, /* item_t */
395 writerParticipants, /* head_field */
396 participantNode); /* node_field */
398 GAVL_CUST_NODE_INT_DEC(CSTWriter, /* prefix */
399 CSTPublications, /* root_t */
400 CSTWriter, /* item_t */
401 GUID_RTPS, /* key_t */
402 cstWriter, /* root_node */
403 node, /* item_node */
405 gavl_cmp_guid); /* cmp_fnc */
407 GAVL_CUST_NODE_INT_DEC(CSTRemoteReader, /* prefix */
408 CSTWriter, /* root_t */
409 CSTRemoteReader, /* item_t */
410 GUID_RTPS, /* key_t */
411 cstRemoteReader, /* root_node */
412 node, /* item_node */
414 gavl_cmp_guid); /* cmp_fnc */
416 GAVL_CUST_NODE_INT_DEC(CSChangeForReader, /* prefix */
417 CSTRemoteReader, /* root_t */
418 CSChangeForReader, /* item_t */
419 SequenceNumber, /* key_t */
420 csChangeForReader, /* root_node */
421 node, /* item_node */
422 csChange->sn, /* item_key */
423 gavl_cmp_sn); /* cmp_fnc */
426 CSTWriterInit(ORTEDomain *d, CSTWriter *cstWriter, ObjectEntryOID *object,
427 ObjectId oid, CSTWriterParams *params, ORTETypeRegister *typeRegister);
429 CSTWriterDelete(ORTEDomain *d, CSTWriter *cstWriter);
430 extern CSTRemoteReader *
431 CSTWriterAddRemoteReader(ORTEDomain *d, CSTWriter *cstWriter, ObjectEntryOID *pobject,
432 ObjectId oid, ObjectEntryOID *sobject);
434 CSTWriterDestroyRemoteReader(ORTEDomain *d, CSTRemoteReader *cstRemoteReader);
436 CSTWriterMakeGAP(ORTEDomain *d, CSTWriter *cstWriter, GUID_RTPS *guid);
438 CSTWriterAddCSChange(ORTEDomain *d, CSTWriter *cstWriter, CSChange *csChange);
440 CSTWriterDestroyCSChangeForReader(CSChangeForReader *csChangeForReader,
441 Boolean destroyCSChange);
443 CSTWriterDestroyCSChange(ORTEDomain *d, CSTWriter *cstWriter, CSChange *csChange);
445 CSTWriterTryDestroyBestEffortIssue(CSTWriter *cstWriter);
447 CSTWriterRefreshAllCSChanges(ORTEDomain *d, CSTRemoteReader *cstRemoteReader);
449 CSTWriterCSChangeForReaderNewState(CSChangeForReader *csChangeForReader);
451 CSTWriterMulticast(CSChangeForReader *csChangeForReader);
453 ///////////////////////////////////////////////////////////////////////////////
454 // RTPSCSTWriterTimer.c
456 CSTWriterRegistrationTimer(ORTEDomain *d, void *vcstWriter);
458 CSTWriterRefreshTimer(ORTEDomain *d, void *vcstWriter);
460 CSTWriterAnnounceTimer(ORTEDomain *d, void *vcstRemoteReader);
462 CSChangeForReaderUnderwayTimer(ORTEDomain *da, void *vcsChangeForReader);
464 CSTWriterSendBestEffortTimer(ORTEDomain *d, void *vcstRemoteReader);
466 CSTWriterSendStrictTimer(ORTEDomain *d, void *vcstRemoteReader);
468 CSTWriterSendTimer(ORTEDomain *d, void *vcstRemoteReader);
470 ///////////////////////////////////////////////////////////////////////////////
472 UL_LIST_CUST_DEC(CSTReaderCSChange, /* prefix */
473 CSTReader, /* head_t */
474 CSChange, /* item_t */
475 csChanges, /* head_field */
476 nodeList); /* node_field */
478 GAVL_CUST_NODE_INT_DEC(CSTReader, /* prefix */
479 CSTSubscriptions, /* root_t */
480 CSTReader, /* item_t */
481 GUID_RTPS, /* key_t */
482 cstReader, /* root_node */
483 node, /* item_node */
485 gavl_cmp_guid); /* cmp_fnc */
487 GAVL_CUST_NODE_INT_DEC(CSTRemoteWriter, /* prefix */
488 CSTReader, /* root_t */
489 CSTRemoteWriter, /* item_t */
490 GUID_RTPS, /* key_t */
491 cstRemoteWriter, /* root_node */
492 node, /* item_node */
494 gavl_cmp_guid); /* cmp_fnc */
496 GAVL_CUST_NODE_INT_DEC(CSChangeFromWriter, /* prefix */
497 CSTRemoteWriter, /* root_t */
498 CSChangeFromWriter, /* item_t */
499 SequenceNumber, /* key_t */
500 csChangeFromWriter, /* root_node */
501 node, /* item_node */
502 csChange->sn, /* item_key */
503 gavl_cmp_sn); /* cmp_fnc */
505 CSTReaderInit(ORTEDomain *d, CSTReader *cstReader, ObjectEntryOID *object,
506 ObjectId oid, CSTReaderParams *params, ORTETypeRegister *typeRegister);
508 CSTReaderDelete(ORTEDomain *d, CSTReader *cstReader);
509 extern CSTRemoteWriter *
510 CSTReaderAddRemoteWriter(ORTEDomain *d, CSTReader *cstReader, ObjectEntryOID *object,
513 CSTReaderDestroyRemoteWriter(ORTEDomain *d, CSTRemoteWriter *cstRemoteWriter);
515 CSTReaderAddCSChange(CSTRemoteWriter *cstRemoteWriter, CSChange *csChange);
517 CSTReaderDestroyCSChangeFromWriter(CSTRemoteWriter *cstRemoteWriter,
518 CSChangeFromWriter *csChangeFromWriter, Boolean keepCSChange);
520 CSTReaderDestroyCSChange(CSTRemoteWriter *cstRemoteWriter, SequenceNumber *sn,
521 Boolean keepCSChange);
523 CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter);
525 ///////////////////////////////////////////////////////////////////////////////
526 // RTPSCSTReaderProc.c
528 CSTReaderProcCSChanges(ORTEDomain *d, CSTRemoteWriter *cstRemoteWriter);
530 CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter, Boolean pullCalled);
532 ///////////////////////////////////////////////////////////////////////////////
533 // RTPSCSTReaderTimer.c
535 CSTReaderResponceTimer(ORTEDomain *d, void *vcstRemoteWriter);
537 CSTReaderQueryTimer(ORTEDomain *d, void *vcstRemoteWriter);
539 CSTReaderDeadlineTimer(ORTEDomain *d, void *vcstReader);
541 CSTReaderPersistenceTimer(ORTEDomain *d, void *vcstReader);
543 ///////////////////////////////////////////////////////////////////////////////
546 ORTEDomainCreate(int domain, ORTEDomainProp *prop,
547 ORTEDomainAppEvents *events, Boolean manager);
549 ORTEDomainDestroy(ORTEDomain *d, Boolean manager);
551 ///////////////////////////////////////////////////////////////////////////////
553 UL_LIST_CUST_DEC(Pattern, /* prefix */
554 PatternEntry, /* head_t */
555 PatternNode, /* item_t */
556 patterns, /* head_field */
557 node); /* node_field */
559 ///////////////////////////////////////////////////////////////////////////////
560 // ORTETypeRegister.c
562 ORTETypeRegisterFind(ORTEDomain *d, const char *typeName);
564 ///////////////////////////////////////////////////////////////////////////////
566 GAVL_CUST_NODE_INT_DEC(PublicationList, /* prefix */
567 PSEntry, /* root_t */
568 ObjectEntryOID, /* item_t */
569 GUID_RTPS, /* key_t */
570 publications, /* root_node */
571 psNode, /* item_node */
573 gavl_cmp_guid); /* cmp_fnc */
575 ORTEPublicationSendLocked(ORTEPublication *cstWriter,
576 ORTEPublicationSendParam *psp);
578 ///////////////////////////////////////////////////////////////////////////////
581 ORTESubscriptionDestroyLocked(ORTESubscription *cstReader);
583 ///////////////////////////////////////////////////////////////////////////////
584 // ORTEPublicationTimer.c
586 PublicationCallBackTimer(ORTEDomain *d, void *vcstWriter);
588 ///////////////////////////////////////////////////////////////////////////////
589 // ORTESubscription.c
590 GAVL_CUST_NODE_INT_DEC(SubscriptionList, /* prefix */
591 PSEntry, /* root_t */
592 ObjectEntryOID, /* item_t */
593 GUID_RTPS, /* key_t */
594 subscriptions, /* root_node */
595 psNode, /* item_node */
597 gavl_cmp_guid); /* cmp_fnc */
603 #endif /* _PROTOS_H */