Patch #: 30 Type: bug fix Priority: high Affects: ULTRIX sites using Native EtherTalk Reported: Mike Iglesias Archived: munnari.OZ.AU mac/cap.patches/cap60.patch030 Summary: Fix byte-swapping on network numbers in atis File: cap60/etc/atis.c *** etc/atis.c.orig Wed May 29 22:44:18 1991 --- etc/atis.c Sat Jul 6 02:27:24 1991 *************** *** 1,6 **** ! static char rcsid[] = "$Author: djh $ $Date: 1991/05/29 12:44:11 $"; ! static char rcsident[] = "$Header: /mac/src/cap60/etc/RCS/atis.c,v 2.3 1991/05/29 12:44:11 djh Rel djh $"; ! static char revision[] = "$Revision: 2.3 $"; /* * atis.c - a simple appletalk information server --- 1,6 ---- ! static char rcsid[] = "$Author: djh $ $Date: 1991/07/05 16:27:04 $"; ! static char rcsident[] = "$Header: /mac/src/cap60/etc/RCS/atis.c,v 2.4 1991/07/05 16:27:04 djh Rel djh $"; ! static char revision[] = "$Revision: 2.4 $"; /* * atis.c - a simple appletalk information server *************** *** 508,514 **** } /* at this point we know we have a lookup */ logit(2, "Got nbp %d lkup from net %d.%d, node %d, skt %d", ! nbp->tcnt, htons(addr->net)>>8, htons(addr->net)&0xff, addr->node, addr->skt); /* should only get one entity in incoming packet */ switch (nbp->control) { --- 508,514 ---- } /* at this point we know we have a lookup */ logit(2, "Got nbp %d lkup from net %d.%d, node %d, skt %d", ! nbp->tcnt, ntohs(addr->net)>>8, ntohs(addr->net)&0xff, addr->node, addr->skt); /* should only get one entity in incoming packet */ switch (nbp->control) { *************** *** 745,761 **** return; /* drop packet */ } ! net = (pkt[0] << 8) | pkt[1]; ! logit(5, "Got RTMP pkt net %d from %d.%d", net, addr->net, addr->node); if (addr->net == 0 && net != 0) { addr->net = net; SetBridgeAddress(addr); ! logit(1, "Gleaned network number %d from bridge %d", net, addr->node); } #ifdef PHASE2 ! if (net >= net_range_start && net <= net_range_end) { #else PHASE2 if (net == addr->net) { #endif PHASE2 --- 745,762 ---- return; /* drop packet */ } ! net = htons((pkt[0] << 8) | pkt[1]); ! logit(5, "Got RTMP pkt net %d from %d.%d", ! ntohs(net), ntohs(addr->net), addr->node); if (addr->net == 0 && net != 0) { addr->net = net; SetBridgeAddress(addr); ! logit(1, "Gleaned network number %d from bridge %d",ntohs(net),addr->node); } #ifdef PHASE2 ! if (ntohs(net)>=ntohs(net_range_start) && ntohs(net)<=ntohs(net_range_end)) { #else PHASE2 if (net == addr->net) { #endif PHASE2 *************** *** 788,799 **** pkt += 4; len -= 4; if (pkt[0] == 0 && pkt[1] == 0 && pkt[2] == 0x82) { /* non-extended net */ ! new_net_range_start = net; ! new_net_range_end = net; increment = 0; } else if (pkt[5] == 0x82) { /* extended network */ ! new_net_range_start = (pkt[0] << 8) | pkt[1]; ! new_net_range_end = (pkt[3] << 8) | pkt[4]; pkt += 3; len -= 3; increment = 3; } else { --- 789,800 ---- pkt += 4; len -= 4; if (pkt[0] == 0 && pkt[1] == 0 && pkt[2] == 0x82) { /* non-extended net */ ! new_net_range_start = net; /* net byte order */ ! new_net_range_end = net; /* net byte order */ increment = 0; } else if (pkt[5] == 0x82) { /* extended network */ ! new_net_range_start = htons((pkt[0] << 8) | pkt[1]); ! new_net_range_end = htons((pkt[3] << 8) | pkt[4]); pkt += 3; len -= 3; increment = 3; } else { *************** *** 808,814 **** /* clients too much. We should also do it to ensure that the */ /* correct zone multicast address gets enabled on the intrfc */ /* ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ */ ! if (net_range_start == 0x00 && net_range_end == 0xfffe) { this_net = nis_net = net_range_start = new_net_range_start; net_range_end = new_net_range_end; SetNetRange(net_range_start, net_range_end); --- 809,815 ---- /* clients too much. We should also do it to ensure that the */ /* correct zone multicast address gets enabled on the intrfc */ /* ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ */ ! if (net_range_start == 0x00 && net_range_end == htons(0xfffe)) { this_net = nis_net = net_range_start = new_net_range_start; net_range_end = new_net_range_end; SetNetRange(net_range_start, net_range_end); *************** *** 824,833 **** */ goodness = 0; while (len > 0) { ! net = (pkt[0] << 8) | pkt[1]; /* pkt data is not aligned */ ! if (net == addr->net) { /* not doing split horizon */ goodness = 0; ! logit (10, "No split horizon in router %d.%d", addr->net, addr->node); break; } goodness++; --- 825,835 ---- */ goodness = 0; while (len > 0) { ! net = htons((pkt[0] << 8) | pkt[1]); /* pkt data is not aligned */ ! if (net == addr->net) { /* not doing split horizon */ goodness = 0; ! logit (10, "No split horizon in router %d.%d", ! ntohs(addr->net), addr->node); break; } goodness++; *************** *** 838,844 **** pkt += increment; #endif PHASE2 } ! logit (8, "Router %d.%d has goodness %d", addr->net, addr->node, goodness); now = time(NULL); #define MARGIN (current_goodness / 20) /* currently 5% */ --- 840,847 ---- pkt += increment; #endif PHASE2 } ! logit (8, "Router %d.%d has goodness %d", ! ntohs(addr->net), addr->node, goodness); now = time(NULL); #define MARGIN (current_goodness / 20) /* currently 5% */ *************** *** 846,852 **** if (goodness > (current_goodness+MARGIN)) { SetBridgeAddress(addr); logit (1, "New default router %d.%d, goodness %d->%d", ! addr->net, addr->node, current_goodness, goodness); current_node = addr->node; current_goodness = goodness; current_time = now; --- 849,855 ---- if (goodness > (current_goodness+MARGIN)) { SetBridgeAddress(addr); logit (1, "New default router %d.%d, goodness %d->%d", ! ntohs(addr->net), addr->node, current_goodness, goodness); current_node = addr->node; current_goodness = goodness; current_time = now; *************** *** 854,860 **** } if (addr->node != current_node && (now - current_time) > 15) { SetBridgeAddress(addr); ! logit (1, "New default router %d.%d, old expired", addr->net, addr->node); current_node = addr->node; current_goodness = goodness; current_time = now; --- 857,864 ---- } if (addr->node != current_node && (now - current_time) > 15) { SetBridgeAddress(addr); ! logit (1, "New default router %d.%d, old expired", ! ntohs(addr->net), addr->node); current_node = addr->node; current_goodness = goodness; current_time = now; *************** *** 871,877 **** current_goodness = goodness; current_time = now; logit (1, "Current default router %d.%d, goodness %d", ! addr->net, addr->node, current_goodness); return; } } --- 875,881 ---- current_goodness = goodness; current_time = now; logit (1, "Current default router %d.%d, goodness %d", ! ntohs(addr->net), addr->node, current_goodness); return; } } *** README.orig Sat Jul 6 02:29:26 1991 --- README Sat Jul 6 02:29:40 1991 *************** *** 3,9 **** (For use with AppleTalk/Ethernet bridge) o RELEASE NOTES ! o CAP Distribution 6.0, Patch Level 29, July 1991 Introduction ------------ --- 3,9 ---- (For use with AppleTalk/Ethernet bridge) o RELEASE NOTES ! o CAP Distribution 6.0, Patch Level 30, July 1991 Introduction ------------