Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!ucbvax!agate!anableps.berkeley.edu!glass From: glass@anableps.berkeley.edu (Brett Glass) Newsgroups: comp.protocols.tcp-ip.ibmpc Subject: Re: NetBIOS Datagrams: Potential Incompatibility Message-ID: <21782@agate.BERKELEY.EDU> Date: 17 Mar 89 16:20:40 GMT References: <8903161245.aa20821@Obelix.TWG.COM> Sender: usenet@agate.BERKELEY.EDU Organization: University of California, Berkeley Lines: 55 In article <8903161245.aa20821@Obelix.TWG.COM> kuan@TWG.COM (Chia-Chee Kuan) wri tes: >According to the pseudo code listed in appendix C page C-47 in "Technical >Reference: IBM PC Network", it does seems to me a received datagram completes >all pending RECEIVE DATAGRAM commands which have matching source and >destination specification. This brings the two most authoritative >documents, "Technical Reference: IBM PC Network" and RFC1001/1002, together >without conflicting each other. I've examined Appendix C, page C-47 of "Technical Reference: IBM PC Network," and I see the section you're referring to; indeed, there isn't a clear indication that the checking process terminates after the first match is found. [I originally thought I DID see such an indication, and posted two articles to that effect to this newsgroup. But I cancelled them after taking another look at the IBM manual.] The one thing I can say for certain -- because I've checked it -- is that NO IBM implementation of NetBIOS has actually satisfied more than one Receive Datagram command with a single datagram. IBMer Dave Schwaderer's book and third-party NetBIOS implementations also support this modus operandi. It's possible that the description in IBM's manual was never checked for accuracy, or even that it was INTENTIONALLY vague to make correct implementation more difficult. But the de facto standard is that only one command is satisfied. As it turns out, the "Receive Datagram" pseudocode in RFC1002 could be made consistent with "reality" by moving a single line and deleting one comment: X Delete /* X * Replicate received NetBIOS datagram for X * each recipient X */ FOR EACH pending NetBIOS user's receive datagram operation BEGIN IF source name of operation matches destination name of packet THEN BEGIN deliver USER_DATA from UDP packet(s); +---------> Move | END | END /* for each */ --<< return; END /* good */ I think it might be a good idea to make this change, and to correct the other parts of the documents accordingly. --Brett