the current version of zeppelin seems to make the
assumption that the data directs it sets up are going
to be the data default, see handle_connect().
handle_connect() never checks to see if the other
client might have already setup a data direct and be
the default data direct. according to the spec a
client should not handle frames coming in from a non
default data direct. apparently most implementations
ignore this however a few (cisco routers in particular)
obey this part of the spec. zeppelin's call setups
tend to slower due to the number of user space
transactions involving atmsigd. this means that
zeppelin will sometimes "overwrite" the correct default
the attached patch fixes this problem--
. handle_connect() now checks the incoming call's atm
address. if its not the default data direct and a call
already exists the connection is closed.
. handle_accept() checks the incoming call to see if it
should be the default data direct. if not, the
connection is attached as a receive only. if this
would be the default data direct, the it gets attached
as such and the old data direct (which zeppelin
probably setup) is closed.
. since zeppelin may not setup the connection to a
client, it needs to watch for the READY_IND on
connections and upon recept, send a flush request to
switch over to the new path.