+ ND_PRINT((ndo, "Unspecified error 0x%X", ecode));
+ break;
+ }
+ }
+ break;
+
+ case 0x85:
+ ND_PRINT((ndo, "Session Keepalive"));
+ break;
+
+ default:
+ data = smb_fdata(ndo, data, "Unknown packet type [rB]", maxbuf, 0);
+ break;
+ }
+ } else {
+ ND_PRINT((ndo, "\n>>> NBT Session Packet\n"));
+ switch (type) {
+ case 0x00:
+ data = smb_fdata(ndo, data, "[P1]NBT Session Message\nFlags=[B]\nLength=[rd]\n",
+ data + 4, 0);
+ if (data == NULL)
+ break;
+ if (nbt_len >= 4 && caplen >= 4 && memcmp(data,"\377SMB",4) == 0) {
+ if ((int)nbt_len > caplen) {
+ if ((int)nbt_len > length)
+ ND_PRINT((ndo, "WARNING: Packet is continued in later TCP segments\n"));
+ else
+ ND_PRINT((ndo, "WARNING: Short packet. Try increasing the snap length by %d\n",
+ nbt_len - caplen));
+ }
+ print_smb(ndo, data, maxbuf > data + nbt_len ? data + nbt_len : maxbuf);
+ } else
+ ND_PRINT((ndo, "Session packet:(raw data or continuation?)\n"));
+ break;
+
+ case 0x81:
+ data = smb_fdata(ndo, data,
+ "[P1]NBT Session Request\nFlags=[B]\nLength=[rd]\nDestination=[n1]\nSource=[n1]\n",
+ maxbuf, 0);
+ break;
+
+ case 0x82:
+ data = smb_fdata(ndo, data, "[P1]NBT Session Granted\nFlags=[B]\nLength=[rd]\n", maxbuf, 0);
+ break;
+
+ case 0x83:
+ {
+ const u_char *origdata;
+ int ecode;
+
+ origdata = data;
+ data = smb_fdata(ndo, data, "[P1]NBT SessionReject\nFlags=[B]\nLength=[rd]\nReason=[B]\n",
+ maxbuf, 0);
+ if (data == NULL)