summaryrefslogtreecommitdiff
path: root/TAO/examples/PluggableUDP/DIOP/README
blob: 3f00555185c3e95b62d8ee7bf0a3511ef9901b77 (plain)
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