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,
417 CSTSubscriptions, CSTReader, GUID_RTPS,
418 cstReader, node, guid, gavl_cmp_guid);
419 GAVL_CUST_NODE_INT_DEC(CSTRemoteWriter,
420 CSTReader, CSTRemoteWriter, GUID_RTPS,
421 cstRemoteWriter, node, guid, gavl_cmp_guid);
422 GAVL_CUST_NODE_INT_DEC(CSChangeFromWriter,
423 CSTRemoteWriter, CSChangeFromWriter, SequenceNumber,
424 csChangeFromWriter, node, csChange->sn, gavl_cmp_sn);
426 CSTReaderInit(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
427 ObjectId oid,CSTReaderParams *params,ORTETypeRegister *typeRegister);
429 CSTReaderDelete(ORTEDomain *d,CSTReader *cstReader);
430 extern CSTRemoteWriter *
431 CSTReaderAddRemoteWriter(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
434 CSTReaderDestroyRemoteWriter(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
436 CSTReaderAddCSChange(CSTRemoteWriter *cstRemoteWriter,CSChange *csChange);
438 CSTReaderDestroyCSChangeFromWriter(CSTRemoteWriter *cstRemoteWriter,
439 CSChangeFromWriter *csChangeFromWriter,Boolean keepCSChange);
441 CSTReaderDestroyCSChange(CSTRemoteWriter *cstRemoteWriter,SequenceNumber *sn,
442 Boolean keepCSChange);
444 CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter);
446 ///////////////////////////////////////////////////////////////////////////////
447 // RTPSCSTReaderProc.c
449 CSTReaderProcCSChanges(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
451 CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter,Boolean pullCalled);
453 ///////////////////////////////////////////////////////////////////////////////
454 // RTPSCSTReaderTimer.c
456 CSTReaderResponceTimer(ORTEDomain *d,void *vcstRemoteWriter);
458 CSTReaderQueryTimer(ORTEDomain *d,void *vcstRemoteWriter);
460 CSTReaderDeadlineTimer(ORTEDomain *d,void *vcstReader);
462 CSTReaderPersistenceTimer(ORTEDomain *d,void *vcstReader);
464 ///////////////////////////////////////////////////////////////////////////////
467 ORTEDomainCreate(int domain, ORTEDomainProp *prop,
468 ORTEDomainAppEvents *events,Boolean manager);
470 ORTEDomainDestroy(ORTEDomain *d,Boolean manager);
472 ///////////////////////////////////////////////////////////////////////////////
474 UL_LIST_CUST_DEC(Pattern,
475 PatternEntry,PatternNode,
478 ///////////////////////////////////////////////////////////////////////////////
479 // ORTETypeRegister.c
481 ORTETypeRegisterFind(ORTEDomain *d,const char *typeName);
483 ///////////////////////////////////////////////////////////////////////////////
485 GAVL_CUST_NODE_INT_DEC(PublicationList,
486 PSEntry, ObjectEntryOID, GUID_RTPS,
487 publications, psNode, guid, gavl_cmp_guid);
489 ORTEPublicationSendLocked(ORTEPublication *cstWriter,
490 ORTEPublicationSendParam *psp);
492 ///////////////////////////////////////////////////////////////////////////////
495 ORTESubscriptionDestroyLocked(ORTESubscription *cstReader);
497 ///////////////////////////////////////////////////////////////////////////////
498 // ORTEPublicationTimer.c
500 PublicationCallBackTimer(ORTEDomain *d,void *vcstWriter);
502 ///////////////////////////////////////////////////////////////////////////////
503 // ORTESubscription.c
504 GAVL_CUST_NODE_INT_DEC(SubscriptionList,
505 PSEntry, ObjectEntryOID, GUID_RTPS,
506 subscriptions, psNode, guid, gavl_cmp_guid);
513 #endif /* _PROTOS_H */