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 optname,const char *optval, int optlen);
41 sock_getsockopt(sock_t *sock,int optname,char *optval, int *optlen);
43 sock_bind(sock_t *sock,u_int16_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, int cmd, int *arg);
51 sock_get_local_interfaces(sock_t *sock,ORTEIFProp *IFProp,char *IFCount);
53 ///////////////////////////////////////////////////////////////////////////////
56 conv_u16(u_int16_t *x,char ef);
58 conv_u32(u_int32_t *x,char ef);
60 conv_sn(SequenceNumber *sn,char ef);
62 conv_ntp(NtpTime *ntp,char ef);
64 getStringPart(char *string,char divChar,int iterator,char *buff);
66 ///////////////////////////////////////////////////////////////////////////////
69 UL_HTIMER_DEC(htimerRoot, \
75 htimerRoot_run_expired(ORTEDomain *d,
76 ul_htim_time_t *pact_time);
77 // htimerUnicastCommon
78 UL_HTIMER_DEC(htimerUnicastCommon, \
84 htimerUnicastCommon_update_root_timer(ObjectEntry *objectEntry,
85 ObjectEntryAID *objectEntryAID);
87 htimerUnicastCommon_run_expired(ORTEDomain *d,
88 ObjectEntryAID *objectEntryAID,
89 ul_htim_time_t *pact_time);
90 // htimerUnicastSendMetatraffic
91 UL_HTIMER_DEC(htimerUnicastSendMetatraffic, \
94 htimUnicast.sendMetatraffic, \
97 htimerUnicastSendMetatraffic_update_root_timer(ObjectEntry *objectEntry,
98 ObjectEntryAID *objectEntryAID);
100 htimerUnicastSendMetatraffic_run_expired(ORTEDomain *d,
101 ObjectEntryAID *objectEntryAID,
102 ul_htim_time_t *pact_time);
103 // htimerUnicastSendUserData
104 UL_HTIMER_DEC(htimerUnicastSendUserData, \
107 htimUnicast.sendUserData, \
110 htimerUnicastSendUserData_update_root_timer(ObjectEntry *objectEntry,
111 ObjectEntryAID *objectEntryAID);
113 htimerUnicastSendUserData_run_expired(ORTEDomain *d,
114 ObjectEntryAID *objectEntryAID,
115 ul_htim_time_t *pact_time);
117 getActualNtpTime(void);
120 ///////////////////////////////////////////////////////////////////////////////
123 db_init(const char *logfile, const char *options);
125 debug_options(const char *options);
127 db_print(const char *format,...);
129 debug_open_log(const char *logfile);
130 #ifdef ENABLE_MEM_CHECK
132 mem_check_malloc(size_t size);
134 mem_check_free(void *ptr);
137 ///////////////////////////////////////////////////////////////////////////////
140 fnmatch(const char *__pattern,const char *__string,int __flags);
142 ///////////////////////////////////////////////////////////////////////////////
144 GAVL_CUST_NODE_INT_DEC(ObjectEntryHID, ObjectEntry, ObjectEntryHID, HostId,
145 objRoot, hidNode, hid, gavl_cmp_int)
146 GAVL_CUST_NODE_INT_DEC(ObjectEntryAID, ObjectEntryHID, ObjectEntryAID, AppId,
147 aidRoot, aidNode, aid, gavl_cmp_int)
148 GAVL_CUST_NODE_INT_DEC(ObjectEntryOID, ObjectEntryAID, ObjectEntryOID, ObjectId,
149 oidRoot, oidNode, oid, gavl_cmp_int)
151 objectEntryRefreshApp(ORTEDomain *d,ObjectEntryOID *objectEntryOID);
152 extern ObjectEntryOID *
153 objectEntryFind(ORTEDomain *d,GUID_RTPS *guid);
154 extern ObjectEntryOID *
155 objectEntryAdd(ORTEDomain *d,GUID_RTPS *guid,void *params);
157 objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID);
159 objectEntryDeleteAll(ORTEDomain *d,ObjectEntry *objectEntry);
161 objectEntryDump(ObjectEntry *objectEntry);
163 ///////////////////////////////////////////////////////////////////////////////
166 AppParamsInit(AppParams *ap);
168 PublParamsInit(ORTEPublProp *sp);
170 SubsParamsInit(ORTESubsProp *sp);
172 updateORTEAppInfo(AppParams *appParams,ORTEAppInfo *appInfo);
174 generateEvent(ORTEDomain *d,GUID_RTPS *guid,void *params,Boolean live);
176 getTypeApp(ORTEDomain *d,AppParams *ap,IPAddress senderIPAddress);
178 appSelfParamChanged(ORTEDomain *d,Boolean lock,Boolean unlock,
179 Boolean forWM,Boolean alive);
181 ///////////////////////////////////////////////////////////////////////////////
184 eventAdd(ORTEDomain *d,ObjectEntryAID *objectEntryAID,HTimFncUserNode *fncNode,
185 int where,const char *name,EVH2 *func,pthread_rwlock_t *lock,
186 void *arg1,NtpTime *when_expire);
188 eventDetach(ORTEDomain *d,
189 ObjectEntryAID *objectEntryAID,
190 HTimFncUserNode *fncNode,
193 ///////////////////////////////////////////////////////////////////////////////
195 UL_LIST_CUST_DEC(CSChangeAttributes,
196 CSChange,ParameterSequence,
199 parameterDelete(CSChange *csChange);
201 parameterCodeStreamFromCSChange(CSChange *csChange,
202 u_int8_t *rtps_msg,u_int32_t max_msg_len);
204 parameterDecodeStreamToCSChange(CSChange *csChange,u_int8_t *rtps_msg,
205 u_int16_t submsg_len,u_int8_t needByteSwap);
207 parameterUpdateCSChange(
208 CSChange *csChange,AppParams *ap,Boolean Manager);
210 parameterUpdateCSChangeFromPublication(CSChange *csChange,ORTEPublProp *pp);
212 parameterUpdateCSChangeFromSubscription(CSChange *csChange,ORTESubsProp *sp);
214 parameterUpdateApplication(CSChange *csChange,AppParams *ap);
216 parameterUpdatePublication(CSChange *csChange,ORTEPublProp *pp);
218 parameterUpdateSubscription(CSChange *csChange,ORTESubsProp *sp);
220 ///////////////////////////////////////////////////////////////////////////////
221 // objectEntryTimer.c
223 objectEntryPurgeTimer(ORTEDomain *d,void *vobjectEntryOID);
225 objectEntryExpirationTimer(ORTEDomain *d,void *vobjectEntryOID);
227 ///////////////////////////////////////////////////////////////////////////////
228 // ORTETypeRegister.c
229 GAVL_CUST_NODE_INT_DEC(ORTEType, TypeEntry, TypeNode, const char *,
230 types, node, typeRegister.typeName, gavl_cmp_str)
233 ///////////////////////////////////////////////////////////////////////////////
236 ORTEDomainWakeUpReceivingThread(ORTEDomain *d,sock_t *sock,u_int16_t port);
238 ORTEDomainWakeUpSendingThread(ObjectEntry *objectEntry);
240 ///////////////////////////////////////////////////////////////////////////////
241 // ORTEAppRecvMetatrafficThread.c
243 ORTEAppRecvMetatrafficThread(ORTEDomain *d);
245 ///////////////////////////////////////////////////////////////////////////////
246 // ORTEAppRecvUserdataThread.c
248 ORTEAppRecvUserdataThread(ORTEDomain *d);
250 ///////////////////////////////////////////////////////////////////////////////
251 // ORTEAppSendThread.c
253 ORTESendData(ORTEDomain *d,ObjectEntryAID *objectEntryAID,Boolean meta);
255 ///////////////////////////////////////////////////////////////////////////////
258 RTPSHeaderCreate(u_int8_t *msg,HostId hid,AppId aid);
260 RTPSHeaderCheck(u_int8_t *msg,int32_t len,MessageInterpret *mi);
262 ///////////////////////////////////////////////////////////////////////////////
265 RTPSPad(u_int8_t *rtps_msg,MessageInterpret *mi);
267 ///////////////////////////////////////////////////////////////////////////////
270 RTPSInfoDST(u_int8_t *rtps_msg,MessageInterpret *mi);
272 ///////////////////////////////////////////////////////////////////////////////
275 RTPSInfoREPLY(u_int8_t *rtps_msg,MessageInterpret *mi);
277 ///////////////////////////////////////////////////////////////////////////////
280 RTPSInfoREPLYCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,
281 IPAddress ipaddress,Port port);
283 RTPSInfoSRC(u_int8_t *rtps_msg,MessageInterpret *mi);
285 ///////////////////////////////////////////////////////////////////////////////
288 RTPSInfoTSCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,NtpTime time);
290 RTPSInfoTS(u_int8_t *rtps_msg,MessageInterpret *mi);
292 ///////////////////////////////////////////////////////////////////////////////
295 RTPSVar(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
297 ///////////////////////////////////////////////////////////////////////////////
300 RTPSAckCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,
301 SequenceNumber *seqNumber,
302 ObjectId roid,ObjectId woid,Boolean f_bit);
304 RTPSAck(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
306 ///////////////////////////////////////////////////////////////////////////////
309 RTPSHeardBeatCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,
310 SequenceNumber *firstSeqNumber,SequenceNumber *lastSeqNumber,
311 ObjectId woid,ObjectId roid,Boolean f_bit);
313 RTPSHeardBeat(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi);
315 ///////////////////////////////////////////////////////////////////////////////
318 RTPSGap(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
320 ///////////////////////////////////////////////////////////////////////////////
323 RTPSIssueCreateHeader(u_int8_t *rtps_msg,u_int32_t max_msg_len,u_int32_t length,
324 ObjectId roid,ObjectId woid,SequenceNumber sn);
326 RTPSIssue(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
328 ///////////////////////////////////////////////////////////////////////////////
330 extern int gavl_cmp_ntp_time(const NtpTime *a,const NtpTime *b);
331 extern int gavl_cmp_sn(const SequenceNumber *a, const SequenceNumber *b);
332 extern int gavl_cmp_guid(const GUID_RTPS *a, const GUID_RTPS *b);
333 extern int gavl_cmp_str(const char *const *a,const char *const *b);
334 extern int getMaxMessageLength(ORTEDomain *d);
336 ///////////////////////////////////////////////////////////////////////////////
338 UL_LIST_CUST_DEC(CSTWriterCSChange,
341 GAVL_CUST_NODE_INT_DEC(CSTWriter,
342 CSTPublications, CSTWriter, GUID_RTPS,
343 cstWriter, node, guid, gavl_cmp_guid);
344 GAVL_CUST_NODE_INT_DEC(CSTRemoteReader,
345 CSTWriter, CSTRemoteReader, GUID_RTPS,
346 cstRemoteReader, node, guid, gavl_cmp_guid);
347 GAVL_CUST_NODE_INT_DEC(CSChangeForReader,
348 CSTRemoteReader, CSChangeForReader, SequenceNumber,
349 csChangeForReader, node, csChange->sn, gavl_cmp_sn);
352 CSTWriterInit(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object,
353 ObjectId oid,CSTWriterParams *params,ORTETypeRegister *typeRegister);
355 CSTWriterDelete(ORTEDomain *d,CSTWriter *cstWriter);
357 CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object,
360 CSTWriterDestroyRemoteReader(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
362 CSTWriterMakeGAP(ORTEDomain *d,CSTWriter *cstWriter,GUID_RTPS *guid);
364 CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
366 CSTWriterDestroyCSChangeForReader(CSTRemoteReader *cstRemoteReader,
367 CSChangeForReader *csChangeForReader,Boolean destroyCSChange);
369 CSTWriterDestroyCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
371 CSTWriterTryDestroyBestEffortIssue(CSTWriter *cstWriter);
373 CSTWriterRefreshAllCSChanges(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
375 ///////////////////////////////////////////////////////////////////////////////
376 // RTPSCSTWriterTimer.c
378 CSTWriterRefreshTimer(ORTEDomain *d,void *vcstWriter);
380 CSTWriterAnnounceTimer(ORTEDomain *d,void *vcstRemoteReader);
382 CSChangeForReaderUnderwayTimer(ORTEDomain *da,void *vcsChangeForReader);
384 CSTWriterSendBestEffortTimer(ORTEDomain *d,void *vcstRemoteReader);
386 CSTWriterSendStrictTimer(ORTEDomain *d,void *vcstRemoteReader);
388 CSTWriterSendTimer(ORTEDomain *d,void *vcstRemoteReader);
390 ///////////////////////////////////////////////////////////////////////////////
392 UL_LIST_CUST_DEC(CSTReaderCSChange,
395 GAVL_CUST_NODE_INT_DEC(CSTReader,
396 CSTSubscriptions, CSTReader, GUID_RTPS,
397 cstReader, node, guid, gavl_cmp_guid);
398 GAVL_CUST_NODE_INT_DEC(CSTRemoteWriter,
399 CSTReader, CSTRemoteWriter, GUID_RTPS,
400 cstRemoteWriter, node, guid, gavl_cmp_guid);
401 GAVL_CUST_NODE_INT_DEC(CSChangeFromWriter,
402 CSTRemoteWriter, CSChangeFromWriter, SequenceNumber,
403 csChangeFromWriter, node, csChange->sn, gavl_cmp_sn);
405 CSTReaderInit(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
406 ObjectId oid,CSTReaderParams *params,ORTETypeRegister *typeRegister);
408 CSTReaderDelete(ORTEDomain *d,CSTReader *cstReader);
409 extern CSTRemoteWriter *
410 CSTReaderAddRemoteWriter(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
413 CSTReaderDestroyRemoteWriter(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
415 CSTReaderAddCSChange(CSTRemoteWriter *cstRemoteWriter,CSChange *csChange);
417 CSTReaderDestroyCSChangeFromWriter(CSTRemoteWriter *cstRemoteWriter,
418 CSChangeFromWriter *csChangeFromWriter,Boolean keepCSChange);
420 CSTReaderDestroyCSChange(CSTRemoteWriter *cstRemoteWriter,SequenceNumber *sn,
421 Boolean keepCSChange);
423 CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter);
425 ///////////////////////////////////////////////////////////////////////////////
426 // RTPSCSTReaderProc.c
428 CSTReaderProcCSChanges(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
430 CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter,Boolean pullCalled);
432 ///////////////////////////////////////////////////////////////////////////////
433 // RTPSCSTReaderTimer.c
435 CSTReaderResponceTimer(ORTEDomain *d,void *vcstRemoteWriter);
437 CSTReaderQueryTimer(ORTEDomain *d,void *vcstRemoteWriter);
439 CSTReaderDeadlineTimer(ORTEDomain *d,void *vcstReader);
441 CSTReaderPersistenceTimer(ORTEDomain *d,void *vcstReader);
443 ///////////////////////////////////////////////////////////////////////////////
445 UL_LIST_CUST_DEC(Pattern,
446 PatternEntry,PatternNode,
449 ///////////////////////////////////////////////////////////////////////////////
450 // ORTETypeRegister.c
452 ORTETypeRegisterFind(ORTEDomain *d,const char *typeName);
454 ///////////////////////////////////////////////////////////////////////////////
456 GAVL_CUST_NODE_INT_DEC(PublicationList,
457 PSEntry, ObjectEntryOID, GUID_RTPS,
458 publications, psNode, guid, gavl_cmp_guid);
460 ORTEPublicationSendLocked(ORTEPublication *cstWriter);
462 ///////////////////////////////////////////////////////////////////////////////
465 ORTESubscriptionDestroyLocked(ORTESubscription *cstReader);
467 ///////////////////////////////////////////////////////////////////////////////
468 // ORTEPublicationTimer.c
470 PublicationCallBackTimer(ORTEDomain *d,void *vcstWriter);
472 ///////////////////////////////////////////////////////////////////////////////
473 // ORTESubscription.c
474 GAVL_CUST_NODE_INT_DEC(SubscriptionList,
475 PSEntry, ObjectEntryOID, GUID_RTPS,
476 subscriptions, psNode, guid, gavl_cmp_guid);
483 #endif /* _PROTOS_H */