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, /* prefix */
71 ObjectEntry, /* queue_t */
72 HTimFncRootNode, /* timer_t */
73 htimRoot, /* queue_field */
74 htim) /* timer_field */
76 htimerRoot_run_expired(ORTEDomain *d,
77 ul_htim_time_t *pact_time);
78 // htimerUnicastCommon
79 UL_HTIMER_DEC(htimerUnicastCommon, /* prefix */
80 ObjectEntryAID, /* queue_t */
81 HTimFncUserNode, /* timer_t */
82 htimUnicast.common, /* queue_field */
83 htim) /* timer_field */
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, /* prefix */
93 ObjectEntryAID, /* queue_t */
94 HTimFncUserNode, /* timer_t */
95 htimUnicast.sendMetatraffic, /* queue_field */
96 htim) /* timer_field */
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, /* prefix */
106 ObjectEntryAID, /* queue_t */
107 HTimFncUserNode, /* timer_t */
108 htimUnicast.sendUserData, /* queue_field */
109 htim) /* timer_field */
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, /* prefix */
146 ObjectEntryOID, /* head_t */
147 CSTRemoteReader, /* item_t */
148 multicastRemoteReaders, /* head_field */
149 multicastNode); /* node_field */
151 GAVL_CUST_NODE_INT_DEC(ObjectEntryHID, /* prefix */
152 ObjectEntry, /* root_t */
153 ObjectEntryHID, /* item_t */
155 objRoot, /* root_node */
156 hidNode, /* item_node */
158 gavl_cmp_int) /* cmp_fnc */
160 GAVL_CUST_NODE_INT_DEC(ObjectEntryAID, /* prefix */
161 ObjectEntryHID, /* root_t */
162 ObjectEntryAID, /* item_t */
164 aidRoot, /* root_node */
165 aidNode, /* item_node */
167 gavl_cmp_int) /* cmp_fnc */
169 GAVL_CUST_NODE_INT_DEC(ObjectEntryOID, /* prefix */
170 ObjectEntryAID, /* root_t */
171 ObjectEntryOID, /* item_t */
172 ObjectId, /* key_t */
173 oidRoot, /* root_node */
174 oidNode, /* item_node */
176 gavl_cmp_int) /* cmp_fnc */
179 objectEntryRefreshApp(ORTEDomain *d,ObjectEntryOID *objectEntryOID);
180 extern ObjectEntryOID *
181 objectEntryFind(ORTEDomain *d,GUID_RTPS *guid);
182 extern ObjectEntryOID *
183 objectEntryAdd(ORTEDomain *d,GUID_RTPS *guid,void *params);
185 objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID,Boolean destroy);
187 objectEntryDeleteAll(ORTEDomain *d,ObjectEntry *objectEntry);
189 objectEntryDump(ObjectEntry *objectEntry);
191 ///////////////////////////////////////////////////////////////////////////////
194 AppParamsInit(AppParams *ap);
196 PublParamsInit(ORTEPublProp *sp);
198 SubsParamsInit(ORTESubsProp *sp);
200 updateORTEAppInfo(AppParams *appParams,ORTEAppInfo *appInfo);
202 generateEvent(ORTEDomain *d,GUID_RTPS *guid,void *params,Boolean live);
204 getTypeApp(ORTEDomain *d,AppParams *ap,IPAddress senderIPAddress);
206 appSelfParamChanged(ORTEDomain *d,Boolean lock,Boolean unlock,
207 Boolean forWM,Boolean alive);
209 matchMulticastAddresses(ObjectEntryOID *o1,ObjectEntryOID *o2);
210 extern ObjectEntryOID *
211 getAppO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID,
213 extern ObjectEntryOID *
214 getSubsO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID,
217 ///////////////////////////////////////////////////////////////////////////////
220 eventAdd(ORTEDomain *d,ObjectEntryAID *objectEntryAID,HTimFncUserNode *fncNode,
221 int where,const char *name,EVH2 *func,pthread_rwlock_t *lock,
222 void *arg1,NtpTime *when_expire);
224 eventDetach(ORTEDomain *d,
225 ObjectEntryAID *objectEntryAID,
226 HTimFncUserNode *fncNode,
229 ///////////////////////////////////////////////////////////////////////////////
231 UL_LIST_CUST_DEC(CSChangeAttributes, /* prefix */
232 CSChange, /* head_t */
233 ParameterSequence, /* item_t */
234 attributes, /* head_field */
235 node); /* node_field */
237 parameterGetDataLength(CSChange *csChange);
239 parameterDelete(CSChange *csChange);
241 parameterCodeCodecFromCSChange(CSChange *csChange,CDR_Codec *cdrCodec);
243 parameterDecodeCodecToCSChange(CSChange *csChange,CDR_Codec *cdrCodec);
245 parameterUpdateCSChange(
246 CSChange *csChange,AppParams *ap,Boolean Manager);
248 parameterUpdateCSChangeFromPublication(CSChange *csChange,ORTEPublProp *pp);
250 parameterUpdateCSChangeFromSubscription(CSChange *csChange,ORTESubsProp *sp);
252 parameterUpdateApplication(CSChange *csChange,AppParams *ap);
254 parameterUpdatePublication(CSChange *csChange,ORTEPublProp *pp);
256 parameterUpdateSubscription(CSChange *csChange,ORTESubsProp *sp);
258 ///////////////////////////////////////////////////////////////////////////////
259 // objectEntryTimer.c
261 objectEntryPurgeTimer(ORTEDomain *d,void *vobjectEntryOID);
263 objectEntryExpirationTimer(ORTEDomain *d,void *vobjectEntryOID);
265 ///////////////////////////////////////////////////////////////////////////////
266 // ORTETypeRegister.c
267 GAVL_CUST_NODE_INT_DEC(ORTEType, /* prefix */
268 TypeEntry, /* root_t */
269 TypeNode, /* item_t */
270 const char *, /* key_t */
271 types, /* root_node */
272 node, /* item_node */
273 typeRegister.typeName, /* item_key */
274 gavl_cmp_str) /* cmp_fnc */
277 ///////////////////////////////////////////////////////////////////////////////
280 ORTEDomainWakeUpReceivingThread(ORTEDomain *d,sock_t *sock,uint16_t port);
282 ORTEDomainWakeUpSendingThread(ObjectEntry *objectEntry);
284 ///////////////////////////////////////////////////////////////////////////////
285 // ORTEAppRecvMetatrafficThread.c
287 ORTEAppRecvThread(TaskProp *tp);
290 ///////////////////////////////////////////////////////////////////////////////
291 // ORTEAppSendThread.c
293 ORTESendData(ORTEDomain *d,ObjectEntryAID *objectEntryAID,Boolean meta);
295 ORTEAppSendThread(TaskProp *tp);
297 ///////////////////////////////////////////////////////////////////////////////
300 RTPSHeaderCreate(CDR_Codec *cdrCodec,HostId hid,AppId aid);
302 RTPSHeaderCheck(CDR_Codec *cdrCodec,int32_t len,MessageInterpret *mi);
304 ///////////////////////////////////////////////////////////////////////////////
307 RTPSPad(CDR_Codec *cdrCodec,MessageInterpret *mi);
309 ///////////////////////////////////////////////////////////////////////////////
312 RTPSInfoDST(CDR_Codec *cdrCodec,MessageInterpret *mi);
314 ///////////////////////////////////////////////////////////////////////////////
317 RTPSInfoREPLYCreate(CDR_Codec *cdrCodec,IPAddress ipaddress,Port port);
319 RTPSInfoREPLY(CDR_Codec *cdrCodec,MessageInterpret *mi);
321 ///////////////////////////////////////////////////////////////////////////////
324 RTPSInfoSRC(CDR_Codec *cdrCodec,MessageInterpret *mi);
326 ///////////////////////////////////////////////////////////////////////////////
329 RTPSInfoTSCreate(CDR_Codec *cdrCodec,NtpTime time);
331 RTPSInfoTS(CDR_Codec *cdrCodec,MessageInterpret *mi);
333 ///////////////////////////////////////////////////////////////////////////////
336 RTPSVarCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange);
338 RTPSVar(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
340 ///////////////////////////////////////////////////////////////////////////////
343 RTPSAckCreate(CDR_Codec *cdrCodec,
344 SequenceNumber *seqNumber,
345 ObjectId roid,ObjectId woid,Boolean f_bit);
347 RTPSAck(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
349 ///////////////////////////////////////////////////////////////////////////////
352 RTPSHeartBeatCreate(CDR_Codec *cdrCodec,
353 SequenceNumber *fsn,SequenceNumber *lsn,
354 ObjectId roid,ObjectId woid,Boolean f_bit);
356 RTPSHeartBeat(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi);
358 ///////////////////////////////////////////////////////////////////////////////
361 RTPSGapCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange);
363 RTPSGap(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
365 ///////////////////////////////////////////////////////////////////////////////
368 RTPSIssueCreateHeader(CDR_Codec *cdrCodec,uint32_t length,
369 ObjectId roid,ObjectId woid,SequenceNumber sn);
371 RTPSIssue(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
373 ///////////////////////////////////////////////////////////////////////////////
375 extern int gavl_cmp_ntp_time(const NtpTime *a,const NtpTime *b);
376 extern int gavl_cmp_sn(const SequenceNumber *a, const SequenceNumber *b);
377 extern int gavl_cmp_guid(const GUID_RTPS *a, const GUID_RTPS *b);
378 extern int gavl_cmp_str(const char *const *a,const char *const *b);
380 ///////////////////////////////////////////////////////////////////////////////
382 UL_LIST_CUST_DEC(CSTWriterCSChange, /* prefix */
383 CSTWriter, /* head_t */
384 CSChange, /* item_t */
385 csChanges, /* head_field */
386 nodeList); /* node_field */
388 UL_LIST_CUST_DEC(CSChangeParticipant, /* prefix */
389 CSChange, /* head_t */
390 CSChangeForReader, /* item_t */
391 writerParticipants, /* head_field */
392 participantNode); /* node_field */
394 GAVL_CUST_NODE_INT_DEC(CSTWriter, /* prefix */
395 CSTPublications, /* root_t */
396 CSTWriter, /* item_t */
397 GUID_RTPS, /* key_t */
398 cstWriter, /* root_node */
399 node, /* item_node */
401 gavl_cmp_guid); /* cmp_fnc */
403 GAVL_CUST_NODE_INT_DEC(CSTRemoteReader, /* prefix */
404 CSTWriter, /* root_t */
405 CSTRemoteReader, /* item_t */
406 GUID_RTPS, /* key_t */
407 cstRemoteReader, /* root_node */
408 node, /* item_node */
410 gavl_cmp_guid); /* cmp_fnc */
412 GAVL_CUST_NODE_INT_DEC(CSChangeForReader, /* prefix */
413 CSTRemoteReader, /* root_t */
414 CSChangeForReader, /* item_t */
415 SequenceNumber, /* key_t */
416 csChangeForReader, /* root_node */
417 node, /* item_node */
418 csChange->sn, /* item_key */
419 gavl_cmp_sn); /* cmp_fnc */
422 CSTWriterInit(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object,
423 ObjectId oid,CSTWriterParams *params,ORTETypeRegister *typeRegister);
425 CSTWriterDelete(ORTEDomain *d,CSTWriter *cstWriter);
426 extern CSTRemoteReader *
427 CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *pobject,
428 ObjectId oid,ObjectEntryOID *sobject);
430 CSTWriterDestroyRemoteReader(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
432 CSTWriterMakeGAP(ORTEDomain *d,CSTWriter *cstWriter,GUID_RTPS *guid);
434 CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
436 CSTWriterDestroyCSChangeForReader(CSChangeForReader *csChangeForReader,
437 Boolean destroyCSChange);
439 CSTWriterDestroyCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
441 CSTWriterTryDestroyBestEffortIssue(CSTWriter *cstWriter);
443 CSTWriterRefreshAllCSChanges(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
445 CSTWriterCSChangeForReaderNewState(CSChangeForReader *csChangeForReader);
447 CSTWriterMulticast(CSChangeForReader *csChangeForReader);
449 ///////////////////////////////////////////////////////////////////////////////
450 // RTPSCSTWriterTimer.c
452 CSTWriterRegistrationTimer(ORTEDomain *d,void *vcstWriter);
454 CSTWriterRefreshTimer(ORTEDomain *d,void *vcstWriter);
456 CSTWriterAnnounceTimer(ORTEDomain *d,void *vcstRemoteReader);
458 CSChangeForReaderUnderwayTimer(ORTEDomain *da,void *vcsChangeForReader);
460 CSTWriterSendBestEffortTimer(ORTEDomain *d,void *vcstRemoteReader);
462 CSTWriterSendStrictTimer(ORTEDomain *d,void *vcstRemoteReader);
464 CSTWriterSendTimer(ORTEDomain *d,void *vcstRemoteReader);
466 ///////////////////////////////////////////////////////////////////////////////
468 UL_LIST_CUST_DEC(CSTReaderCSChange, /* prefix */
469 CSTReader, /* head_t */
470 CSChange, /* item_t */
471 csChanges, /* head_field */
472 nodeList); /* node_field */
474 GAVL_CUST_NODE_INT_DEC(CSTReader, /* prefix */
475 CSTSubscriptions, /* root_t */
476 CSTReader, /* item_t */
477 GUID_RTPS, /* key_t */
478 cstReader, /* root_node */
479 node, /* item_node */
481 gavl_cmp_guid); /* cmp_fnc */
483 GAVL_CUST_NODE_INT_DEC(CSTRemoteWriter, /* prefix */
484 CSTReader, /* root_t */
485 CSTRemoteWriter, /* item_t */
486 GUID_RTPS, /* key_t */
487 cstRemoteWriter, /* root_node */
488 node, /* item_node */
490 gavl_cmp_guid); /* cmp_fnc */
492 GAVL_CUST_NODE_INT_DEC(CSChangeFromWriter,/* prefix */
493 CSTRemoteWriter, /* root_t */
494 CSChangeFromWriter,/* item_t */
495 SequenceNumber, /* key_t */
496 csChangeFromWriter,/* root_node */
497 node, /* item_node */
498 csChange->sn, /* item_key */
499 gavl_cmp_sn); /* cmp_fnc */
501 CSTReaderInit(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
502 ObjectId oid,CSTReaderParams *params,ORTETypeRegister *typeRegister);
504 CSTReaderDelete(ORTEDomain *d,CSTReader *cstReader);
505 extern CSTRemoteWriter *
506 CSTReaderAddRemoteWriter(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
509 CSTReaderDestroyRemoteWriter(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
511 CSTReaderAddCSChange(CSTRemoteWriter *cstRemoteWriter,CSChange *csChange);
513 CSTReaderDestroyCSChangeFromWriter(CSTRemoteWriter *cstRemoteWriter,
514 CSChangeFromWriter *csChangeFromWriter,Boolean keepCSChange);
516 CSTReaderDestroyCSChange(CSTRemoteWriter *cstRemoteWriter,SequenceNumber *sn,
517 Boolean keepCSChange);
519 CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter);
521 ///////////////////////////////////////////////////////////////////////////////
522 // RTPSCSTReaderProc.c
524 CSTReaderProcCSChanges(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
526 CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter,Boolean pullCalled);
528 ///////////////////////////////////////////////////////////////////////////////
529 // RTPSCSTReaderTimer.c
531 CSTReaderResponceTimer(ORTEDomain *d,void *vcstRemoteWriter);
533 CSTReaderQueryTimer(ORTEDomain *d,void *vcstRemoteWriter);
535 CSTReaderDeadlineTimer(ORTEDomain *d,void *vcstReader);
537 CSTReaderPersistenceTimer(ORTEDomain *d,void *vcstReader);
539 ///////////////////////////////////////////////////////////////////////////////
542 ORTEDomainCreate(int domain, ORTEDomainProp *prop,
543 ORTEDomainAppEvents *events,Boolean manager);
545 ORTEDomainDestroy(ORTEDomain *d,Boolean manager);
547 ///////////////////////////////////////////////////////////////////////////////
549 UL_LIST_CUST_DEC(Pattern, /* prefix */
550 PatternEntry, /* head_t */
551 PatternNode, /* item_t */
552 patterns, /* head_field */
553 node); /* node_field */
555 ///////////////////////////////////////////////////////////////////////////////
556 // ORTETypeRegister.c
558 ORTETypeRegisterFind(ORTEDomain *d,const char *typeName);
560 ///////////////////////////////////////////////////////////////////////////////
562 GAVL_CUST_NODE_INT_DEC(PublicationList, /* prefix */
563 PSEntry, /* root_t */
564 ObjectEntryOID, /* item_t */
565 GUID_RTPS, /* key_t */
566 publications, /* root_node */
567 psNode, /* item_node */
569 gavl_cmp_guid); /* cmp_fnc */
571 ORTEPublicationSendLocked(ORTEPublication *cstWriter,
572 ORTEPublicationSendParam *psp);
574 ///////////////////////////////////////////////////////////////////////////////
577 ORTESubscriptionDestroyLocked(ORTESubscription *cstReader);
579 ///////////////////////////////////////////////////////////////////////////////
580 // ORTEPublicationTimer.c
582 PublicationCallBackTimer(ORTEDomain *d,void *vcstWriter);
584 ///////////////////////////////////////////////////////////////////////////////
585 // ORTESubscription.c
586 GAVL_CUST_NODE_INT_DEC(SubscriptionList, /* prefix */
587 PSEntry, /* root_t */
588 ObjectEntryOID, /* item_t */
589 GUID_RTPS, /* key_t */
590 subscriptions, /* root_node */
591 psNode, /* item_node */
593 gavl_cmp_guid); /* cmp_fnc */
599 #endif /* _PROTOS_H */