]> rtime.felk.cvut.cz Git - orte.git/blob - orte/include/protos.h
New ORTE version 0.3.0 committed
[orte.git] / orte / include / protos.h
1 /*
2  *  $Id: protos.h,v 0.0.0.1             2003/08/21 
3  *
4  *  AUTHOR: Petr Smolik                 petr.smolik@wo.cz
5  *
6  *  ORTE - OCERA Real-Time Ethernet     http://www.ocera.org/
7  *  --------------------------------------------------------------------
8  *
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.
13  *  
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.
18  *  
19  */
20
21 #ifndef _PROTOS_H
22 #define _PROTOS_H
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
28 ///////////////////////////////////////////////////////////////////////////////
29 // sock.c
30 extern int
31 sock_start(void);
32 extern void
33 sock_finish(void);
34 extern int
35 sock_init_udp(sock_t *sock);
36 extern void
37 sock_cleanup(sock_t *sock);
38 extern int
39 sock_setsockopt(sock_t *sock,int level,int optname,const char *optval, int optlen);
40 extern int
41 sock_getsockopt(sock_t *sock,int level,int optname,char *optval, int *optlen);
42 extern int
43 sock_bind(sock_t *sock,uint16_t port);
44 extern int
45 sock_recvfrom(sock_t *sock, void *buf, int max_len,struct sockaddr_in *des,int des_len);
46 extern int
47 sock_sendto(sock_t *sock, void *buf, int len,struct sockaddr_in *des,int des_len);
48 extern int
49 sock_ioctl(sock_t *sock, long cmd, unsigned long *arg);
50 extern int
51 sock_get_local_interfaces(sock_t *sock,ORTEIFProp *IFProp,char *IFCount);
52
53 ///////////////////////////////////////////////////////////////////////////////
54 // conv.c
55 extern int
56 getStringPart(char *string,char divChar,int *iterator,char *buff);
57
58 ///////////////////////////////////////////////////////////////////////////////
59 // htimerNtp.c
60 // htimerRoot
61 UL_HTIMER_DEC(htimerRoot, \
62       ObjectEntry, \
63       HTimFncRootNode, \
64       htimRoot, \
65       htim) 
66 extern void
67 htimerRoot_run_expired(ORTEDomain *d, 
68       ul_htim_time_t *pact_time);
69 // htimerUnicastCommon
70 UL_HTIMER_DEC(htimerUnicastCommon, \
71       ObjectEntryAID, \
72       HTimFncUserNode, \
73       htimUnicast.common, \
74       htim) 
75 extern void
76 htimerUnicastCommon_update_root_timer(ObjectEntry *objectEntry,
77       ObjectEntryAID *objectEntryAID);
78 extern void 
79 htimerUnicastCommon_run_expired(ORTEDomain *d,
80       ObjectEntryAID *objectEntryAID, 
81       ul_htim_time_t *pact_time);
82 // htimerUnicastSendMetatraffic
83 UL_HTIMER_DEC(htimerUnicastSendMetatraffic, \
84       ObjectEntryAID, \
85       HTimFncUserNode, \
86       htimUnicast.sendMetatraffic, \
87       htim) 
88 extern void
89 htimerUnicastSendMetatraffic_update_root_timer(ObjectEntry *objectEntry,
90       ObjectEntryAID *objectEntryAID);
91 extern void 
92 htimerUnicastSendMetatraffic_run_expired(ORTEDomain *d,
93       ObjectEntryAID *objectEntryAID, 
94       ul_htim_time_t *pact_time);
95 // htimerUnicastSendUserData
96 UL_HTIMER_DEC(htimerUnicastSendUserData, \
97       ObjectEntryAID, \
98       HTimFncUserNode, \
99       htimUnicast.sendUserData, \
100       htim) 
101 extern void
102 htimerUnicastSendUserData_update_root_timer(ObjectEntry *objectEntry,
103       ObjectEntryAID *objectEntryAID);
104 extern void 
105 htimerUnicastSendUserData_run_expired(ORTEDomain *d,
106       ObjectEntryAID *objectEntryAID, 
107       ul_htim_time_t *pact_time);
108 extern NtpTime
109 getActualNtpTime(void);
110
111
112 ///////////////////////////////////////////////////////////////////////////////
113 // debug.c
114 extern void
115 db_init(const char *logfile, const char *options);
116 extern void
117 debug_options(const char *options);
118 extern void
119 db_print(const char *format,...);
120 extern void
121 debug_open_log(const char *logfile);
122 #ifdef ENABLE_MEM_CHECK
123 extern void * 
124 mem_check_malloc(size_t size);
125 extern void 
126 mem_check_free(void *ptr);
127 #endif
128
129 ///////////////////////////////////////////////////////////////////////////////
130 // fnmatch.c
131 extern int
132 fnmatch(const char *__pattern,const char *__string,int __flags);
133
134 ///////////////////////////////////////////////////////////////////////////////
135 // objectEntry.c
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)
145 extern void
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);
151 extern int
152 objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID,Boolean destroy);
153 extern void
154 objectEntryDeleteAll(ORTEDomain *d,ObjectEntry *objectEntry);
155 extern void
156 objectEntryDump(ObjectEntry *objectEntry);
157
158 ///////////////////////////////////////////////////////////////////////////////
159 // ObjectUtils.c
160 extern void 
161 AppParamsInit(AppParams *ap);
162 extern void 
163 PublParamsInit(ORTEPublProp *sp);
164 extern void 
165 SubsParamsInit(ORTESubsProp *sp);
166 extern void
167 updateORTEAppInfo(AppParams *appParams,ORTEAppInfo *appInfo);
168 extern Boolean
169 generateEvent(ORTEDomain *d,GUID_RTPS *guid,void *params,Boolean live);
170 extern Boolean
171 getTypeApp(ORTEDomain *d,AppParams *ap,IPAddress senderIPAddress);
172 extern void 
173 appSelfParamChanged(ORTEDomain *d,Boolean lock,Boolean unlock,
174    Boolean forWM,Boolean alive);
175 extern Boolean
176 matchMulticastAddresses(ObjectEntryOID *o1,ObjectEntryOID *o2);
177 extern ObjectEntryOID *
178 getAppO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID,
179     AppParams *ap);
180 extern ObjectEntryOID *
181 getSubsO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID,
182     ORTESubsProp *sp);
183
184 ///////////////////////////////////////////////////////////////////////////////
185 // event.c
186 extern int32_t 
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);
190 extern int32_t
191 eventDetach(ORTEDomain *d,               
192             ObjectEntryAID *objectEntryAID,
193             HTimFncUserNode *fncNode,
194             int where);
195
196 ///////////////////////////////////////////////////////////////////////////////
197 // parameter.c
198 UL_LIST_CUST_DEC(CSChangeAttributes,
199                  CSChange,ParameterSequence,
200                  attributes,node);
201 extern int
202 parameterGetDataLength(CSChange *csChange);
203 extern int
204 parameterDelete(CSChange *csChange);
205 extern int
206 parameterCodeCodecFromCSChange(CSChange *csChange,CDR_Codec *cdrCodec);
207 extern int
208 parameterDecodeCodecToCSChange(CSChange *csChange,CDR_Codec *cdrCodec);
209 extern int
210 parameterUpdateCSChange(
211      CSChange *csChange,AppParams *ap,Boolean Manager);
212 extern int
213 parameterUpdateCSChangeFromPublication(CSChange *csChange,ORTEPublProp *pp);
214 extern int
215 parameterUpdateCSChangeFromSubscription(CSChange *csChange,ORTESubsProp *sp);
216 extern int
217 parameterUpdateApplication(CSChange *csChange,AppParams *ap);
218 extern int
219 parameterUpdatePublication(CSChange *csChange,ORTEPublProp *pp);
220 extern int
221 parameterUpdateSubscription(CSChange *csChange,ORTESubsProp *sp);
222
223 ///////////////////////////////////////////////////////////////////////////////
224 // objectEntryTimer.c
225 extern int
226 objectEntryPurgeTimer(ORTEDomain *d,void *vobjectEntryOID);
227 extern int
228 objectEntryExpirationTimer(ORTEDomain *d,void *vobjectEntryOID);
229
230 ///////////////////////////////////////////////////////////////////////////////
231 // ORTETypeRegister.c
232 GAVL_CUST_NODE_INT_DEC(ORTEType, TypeEntry, TypeNode, const char *,
233     types, node, typeRegister.typeName, gavl_cmp_str)
234
235
236 ///////////////////////////////////////////////////////////////////////////////
237 // ORTEThreadUtils.c
238 extern void
239 ORTEDomainWakeUpReceivingThread(ORTEDomain *d,sock_t *sock,uint16_t port);
240 extern void
241 ORTEDomainWakeUpSendingThread(ObjectEntry *objectEntry);
242
243 ///////////////////////////////////////////////////////////////////////////////
244 // ORTEAppRecvMetatrafficThread.c
245 extern void 
246 ORTEAppRecvThread(TaskProp *tp);
247
248
249 ///////////////////////////////////////////////////////////////////////////////
250 // ORTEAppSendThread.c
251 extern void 
252 ORTESendData(ORTEDomain *d,ObjectEntryAID *objectEntryAID,Boolean meta);
253 extern void 
254 ORTEAppSendThread(TaskProp *tp);
255
256 ///////////////////////////////////////////////////////////////////////////////
257 // RTPSHeader.c
258 extern int
259 RTPSHeaderCreate(CDR_Codec *cdrCodec,HostId hid,AppId aid);
260 extern int 
261 RTPSHeaderCheck(CDR_Codec *cdrCodec,int32_t len,MessageInterpret *mi);
262
263 ///////////////////////////////////////////////////////////////////////////////
264 // RTPSPad.c
265 extern void 
266 RTPSPad(CDR_Codec *cdrCodec,MessageInterpret *mi);
267
268 ///////////////////////////////////////////////////////////////////////////////
269 // RTPSInfoDST.c
270 extern void 
271 RTPSInfoDST(CDR_Codec *cdrCodec,MessageInterpret *mi);
272
273 ///////////////////////////////////////////////////////////////////////////////
274 // RTPSInfoREPLY.c
275 extern int 
276 RTPSInfoREPLYCreate(CDR_Codec *cdrCodec,IPAddress ipaddress,Port port);
277 void 
278 RTPSInfoREPLY(CDR_Codec *cdrCodec,MessageInterpret *mi);
279
280 ///////////////////////////////////////////////////////////////////////////////
281 // RTPSInfoSRC.c
282 extern void 
283 RTPSInfoSRC(CDR_Codec *cdrCodec,MessageInterpret *mi);
284
285 ///////////////////////////////////////////////////////////////////////////////
286 // RTPSInfoTS.c
287 extern int
288 RTPSInfoTSCreate(CDR_Codec *cdrCodec,NtpTime time);
289 extern void 
290 RTPSInfoTS(CDR_Codec *cdrCodec,MessageInterpret *mi);
291
292 ///////////////////////////////////////////////////////////////////////////////
293 // RTPSVar.c
294 extern int 
295 RTPSVarCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange);
296 extern void 
297 RTPSVar(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
298
299 ///////////////////////////////////////////////////////////////////////////////
300 // RTPSAck.c
301 extern int
302 RTPSAckCreate(CDR_Codec *cdrCodec,
303     SequenceNumber *seqNumber,
304     ObjectId roid,ObjectId woid,Boolean f_bit);
305 extern void 
306 RTPSAck(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
307
308 ///////////////////////////////////////////////////////////////////////////////
309 // RTPSHeardBeat.c
310 extern int 
311 RTPSHeartBeatCreate(CDR_Codec *cdrCodec,
312     SequenceNumber *fsn,SequenceNumber *lsn,
313     ObjectId roid,ObjectId woid,Boolean f_bit);
314 extern void 
315 RTPSHeartBeat(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi);
316
317 ///////////////////////////////////////////////////////////////////////////////
318 // RTPSGap.c
319 extern int 
320 RTPSGapCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange);
321 void 
322 RTPSGap(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
323
324 ///////////////////////////////////////////////////////////////////////////////
325 // RTPSIssue.c
326 extern int
327 RTPSIssueCreateHeader(CDR_Codec *cdrCodec,uint32_t length,
328     ObjectId roid,ObjectId woid,SequenceNumber sn);
329 extern void 
330 RTPSIssue(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
331
332 ///////////////////////////////////////////////////////////////////////////////
333 // RTPSUtils.c
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);
338
339 ///////////////////////////////////////////////////////////////////////////////
340 // RTPSCSTWriter.c
341 UL_LIST_CUST_DEC(CSTWriterCSChange,
342                  CSTWriter,CSChange,
343                  csChanges,nodeList);
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);
356
357 extern void
358 CSTWriterInit(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object,
359     ObjectId oid,CSTWriterParams *params,ORTETypeRegister *typeRegister);
360 extern void 
361 CSTWriterDelete(ORTEDomain *d,CSTWriter *cstWriter);
362 extern CSTRemoteReader *
363 CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *pobject,
364     ObjectId oid,ObjectEntryOID *sobject);
365 extern void 
366 CSTWriterDestroyRemoteReader(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
367 extern void
368 CSTWriterMakeGAP(ORTEDomain *d,CSTWriter *cstWriter,GUID_RTPS *guid);
369 extern void
370 CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
371 extern void
372 CSTWriterDestroyCSChangeForReader(CSChangeForReader *csChangeForReader,
373    Boolean destroyCSChange);
374 extern void 
375 CSTWriterDestroyCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
376 extern Boolean
377 CSTWriterTryDestroyBestEffortIssue(CSTWriter *cstWriter);
378 extern void
379 CSTWriterRefreshAllCSChanges(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
380 extern int
381 CSTWriterCSChangeForReaderNewState(CSChangeForReader *csChangeForReader);
382 extern void
383 CSTWriterMulticast(CSChangeForReader *csChangeForReader);
384
385 ///////////////////////////////////////////////////////////////////////////////
386 // RTPSCSTWriterTimer.c
387 extern int 
388 CSTWriterRegistrationTimer(ORTEDomain *d,void *vcstWriter);
389 extern int
390 CSTWriterRefreshTimer(ORTEDomain *d,void *vcstWriter);
391 extern int 
392 CSTWriterAnnounceTimer(ORTEDomain *d,void *vcstRemoteReader);
393 extern int 
394 CSChangeForReaderUnderwayTimer(ORTEDomain *da,void *vcsChangeForReader);
395 extern int
396 CSTWriterSendBestEffortTimer(ORTEDomain *d,void *vcstRemoteReader);
397 extern int
398 CSTWriterSendStrictTimer(ORTEDomain *d,void *vcstRemoteReader);
399 extern int
400 CSTWriterSendTimer(ORTEDomain *d,void *vcstRemoteReader);
401         
402 ///////////////////////////////////////////////////////////////////////////////
403 // RTPSCSTReader.c
404 UL_LIST_CUST_DEC(CSTReaderCSChange,
405                  CSTReader,CSChange,
406                  csChanges,nodeList);
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);
416 extern void 
417 CSTReaderInit(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
418     ObjectId oid,CSTReaderParams *params,ORTETypeRegister *typeRegister);
419 extern void 
420 CSTReaderDelete(ORTEDomain *d,CSTReader *cstReader);
421 extern CSTRemoteWriter *
422 CSTReaderAddRemoteWriter(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
423     ObjectId oid);
424 extern void 
425 CSTReaderDestroyRemoteWriter(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
426 extern void
427 CSTReaderAddCSChange(CSTRemoteWriter *cstRemoteWriter,CSChange *csChange);
428 extern void
429 CSTReaderDestroyCSChangeFromWriter(CSTRemoteWriter *cstRemoteWriter,
430     CSChangeFromWriter *csChangeFromWriter,Boolean keepCSChange);
431 extern void 
432 CSTReaderDestroyCSChange(CSTRemoteWriter *cstRemoteWriter,SequenceNumber *sn,
433     Boolean keepCSChange);
434 extern void 
435 CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter);
436         
437 ///////////////////////////////////////////////////////////////////////////////
438 // RTPSCSTReaderProc.c
439 extern void 
440 CSTReaderProcCSChanges(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
441 extern void 
442 CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter,Boolean pullCalled);
443
444 ///////////////////////////////////////////////////////////////////////////////
445 // RTPSCSTReaderTimer.c
446 extern int
447 CSTReaderResponceTimer(ORTEDomain *d,void *vcstRemoteWriter);
448 extern int 
449 CSTReaderQueryTimer(ORTEDomain *d,void *vcstRemoteWriter);
450 extern int 
451 CSTReaderDeadlineTimer(ORTEDomain *d,void *vcstReader);
452 extern int 
453 CSTReaderPersistenceTimer(ORTEDomain *d,void *vcstReader);
454
455 ///////////////////////////////////////////////////////////////////////////////
456 // ORTEDomain.c
457 ORTEDomain * 
458 ORTEDomainCreate(int domain, ORTEDomainProp *prop,
459                ORTEDomainAppEvents *events,Boolean manager);
460 Boolean
461 ORTEDomainDestroy(ORTEDomain *d,Boolean manager);
462
463 ///////////////////////////////////////////////////////////////////////////////
464 // ORTEDomainApp.c
465 UL_LIST_CUST_DEC(Pattern,
466                  PatternEntry,PatternNode,
467                  patterns,node);
468                                                    
469 ///////////////////////////////////////////////////////////////////////////////
470 // ORTETypeRegister.c
471 extern Boolean
472 ORTETypeRegisterFind(ORTEDomain *d,const char *typeName);
473
474 ///////////////////////////////////////////////////////////////////////////////
475 // ORTEPublication.c
476 GAVL_CUST_NODE_INT_DEC(PublicationList, 
477                        PSEntry, ObjectEntryOID, GUID_RTPS,
478                        publications, psNode, guid, gavl_cmp_guid);
479 extern int
480 ORTEPublicationSendLocked(ORTEPublication *cstWriter,
481     ORTEPublicationSendParam *psp);
482
483 ///////////////////////////////////////////////////////////////////////////////
484 // ORTESubcription.c
485 extern int
486 ORTESubscriptionDestroyLocked(ORTESubscription *cstReader);
487
488 ///////////////////////////////////////////////////////////////////////////////
489 // ORTEPublicationTimer.c
490 extern int
491 PublicationCallBackTimer(ORTEDomain *d,void *vcstWriter);
492
493 ///////////////////////////////////////////////////////////////////////////////
494 // ORTESubscription.c
495 GAVL_CUST_NODE_INT_DEC(SubscriptionList, 
496                        PSEntry, ObjectEntryOID, GUID_RTPS,
497                        subscriptions, psNode, guid, gavl_cmp_guid);
498
499                        
500 #ifdef __cplusplus
501 } /* extern "C"*/
502 #endif
503
504 #endif /* _PROTOS_H */