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