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 ///////////////////////////////////////////////////////////////////////////////
67 UL_HTIMER_DEC(htimerRoot, \
73 htimerRoot_run_expired(ORTEDomain *d,
74 ul_htim_time_t *pact_time);
75 // htimerUnicastCommon
76 UL_HTIMER_DEC(htimerUnicastCommon, \
82 htimerUnicastCommon_update_root_timer(ObjectEntry *objectEntry,
83 ObjectEntryAID *objectEntryAID);
85 htimerUnicastCommon_run_expired(ORTEDomain *d,
86 ObjectEntryAID *objectEntryAID,
87 ul_htim_time_t *pact_time);
88 // htimerUnicastSendMetatraffic
89 UL_HTIMER_DEC(htimerUnicastSendMetatraffic, \
92 htimUnicast.sendMetatraffic, \
95 htimerUnicastSendMetatraffic_update_root_timer(ObjectEntry *objectEntry,
96 ObjectEntryAID *objectEntryAID);
98 htimerUnicastSendMetatraffic_run_expired(ORTEDomain *d,
99 ObjectEntryAID *objectEntryAID,
100 ul_htim_time_t *pact_time);
101 // htimerUnicastSendUserData
102 UL_HTIMER_DEC(htimerUnicastSendUserData, \
105 htimUnicast.sendUserData, \
108 htimerUnicastSendUserData_update_root_timer(ObjectEntry *objectEntry,
109 ObjectEntryAID *objectEntryAID);
111 htimerUnicastSendUserData_run_expired(ORTEDomain *d,
112 ObjectEntryAID *objectEntryAID,
113 ul_htim_time_t *pact_time);
115 getActualNtpTime(void);
118 ///////////////////////////////////////////////////////////////////////////////
121 db_init(const char *logfile, const char *options);
123 debug_options(const char *options);
125 db_print(const char *format,...);
127 debug_open_log(const char *logfile);
128 #ifdef ENABLE_MEM_CHECK
130 mem_check_malloc(size_t size);
132 mem_check_free(void *ptr);
135 ///////////////////////////////////////////////////////////////////////////////
138 fnmatch(const char *__pattern,const char *__string,int __flags);
140 ///////////////////////////////////////////////////////////////////////////////
142 GAVL_CUST_NODE_INT_DEC(ObjectEntryHID, ObjectEntry, ObjectEntryHID, HostId,
143 objRoot, hidNode, hid, gavl_cmp_int)
144 GAVL_CUST_NODE_INT_DEC(ObjectEntryAID, ObjectEntryHID, ObjectEntryAID, AppId,
145 aidRoot, aidNode, aid, gavl_cmp_int)
146 GAVL_CUST_NODE_INT_DEC(ObjectEntryOID, ObjectEntryAID, ObjectEntryOID, ObjectId,
147 oidRoot, oidNode, oid, gavl_cmp_int)
149 objectEntryRefreshApp(ORTEDomain *d,ObjectEntryOID *objectEntryOID);
150 extern ObjectEntryOID *
151 objectEntryFind(ORTEDomain *d,GUID_RTPS *guid);
152 extern ObjectEntryOID *
153 objectEntryAdd(ORTEDomain *d,GUID_RTPS *guid,void *params);
155 objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID);
157 objectEntryDeleteAll(ORTEDomain *d,ObjectEntry *objectEntry);
159 objectEntryDump(ObjectEntry *objectEntry);
161 ///////////////////////////////////////////////////////////////////////////////
164 AppParamsInit(AppParams *ap);
166 PublParamsInit(ORTEPublProp *sp);
168 SubsParamsInit(ORTESubsProp *sp);
170 updateORTEAppInfo(AppParams *appParams,ORTEAppInfo *appInfo);
172 generateEvent(ORTEDomain *d,GUID_RTPS *guid,void *params,Boolean live);
174 getTypeApp(ORTEDomain *d,AppParams *ap,IPAddress senderIPAddress);
176 appSelfParamChanged(ORTEDomain *d,Boolean lock,Boolean unlock,Boolean forWM);
178 ///////////////////////////////////////////////////////////////////////////////
181 eventAdd(ORTEDomain *d,ObjectEntryAID *objectEntryAID,HTimFncUserNode *fncNode,
182 int where,const char *name,EVH2 *func,pthread_rwlock_t *lock,
183 void *arg1,NtpTime *when_expire);
185 eventDetach(ORTEDomain *d,
186 ObjectEntryAID *objectEntryAID,
187 HTimFncUserNode *fncNode,
190 ///////////////////////////////////////////////////////////////////////////////
192 UL_LIST_CUST_DEC(CSChangeAttributes,
193 CSChange,ParameterSequence,
196 parameterDelete(CSChange *csChange);
198 parameterCodeStreamFromCSChange(CSChange *csChange,
199 u_int8_t *rtps_msg,u_int32_t max_msg_len);
201 parameterDecodeStreamToCSChange(CSChange *csChange,u_int8_t *rtps_msg,
202 u_int16_t submsg_len,u_int8_t needByteSwap);
204 parameterUpdateCSChange(
205 CSChange *csChange,AppParams *ap,Boolean Manager);
207 parameterUpdateCSChangeFromPublication(CSChange *csChange,ORTEPublProp *pp);
209 parameterUpdateCSChangeFromSubscription(CSChange *csChange,ORTESubsProp *sp);
211 parameterUpdateApplication(CSChange *csChange,AppParams *ap);
213 parameterUpdatePublication(CSChange *csChange,ORTEPublProp *pp);
215 parameterUpdateSubscription(CSChange *csChange,ORTESubsProp *sp);
217 ///////////////////////////////////////////////////////////////////////////////
218 // objectEntryTimer.c
220 objectEntryPurgeTimer(ORTEDomain *d,void *vobjectEntryOID);
222 objectEntryExpirationTimer(ORTEDomain *d,void *vobjectEntryOID);
224 ///////////////////////////////////////////////////////////////////////////////
225 // ORTETypeRegister.c
226 GAVL_CUST_NODE_INT_DEC(ORTEType, TypeEntry, TypeNode, const char *,
227 types, node, typeRegister.typeName, gavl_cmp_str)
230 ///////////////////////////////////////////////////////////////////////////////
233 ORTEDomainWakeUpReceivingThread(ORTEDomain *d,sock_t *sock,u_int16_t port);
235 ORTEDomainWakeUpSendingThread(ObjectEntry *objectEntry);
237 ///////////////////////////////////////////////////////////////////////////////
238 // ORTEAppRecvMetatrafficThread.c
240 ORTEAppRecvMetatrafficThread(ORTEDomain *d);
242 ///////////////////////////////////////////////////////////////////////////////
243 // ORTEAppRecvUserdataThread.c
245 ORTEAppRecvUserdataThread(ORTEDomain *d);
247 ///////////////////////////////////////////////////////////////////////////////
248 // ORTEAppSendThread.c
250 ORTESendData(ORTEDomain *d,ObjectEntryAID *objectEntryAID,Boolean meta);
252 ///////////////////////////////////////////////////////////////////////////////
255 RTPSHeaderCreate(u_int8_t *msg,HostId hid,AppId aid);
257 RTPSHeaderCheck(u_int8_t *msg,int32_t len,MessageInterpret *mi);
259 ///////////////////////////////////////////////////////////////////////////////
262 RTPSPad(u_int8_t *rtps_msg,MessageInterpret *mi);
264 ///////////////////////////////////////////////////////////////////////////////
267 RTPSInfoDST(u_int8_t *rtps_msg,MessageInterpret *mi);
269 ///////////////////////////////////////////////////////////////////////////////
272 RTPSInfoREPLY(u_int8_t *rtps_msg,MessageInterpret *mi);
274 ///////////////////////////////////////////////////////////////////////////////
277 RTPSInfoREPLYCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,
278 IPAddress ipaddress,Port port);
280 RTPSInfoSRC(u_int8_t *rtps_msg,MessageInterpret *mi);
282 ///////////////////////////////////////////////////////////////////////////////
285 RTPSInfoTSCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,NtpTime time);
287 RTPSInfoTS(u_int8_t *rtps_msg,MessageInterpret *mi);
289 ///////////////////////////////////////////////////////////////////////////////
292 RTPSVar(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
294 ///////////////////////////////////////////////////////////////////////////////
297 RTPSAckCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,
298 SequenceNumber *seqNumber,
299 ObjectId roid,ObjectId woid,Boolean f_bit);
301 RTPSAck(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
303 ///////////////////////////////////////////////////////////////////////////////
306 RTPSHeardBeatCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,
307 SequenceNumber *firstSeqNumber,SequenceNumber *lastSeqNumber,
308 ObjectId woid,ObjectId roid,Boolean f_bit);
310 RTPSHeardBeat(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi);
312 ///////////////////////////////////////////////////////////////////////////////
315 RTPSGap(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
317 ///////////////////////////////////////////////////////////////////////////////
320 RTPSIssueCreateHeader(u_int8_t *rtps_msg,u_int32_t max_msg_len,u_int32_t length,
321 ObjectId roid,ObjectId woid,SequenceNumber sn);
323 RTPSIssue(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
325 ///////////////////////////////////////////////////////////////////////////////
327 extern int gavl_cmp_ntp_time(const NtpTime *a,const NtpTime *b);
328 extern int gavl_cmp_sn(const SequenceNumber *a, const SequenceNumber *b);
329 extern int gavl_cmp_guid(const GUID_RTPS *a, const GUID_RTPS *b);
330 extern int gavl_cmp_str(const char *const *a,const char *const *b);
331 extern int getMaxMessageLength(ORTEDomain *d);
333 ///////////////////////////////////////////////////////////////////////////////
335 UL_LIST_CUST_DEC(CSTWriterCSChange,
338 GAVL_CUST_NODE_INT_DEC(CSTWriter,
339 CSTPublications, CSTWriter, GUID_RTPS,
340 cstWriter, node, guid, gavl_cmp_guid);
341 GAVL_CUST_NODE_INT_DEC(CSTRemoteReader,
342 CSTWriter, CSTRemoteReader, GUID_RTPS,
343 cstRemoteReader, node, guid, gavl_cmp_guid);
344 GAVL_CUST_NODE_INT_DEC(CSChangeForReader,
345 CSTRemoteReader, CSChangeForReader, SequenceNumber,
346 csChangeForReader, node, csChange->sn, gavl_cmp_sn);
349 CSTWriterInit(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object,
350 ObjectId oid,CSTWriterParams *params,ORTETypeRegister *typeRegister);
352 CSTWriterDelete(ORTEDomain *d,CSTWriter *cstWriter);
354 CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object,
357 CSTWriterDestroyRemoteReader(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
359 CSTWriterMakeGAP(ORTEDomain *d,CSTWriter *cstWriter,GUID_RTPS *guid);
361 CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
363 CSTWriterDestroyCSChangeForReader(CSTRemoteReader *cstRemoteReader,
364 CSChangeForReader *csChangeForReader,Boolean destroyCSChange);
366 CSTWriterDestroyCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
368 CSTWriterTryDestroyBestEffortIssue(CSTWriter *cstWriter);
370 CSTWriterRefreshAllCSChanges(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
372 ///////////////////////////////////////////////////////////////////////////////
373 // RTPSCSTWriterTimer.c
375 CSTWriterRefreshTimer(ORTEDomain *d,void *vcstWriter);
377 CSTWriterAnnounceTimer(ORTEDomain *d,void *vcstRemoteReader);
379 CSChangeForReaderUnderwayTimer(ORTEDomain *da,void *vcsChangeForReader);
381 CSTWriterSendBestEffortTimer(ORTEDomain *d,void *vcstRemoteReader);
383 CSTWriterSendStrictTimer(ORTEDomain *d,void *vcstRemoteReader);
385 CSTWriterSendTimer(ORTEDomain *d,void *vcstRemoteReader);
387 ///////////////////////////////////////////////////////////////////////////////
389 UL_LIST_CUST_DEC(CSTReaderCSChange,
392 GAVL_CUST_NODE_INT_DEC(CSTReader,
393 CSTSubscriptions, CSTReader, GUID_RTPS,
394 cstReader, node, guid, gavl_cmp_guid);
395 GAVL_CUST_NODE_INT_DEC(CSTRemoteWriter,
396 CSTReader, CSTRemoteWriter, GUID_RTPS,
397 cstRemoteWriter, node, guid, gavl_cmp_guid);
398 GAVL_CUST_NODE_INT_DEC(CSChangeFromWriter,
399 CSTRemoteWriter, CSChangeFromWriter, SequenceNumber,
400 csChangeFromWriter, node, csChange->sn, gavl_cmp_sn);
402 CSTReaderInit(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
403 ObjectId oid,CSTReaderParams *params,ORTETypeRegister *typeRegister);
405 CSTReaderDelete(ORTEDomain *d,CSTReader *cstReader);
406 extern CSTRemoteWriter *
407 CSTReaderAddRemoteWriter(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
410 CSTReaderDestroyRemoteWriter(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
412 CSTReaderAddCSChange(CSTRemoteWriter *cstRemoteWriter,CSChange *csChange);
414 CSTReaderDestroyCSChangeFromWriter(CSTRemoteWriter *cstRemoteWriter,
415 CSChangeFromWriter *csChangeFromWriter,Boolean keepCSChange);
417 CSTReaderDestroyCSChange(CSTRemoteWriter *cstRemoteWriter,SequenceNumber *sn,
418 Boolean keepCSChange);
420 CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter);
422 ///////////////////////////////////////////////////////////////////////////////
423 // RTPSCSTReaderProc.c
425 CSTReaderProcCSChanges(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
427 CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter,Boolean pullCalled);
429 ///////////////////////////////////////////////////////////////////////////////
430 // RTPSCSTReaderTimer.c
432 CSTReaderResponceTimer(ORTEDomain *d,void *vcstRemoteWriter);
434 CSTReaderQueryTimer(ORTEDomain *d,void *vcstRemoteWriter);
436 CSTReaderDeadlineTimer(ORTEDomain *d,void *vcstReader);
438 CSTReaderPersistenceTimer(ORTEDomain *d,void *vcstReader);
440 ///////////////////////////////////////////////////////////////////////////////
442 UL_LIST_CUST_DEC(Pattern,
443 PatternEntry,PatternNode,
446 ///////////////////////////////////////////////////////////////////////////////
447 // ORTETypeRegister.c
449 ORTETypeRegisterFind(ORTEDomain *d,const char *typeName);
451 ///////////////////////////////////////////////////////////////////////////////
453 GAVL_CUST_NODE_INT_DEC(PublicationList,
454 PSEntry, ObjectEntryOID, GUID_RTPS,
455 publications, psNode, guid, gavl_cmp_guid);
457 ORTEPublicationSendLocked(ORTEPublication *cstWriter);
459 ///////////////////////////////////////////////////////////////////////////////
462 ORTESubscriptionDestroyLocked(ORTESubscription *cstReader);
464 ///////////////////////////////////////////////////////////////////////////////
465 // ORTEPublicationTimer.c
467 PublicationCallBackTimer(ORTEDomain *d,void *vcstWriter);
469 ///////////////////////////////////////////////////////////////////////////////
470 // ORTESubscription.c
471 GAVL_CUST_NODE_INT_DEC(SubscriptionList,
472 PSEntry, ObjectEntryOID, GUID_RTPS,
473 subscriptions, psNode, guid, gavl_cmp_guid);
480 #endif /* _PROTOS_H */