1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
DIOP - UDP Based Pluggable Protocol
===================================
This directory contains all of the code needed to use the UDP
Pluggable Protocol (DIOP). It should be considered a work in progress
and will eventually be integrated in with the other standard pluggable
protocols in tao/Strategies.
Notes on the DIOP implementation:
- The DIOP implemenation uses unconnected UDP sockets.
- The server side implementation bypasses the actual TAO acceptor
and opens always a UDP socket on start-up.
- The address of that UDP socket can be configured via
e.g. -ORBEndpoint diop://:1303
If nothing is specified, the implementation will select a port
and open a socket on all network interfaces.
(This is the default ORB behavior and can be overwritten using
the -ORBEndpoint switch)
- Because no connections - no state - exist, all client requests
from different clients arrive at the same socket!
- The client side DIOP implementation bypasses the actual
TAO connector. It installs a connection handler on the first
invocation on a remote CORBA object.
DIOP Installation:
- Compile TAO/examples/PluggableUDP/DIOP to create the DIOP library.
- Uncomment the following line in TAO/tao/corbafwd.h:
#define TAO_TAG_UDP_PROFILE 0x54414f04U /* UDP */
- The application using DIOP should have a svc.conf file with the
following entry:
dynamic DIOP_Factory Service_Object * TAO_DIOP:_make_TAO_DIOP_Protocol_Factory() ""
static Resource_Factory "-ORBProtocolFactory DIOP_Factory"
Issues:
- Optimization of DIOP_Transport::{send,recv}
- Default port is the same on client and server, therefore
the client ports need to be explicitly set by -ORBEndpoint option.
Maybe there is a way to find free ports?
- Remove commented out code from DIOP_* files.
Limitations:
- No preconnections are supported.
- Only single threaded servers are supported as we cache parts of a UDP
packet. If we would allow multiple threads this buffer could be corrupted.
- No thread-per connection is supported.
- Requests from multiple clients are received on the same socket.
Disclaimer:
This UDP Pluggable Protocol has been developed for Siemens base station
software. We assumed certain requriements, which do not fit everybody, so
be careful applying this pluggable protocol to your application.
The assumptions we had:
- Almost 100% reliable UDP communication as we use IP over ATM
(Even if it would be less reliable you can manage it by using one-way
request operations and one-way response operations in combination with
application level timeouts.)
- TCP got ruled out as it behaves to sluggish on sudden disconnections, we
needed to be able to plug & play CPU cards without impacting any ORB
communicating to that CPU.
(This is the main reason why we do not keep any state in the client side
of the Pluggable Protocol)
- As we use a special hardware configuration we defined that every GIOP message
(and therefore every IDL signature) message is shorter than 4kB, which is the
maximum length of a UDP packet anyway.
(Support for fragmentation, as GIOP 1.2 supports it might help, this is
a future option)
Appendix:
The client understands the following options:
-d
-k <ior>
-t <timeout in ms>
-i <iterations>
Comments, Suggestions, or Feedback:
mailto:Michael.Kircher@mchp.siemens.de or,
mailto:John.Mackenzie.extern@icn.siemens.de or,
mailto:fhunleth@cs.wustl.edu
|