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, \
76 htimerRoot_run_expired(ORTEDomain *d,
77 ul_htim_time_t *pact_time);
78 // htimerUnicastCommon
79 UL_HTIMER_DEC(htimerUnicastCommon, \
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, \
95 htimUnicast.sendMetatraffic, \
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, \
108 htimUnicast.sendUserData, \
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,
146 ObjectEntryOID,CSTRemoteReader,
147 multicastRemoteReaders,multicastNode);
148 GAVL_CUST_NODE_INT_DEC(ObjectEntryHID, ObjectEntry, ObjectEntryHID, HostId,
149 objRoot, hidNode, hid, gavl_cmp_int)
150 GAVL_CUST_NODE_INT_DEC(ObjectEntryAID, ObjectEntryHID, ObjectEntryAID, AppId,
151 aidRoot, aidNode, aid, gavl_cmp_int)
152 GAVL_CUST_NODE_INT_DEC(ObjectEntryOID, ObjectEntryAID, ObjectEntryOID, ObjectId,
153 oidRoot, oidNode, oid, gavl_cmp_int)
155 objectEntryRefreshApp(ORTEDomain *d,ObjectEntryOID *objectEntryOID);
156 extern ObjectEntryOID *
157 objectEntryFind(ORTEDomain *d,GUID_RTPS *guid);
158 extern ObjectEntryOID *
159 objectEntryAdd(ORTEDomain *d,GUID_RTPS *guid,void *params);
161 objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID,Boolean destroy);
163 objectEntryDeleteAll(ORTEDomain *d,ObjectEntry *objectEntry);
165 objectEntryDump(ObjectEntry *objectEntry);
167 ///////////////////////////////////////////////////////////////////////////////
170 AppParamsInit(AppParams *ap);
172 PublParamsInit(ORTEPublProp *sp);
174 SubsParamsInit(ORTESubsProp *sp);
176 updateORTEAppInfo(AppParams *appParams,ORTEAppInfo *appInfo);
178 generateEvent(ORTEDomain *d,GUID_RTPS *guid,void *params,Boolean live);
180 getTypeApp(ORTEDomain *d,AppParams *ap,IPAddress senderIPAddress);
182 appSelfParamChanged(ORTEDomain *d,Boolean lock,Boolean unlock,
183 Boolean forWM,Boolean alive);
185 matchMulticastAddresses(ObjectEntryOID *o1,ObjectEntryOID *o2);
186 extern ObjectEntryOID *
187 getAppO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID,
189 extern ObjectEntryOID *
190 getSubsO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID,
193 ///////////////////////////////////////////////////////////////////////////////
196 eventAdd(ORTEDomain *d,ObjectEntryAID *objectEntryAID,HTimFncUserNode *fncNode,
197 int where,const char *name,EVH2 *func,pthread_rwlock_t *lock,
198 void *arg1,NtpTime *when_expire);
200 eventDetach(ORTEDomain *d,
201 ObjectEntryAID *objectEntryAID,
202 HTimFncUserNode *fncNode,
205 ///////////////////////////////////////////////////////////////////////////////
207 UL_LIST_CUST_DEC(CSChangeAttributes,
208 CSChange,ParameterSequence,
211 parameterGetDataLength(CSChange *csChange);
213 parameterDelete(CSChange *csChange);
215 parameterCodeCodecFromCSChange(CSChange *csChange,CDR_Codec *cdrCodec);
217 parameterDecodeCodecToCSChange(CSChange *csChange,CDR_Codec *cdrCodec);
219 parameterUpdateCSChange(
220 CSChange *csChange,AppParams *ap,Boolean Manager);
222 parameterUpdateCSChangeFromPublication(CSChange *csChange,ORTEPublProp *pp);
224 parameterUpdateCSChangeFromSubscription(CSChange *csChange,ORTESubsProp *sp);
226 parameterUpdateApplication(CSChange *csChange,AppParams *ap);
228 parameterUpdatePublication(CSChange *csChange,ORTEPublProp *pp);
230 parameterUpdateSubscription(CSChange *csChange,ORTESubsProp *sp);
232 ///////////////////////////////////////////////////////////////////////////////
233 // objectEntryTimer.c
235 objectEntryPurgeTimer(ORTEDomain *d,void *vobjectEntryOID);
237 objectEntryExpirationTimer(ORTEDomain *d,void *vobjectEntryOID);
239 ///////////////////////////////////////////////////////////////////////////////
240 // ORTETypeRegister.c
241 GAVL_CUST_NODE_INT_DEC(ORTEType, TypeEntry, TypeNode, const char *,
242 types, node, typeRegister.typeName, gavl_cmp_str)
245 ///////////////////////////////////////////////////////////////////////////////
248 ORTEDomainWakeUpReceivingThread(ORTEDomain *d,sock_t *sock,uint16_t port);
250 ORTEDomainWakeUpSendingThread(ObjectEntry *objectEntry);
252 ///////////////////////////////////////////////////////////////////////////////
253 // ORTEAppRecvMetatrafficThread.c
255 ORTEAppRecvThread(TaskProp *tp);
258 ///////////////////////////////////////////////////////////////////////////////
259 // ORTEAppSendThread.c
261 ORTESendData(ORTEDomain *d,ObjectEntryAID *objectEntryAID,Boolean meta);
263 ORTEAppSendThread(TaskProp *tp);
265 ///////////////////////////////////////////////////////////////////////////////
268 RTPSHeaderCreate(CDR_Codec *cdrCodec,HostId hid,AppId aid);
270 RTPSHeaderCheck(CDR_Codec *cdrCodec,int32_t len,MessageInterpret *mi);
272 ///////////////////////////////////////////////////////////////////////////////
275 RTPSPad(CDR_Codec *cdrCodec,MessageInterpret *mi);
277 ///////////////////////////////////////////////////////////////////////////////
280 RTPSInfoDST(CDR_Codec *cdrCodec,MessageInterpret *mi);
282 ///////////////////////////////////////////////////////////////////////////////
285 RTPSInfoREPLYCreate(CDR_Codec *cdrCodec,IPAddress ipaddress,Port port);
287 RTPSInfoREPLY(CDR_Codec *cdrCodec,MessageInterpret *mi);
289 ///////////////////////////////////////////////////////////////////////////////
292 RTPSInfoSRC(CDR_Codec *cdrCodec,MessageInterpret *mi);
294 ///////////////////////////////////////////////////////////////////////////////
297 RTPSInfoTSCreate(CDR_Codec *cdrCodec,NtpTime time);
299 RTPSInfoTS(CDR_Codec *cdrCodec,MessageInterpret *mi);
301 ///////////////////////////////////////////////////////////////////////////////
304 RTPSVarCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange);
306 RTPSVar(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
308 ///////////////////////////////////////////////////////////////////////////////
311 RTPSAckCreate(CDR_Codec *cdrCodec,
312 SequenceNumber *seqNumber,
313 ObjectId roid,ObjectId woid,Boolean f_bit);
315 RTPSAck(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
317 ///////////////////////////////////////////////////////////////////////////////
320 RTPSHeartBeatCreate(CDR_Codec *cdrCodec,
321 SequenceNumber *fsn,SequenceNumber *lsn,
322 ObjectId roid,ObjectId woid,Boolean f_bit);
324 RTPSHeartBeat(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi);
326 ///////////////////////////////////////////////////////////////////////////////
329 RTPSGapCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange);
331 RTPSGap(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
333 ///////////////////////////////////////////////////////////////////////////////
336 RTPSIssueCreateHeader(CDR_Codec *cdrCodec,uint32_t length,
337 ObjectId roid,ObjectId woid,SequenceNumber sn);
339 RTPSIssue(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
341 ///////////////////////////////////////////////////////////////////////////////
343 extern int gavl_cmp_ntp_time(const NtpTime *a,const NtpTime *b);
344 extern int gavl_cmp_sn(const SequenceNumber *a, const SequenceNumber *b);
345 extern int gavl_cmp_guid(const GUID_RTPS *a, const GUID_RTPS *b);
346 extern int gavl_cmp_str(const char *const *a,const char *const *b);
348 ///////////////////////////////////////////////////////////////////////////////
350 UL_LIST_CUST_DEC(CSTWriterCSChange,
353 UL_LIST_CUST_DEC(CSChangeParticipant,
354 CSChange,CSChangeForReader,
355 writerParticipants,participantNode);
356 GAVL_CUST_NODE_INT_DEC(CSTWriter,
357 CSTPublications, CSTWriter, GUID_RTPS,
358 cstWriter, node, guid, gavl_cmp_guid);
359 GAVL_CUST_NODE_INT_DEC(CSTRemoteReader,
360 CSTWriter, CSTRemoteReader, GUID_RTPS,
361 cstRemoteReader, node, guid, gavl_cmp_guid);
362 GAVL_CUST_NODE_INT_DEC(CSChangeForReader,
363 CSTRemoteReader, CSChangeForReader, SequenceNumber,
364 csChangeForReader, node, csChange->sn, gavl_cmp_sn);
367 CSTWriterInit(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object,
368 ObjectId oid,CSTWriterParams *params,ORTETypeRegister *typeRegister);
370 CSTWriterDelete(ORTEDomain *d,CSTWriter *cstWriter);
371 extern CSTRemoteReader *
372 CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *pobject,
373 ObjectId oid,ObjectEntryOID *sobject);
375 CSTWriterDestroyRemoteReader(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
377 CSTWriterMakeGAP(ORTEDomain *d,CSTWriter *cstWriter,GUID_RTPS *guid);
379 CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
381 CSTWriterDestroyCSChangeForReader(CSChangeForReader *csChangeForReader,
382 Boolean destroyCSChange);
384 CSTWriterDestroyCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
386 CSTWriterTryDestroyBestEffortIssue(CSTWriter *cstWriter);
388 CSTWriterRefreshAllCSChanges(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
390 CSTWriterCSChangeForReaderNewState(CSChangeForReader *csChangeForReader);
392 CSTWriterMulticast(CSChangeForReader *csChangeForReader);
394 ///////////////////////////////////////////////////////////////////////////////
395 // RTPSCSTWriterTimer.c
397 CSTWriterRegistrationTimer(ORTEDomain *d,void *vcstWriter);
399 CSTWriterRefreshTimer(ORTEDomain *d,void *vcstWriter);
401 CSTWriterAnnounceTimer(ORTEDomain *d,void *vcstRemoteReader);
403 CSChangeForReaderUnderwayTimer(ORTEDomain *da,void *vcsChangeForReader);
405 CSTWriterSendBestEffortTimer(ORTEDomain *d,void *vcstRemoteReader);
407 CSTWriterSendStrictTimer(ORTEDomain *d,void *vcstRemoteReader);
409 CSTWriterSendTimer(ORTEDomain *d,void *vcstRemoteReader);
411 ///////////////////////////////////////////////////////////////////////////////
413 UL_LIST_CUST_DEC(CSTReaderCSChange,
416 GAVL_CUST_NODE_INT_DEC(CSTReader, /* prefix */
417 CSTSubscriptions, /* root_t */
418 CSTReader, /* item_t */
419 GUID_RTPS, /* key_t */
420 cstReader, /* root_node */
421 node, /* item_node */
423 gavl_cmp_guid); /* cmp_fnc */
424 GAVL_CUST_NODE_INT_DEC(CSTRemoteWriter,
425 CSTReader, CSTRemoteWriter, GUID_RTPS,
426 cstRemoteWriter, node, guid, gavl_cmp_guid);
427 GAVL_CUST_NODE_INT_DEC(CSChangeFromWriter,
428 CSTRemoteWriter, CSChangeFromWriter, SequenceNumber,
429 csChangeFromWriter, node, csChange->sn, gavl_cmp_sn);
431 CSTReaderInit(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
432 ObjectId oid,CSTReaderParams *params,ORTETypeRegister *typeRegister);
434 CSTReaderDelete(ORTEDomain *d,CSTReader *cstReader);
435 extern CSTRemoteWriter *
436 CSTReaderAddRemoteWriter(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
439 CSTReaderDestroyRemoteWriter(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
441 CSTReaderAddCSChange(CSTRemoteWriter *cstRemoteWriter,CSChange *csChange);
443 CSTReaderDestroyCSChangeFromWriter(CSTRemoteWriter *cstRemoteWriter,
444 CSChangeFromWriter *csChangeFromWriter,Boolean keepCSChange);
446 CSTReaderDestroyCSChange(CSTRemoteWriter *cstRemoteWriter,SequenceNumber *sn,
447 Boolean keepCSChange);
449 CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter);
451 ///////////////////////////////////////////////////////////////////////////////
452 // RTPSCSTReaderProc.c
454 CSTReaderProcCSChanges(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
456 CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter,Boolean pullCalled);
458 ///////////////////////////////////////////////////////////////////////////////
459 // RTPSCSTReaderTimer.c
461 CSTReaderResponceTimer(ORTEDomain *d,void *vcstRemoteWriter);
463 CSTReaderQueryTimer(ORTEDomain *d,void *vcstRemoteWriter);
465 CSTReaderDeadlineTimer(ORTEDomain *d,void *vcstReader);
467 CSTReaderPersistenceTimer(ORTEDomain *d,void *vcstReader);
469 ///////////////////////////////////////////////////////////////////////////////
472 ORTEDomainCreate(int domain, ORTEDomainProp *prop,
473 ORTEDomainAppEvents *events,Boolean manager);
475 ORTEDomainDestroy(ORTEDomain *d,Boolean manager);
477 ///////////////////////////////////////////////////////////////////////////////
479 UL_LIST_CUST_DEC(Pattern,
480 PatternEntry,PatternNode,
483 ///////////////////////////////////////////////////////////////////////////////
484 // ORTETypeRegister.c
486 ORTETypeRegisterFind(ORTEDomain *d,const char *typeName);
488 ///////////////////////////////////////////////////////////////////////////////
490 GAVL_CUST_NODE_INT_DEC(PublicationList,
491 PSEntry, ObjectEntryOID, GUID_RTPS,
492 publications, psNode, guid, gavl_cmp_guid);
494 ORTEPublicationSendLocked(ORTEPublication *cstWriter,
495 ORTEPublicationSendParam *psp);
497 ///////////////////////////////////////////////////////////////////////////////
500 ORTESubscriptionDestroyLocked(ORTESubscription *cstReader);
502 ///////////////////////////////////////////////////////////////////////////////
503 // ORTEPublicationTimer.c
505 PublicationCallBackTimer(ORTEDomain *d,void *vcstWriter);
507 ///////////////////////////////////////////////////////////////////////////////
508 // ORTESubscription.c
509 GAVL_CUST_NODE_INT_DEC(SubscriptionList,
510 PSEntry, ObjectEntryOID, GUID_RTPS,
511 subscriptions, psNode, guid, gavl_cmp_guid);
518 #endif /* _PROTOS_H */