]> rtime.felk.cvut.cz Git - orte.git/blob - orte/include/protos.h
ba9dbe45d8deddf45fb8ee03ea06a00530a95b70
[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 optname,const char *optval, int optlen);
40 extern int
41 sock_getsockopt(sock_t *sock,int optname,char *optval, int *optlen);
42 extern int
43 sock_bind(sock_t *sock,u_int16_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, int cmd, int *arg);
50 extern int
51 sock_get_local_interfaces(sock_t *sock,ORTEIFProp *IFProp,char *IFCount);
52
53 ///////////////////////////////////////////////////////////////////////////////
54 // conv.c
55 extern void 
56 conv_u16(u_int16_t *x,char ef);
57 extern void 
58 conv_u32(u_int32_t *x,char ef);
59 extern void 
60 conv_sn(SequenceNumber *sn,char ef);
61 extern void 
62 conv_ntp(NtpTime *ntp,char ef);
63
64 ///////////////////////////////////////////////////////////////////////////////
65 // htimerNtp.c
66 // htimerRoot
67 UL_HTIMER_DEC(htimerRoot, \
68       ObjectEntry, \
69       HTimFncRootNode, \
70       htimRoot, \
71       htim) 
72 extern void
73 htimerRoot_run_expired(ORTEDomain *d, 
74       ul_htim_time_t *pact_time);
75 // htimerUnicastCommon
76 UL_HTIMER_DEC(htimerUnicastCommon, \
77       ObjectEntryAID, \
78       HTimFncUserNode, \
79       htimUnicast.common, \
80       htim) 
81 extern void
82 htimerUnicastCommon_update_root_timer(ObjectEntry *objectEntry,
83       ObjectEntryAID *objectEntryAID);
84 extern void 
85 htimerUnicastCommon_run_expired(ORTEDomain *d,
86       ObjectEntryAID *objectEntryAID, 
87       ul_htim_time_t *pact_time);
88 // htimerUnicastSendMetatraffic
89 UL_HTIMER_DEC(htimerUnicastSendMetatraffic, \
90       ObjectEntryAID, \
91       HTimFncUserNode, \
92       htimUnicast.sendMetatraffic, \
93       htim) 
94 extern void
95 htimerUnicastSendMetatraffic_update_root_timer(ObjectEntry *objectEntry,
96       ObjectEntryAID *objectEntryAID);
97 extern void 
98 htimerUnicastSendMetatraffic_run_expired(ORTEDomain *d,
99       ObjectEntryAID *objectEntryAID, 
100       ul_htim_time_t *pact_time);
101 // htimerUnicastSendUserData
102 UL_HTIMER_DEC(htimerUnicastSendUserData, \
103       ObjectEntryAID, \
104       HTimFncUserNode, \
105       htimUnicast.sendUserData, \
106       htim) 
107 extern void
108 htimerUnicastSendUserData_update_root_timer(ObjectEntry *objectEntry,
109       ObjectEntryAID *objectEntryAID);
110 extern void 
111 htimerUnicastSendUserData_run_expired(ORTEDomain *d,
112       ObjectEntryAID *objectEntryAID, 
113       ul_htim_time_t *pact_time);
114 extern NtpTime
115 getActualNtpTime(void);
116
117
118 ///////////////////////////////////////////////////////////////////////////////
119 // debug.c
120 extern void
121 db_init(const char *logfile, const char *options);
122 extern void
123 debug_options(const char *options);
124 extern void
125 db_print(const char *format,...);
126 extern void
127 debug_open_log(const char *logfile);
128 #ifdef ENABLE_MEM_CHECK
129 extern void * 
130 mem_check_malloc(size_t size);
131 extern void 
132 mem_check_free(void *ptr);
133 #endif
134
135 ///////////////////////////////////////////////////////////////////////////////
136 // fnmatch.c
137 extern int
138 fnmatch(const char *__pattern,const char *__string,int __flags);
139
140 ///////////////////////////////////////////////////////////////////////////////
141 // objectEntry.c
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)
148 extern void
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);
154 extern int
155 objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID);
156 extern void
157 objectEntryDeleteAll(ORTEDomain *d,ObjectEntry *objectEntry);
158 extern void
159 objectEntryDump(ObjectEntry *objectEntry);
160
161 ///////////////////////////////////////////////////////////////////////////////
162 // ObjectUtils.c
163 extern void 
164 AppParamsInit(AppParams *ap);
165 extern void 
166 PublParamsInit(ORTEPublProp *sp);
167 extern void 
168 SubsParamsInit(ORTESubsProp *sp);
169 extern void
170 updateORTEAppInfo(AppParams *appParams,ORTEAppInfo *appInfo);
171 extern Boolean
172 generateEvent(ORTEDomain *d,GUID_RTPS *guid,void *params,Boolean live);
173 extern Boolean
174 getTypeApp(ORTEDomain *d,AppParams *ap,IPAddress senderIPAddress);
175 extern void 
176 appSelfParamChanged(ORTEDomain *d,Boolean lock,Boolean unlock,Boolean forWM);
177
178 ///////////////////////////////////////////////////////////////////////////////
179 // event.c
180 extern int32_t 
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);
184 extern int32_t
185 eventDetach(ORTEDomain *d,               
186             ObjectEntryAID *objectEntryAID,
187             HTimFncUserNode *fncNode,
188             int where);
189
190 ///////////////////////////////////////////////////////////////////////////////
191 // parameter.c
192 UL_LIST_CUST_DEC(CSChangeAttributes,
193                  CSChange,ParameterSequence,
194                  attributes,node);
195 extern int
196 parameterDelete(CSChange *csChange);
197 extern int
198 parameterCodeStreamFromCSChange(CSChange *csChange,
199     u_int8_t *rtps_msg,u_int32_t max_msg_len);
200 extern int
201 parameterDecodeStreamToCSChange(CSChange *csChange,u_int8_t *rtps_msg,
202     u_int16_t submsg_len,u_int8_t needByteSwap);
203 extern int
204 parameterUpdateCSChange(
205      CSChange *csChange,AppParams *ap,Boolean Manager);
206 extern int
207 parameterUpdateCSChangeFromPublication(CSChange *csChange,ORTEPublProp *pp);
208 extern int
209 parameterUpdateCSChangeFromSubscription(CSChange *csChange,ORTESubsProp *sp);
210 extern int
211 parameterUpdateApplication(CSChange *csChange,AppParams *ap);
212 extern int
213 parameterUpdatePublication(CSChange *csChange,ORTEPublProp *pp);
214 extern int
215 parameterUpdateSubscription(CSChange *csChange,ORTESubsProp *sp);
216
217 ///////////////////////////////////////////////////////////////////////////////
218 // objectEntryTimer.c
219 extern int
220 objectEntryPurgeTimer(ORTEDomain *d,void *vobjectEntryOID);
221 extern int
222 objectEntryExpirationTimer(ORTEDomain *d,void *vobjectEntryOID);
223
224 ///////////////////////////////////////////////////////////////////////////////
225 // ORTETypeRegister.c
226 GAVL_CUST_NODE_INT_DEC(ORTEType, TypeEntry, TypeNode, char *,
227     types, node, typeRegister.typeName, gavl_cmp_str)
228
229
230 ///////////////////////////////////////////////////////////////////////////////
231 // ORTEThreadUtils.c
232 extern void
233 ORTEDomainWakeUpReceivingThread(ORTEDomain *d,sock_t *sock,u_int16_t port);
234 extern void
235 ORTEDomainWakeUpSendingThread(ObjectEntry *objectEntry);
236
237 ///////////////////////////////////////////////////////////////////////////////
238 // ORTEAppRecvMetatrafficThread.c
239 extern void 
240 ORTEAppRecvMetatrafficThread(ORTEDomain *d);
241
242 ///////////////////////////////////////////////////////////////////////////////
243 // ORTEAppRecvUserdataThread.c
244 extern void 
245 ORTEAppRecvUserdataThread(ORTEDomain *d);
246
247 ///////////////////////////////////////////////////////////////////////////////
248 // ORTEAppSendThread.c
249 extern void 
250 ORTESendData(ORTEDomain *d,ObjectEntryAID *objectEntryAID,Boolean meta);
251
252 ///////////////////////////////////////////////////////////////////////////////
253 // RTPSHeader.c
254 extern int16_t 
255 RTPSHeaderCreate(u_int8_t *msg,HostId hid,AppId aid);
256 extern int16_t 
257 RTPSHeaderCheck(u_int8_t *msg,int32_t len,MessageInterpret *mi);
258
259 ///////////////////////////////////////////////////////////////////////////////
260 // RTPSPad.c
261 extern void 
262 RTPSPad(u_int8_t *rtps_msg,MessageInterpret *mi);
263
264 ///////////////////////////////////////////////////////////////////////////////
265 // RTPSInfoDST.c
266 extern void 
267 RTPSInfoDST(u_int8_t *rtps_msg,MessageInterpret *mi);
268
269 ///////////////////////////////////////////////////////////////////////////////
270 // RTPSInfoREPLY.c
271 extern void 
272 RTPSInfoREPLY(u_int8_t *rtps_msg,MessageInterpret *mi);
273
274 ///////////////////////////////////////////////////////////////////////////////
275 // RTPSInfoREPLY.c
276 extern int32_t 
277 RTPSInfoREPLYCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,
278     IPAddress ipaddress,Port port);
279 extern void 
280 RTPSInfoSRC(u_int8_t *rtps_msg,MessageInterpret *mi);
281
282 ///////////////////////////////////////////////////////////////////////////////
283 // RTPSInfoTS.c
284 extern int32_t 
285 RTPSInfoTSCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,NtpTime time);
286 extern void 
287 RTPSInfoTS(u_int8_t *rtps_msg,MessageInterpret *mi);
288
289 ///////////////////////////////////////////////////////////////////////////////
290 // RTPSVar.c
291 extern void 
292 RTPSVar(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
293
294 ///////////////////////////////////////////////////////////////////////////////
295 // RTPSAck.c
296 extern int32_t 
297 RTPSAckCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,
298     SequenceNumber *seqNumber,
299     ObjectId roid,ObjectId woid,Boolean f_bit);
300 extern void 
301 RTPSAck(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
302
303 ///////////////////////////////////////////////////////////////////////////////
304 // RTPSHeardBeat.c
305 extern int 
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);
309 extern void 
310 RTPSHeardBeat(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi);
311
312 ///////////////////////////////////////////////////////////////////////////////
313 // RTPSGap.c
314 extern void 
315 RTPSGap(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
316
317 ///////////////////////////////////////////////////////////////////////////////
318 // RTPSIssue.c
319 extern int32_t
320 RTPSIssueCreateHeader(u_int8_t *rtps_msg,u_int32_t max_msg_len,u_int32_t length,
321     ObjectId roid,ObjectId woid,SequenceNumber sn);
322 extern void 
323 RTPSIssue(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
324
325 ///////////////////////////////////////////////////////////////////////////////
326 // RTPSUtils.c
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(char *const *a,char *const *b);
331 extern int getMaxMessageLength(ORTEDomain *d);
332
333 ///////////////////////////////////////////////////////////////////////////////
334 // RTPSCSTWriter.c
335 UL_LIST_CUST_DEC(CSTWriterCSChange,
336                  CSTWriter,CSChange,
337                  csChanges,nodeList);
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);
347
348 extern void
349 CSTWriterInit(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object,
350     ObjectId oid,CSTWriterParams *params,ORTETypeRegister *typeRegister);
351 extern void 
352 CSTWriterDelete(ORTEDomain *d,CSTWriter *cstWriter);
353 extern void
354 CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object,
355     ObjectId oid);
356 extern void 
357 CSTWriterDestroyRemoteReader(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
358 extern void
359 CSTWriterMakeGAP(ORTEDomain *d,CSTWriter *cstWriter,GUID_RTPS *guid);
360 extern void
361 CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
362 extern void
363 CSTWriterDestroyCSChangeForReader(CSTRemoteReader *cstRemoteReader,
364     CSChangeForReader   *csChangeForReader,Boolean destroyCSChange);
365 extern void 
366 CSTWriterDestroyCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
367 extern Boolean
368 CSTWriterTryDestroyBestEffortIssue(CSTWriter *cstWriter);
369 extern void
370 CSTWriterRefreshAllCSChanges(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
371
372 ///////////////////////////////////////////////////////////////////////////////
373 // RTPSCSTWriterTimer.c
374 extern int
375 CSTWriterRefreshTimer(ORTEDomain *d,void *vcstWriter);
376 extern int 
377 CSTWriterAnnounceTimer(ORTEDomain *d,void *vcstRemoteReader);
378 extern int 
379 CSChangeForReaderUnderwayTimer(ORTEDomain *da,void *vcsChangeForReader);
380 extern int
381 CSTWriterSendBestEffortTimer(ORTEDomain *d,void *vcstRemoteReader);
382 extern int
383 CSTWriterSendStrictTimer(ORTEDomain *d,void *vcstRemoteReader);
384 extern int
385 CSTWriterSendTimer(ORTEDomain *d,void *vcstRemoteReader);
386         
387 ///////////////////////////////////////////////////////////////////////////////
388 // RTPSCSTReader.c
389 UL_LIST_CUST_DEC(CSTReaderCSChange,
390                  CSTReader,CSChange,
391                  csChanges,nodeList);
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);
401 extern void 
402 CSTReaderInit(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
403     ObjectId oid,CSTReaderParams *params,ORTETypeRegister *typeRegister);
404 extern void 
405 CSTReaderDelete(ORTEDomain *d,CSTReader *cstReader);
406 extern CSTRemoteWriter *
407 CSTReaderAddRemoteWriter(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *object,
408     ObjectId oid);
409 extern void 
410 CSTReaderDestroyRemoteWriter(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
411 extern void
412 CSTReaderAddCSChange(CSTRemoteWriter *cstRemoteWriter,CSChange *csChange);
413 extern void
414 CSTReaderDestroyCSChangeFromWriter(CSTRemoteWriter *cstRemoteWriter,
415     CSChangeFromWriter *csChangeFromWriter,Boolean keepCSChange);
416 extern void 
417 CSTReaderDestroyCSChange(CSTRemoteWriter *cstRemoteWriter,SequenceNumber *sn,
418     Boolean keepCSChange);
419 extern void 
420 CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter);
421         
422 ///////////////////////////////////////////////////////////////////////////////
423 // RTPSCSTReaderProc.c
424 extern void 
425 CSTReaderProcCSChanges(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter);
426 extern void 
427 CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter,Boolean pullCalled);
428
429 ///////////////////////////////////////////////////////////////////////////////
430 // RTPSCSTReaderTimer.c
431 extern int
432 CSTReaderResponceTimer(ORTEDomain *d,void *vcstRemoteWriter);
433 extern int 
434 CSTReaderQueryTimer(ORTEDomain *d,void *vcstRemoteWriter);
435 extern int 
436 CSTReaderDeadlineTimer(ORTEDomain *d,void *vcstReader);
437 extern int 
438 CSTReaderPersistenceTimer(ORTEDomain *d,void *vcstReader);
439
440 ///////////////////////////////////////////////////////////////////////////////
441 // ORTEDomainApp.c
442 UL_LIST_CUST_DEC(SubscriptionPattern,
443                  PatternEntry,SubscriptionPatternNode,
444                  subscription,node);
445
446
447 ///////////////////////////////////////////////////////////////////////////////
448 // ORTETypeRegister.c
449 extern Boolean
450 ORTETypeRegisterFind(ORTEDomain *d,char *typeName);
451
452 ///////////////////////////////////////////////////////////////////////////////
453 // ORTEPublication.c
454 GAVL_CUST_NODE_INT_DEC(PublicationList, 
455                        PSEntry, ObjectEntryOID, GUID_RTPS,
456                        publications, psNode, guid, gavl_cmp_guid);
457 extern int
458 ORTEPublicationSendLocked(ORTEPublication *cstWriter);
459
460 ///////////////////////////////////////////////////////////////////////////////
461 // ORTEPublicationTimer.c
462 extern int
463 PublicationCallBackTimer(ORTEDomain *d,void *vcstWriter);
464
465 ///////////////////////////////////////////////////////////////////////////////
466 // ORTESubscription.c
467 GAVL_CUST_NODE_INT_DEC(SubscriptionList, 
468                        PSEntry, ObjectEntryOID, GUID_RTPS,
469                        subscriptions, psNode, guid, gavl_cmp_guid);
470
471                        
472 #ifdef __cplusplus
473 } /* extern "C"*/
474 #endif
475
476 #endif /* _PROTOS_H */