📄 _decnet.c
字号:
case MFS_EOM:
case MFS_BOM + MFS_EOM:
PRINTF ("data %d>%d ", src, dst);
{
struct seghdr *shp = (struct seghdr *) nspp;
int ack;
u_char *dp;
u_int data_off = sizeof(struct minseghdr);
ack = EXTRACT_LE_16BITS (shp->sh_seq[0]);
if (ack & SGQ_ACK)
{ /* acknum field */
if ((ack & SGQ_NAK) == SGQ_NAK)
PRINTF ("nak %d ", ack & SGQ_MASK);
else PRINTF ("ack %d ", ack & SGQ_MASK);
ack = EXTRACT_LE_16BITS (shp->sh_seq[1]);
data_off += sizeof(short);
if (ack & SGQ_OACK)
{ /* ackoth field */
if ((ack & SGQ_ONAK) == SGQ_ONAK)
PRINTF ("onak %d ", ack & SGQ_MASK);
else PRINTF ("oack %d ", ack & SGQ_MASK);
ack = EXTRACT_LE_16BITS (shp->sh_seq[2]);
data_off += sizeof(short);
}
}
PRINTF ("seg %d ", ack & SGQ_MASK);
#ifdef PRINT_DECNET_DETAILS
dp = (u_char *) &nspp[data_off];
pdata (dp, 10);
#endif
}
break;
case MFS_ILS + MFS_INT:
PUTS ("intr ");
{
struct seghdr *shp = (struct seghdr *) nspp;
int ack;
u_char *dp;
u_int data_off = sizeof(struct minseghdr);
ack = EXTRACT_LE_16BITS (shp->sh_seq[0]);
if (ack & SGQ_ACK)
{ /* acknum field */
if ((ack & SGQ_NAK) == SGQ_NAK)
PRINTF ("nak %d ", ack & SGQ_MASK);
else PRINTF ("ack %d ", ack & SGQ_MASK);
ack = EXTRACT_LE_16BITS (shp->sh_seq[1]);
data_off += sizeof(short);
if (ack & SGQ_OACK)
{ /* ackdat field */
if ((ack & SGQ_ONAK) == SGQ_ONAK)
PRINTF ("nakdat %d ", ack & SGQ_MASK);
else PRINTF ("ackdat %d ", ack & SGQ_MASK);
ack = EXTRACT_LE_16BITS (shp->sh_seq[2]);
data_off += sizeof(short);
}
}
PRINTF ("seg %d ", ack & SGQ_MASK);
#ifdef PRINT_DECNET_DETAILS
dp = (u_char *) &nspp[data_off];
pdata (dp, 10);
#endif
}
break;
case MFS_ILS:
PRINTF ("link-service %d>%d ", src, dst);
{
struct seghdr *shp = (struct seghdr*) nspp;
struct lsmsg *lsmp = (struct lsmsg *) &nspp[sizeof(struct seghdr)];
int ack, lsflags, fcval;
ack = EXTRACT_LE_16BITS (shp->sh_seq[0]);
if (ack & SGQ_ACK)
{ /* acknum field */
if ((ack & SGQ_NAK) == SGQ_NAK)
PRINTF ("nak %d ", ack & SGQ_MASK);
else PRINTF ("ack %d ", ack & SGQ_MASK);
ack = EXTRACT_LE_16BITS (shp->sh_seq[1]);
if (ack & SGQ_OACK)
{ /* ackdat field */
if ((ack & SGQ_ONAK) == SGQ_ONAK)
PRINTF ("nakdat %d ", ack & SGQ_MASK);
else PRINTF ("ackdat %d ", ack & SGQ_MASK);
ack = EXTRACT_LE_16BITS (shp->sh_seq[2]);
}
}
PRINTF ("seg %d ", ack & SGQ_MASK);
lsflags = EXTRACT_LE_8BITS (lsmp->ls_lsflags);
fcval = EXTRACT_LE_8BITS (lsmp->ls_fcval);
switch (lsflags & LSI_MASK)
{
case LSI_DATA:
PRINTF ("dat seg count %d ", fcval);
switch (lsflags & LSM_MASK)
{
case LSM_NOCHANGE:
break;
case LSM_DONOTSEND:
PUTS ("donotsend-data ");
break;
case LSM_SEND:
PUTS ("send-data ");
break;
default:
PRINTF ("reserved-fcmod? %x", lsflags);
break;
}
break;
case LSI_INTR:
PRINTF ("intr req count %d ", fcval);
break;
default:
PRINTF ("reserved-fcval-int? %x", lsflags);
break;
}
}
break;
default:
PRINTF ("reserved-subtype? %x %d > %d", flags, src, dst);
break;
}
break;
case MFT_ACK:
switch (flags & NSP_SUBMASK)
{
case MFS_DACK:
PRINTF ("data-ack %d>%d ", src, dst);
{
struct ackmsg *amp = (struct ackmsg *) nspp;
int ack = EXTRACT_LE_16BITS (amp->ak_acknum[0]);
if (ack & SGQ_ACK)
{ /* acknum field */
if ((ack & SGQ_NAK) == SGQ_NAK)
PRINTF ("nak %d ", ack & SGQ_MASK);
else PRINTF ("ack %d ", ack & SGQ_MASK);
ack = EXTRACT_LE_16BITS (amp->ak_acknum[1]);
if (ack & SGQ_OACK)
{ /* ackoth field */
if ((ack & SGQ_ONAK) == SGQ_ONAK)
PRINTF ("onak %d ", ack & SGQ_MASK);
else PRINTF ("oack %d ", ack & SGQ_MASK);
}
}
}
break;
case MFS_IACK:
PRINTF ("ils-ack %d>%d ", src, dst);
{
struct ackmsg *amp = (struct ackmsg *) nspp;
int ack = EXTRACT_LE_16BITS (amp->ak_acknum[0]);
if (ack & SGQ_ACK)
{ /* acknum field */
if ((ack & SGQ_NAK) == SGQ_NAK)
PRINTF ("nak %d ", ack & SGQ_MASK);
else PRINTF ("ack %d ", ack & SGQ_MASK);
ack = EXTRACT_LE_16BITS (amp->ak_acknum[1]);
if (ack & SGQ_OACK)
{ /* ackdat field */
if ((ack & SGQ_ONAK) == SGQ_ONAK)
PRINTF ("nakdat %d ", ack & SGQ_MASK);
else PRINTF ("ackdat %d ", ack & SGQ_MASK);
}
}
}
break;
case MFS_CACK:
PRINTF ("conn-ack %d", dst);
break;
default:
PRINTF ("reserved-acktype? %x %d > %d", flags, src, dst);
break;
}
break;
case MFT_CTL:
switch (flags & NSP_SUBMASK)
{
case MFS_CI:
case MFS_RCI:
if ((flags & NSP_SUBMASK) == MFS_CI)
PRINTF ("conn-initiate ");
else PRINTF ("retrans-conn-initiate ");
PRINTF ("%d>%d ", src, dst);
{
struct cimsg *cimp = (struct cimsg *) nspp;
int services, info, segsize;
u_char *dp;
services = EXTRACT_LE_8BITS (cimp->ci_services);
info = EXTRACT_LE_8BITS (cimp->ci_info);
segsize = EXTRACT_LE_16BITS (cimp->ci_segsize);
switch (services & COS_MASK)
{
case COS_NONE:
break;
case COS_SEGMENT:
PUTS ("seg ");
break;
case COS_MESSAGE:
PUTS ("msg ");
break;
case COS_CRYPTSER:
PUTS ("crypt ");
break;
}
switch (info & COI_MASK)
{
case COI_32:
PUTS ("ver 3.2 ");
break;
case COI_31:
PUTS ("ver 3.1 ");
break;
case COI_40:
PUTS ("ver 4.0 ");
break;
case COI_41:
PUTS ("ver 4.1 ");
break;
}
PRINTF ("segsize %d ", segsize);
#ifdef PRINT_DECNET_DETAILS
dp = (u_char *) &nspp[sizeof(struct cimsg)];
pdata (dp, nsplen - sizeof(struct cimsg));
#endif
}
break;
case MFS_CC:
PRINTF ("conn-confirm %d>%d ", src, dst);
{
struct ccmsg *ccmp = (struct ccmsg *) nspp;
int services, info;
u_int segsize, optlen;
u_char *dp;
services = EXTRACT_LE_8BITS (ccmp->cc_services);
info = EXTRACT_LE_8BITS (ccmp->cc_info);
segsize = EXTRACT_LE_16BITS (ccmp->cc_segsize);
optlen = EXTRACT_LE_8BITS (ccmp->cc_optlen);
switch (services & COS_MASK)
{
case COS_NONE:
break;
case COS_SEGMENT:
PUTS ("seg ");
break;
case COS_MESSAGE:
PUTS ("msg ");
break;
case COS_CRYPTSER:
PUTS ("crypt ");
break;
}
switch (info & COI_MASK)
{
case COI_32:
PUTS ("ver 3.2 ");
break;
case COI_31:
PUTS ("ver 3.1 ");
break;
case COI_40:
PUTS ("ver 4.0 ");
break;
case COI_41:
PUTS ("ver 4.1 ");
break;
}
PRINTF ("segsize %d ", segsize);
if (optlen)
{
PRINTF ("optlen %d ", optlen);
#ifdef PRINT_DECNET_DETAILS
optlen = min (optlen, nsplen - sizeof(struct ccmsg));
dp = (u_char *) &nspp[sizeof(struct ccmsg)];
pdata (dp, optlen);
#endif
}
}
break;
case MFS_DI:
PRINTF ("disconn-initiate %d>%d ", src, dst);
{
struct dimsg *dimp = (struct dimsg *) nspp;
int reason;
u_int optlen;
u_char *dp;
reason = EXTRACT_LE_16BITS (dimp->di_reason);
optlen = EXTRACT_LE_8BITS (dimp->di_optlen);
print_reason (reason);
if (optlen)
{
PRINTF ("optlen %d ", optlen);
#ifdef PRINT_DECNET_DETAILS
optlen = min (optlen, nsplen - sizeof(struct dimsg));
dp = (u_char *) &nspp[sizeof(struct dimsg)];
pdata (dp, optlen);
#endif
}
}
break;
case MFS_DC:
PRINTF ("disconn-confirm %d>%d ", src, dst);
{
struct dcmsg *dcmp = (struct dcmsg *) nspp;
int reason = EXTRACT_LE_16BITS (dcmp->dc_reason);
print_reason (reason);
}
break;
default:
PRINTF ("reserved-ctltype? %x %d > %d", flags, src, dst);
break;
}
break;
default:
PRINTF ("reserved-type? %x %d > %d", flags, src, dst);
break;
}
}
static struct tok reason2str[] = {
{ UC_OBJREJECT, "object rejected connect"},
{ UC_RESOURCES, "insufficient resources"},
{ UC_NOSUCHNODE, "unrecognized node name"},
{ DI_SHUT, "node is shutting down"},
{ UC_NOSUCHOBJ, "unrecognized object"},
{ UC_INVOBJFORMAT, "invalid object name format"},
{ UC_OBJTOOBUSY, "object too busy"},
{ DI_PROTOCOL, "protocol error discovered"},
{ DI_TPA, "third party abort"},
{ UC_USERABORT, "user abort"},
{ UC_INVNODEFORMAT,"invalid node name format"},
{ UC_LOCALSHUT, "local node shutting down"},
{ DI_LOCALRESRC, "insufficient local resources"},
{ DI_REMUSERRESRC, "insufficient remote user resources"},
{ UC_ACCESSREJECT, "invalid access control information"},
{ DI_BADACCNT, "bad ACCOUNT information"},
{ UC_NORESPONSE, "no response from object"},
{ UC_UNREACHABLE, "node unreachable"},
{ DC_NOLINK, "no link terminate"},
{ DC_COMPLETE, "disconnect complete"},
{ DI_BADIMAGE, "bad image data in connect"},
{ DI_SERVMISMATCH, "cryptographic service mismatch"},
{ 0, NULL}
};
static void print_reason (int reason)
{
PRINTF ("%s ", tok2str(reason2str,"reason-%d",reason));
}
char *dnnum_string (u_short dnaddr)
{
int area = (dnaddr & AREAMASK) >> AREASHIFT;
int node = dnaddr & NODEMASK;
char *str = malloc (sizeof("00.0000"));
if (!str)
PERROR (("dnnum_string: malloc"));
sprintf (str, "%d.%d", area, node);
return (str);
}
char *dnname_string (u_short dnaddr)
{
return dnnum_string (dnaddr);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -