[comp.protocols.appletalk] Hayes InterBridge and KIP 01/88 problem.

rapatel@porthos.rutgers.edu ( Rakesh Patel) (05/09/88)

I am attempting to get a Hayes Interbridge working properly with a
kbox (KFPS-2) running KIP 01/88. However, I can get everything to work
properly under KIP 09/87.

Here is a description:

	When hooking a Mac to the network with the Kbox, I get the
zone list sometimes appearing, and sometimes not appearing under
chooser. Repeatedly opening and closing the chooser results in zones
being recognized about 1/3 of the time.  When attempting to look for
servers or printers, I sometimes get a response from a server, but
many times no response at all. All network services were equally bad
in response. 


	When hooking the Mac onto the other net, (with the interbridge
appropriately configured), I never get a zone list under chooser.

	I made sure to aviod having running machines up when
configuring the network numbers, and that the kbox and Interbridge
absolutely agreed on the same appletalk network number. 

	The problem seems to be more of a KIP <-> Interbridge software
problem. (We have multiple InterBridges, Kboxes, and connectors, and
have ruled out hardware problems.)

	Anyone gotten it to work successfully? Any ideas/suggestions?


						Rakesh Patel.

cck@CUNIXC.COLUMBIA.EDU (Charlie C. Kim) (05/12/88)

KIP 01/88's zip query handling is messed up.  My fault: this got
introducted when the code was made to handle long and short ddp in
zipinput.  The patch follows.

The patch also fixes another minor problem where the count returned
might have been incorrect.  It has been tested against Kinetic's
ethertalk gateway and Pacer's VMS gateway.  (By the way, Pacer does
the same thing as AlisaTalk -- it setups a an AppleTalk Bridge to
front end the VMS system).

Charlie C. Kim
User Services
Columbia University

%%%%%%%START OF PATCH%%%%%%%%%%
*** /tmp/,RCSt1024362	Wed May 11 14:38:33 1988
--- rtmp.c	Tue May 10 17:02:39 1988
***************
*** 588,594
    /* else pure ZIP */
    if (ddp.type != ddpZIP)
      goto drop;
!   z = (struct ZIP *)ip->p_off+lapSize+ddpSize;
    if (z->command == zipQuery)
      goto query;
  #ifdef notdef

--- 588,594 -----
    /* else pure ZIP */
    if (ddp.type != ddpZIP)
      goto drop;
!   z = (struct ZIP *)(ip->p_off+lapSize+ddpSize);
    if (z->command == zipQuery)
      goto query;
  #ifdef notdef
***************
*** 602,608
      goto drop;
    po = op->p_off + lapSize + ddpSize + sizeof(struct ZIP);
    sp = (u_short *)(z+1);
!   for (count = 0, len = 0 ; count < z->count && len < 512 ; count++) {
      u.s = i = *sp++;		/* network */
      for (ar = &aroute[0]; ar < &aroute[NAROUTE] ; ++ar)
        if (i == ar->net && ar->zone)

--- 602,608 -----
      goto drop;
    po = op->p_off + lapSize + ddpSize + sizeof(struct ZIP);
    sp = (u_short *)(z+1);
!   for (j=0, count = 0, len = 0 ; j < z->count && len < 512 ; j++) {
      u.s = i = *sp++;		/* network */
      for (ar = &aroute[0]; ar < &aroute[NAROUTE] ; ++ar) {
        if (i == ar->net && ar->zone)
***************
*** 604,610
    sp = (u_short *)(z+1);
    for (count = 0, len = 0 ; count < z->count && len < 512 ; count++) {
      u.s = i = *sp++;		/* network */
!     for (ar = &aroute[0]; ar < &aroute[NAROUTE] ; ++ar)
        if (i == ar->net && ar->zone)
  	break;
      if (ar >= &aroute[NAROUTE])

--- 604,610 -----
    sp = (u_short *)(z+1);
    for (j=0, count = 0, len = 0 ; j < z->count && len < 512 ; j++) {
      u.s = i = *sp++;		/* network */
!     for (ar = &aroute[0]; ar < &aroute[NAROUTE] ; ++ar) {
        if (i == ar->net && ar->zone)
  	break;
      }
***************
*** 607,612
      for (ar = &aroute[0]; ar < &aroute[NAROUTE] ; ++ar)
        if (i == ar->net && ar->zone)
  	break;
      if (ar >= &aroute[NAROUTE])
        continue;			/* no match */
      pi = azone[ar->zone];

--- 607,613 -----
      for (ar = &aroute[0]; ar < &aroute[NAROUTE] ; ++ar) {
        if (i == ar->net && ar->zone)
  	break;
+     }
      if (ar >= &aroute[NAROUTE])
        continue;			/* no match */
      count++;			/* found one */
***************
*** 609,614
  	break;
      if (ar >= &aroute[NAROUTE])
        continue;			/* no match */
      pi = azone[ar->zone];
      *po++ = u.c[0];		/* copy in network */
      *po++ = u.c[1];

--- 610,616 -----
      }
      if (ar >= &aroute[NAROUTE])
        continue;			/* no match */
+     count++;			/* found one */
      pi = azone[ar->zone];
      *po++ = u.c[0];		/* copy in network */
      *po++ = u.c[1];
***************
*** 613,620
      *po++ = u.c[0];		/* copy in network */
      *po++ = u.c[1];
      bcopy(pi, po, *pi + 1);	/* copy in zone */
!     po += (*pi + 1);
!     len += (*pi + 3);
    }
    z = (struct ZIP *)(op->p_off + lapSize + ddpSize);
    z->command = zipReply;

--- 615,622 -----
      *po++ = u.c[0];		/* copy in network */
      *po++ = u.c[1];
      bcopy(pi, po, *pi + 1);	/* copy in zone */
!     po += (*pi + 1);		/* string + count */
!     len += (*pi + 3);		/* string + count + netnumber */
    }
    z = (struct ZIP *)(op->p_off + lapSize + ddpSize);
    z->command = zipReply;
%%%%%%%END OF PATCH%%%%%%%%%%