2 * $Id: protos.h,v 0.0.0.1 2003/08/21
4 * AUTHOR: Petr Smolik petr.smolik@wo.cz
6 * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/
7 * --------------------------------------------------------------------
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
28 ///////////////////////////////////////////////////////////////////////////////
35 sock_init_udp(sock_t *sock);
37 sock_cleanup(sock_t *sock);
39 sock_setsockopt(sock_t *sock,int level,int optname,const char *optval, int optlen);
41 sock_getsockopt(sock_t *sock,int level,int optname,char *optval, int *optlen);
43 sock_bind(sock_t *sock,uint16_t port);
45 sock_recvfrom(sock_t *sock, void *buf, int max_len,struct sockaddr_in *des,int des_len);
47 sock_sendto(sock_t *sock, void *buf, int len,struct sockaddr_in *des,int des_len);
49 sock_ioctl(sock_t *sock, long cmd, unsigned long *arg);
51 sock_get_local_interfaces(sock_t *sock,ORTEIFProp *IFProp,char *IFCount);
53 ///////////////////////////////////////////////////////////////////////////////
56 getStringPart(char *string,char divChar,int *iterator,char *buff);
58 ///////////////////////////////////////////////////////////////////////////////
61 UL_HTIMER_DEC(htimerRoot, \
67 htimerRoot_run_expired(ORTEDomain *d,
68 ul_htim_time_t *pact_time);
69 // htimerUnicastCommon
70 UL_HTIMER_DEC(htimerUnicastCommon, \
76 htimerUnicastCommon_update_root_timer(ObjectEntry *objectEntry,
77 ObjectEntryAID *objectEntryAID);
79 htimerUnicastCommon_run_expired(ORTEDomain *d,
80 ObjectEntryAID *objectEntryAID,
81 ul_htim_time_t *pact_time);
82 // htimerUnicastSendMetatraffic
83 UL_HTIMER_DEC(htimerUnicastSendMetatraffic, \
86 htimUnicast.sendMetatraffic, \
89 htimerUnicastSendMetatraffic_update_root_timer(ObjectEntry *objectEntry,
90 ObjectEntryAID *objectEntryAID);
92 htimerUnicastSendMetatraffic_run_expired(ORTEDomain *d,
93 ObjectEntryAID *objectEntryAID,
94 ul_htim_time_t *pact_time);
95 // htimerUnicastSendUserData
96 UL_HTIMER_DEC(htimerUnicastSendUserData, \
99 htimUnicast.sendUserData, \
102 htimerUnicastSendUserData_update_root_timer(ObjectEntry *objectEntry,
103 ObjectEntryAID *objectEntryAID);
105 htimerUnicastSendUserData_run_expired(ORTEDomain *d,
106 ObjectEntryAID *objectEntryAID,
107 ul_htim_time_t *pact_time);
109 getActualNtpTime(void);
112 ///////////////////////////////////////////////////////////////////////////////
115 db_init(const char *logfile, const char *options);
117 debug_options(const char *options);
119 db_print(const char *format,...);
121 debug_open_log(const char *logfile);
122 #ifdef ENABLE_MEM_CHECK
124 mem_check_malloc(size_t size);
126 mem_check_free(void *ptr);
129 ///////////////////////////////////////////////////////////////////////////////
132 fnmatch(const char *__pattern,const char *__string,int __flags);
134 ///////////////////////////////////////////////////////////////////////////////
136 UL_LIST_CUST_DEC(ObjectEntryMulticast,
137 ObjectEntryOID,CSTRemoteReader,
138 multicastRemoteReaders,multicastNode);
139 GAVL_CUST_NODE_INT_DEC(ObjectEntryHID, ObjectEntry, ObjectEntryHID, HostId,
140 objRoot, hidNode, hid, gavl_cmp_int)
141 GAVL_CUST_NODE_INT_DEC(ObjectEntryAID, ObjectEntryHID, ObjectEntryAID, AppId,
142 aidRoot, aidNode, aid, gavl_cmp_int)
143 GAVL_CUST_NODE_INT_DEC(ObjectEntryOID, ObjectEntryAID, ObjectEntryOID, ObjectId,
144 oidRoot, oidNode, oid, gavl_cmp_int)
146 objectEntryRefreshApp(ORTEDomain *d,ObjectEntryOID *objectEntryOID);
147 extern ObjectEntryOID *
148 objectEntryFind(ORTEDomain *d,GUID_RTPS *guid);
149 extern ObjectEntryOID *
150 objectEntryAdd(ORTEDomain *d,GUID_RTPS *guid,void *params);
152 objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID,Boolean destroy);
154 objectEntryDeleteAll(ORTEDomain *d,ObjectEntry *objectEntry);
156 objectEntryDump(ObjectEntry *objectEntry);
158 ///////////////////////////////////////////////////////////////////////////////
161 AppParamsInit(AppParams *ap);
163 PublParamsInit(ORTEPublProp *sp);
165 SubsParamsInit(ORTESubsProp *sp);
167 updateORTEAppInfo(AppParams *appParams,ORTEAppInfo *appInfo);
169 generateEvent(ORTEDomain *d,GUID_RTPS *guid,void *params,Boolean live);
171 getTypeApp(ORTEDomain *d,AppParams *ap,IPAddress senderIPAddress);
173 appSelfParamChanged(ORTEDomain *d,Boolean lock,Boolean unlock,
174 Boolean forWM,Boolean alive);
176 matchMulticastAddresses(ObjectEntryOID *o1,ObjectEntryOID *o2);
177 extern ObjectEntryOID *
178 getAppO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID,
180 extern ObjectEntryOID *
181 getSubsO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID,
184 ///////////////////////////////////////////////////////////////////////////////
187 eventAdd(ORTEDomain *d,ObjectEntryAID *objectEntryAID,HTimFncUserNode *fncNode,
188 int where,const char *name,EVH2 *func,pthread_rwlock_t *lock,
189 void *arg1,NtpTime *when_expire);
191 eventDetach(ORTEDomain *d,
192 ObjectEntryAID *objectEntryAID,
193 HTimFncUserNode *fncNode,
196 ///////////////////////////////////////////////////////////////////////////////
198 UL_LIST_CUST_DEC(CSChangeAttributes,
199 CSChange,ParameterSequence,
202 parameterGetDataLength(CSChange *csChange);
204 parameterDelete(CSChange *csChange);
206 parameterCodeCodecFromCSChange(CSChange *csChange,CDR_Codec *cdrCodec);
208 parameterDecodeCodecToCSChange(CSChange *csChange,CDR_Codec *cdrCodec);
210 parameterUpdateCSChange(
211 CSChange *csChange,AppParams *ap,Boolean Manager);
213 parameterUpdateCSChangeFromPublication(CSChange *csChange,ORTEPublProp *pp);
215 parameterUpdateCSChangeFromSubscription(CSChange *csChange,ORTESubsProp *sp);
217 parameterUpdateApplication(CSChange *csChange,AppParams *ap);
219 parameterUpdatePublication(CSChange *csChange,ORTEPublProp *pp);
221 parameterUpdateSubscription(CSChange *csChange,ORTESubsProp *sp);
223 ///////////////////////////////////////////////////////////////////////////////
224 // objectEntryTimer.c
226 objectEntryPurgeTimer(ORTEDomain *d,void *vobjectEntryOID);
228 objectEntryExpirationTimer(ORTEDomain *d,void *vobjectEntryOID);
230 ///////////////////////////////////////////////////////////////////////////////
231 // ORTETypeRegister.c
232 GAVL_CUST_NODE_INT_DEC(ORTEType, TypeEntry, TypeNode, const char *,
233 types, node, typeRegister.typeName, gavl_cmp_str)
236 ///////////////////////////////////////////////////////////////////////////////
239 ORTEDomainWakeUpReceivingThread(ORTEDomain *d,sock_t *sock,uint16_t port);
241 ORTEDomainWakeUpSendingThread(ObjectEntry *objectEntry);
243 ///////////////////////////////////////////////////////////////////////////////
244 // ORTEAppRecvMetatrafficThread.c
246 ORTEAppRecvThread(TaskProp *tp);
249 ///////////////////////////////////////////////////////////////////////////////
250 // ORTEAppSendThread.c
252 ORTESendData(ORTEDomain *d,ObjectEntryAID *objectEntryAID,Boolean meta);
254 ORTEAppSendThread(TaskProp *tp);
256 ///////////////////////////////////////////////////////////////////////////////
259 RTPSHeaderCreate(CDR_Codec *cdrCodec,HostId hid,AppId aid);
261 RTPSHeaderCheck(CDR_Codec *cdrCodec,int32_t len,MessageInterpret *mi);
263 ///////////////////////////////////////////////////////////////////////////////
266 RTPSPad(CDR_Codec *cdrCodec,MessageInterpret *mi);
268 ///////////////////////////////////////////////////////////////////////////////
271 RTPSInfoDST(CDR_Codec *cdrCodec,MessageInterpret *mi);
273 ///////////////////////////////////////////////////////////////////////////////
276 RTPSInfoREPLYCreate(CDR_Codec *cdrCodec,IPAddress ipaddress,Port port);
278 RTPSInfoREPLY(CDR_Codec *cdrCodec,MessageInterpret *mi);
280 ///////////////////////////////////////////////////////////////////////////////
283 RTPSInfoSRC(CDR_Codec *cdrCodec,MessageInterpret *mi);
285 ///////////////////////////////////////////////////////////////////////////////
288 RTPSInfoTSCreate(CDR_Codec *cdrCodec,NtpTime time);
290 RTPSInfoTS(CDR_Codec *cdrCodec,MessageInterpret *mi);
292 ///////////////////////////////////////////////////////////////////////////////
295 RTPSVarCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange);
297 RTPSVar(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
299 ///////////////////////////////////////////////////////////////////////////////
302 RTPSAckCreate(CDR_Codec *cdrCodec,
303 SequenceNumber *seqNumber,
304 ObjectId roid,ObjectId woid,Boolean f_bit);
306 RTPSAck(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
308 ///////////////////////////////////////////////////////////////////////////////
311 RTPSHeartBeatCreate(CDR_Codec *cdrCodec,
312 SequenceNumber *fsn,SequenceNumber *lsn,
313 ObjectId roid,ObjectId woid,Boolean f_bit);
315 RTPSHeartBeat(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi);
317 ///////////////////////////////////////////////////////////////////////////////
320 RTPSGapCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange);
322 RTPSGap(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
324 ///////////////////////////////////////////////////////////////////////////////
327 RTPSIssueCreateHeader(CDR_Codec *cdrCodec,uint32_t length,
328 ObjectId roid,ObjectId woid,SequenceNumber sn);
330 RTPSIssue(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
332 ///////////////////////////////////////////////////////////////////////////////
334 extern int gavl_cmp_ntp_time(const NtpTime *a,const NtpTime *b);
335 extern int gavl_cmp_sn(const SequenceNumber *a, const SequenceNumber *b);
336 extern int gavl_cmp_guid(const GUID_RTPS *a, const GUID_RTPS *b);
337 extern int gavl_cmp_str(const char *const *a,const char *const *b);
339 ///////////////////////////////////////////////////////////////////////////////
341 UL_LIST_CUST_DEC(CSTWriterCSChange,
344 UL_LIST_CUST_DEC(CSChangeParticipant,
345 CSChange,CSChangeForReader,
346 writerParticipants,participantNode);
347 GAVL_CUST_NODE_INT_DEC(CSTWriter,
348 CSTPublications, CSTWriter, GUID_RTPS,
349 cstWriter, node, guid, gavl_cmp_guid);
350 GAVL_CUST_NODE_INT_DEC(CSTRemoteReader,
351 CSTWriter, CSTRemoteReader, GUID_RTPS,
352 cstRemoteReader, node, guid, gavl_cmp_guid);
353 GAVL_CUST_NODE_INT_DEC(CSChangeForReader,
354 CSTRemoteReader, CSChangeForReader, SequenceNumber,
355 csChangeForReader, node, csChange->sn, gavl_cmp_sn);
358 CSTWriterInit(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object,
359 ObjectId oid,CSTWriterParams *params,ORTETypeRegister *typeRegister);
361 CSTWriterDelete(ORTEDomain *d,CSTWriter *cstWriter);
362 extern CSTRemoteReader *
363 CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *pobject,
364 ObjectId oid,ObjectEntryOID *sobject);
366 CSTWriterDestroyRemoteReader(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
368 CSTWriterMakeGAP(ORTEDomain *d,CSTWriter *cstWriter,GUID_RTPS *guid);
370 CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
372 CSTWriterDestroyCSChangeForReader(CSChangeForReader *csChangeForReader,
373 Boolean destroyCSChange);
375 CSTWriterDestroyCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
377 CSTWriterTryDestroyBestEffortIssue(CSTWriter *cstWriter);
379 CSTWriterRefreshAllCSChanges(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
381 CSTWriterCSChangeForReaderNewState(CSChangeForReader *csChangeForReader);
383 CSTWriterMulticast(CSChangeForReader *csChangeForReader);
385 ///////////////////////////////////////////////////////////////////////////////
386 // RTPSCSTWriterTimer.c
388 CSTWriterRegistrationTimer(ORTEDomain *d,void *vcstWriter);
390 CSTWriterRefreshTimer(ORTEDomain *d,void *vcstWriter);
392 CSTWriterAnnounceTimer(ORTEDomain *d,void *vcstRemoteReader);
394 CSChangeForReaderUnderwayTimer(ORTEDomain *da,void *vcsChangeForReader);
396 CSTWriterSendBestEffortTimer(ORTEDomain *d,void *vcstRemoteReader);
398 CSTWriterSendStrictTimer(ORTEDomain *d,void *vcstRemoteReader);
400 CSTWriterSendTimer(ORTEDomain *d,void *vcstRemoteReader);
402 ///////////////////////////////////////////////////////////////////////////////
404 UL_LIST_CUST_DEC(CSTReaderCSChange,
407 GAVL_CUST_NODE_INT_DEC(CSTReader,
408 CSTSubscriptions, CSTReader, GUID_RTPS,
409 cstReader, node, guid, gavl_cmp_guid);
410 GAVL_CUST_NODE_INT_DEC(CSTRemoteWriter,
411 CSTReader, CSTRemoteWriter, GUID_RTPS,
412 cstRemoteWriter, node, guid, gavl_cmp_guid);
413 GAVL_CUST_NODE_INT_DEC(CSChangeFromWriter,
414 CSTRemoteWriter, CSChangeFromWriter, SequenceNumber,
415 csChangeFromWriter, node, csChange->sn, gavl_cmp_sn);
417 CSTReaderInit(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
418 ObjectId oid,CSTReaderParams *params,ORTETypeRegister *typeRegister);
420 CSTReaderDelete(ORTEDomain *d,CSTReader *cstReader);
421 extern CSTRemoteWriter *
422 CSTReaderAddRemoteWriter(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
425 CSTReaderDestroyRemoteWriter(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
427 CSTReaderAddCSChange(CSTRemoteWriter *cstRemoteWriter,CSChange *csChange);
429 CSTReaderDestroyCSChangeFromWriter(CSTRemoteWriter *cstRemoteWriter,
430 CSChangeFromWriter *csChangeFromWriter,Boolean keepCSChange);
432 CSTReaderDestroyCSChange(CSTRemoteWriter *cstRemoteWriter,SequenceNumber *sn,
433 Boolean keepCSChange);
435 CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter);
437 ///////////////////////////////////////////////////////////////////////////////
438 // RTPSCSTReaderProc.c
440 CSTReaderProcCSChanges(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
442 CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter,Boolean pullCalled);
444 ///////////////////////////////////////////////////////////////////////////////
445 // RTPSCSTReaderTimer.c
447 CSTReaderResponceTimer(ORTEDomain *d,void *vcstRemoteWriter);
449 CSTReaderQueryTimer(ORTEDomain *d,void *vcstRemoteWriter);
451 CSTReaderDeadlineTimer(ORTEDomain *d,void *vcstReader);
453 CSTReaderPersistenceTimer(ORTEDomain *d,void *vcstReader);
455 ///////////////////////////////////////////////////////////////////////////////
458 ORTEDomainCreate(int domain, ORTEDomainProp *prop,
459 ORTEDomainAppEvents *events,Boolean manager);
461 ORTEDomainDestroy(ORTEDomain *d,Boolean manager);
463 ///////////////////////////////////////////////////////////////////////////////
465 UL_LIST_CUST_DEC(Pattern,
466 PatternEntry,PatternNode,
469 ///////////////////////////////////////////////////////////////////////////////
470 // ORTETypeRegister.c
472 ORTETypeRegisterFind(ORTEDomain *d,const char *typeName);
474 ///////////////////////////////////////////////////////////////////////////////
476 GAVL_CUST_NODE_INT_DEC(PublicationList,
477 PSEntry, ObjectEntryOID, GUID_RTPS,
478 publications, psNode, guid, gavl_cmp_guid);
480 ORTEPublicationSendLocked(ORTEPublication *cstWriter,
481 ORTEPublicationSendParam *psp);
483 ///////////////////////////////////////////////////////////////////////////////
486 ORTESubscriptionDestroyLocked(ORTESubscription *cstReader);
488 ///////////////////////////////////////////////////////////////////////////////
489 // ORTEPublicationTimer.c
491 PublicationCallBackTimer(ORTEDomain *d,void *vcstWriter);
493 ///////////////////////////////////////////////////////////////////////////////
494 // ORTESubscription.c
495 GAVL_CUST_NODE_INT_DEC(SubscriptionList,
496 PSEntry, ObjectEntryOID, GUID_RTPS,
497 subscriptions, psNode, guid, gavl_cmp_guid);
504 #endif /* _PROTOS_H */