ken@cs.cornell.edu (Ken Birman) (04/16/91)
A user at Bellcore asked if I could re-post the changes need to get
isis_remote and isis_probe working in V2.1 (he is aware that they are
slow compared with the V3.0 version, but just wants to make sure he
understands the interface).
1) in cl_inter.c, you want the code to look like this (changes flagged with
***)
lines 393->425 of cl_inter.c/net_send(...):
while(!aptr_isnull(to))
{
if(!addr_ismine(to))
{
register qnode *qp = pg_find(IOQS, to);
register ioq *ioqp;
if(qp == 0)
{
*** register msgid = msg_getid(mp);
*** address save;
*** save = my_address;
*** if(exmode == -1 && (msgid&1)
*** && to->addr_site == my_site_no && addr_isrclient(to))
{
/* ISIS -> remote_xxx */
register message *rmsg = msg_newmsg();
msg_addfield(rmsg, FLD_ISNULLREP, 0, 0, 0);
msg_setid(rmsg, msgid);
my_address = *to;
fbcast_l("mR", msg_getreplyto(mp), GENERIC_RCV_REPLY, rm
sg, 0);
}
my_address = save;
if(callback)
(*callback)(to, arg0, arg1);
}
else
{
ioqp = qp->qu_ioq;
if(addr_cmp(to, &ioqp->io_claddr) == 0)
(void)intercl_trytosend(mp, ioqp, FALSE, callback, arg0,
arg1);
else if(callback)
(*callback)(to, arg0, arg1);
}
}
++to;
}
As for isis_probe, in clib/cl_isis.c, make the routine look like this:
static probe_tid, probe_freq;
static void
isis_send_hello()
{
register message *msg;
address addr;
msg = msg_newmsg();
addr = PRO(CL_HELLO);
isis_send(&addr, msg);
msg_delete(msg);
probe_tid = isis_timeout_reschedule(probe_tid, probe_freq*1000, isis_sen
d_hello, NULLARG, NULLARG);
}
int
isis_probe(freq, timeout)
int freq, timeout;
{
register message *msg;
address addr;
static tid;
ISIS_ENTER();
msg = msg_gen("%d,%d", freq, timeout);
addr = PRO(CL_PROBE);
isis_send(&addr, msg);
probe_freq = freq;
probe_tid = isis_timeout_reschedule(probe_tid, probe_freq*1000, isis_sen
d_hello, NULLARG, NULLARG);
msg_delete(msg);
ISIS_RETURN(0);
}
... note that failures will not be detected until the probe interval
expires.
--
Kenneth P. Birman E-mail: ken@cs.cornell.edu
4105 Upson Hall, Dept. of Computer Science TEL: 607 255-9199 (office)
Cornell University Ithaca, NY 14853 (USA) FAX: 607 255-4428