2128 lines
67 KiB
C
2128 lines
67 KiB
C
#include "enum.h"
|
|
#include "heap.h"
|
|
#include "protodefs.h"
|
|
#include "protoindex.h"
|
|
#include "tokenring.h"
|
|
|
|
#line 22 "tokenmac.pi"
|
|
|
|
/*
|
|
* Hand crafted reminder:
|
|
* - Search for "if (mac_do_subvector(ds))" and change
|
|
* 'if' to 'while'. They are in 2 different places.
|
|
*/
|
|
|
|
#line 360 "tokenmac.pi"
|
|
|
|
static int
|
|
mac_do_subvector (DataStream *ds)
|
|
{
|
|
return ds->ds_count > 0;
|
|
/* Get the position (value can be passed) of 'll' and get
|
|
the current position. If current minus ll = value of ll
|
|
return false else return true, ie more to decode. */
|
|
/* see appletalk end. ds->ds_count>0 afp */
|
|
}
|
|
#line 27 "tokenmac.c"
|
|
|
|
#define tokenmacsvidfrmtfid_cs 88
|
|
#define tokenmacsvidfrmtfid_ro 89
|
|
#define tokenmacsvidfrmtfid_codept 90
|
|
|
|
static ProtoField tokenmacsvidfrmt_fields[] = {
|
|
{"cs",2,"Common/Specific Indicator",tokenmacsvidfrmtfid_cs,(void*)DS_ZERO_EXTEND,-1,0,EXOP_NUMBER,0},
|
|
{"ro",2,"Required/Optional Indicator",tokenmacsvidfrmtfid_ro,(void*)DS_ZERO_EXTEND,-1,1,EXOP_NUMBER,0},
|
|
{"codept",6,"Code Point",tokenmacsvidfrmtfid_codept,(void*)DS_ZERO_EXTEND,-6,2,EXOP_NUMBER,0},
|
|
};
|
|
|
|
struct tokenmacsvidfrmt {
|
|
unsigned char cs:1;
|
|
unsigned char ro:1;
|
|
unsigned char codept:6;
|
|
}; /* tokenmacsvidfrmt */
|
|
|
|
static ProtoStruct tokenmacsvidfrmt_struct = PSI("svidfrmt",tokenmacsvidfrmt_fields);
|
|
|
|
#define tokenmacfid_ll 23
|
|
#define tokenmacfid_dcl 24
|
|
#define tokenmacfid_scl 25
|
|
#define tokenmacfid_mvid 26
|
|
#define tokenmacfid_len 27
|
|
#define tokenmacfid_svid 28
|
|
#define tokenmacfid_beacon 29
|
|
#define tokenmacfid_naun 30
|
|
#define tokenmacfid_lrn 31
|
|
#define tokenmacfid_apl 32
|
|
#define tokenmacfid_stv 33
|
|
#define tokenmacfid_efc 34
|
|
#define tokenmacfid_pad 35
|
|
#define tokenmacfid_aap 36
|
|
#define tokenmacfid_cor 37
|
|
#define tokenmacfid_lnna 38
|
|
#define tokenmacfid_pl 39
|
|
#define tokenmacfid_rc 40
|
|
#define tokenmacfid_rdcl 41
|
|
#define tokenmacfid_rscl 42
|
|
#define tokenmacfid_rmvid 43
|
|
#define tokenmacfid_res 44
|
|
#define tokenmacfid_pcl 45
|
|
#define tokenmacfid_fty 46
|
|
#define tokenmacfid_mty 47
|
|
#define tokenmacfid_mnum 48
|
|
#define tokenmacfid_snum 49
|
|
#define tokenmacfid_seqn 50
|
|
#define tokenmacfid_rsml 51
|
|
#define tokenmacfid_wd 52
|
|
#define tokenmacfid_macf 53
|
|
#define tokenmacfid_sid 54
|
|
#define tokenmacfid_rsss 55
|
|
#define tokenmacfid_tsc 56
|
|
#define tokenmacfid_ga 57
|
|
#define tokenmacfid_fa 58
|
|
#define tokenmacfid_lerr 59
|
|
#define tokenmacfid_ierr 60
|
|
#define tokenmacfid_berr 61
|
|
#define tokenmacfid_acerr 62
|
|
#define tokenmacfid_adt 63
|
|
#define tokenmacfid_resv 64
|
|
#define tokenmacfid_lferr 65
|
|
#define tokenmacfid_rj 66
|
|
#define tokenmacfid_fcerr 67
|
|
#define tokenmacfid_ferr 68
|
|
#define tokenmacfid_terr 69
|
|
#define tokenmacfid_ec 70
|
|
#define tokenmacfid_llong 71
|
|
#define tokenmacfid_lsvid 72
|
|
#define tokenmacfid_llen 73
|
|
|
|
static ProtoField tokenmacfa1_element =
|
|
{0,0,0,74,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,0};
|
|
|
|
static ProtoField tokenmacga1_element =
|
|
{0,0,0,75,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,0};
|
|
|
|
static ProtoField tokenmacrsss1_element =
|
|
{0,0,0,76,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,0};
|
|
|
|
static ProtoField tokenmacsid1_element =
|
|
{0,0,0,77,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,0};
|
|
|
|
static ProtoField tokenmacmacf1_element =
|
|
{0,0,0,78,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,2};
|
|
|
|
static ProtoField tokenmacwd1_element =
|
|
{0,0,0,79,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,2};
|
|
|
|
static ProtoField tokenmacrsml1_element =
|
|
{0,0,0,80,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,0};
|
|
|
|
static ProtoField tokenmacseqn1_element =
|
|
{0,0,0,81,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,1};
|
|
|
|
static ProtoField tokenmacsnum1_element =
|
|
{0,0,0,82,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,1};
|
|
|
|
static ProtoField tokenmacmnum1_element =
|
|
{0,0,0,83,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,1};
|
|
|
|
static ProtoField tokenmacmty1_element =
|
|
{0,0,0,84,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,1};
|
|
|
|
static ProtoField tokenmaclnna1_element =
|
|
{0,0,0,85,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,0};
|
|
|
|
static ProtoField tokenmacnaun1_element =
|
|
{0,0,0,86,(void*)DS_ZERO_EXTEND,1,0,EXOP_NUMBER,0};
|
|
|
|
static ProtoField tokenmac_fields[] = {
|
|
{"ll",2,"Major Vector Length",tokenmacfid_ll,(void*)DS_ZERO_EXTEND,2,0,EXOP_NUMBER,1},
|
|
{"dcl",3,"Destination Function Class",tokenmacfid_dcl,(void*)DS_ZERO_EXTEND,-4,16,EXOP_NUMBER,1},
|
|
{"scl",3,"Source Function Class",tokenmacfid_scl,(void*)DS_ZERO_EXTEND,-4,20,EXOP_NUMBER,1},
|
|
{"mvid",4,"Command Byte",tokenmacfid_mvid,(void*)DS_ZERO_EXTEND,1,3,EXOP_NUMBER,0},
|
|
{"len",3,"Subvector Length",tokenmacfid_len,(void*)DS_ZERO_EXTEND,1,4,EXOP_NUMBER,1},
|
|
{"svid",4,"Subvector Type",tokenmacfid_svid,&tokenmacsvidfrmt_struct,1,5,EXOP_STRUCT,1},
|
|
{"beacon",6,"Type",tokenmacfid_beacon,(void*)DS_ZERO_EXTEND,2,8,EXOP_NUMBER,0},
|
|
{"naun",4,"Address",tokenmacfid_naun,&tokenmacnaun1_element,6,8,EXOP_ARRAY,0},
|
|
{"lrn",3,"of Sending Station",tokenmacfid_lrn,(void*)DS_ZERO_EXTEND,2,8,EXOP_NUMBER,0},
|
|
{"apl",3,"of Target Ring Station",tokenmacfid_apl,(void*)DS_ZERO_EXTEND,4,8,EXOP_NUMBER,0},
|
|
{"stv",3,"Timeout Value",tokenmacfid_stv,(void*)DS_ZERO_EXTEND,2,8,EXOP_NUMBER,0},
|
|
{"efc",3,"Class Num Enabled To Transmit",tokenmacfid_efc,(void*)DS_ZERO_EXTEND,2,8,EXOP_NUMBER,0},
|
|
{"pad",3,"Padding",tokenmacfid_pad,(void*)DS_ZERO_EXTEND,-4,64,EXOP_NUMBER,2},
|
|
{"aap",3,"Maximaum Allowed",tokenmacfid_aap,(void*)DS_ZERO_EXTEND,-2,78,EXOP_NUMBER,0},
|
|
{"cor",3,"Relate Request and Response",tokenmacfid_cor,(void*)DS_ZERO_EXTEND,2,8,EXOP_NUMBER,0},
|
|
{"lnna",4,"Address",tokenmacfid_lnna,&tokenmaclnna1_element,6,8,EXOP_ARRAY,0},
|
|
{"pl",2,"of Sending Ring Station",tokenmacfid_pl,(void*)DS_ZERO_EXTEND,4,8,EXOP_NUMBER,0},
|
|
{"rc",2,"Response Code",tokenmacfid_rc,(void*)DS_ZERO_EXTEND,2,8,EXOP_NUMBER,0},
|
|
{"rdcl",4,"Destination Function Class",tokenmacfid_rdcl,(void*)DS_ZERO_EXTEND,-4,80,EXOP_NUMBER,0},
|
|
{"rscl",4,"Source Function Class",tokenmacfid_rscl,(void*)DS_ZERO_EXTEND,-4,84,EXOP_NUMBER,0},
|
|
{"rmvid",5,"Command Byte",tokenmacfid_rmvid,(void*)DS_ZERO_EXTEND,1,11,EXOP_NUMBER,0},
|
|
{"res",3,"Reserved",tokenmacfid_res,(void*)DS_ZERO_EXTEND,2,8,EXOP_NUMBER,0},
|
|
{"pcl",3,"Product Classification",tokenmacfid_pcl,(void*)DS_ZERO_EXTEND,-4,68,EXOP_NUMBER,0},
|
|
{"fty",3,"Format type",tokenmacfid_fty,(void*)DS_ZERO_EXTEND,1,9,EXOP_NUMBER,1},
|
|
{"mty",3,"Machine Type, EBCDIC",tokenmacfid_mty,&tokenmacmty1_element,4,10,EXOP_ARRAY,1},
|
|
{"mnum",4,"Machine Model Num, EBCDIC",tokenmacfid_mnum,&tokenmacmnum1_element,3,14,EXOP_ARRAY,1},
|
|
{"snum",4,"Serial Num Modifier, EBCDIC",tokenmacfid_snum,&tokenmacsnum1_element,2,17,EXOP_ARRAY,1},
|
|
{"seqn",4,"Sequence Num, EBCDIC",tokenmacfid_seqn,&tokenmacseqn1_element,7,19,EXOP_ARRAY,1},
|
|
{"rsml",4,"of Sending Station, EBCDIC",tokenmacfid_rsml,&tokenmacrsml1_element,10,8,EXOP_ARRAY,0},
|
|
{"wd",2,"for Lobe Test",tokenmacfid_wd,&tokenmacwd1_element,1500,8,EXOP_ARRAY,2},
|
|
{"macf",4,"Mac Frame",tokenmacfid_macf,&tokenmacmacf1_element,0,8,EXOP_ARRAY,2},
|
|
{"sid",3,"Address",tokenmacfid_sid,&tokenmacsid1_element,6,8,EXOP_ARRAY,0},
|
|
{"rsss",4,"Status",tokenmacfid_rsss,&tokenmacrsss1_element,6,8,EXOP_ARRAY,0},
|
|
{"tsc",3,"Strip Status",tokenmacfid_tsc,(void*)DS_ZERO_EXTEND,2,8,EXOP_NUMBER,0},
|
|
{"ga",2,"Lower 4 Bytes of Addr",tokenmacfid_ga,&tokenmacga1_element,4,8,EXOP_ARRAY,0},
|
|
{"fa",2,"Recognized by this Station",tokenmacfid_fa,&tokenmacfa1_element,4,8,EXOP_ARRAY,0},
|
|
{"lerr",4,"Line Error",tokenmacfid_lerr,(void*)DS_ZERO_EXTEND,1,8,EXOP_NUMBER,0},
|
|
{"ierr",4,"Internal Error",tokenmacfid_ierr,(void*)DS_ZERO_EXTEND,1,9,EXOP_NUMBER,0},
|
|
{"berr",4,"Burst Error",tokenmacfid_berr,(void*)DS_ZERO_EXTEND,1,10,EXOP_NUMBER,0},
|
|
{"acerr",5,"A/C Error",tokenmacfid_acerr,(void*)DS_ZERO_EXTEND,1,11,EXOP_NUMBER,0},
|
|
{"adt",3,"Abort Delimiter Transmitted",tokenmacfid_adt,(void*)DS_ZERO_EXTEND,1,12,EXOP_NUMBER,0},
|
|
{"resv",4,"Reserved",tokenmacfid_resv,(void*)DS_ZERO_EXTEND,1,13,EXOP_NUMBER,2},
|
|
{"lferr",5,"Lost Frame Error",tokenmacfid_lferr,(void*)DS_ZERO_EXTEND,1,8,EXOP_NUMBER,0},
|
|
{"rj",2,"Receiver Congestion",tokenmacfid_rj,(void*)DS_ZERO_EXTEND,1,9,EXOP_NUMBER,0},
|
|
{"fcerr",5,"Frame Copied Error",tokenmacfid_fcerr,(void*)DS_ZERO_EXTEND,1,10,EXOP_NUMBER,0},
|
|
{"ferr",4,"Frequency Error",tokenmacfid_ferr,(void*)DS_ZERO_EXTEND,1,11,EXOP_NUMBER,0},
|
|
{"terr",4,"Token Error",tokenmacfid_terr,(void*)DS_ZERO_EXTEND,1,12,EXOP_NUMBER,0},
|
|
{"ec",2,"Code",tokenmacfid_ec,(void*)DS_ZERO_EXTEND,2,8,EXOP_NUMBER,0},
|
|
{"llong",5,"Long Subvector Indicator",tokenmacfid_llong,(void*)DS_ZERO_EXTEND,1,4,EXOP_NUMBER,2},
|
|
{"lsvid",5,"Subvector Type",tokenmacfid_lsvid,&tokenmacsvidfrmt_struct,1,5,EXOP_STRUCT,1},
|
|
{"llen",4,"Subvector Length",tokenmacfid_llen,(void*)DS_ZERO_EXTEND,2,6,EXOP_NUMBER,1},
|
|
};
|
|
|
|
static Enumeration tokenmacfunclass;
|
|
static Enumerator tokenmacfunclass_values[] = {
|
|
{"RingStation",11,0},
|
|
{"DLCLANMGR",9,1},
|
|
{"ConfigReportServer",18,4},
|
|
{"RingParmServer",14,5},
|
|
{"RingErrMonitor",14,6},
|
|
};
|
|
|
|
static Enumeration tokenmaccsbit;
|
|
static Enumerator tokenmaccsbit_values[] = {
|
|
{"Common",6,0},
|
|
{"Specific",8,1},
|
|
};
|
|
|
|
static Enumeration tokenmacrobit;
|
|
static Enumerator tokenmacrobit_values[] = {
|
|
{"Required",8,0},
|
|
{"Optional",8,1},
|
|
};
|
|
|
|
static Enumeration tokenmacmvidcmd;
|
|
static Enumerator tokenmacmvidcmd_values[] = {
|
|
{"Response",8,0},
|
|
{"Beacon",6,2},
|
|
{"ClaimToken",10,3},
|
|
{"RingPurge",9,4},
|
|
{"ActiveMonitorPresent",20,5},
|
|
{"StandbyMonitorPresent",21,6},
|
|
{"DuplicateAddrTest",17,7},
|
|
{"LobeTest",8,8},
|
|
{"TransmitForward",15,9},
|
|
{"RemoveRingStation",17,11},
|
|
{"ChangeParameters",16,12},
|
|
{"InitRingStation",15,13},
|
|
{"RequestRingStationAddr",22,14},
|
|
{"RequestRingStationState",23,15},
|
|
{"RequestRingStationAttach",24,16},
|
|
{"RequestInit",11,32},
|
|
{"ReportRingStationAddr",21,34},
|
|
{"ReportRingStationState",22,35},
|
|
{"ReportRingStationAttach",23,36},
|
|
{"ReportNewActiveMonitor",22,37},
|
|
{"ReportNAUNchange",16,38},
|
|
{"ReportNeighborNotificationIncomplete",36,39},
|
|
{"ReportActiveMonitorError",24,40},
|
|
{"ReportSoftError",15,41},
|
|
{"ReportTransmitForward",21,42},
|
|
};
|
|
|
|
static Enumeration tokenmacsubvectype;
|
|
static Enumerator tokenmacsubvectype_values[] = {
|
|
{"BeaconType",10,1},
|
|
{"NAUN",4,2},
|
|
{"LocalRingNum",12,3},
|
|
{"AssignPhysicalLocation",22,4},
|
|
{"SoftErrReportTimerValue",23,5},
|
|
{"EnabledFunctionClasses",22,6},
|
|
{"AllowedAccessPriority",21,7},
|
|
{"Correlator",10,8},
|
|
{"LastNeighborNotificationAddr",28,9},
|
|
{"PhysicalLocation",16,10},
|
|
{"ResponseCode",12,32},
|
|
{"Reserved",8,33},
|
|
{"ProductInstanceID",17,34},
|
|
{"RingStationMicrocodeLevel",25,35},
|
|
{"WrapData",8,38},
|
|
{"FrameForward",12,39},
|
|
{"StationIdentifier",17,40},
|
|
{"RingStationStatusSubvector",26,41},
|
|
{"TransmitStatusCode",18,42},
|
|
{"GroupAddr",9,43},
|
|
{"FunctionalAddr",14,44},
|
|
{"IsolatingErrorCounts",20,45},
|
|
{"NonIsolatingErrorCounts",23,46},
|
|
{"ErrorCode",9,48},
|
|
};
|
|
|
|
static Enumeration tokenmacbreason;
|
|
static Enumerator tokenmacbreason_values[] = {
|
|
{"RecoveryModeSet",15,1},
|
|
{"SignalLossErr",13,2},
|
|
{"StreamSignalNotClaimToken",25,3},
|
|
{"StreamSignalClaimTokenOrHardErr",31,4},
|
|
};
|
|
|
|
static Enumeration tokenmacerrorcode;
|
|
static Enumerator tokenmacerrorcode_values[] = {
|
|
{"MonitorErr",10,1},
|
|
{"DuplicateMonitor",16,2},
|
|
{"DuplicateAddr",13,3},
|
|
};
|
|
|
|
static Enumeration tokenmacprodcode;
|
|
static Enumerator tokenmacprodcode_values[] = {
|
|
{"IBMhardware",11,1},
|
|
{"IBMorNonIBMharware",18,3},
|
|
{"IBMsoftware",11,4},
|
|
{"NonIBMhardware",14,9},
|
|
{"NonIBMsoftware",14,12},
|
|
{"IBMorNonIBMsoftware",19,14},
|
|
};
|
|
|
|
static Enumeration tokenmacprodinst;
|
|
static Enumerator tokenmacprodinst_values[] = {
|
|
{"MachineSerialNum",16,16},
|
|
{"MachineAndModelSerialNum",24,17},
|
|
{"MachineSerialNumAdditional",26,18},
|
|
};
|
|
|
|
static Enumeration tokenmacrespcode;
|
|
static Enumerator tokenmacrespcode_values[] = {
|
|
{"Position",8,1},
|
|
{"MissingMajorVector",18,32769},
|
|
{"MajorVectorLenErr",17,32770},
|
|
{"UnrecognizedMVID",16,32771},
|
|
{"InappropriateSourceClass",24,32772},
|
|
{"SubvectorLenErr",15,32773},
|
|
{"TransmitForwardInvalid",22,32774},
|
|
{"MissingRequiredSubvector",24,32775},
|
|
{"MACFrameTooBig",14,32776},
|
|
{"FunctionRequestedDisabled",25,32777},
|
|
};
|
|
|
|
struct tokenmac {
|
|
ProtoStackFrame _psf;
|
|
unsigned short ll;
|
|
unsigned char dcl:4;
|
|
unsigned char scl:4;
|
|
unsigned char mvid;
|
|
unsigned char len;
|
|
struct tokenmacsvidfrmt svid;
|
|
unsigned short beacon_breason;
|
|
unsigned short beacon_breasonF16:16;
|
|
unsigned char naun[6];
|
|
unsigned short lrn;
|
|
unsigned long apl;
|
|
unsigned short stv;
|
|
unsigned short efc;
|
|
unsigned char pad_u_charF4:4;
|
|
unsigned short pad_u_shortF14:14;
|
|
unsigned char aap:2;
|
|
unsigned short cor;
|
|
unsigned char lnna[6];
|
|
unsigned long pl;
|
|
unsigned short rc;
|
|
unsigned char rdcl:4;
|
|
unsigned char rscl:4;
|
|
unsigned char rmvid;
|
|
unsigned short res;
|
|
unsigned char pcl:4;
|
|
unsigned char fty;
|
|
unsigned char mty[4];
|
|
unsigned char mnum[3];
|
|
unsigned char snum[2];
|
|
unsigned char seqn[7];
|
|
unsigned char rsml[10];
|
|
unsigned char wd[1500];
|
|
unsigned char *macf;
|
|
unsigned char sid[6];
|
|
unsigned char rsss[6];
|
|
unsigned short tsc;
|
|
unsigned char ga[4];
|
|
unsigned char fa[4];
|
|
unsigned char lerr;
|
|
unsigned char ierr;
|
|
unsigned char berr;
|
|
unsigned char acerr;
|
|
unsigned char adt;
|
|
unsigned char resv;
|
|
unsigned char lferr;
|
|
unsigned char rj;
|
|
unsigned char fcerr;
|
|
unsigned char ferr;
|
|
unsigned char terr;
|
|
unsigned short ec_errorcode;
|
|
unsigned short ec_errorcodeF16:16;
|
|
unsigned char llong;
|
|
struct tokenmacsvidfrmt lsvid;
|
|
unsigned short llen;
|
|
}; /* tokenmac */
|
|
|
|
static struct tokenmac tokenmac_frame;
|
|
|
|
static int tokenmac_init(void);
|
|
static ExprType tokenmac_compile(ProtoField *pf, Expr *mex, Expr *tex, ProtoCompiler *pc);
|
|
static int tokenmac_fetch(ProtoField *pf, DataStream *ds, ProtoStack *ps, Expr *rex);
|
|
static void tokenmac_decode(DataStream *ds, ProtoStack *ps, PacketView *pv);
|
|
|
|
Protocol tokenmac_proto = {
|
|
"tokenmac",8,"Token Ring Medium Access Control",PRID_TOKENMAC,
|
|
DS_BIG_ENDIAN,7,0,
|
|
tokenmac_init,pr_stub_setopt,pr_stub_embed,pr_stub_resolve,
|
|
tokenmac_compile,pr_stub_match,tokenmac_fetch,tokenmac_decode,
|
|
0,0,0,0
|
|
};
|
|
|
|
static int
|
|
tokenmac_init()
|
|
{
|
|
if (!pr_register(&tokenmac_proto, tokenmac_fields, lengthof(tokenmac_fields),
|
|
1 /* scopeload */
|
|
+ lengthof(tokenmacfunclass_values)
|
|
+ lengthof(tokenmaccsbit_values)
|
|
+ lengthof(tokenmacrobit_values)
|
|
+ lengthof(tokenmacmvidcmd_values)
|
|
+ lengthof(tokenmacsubvectype_values)
|
|
+ lengthof(tokenmacbreason_values)
|
|
+ lengthof(tokenmacerrorcode_values)
|
|
+ lengthof(tokenmacprodcode_values)
|
|
+ lengthof(tokenmacprodinst_values)
|
|
+ lengthof(tokenmacrespcode_values))) {
|
|
return 0;
|
|
}
|
|
if (!(pr_nest(&tokenmac_proto, PRID_TOKENRING, 0, 0, 0))) {
|
|
return 0;
|
|
}
|
|
en_init(&tokenmacfunclass, tokenmacfunclass_values, lengthof(tokenmacfunclass_values),
|
|
&tokenmac_proto);
|
|
en_init(&tokenmaccsbit, tokenmaccsbit_values, lengthof(tokenmaccsbit_values),
|
|
&tokenmac_proto);
|
|
en_init(&tokenmacrobit, tokenmacrobit_values, lengthof(tokenmacrobit_values),
|
|
&tokenmac_proto);
|
|
en_init(&tokenmacmvidcmd, tokenmacmvidcmd_values, lengthof(tokenmacmvidcmd_values),
|
|
&tokenmac_proto);
|
|
en_init(&tokenmacsubvectype, tokenmacsubvectype_values, lengthof(tokenmacsubvectype_values),
|
|
&tokenmac_proto);
|
|
en_init(&tokenmacbreason, tokenmacbreason_values, lengthof(tokenmacbreason_values),
|
|
&tokenmac_proto);
|
|
en_init(&tokenmacerrorcode, tokenmacerrorcode_values, lengthof(tokenmacerrorcode_values),
|
|
&tokenmac_proto);
|
|
en_init(&tokenmacprodcode, tokenmacprodcode_values, lengthof(tokenmacprodcode_values),
|
|
&tokenmac_proto);
|
|
en_init(&tokenmacprodinst, tokenmacprodinst_values, lengthof(tokenmacprodinst_values),
|
|
&tokenmac_proto);
|
|
en_init(&tokenmacrespcode, tokenmacrespcode_values, lengthof(tokenmacrespcode_values),
|
|
&tokenmac_proto);
|
|
|
|
return 1;
|
|
}
|
|
|
|
static ExprType
|
|
tokenmac_compile(ProtoField *pf, Expr *mex, Expr *tex, ProtoCompiler *pc)
|
|
{
|
|
return ET_COMPLEX;
|
|
} /* tokenmac_compile */
|
|
|
|
static int
|
|
tokenmacsvidfrmt_fetch(ProtoField *pf, DataStream *ds, ProtoStack *ps, Expr *rex)
|
|
{
|
|
struct tokenmacsvidfrmt *svidfrmt = ps->ps_slink;
|
|
int ok = 0, fid = pf->pf_id;
|
|
|
|
if (!ds_bits(ds, &rex->ex_val, 1, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacsvidfrmtfid_cs) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
svidfrmt->cs = rex->ex_val;
|
|
if (!ds_bits(ds, &rex->ex_val, 1, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacsvidfrmtfid_ro) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
svidfrmt->ro = rex->ex_val;
|
|
if (!ds_bits(ds, &rex->ex_val, 6, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacsvidfrmtfid_codept) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
svidfrmt->codept = rex->ex_val;
|
|
out:
|
|
return ok;
|
|
} /* tokenmacsvidfrmt_fetch */
|
|
|
|
static int
|
|
tokenmac_fetch(ProtoField *pf, DataStream *ds, ProtoStack *ps, Expr *rex)
|
|
{
|
|
struct tokenmac *tokenmac = &tokenmac_frame;
|
|
int ok = 0, fid = pf->pf_id;
|
|
|
|
PS_PUSH(ps, &tokenmac->_psf, &tokenmac_proto);
|
|
if (fid >= 74 && fid < 87) {
|
|
switch (fid) {
|
|
case 74:
|
|
if (!ds_seek(ds, 6 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->fa[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->fa[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 75:
|
|
if (!ds_seek(ds, 6 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->ga[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->ga[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 76:
|
|
if (!ds_seek(ds, 6 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->rsss[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->rsss[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 77:
|
|
if (!ds_seek(ds, 6 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->sid[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->sid[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 78:
|
|
if (!ds_seek(ds, 6 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
tokenmac->macf = renew(tokenmac->macf, (*tokenmac).len-2, unsigned char);
|
|
if (tokenmac->macf == 0) goto out;
|
|
if (!ds_u_char(ds, &tokenmac->macf[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->macf[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 79:
|
|
if (!ds_seek(ds, 6 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->wd[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->wd[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 80:
|
|
if (!ds_seek(ds, 6 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->rsml[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->rsml[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 81:
|
|
if (!ds_seek(ds, 17 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->seqn[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->seqn[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 82:
|
|
if (!ds_seek(ds, 15 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->snum[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->snum[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 83:
|
|
if (!ds_seek(ds, 12 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->mnum[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->mnum[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 84:
|
|
if (!ds_seek(ds, 8 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->mty[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->mty[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 85:
|
|
if (!ds_seek(ds, 6 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->lnna[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->lnna[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
case 86:
|
|
if (!ds_seek(ds, 6 + 1 * pf->pf_cookie, DS_RELATIVE))
|
|
goto out;
|
|
if (!ds_u_char(ds, &tokenmac->naun[pf->pf_cookie]))
|
|
goto out;
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->naun[pf->pf_cookie];
|
|
ok = 1; goto out;
|
|
}
|
|
}
|
|
if (fid >= 87) {
|
|
ok = tokenmacsvidfrmt_fetch(pf, ds, ps, rex); goto out;
|
|
}
|
|
if (!ds_u_short(ds, &tokenmac->ll))
|
|
goto out;
|
|
if (fid == tokenmacfid_ll) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->ll;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_bits(ds, &rex->ex_val, 4, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_dcl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->dcl = rex->ex_val;
|
|
if (!ds_bits(ds, &rex->ex_val, 4, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_scl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->scl = rex->ex_val;
|
|
if (!ds_u_char(ds, &tokenmac->mvid))
|
|
goto out;
|
|
if (fid == tokenmacfid_mvid) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->mvid;
|
|
ok = 1; goto out;
|
|
}
|
|
while (mac_do_subvector(ds)) {
|
|
{ int tell = ds_tellbit(ds);
|
|
if (!ds_u_char(ds, &tokenmac->len))
|
|
goto out;
|
|
ds_seekbit(ds, tell, DS_ABSOLUTE); }
|
|
if ((*tokenmac).len!=255) {
|
|
if (!ds_u_char(ds, &tokenmac->len))
|
|
goto out;
|
|
if (fid == tokenmacfid_len) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->len;
|
|
ok = 1; goto out;
|
|
}
|
|
if (fid == tokenmacfid_svid) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = pf = &tokenmac_fields[5];
|
|
pf->pf_cookie = 5;
|
|
ps->ps_slink = &tokenmac->svid;
|
|
ok = 1; goto out;
|
|
}
|
|
switch ((*tokenmac).svid.codept) {
|
|
case 1:
|
|
if (!ds_bits(ds, &rex->ex_val, 16, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_beacon) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->beacon_breasonF16 = rex->ex_val;
|
|
break;
|
|
case 2:
|
|
if (fid == tokenmacfid_naun) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacnaun1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 6, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 3:
|
|
if (!ds_u_short(ds, &tokenmac->lrn))
|
|
goto out;
|
|
if (fid == tokenmacfid_lrn) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->lrn;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (!ds_u_long(ds, &tokenmac->apl))
|
|
goto out;
|
|
if (fid == tokenmacfid_apl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->apl;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (!ds_u_short(ds, &tokenmac->stv))
|
|
goto out;
|
|
if (fid == tokenmacfid_stv) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->stv;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 6:
|
|
if (!ds_u_short(ds, &tokenmac->efc))
|
|
goto out;
|
|
if (fid == tokenmacfid_efc) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->efc;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 7:
|
|
if (!ds_bits(ds, &rex->ex_val, 14, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_pad) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->pad_u_shortF14 = rex->ex_val;
|
|
if (!ds_bits(ds, &rex->ex_val, 2, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_aap) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->aap = rex->ex_val;
|
|
break;
|
|
case 8:
|
|
if (!ds_u_short(ds, &tokenmac->cor))
|
|
goto out;
|
|
if (fid == tokenmacfid_cor) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->cor;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 9:
|
|
if (fid == tokenmacfid_lnna) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmaclnna1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 6, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 10:
|
|
if (!ds_u_long(ds, &tokenmac->pl))
|
|
goto out;
|
|
if (fid == tokenmacfid_pl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->pl;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 32:
|
|
if (!ds_u_short(ds, &tokenmac->rc))
|
|
goto out;
|
|
if (fid == tokenmacfid_rc) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->rc;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_bits(ds, &rex->ex_val, 4, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_rdcl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->rdcl = rex->ex_val;
|
|
if (!ds_bits(ds, &rex->ex_val, 4, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_rscl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->rscl = rex->ex_val;
|
|
if (!ds_u_char(ds, &tokenmac->rmvid))
|
|
goto out;
|
|
if (fid == tokenmacfid_rmvid) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->rmvid;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 33:
|
|
if (!ds_u_short(ds, &tokenmac->res))
|
|
goto out;
|
|
if (fid == tokenmacfid_res) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->res;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 34:
|
|
if (!ds_bits(ds, &rex->ex_val, 4, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_pad) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->pad_u_charF4 = rex->ex_val;
|
|
if (!ds_bits(ds, &rex->ex_val, 4, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_pcl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->pcl = rex->ex_val;
|
|
if (!ds_u_char(ds, &tokenmac->fty))
|
|
goto out;
|
|
if (fid == tokenmacfid_fty) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->fty;
|
|
ok = 1; goto out;
|
|
}
|
|
if (fid == tokenmacfid_mty) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacmty1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 4, DS_RELATIVE)) goto out;
|
|
if (fid == tokenmacfid_mnum) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacmnum1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 3, DS_RELATIVE)) goto out;
|
|
if (fid == tokenmacfid_snum) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacsnum1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 2, DS_RELATIVE)) goto out;
|
|
if (fid == tokenmacfid_seqn) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacseqn1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 7, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 35:
|
|
if (fid == tokenmacfid_rsml) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacrsml1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 10, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 38:
|
|
if (fid == tokenmacfid_wd) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacwd1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 1500, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 39:
|
|
/* XXX guarded backref: len */
|
|
if (fid == tokenmacfid_macf) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacmacf1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * (*tokenmac).len-2, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 40:
|
|
if (fid == tokenmacfid_sid) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacsid1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 6, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 41:
|
|
if (fid == tokenmacfid_rsss) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacrsss1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 6, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 42:
|
|
if (!ds_u_short(ds, &tokenmac->tsc))
|
|
goto out;
|
|
if (fid == tokenmacfid_tsc) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->tsc;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 43:
|
|
if (fid == tokenmacfid_ga) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacga1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 4, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 44:
|
|
if (fid == tokenmacfid_fa) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacfa1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 4, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 45:
|
|
if (!ds_u_char(ds, &tokenmac->lerr))
|
|
goto out;
|
|
if (fid == tokenmacfid_lerr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->lerr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->ierr))
|
|
goto out;
|
|
if (fid == tokenmacfid_ierr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->ierr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->berr))
|
|
goto out;
|
|
if (fid == tokenmacfid_berr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->berr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->acerr))
|
|
goto out;
|
|
if (fid == tokenmacfid_acerr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->acerr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->adt))
|
|
goto out;
|
|
if (fid == tokenmacfid_adt) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->adt;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->resv))
|
|
goto out;
|
|
if (fid == tokenmacfid_resv) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->resv;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 46:
|
|
if (!ds_u_char(ds, &tokenmac->lferr))
|
|
goto out;
|
|
if (fid == tokenmacfid_lferr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->lferr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->rj))
|
|
goto out;
|
|
if (fid == tokenmacfid_rj) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->rj;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->fcerr))
|
|
goto out;
|
|
if (fid == tokenmacfid_fcerr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->fcerr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->ferr))
|
|
goto out;
|
|
if (fid == tokenmacfid_ferr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->ferr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->terr))
|
|
goto out;
|
|
if (fid == tokenmacfid_terr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->terr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->resv))
|
|
goto out;
|
|
if (fid == tokenmacfid_resv) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->resv;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 48:
|
|
if (!ds_bits(ds, &rex->ex_val, 16, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_ec) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->ec_errorcodeF16 = rex->ex_val;
|
|
break;
|
|
}
|
|
} else {
|
|
if (!ds_u_char(ds, &tokenmac->llong))
|
|
goto out;
|
|
if (fid == tokenmacfid_llong) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->llong;
|
|
ok = 1; goto out;
|
|
}
|
|
if (fid == tokenmacfid_lsvid) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = pf = &tokenmac_fields[49];
|
|
pf->pf_cookie = 5;
|
|
ps->ps_slink = &tokenmac->lsvid;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_short(ds, &tokenmac->llen))
|
|
goto out;
|
|
if (fid == tokenmacfid_llen) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->llen;
|
|
ok = 1; goto out;
|
|
}
|
|
switch ((*tokenmac).lsvid.codept) {
|
|
case 1:
|
|
if (!ds_u_short(ds, &tokenmac->beacon_breason))
|
|
goto out;
|
|
if (fid == tokenmacfid_beacon) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->beacon_breason;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (fid == tokenmacfid_naun) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacnaun1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 6, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 3:
|
|
if (!ds_u_short(ds, &tokenmac->lrn))
|
|
goto out;
|
|
if (fid == tokenmacfid_lrn) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->lrn;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (!ds_u_long(ds, &tokenmac->apl))
|
|
goto out;
|
|
if (fid == tokenmacfid_apl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->apl;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (!ds_u_short(ds, &tokenmac->stv))
|
|
goto out;
|
|
if (fid == tokenmacfid_stv) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->stv;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 6:
|
|
if (!ds_u_short(ds, &tokenmac->efc))
|
|
goto out;
|
|
if (fid == tokenmacfid_efc) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->efc;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 7:
|
|
if (!ds_bits(ds, &rex->ex_val, 14, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_pad) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->pad_u_shortF14 = rex->ex_val;
|
|
if (!ds_bits(ds, &rex->ex_val, 2, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_aap) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->aap = rex->ex_val;
|
|
break;
|
|
case 8:
|
|
if (!ds_u_short(ds, &tokenmac->cor))
|
|
goto out;
|
|
if (fid == tokenmacfid_cor) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->cor;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 9:
|
|
if (fid == tokenmacfid_lnna) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmaclnna1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 6, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 10:
|
|
if (!ds_u_long(ds, &tokenmac->pl))
|
|
goto out;
|
|
if (fid == tokenmacfid_pl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->pl;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 32:
|
|
if (!ds_u_short(ds, &tokenmac->rc))
|
|
goto out;
|
|
if (fid == tokenmacfid_rc) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->rc;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_bits(ds, &rex->ex_val, 4, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_rdcl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->rdcl = rex->ex_val;
|
|
if (!ds_bits(ds, &rex->ex_val, 4, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_rscl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->rscl = rex->ex_val;
|
|
if (!ds_u_char(ds, &tokenmac->rmvid))
|
|
goto out;
|
|
if (fid == tokenmacfid_rmvid) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->rmvid;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 33:
|
|
if (!ds_u_short(ds, &tokenmac->res))
|
|
goto out;
|
|
if (fid == tokenmacfid_res) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->res;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 34:
|
|
if (!ds_bits(ds, &rex->ex_val, 4, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_pad) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->pad_u_charF4 = rex->ex_val;
|
|
if (!ds_bits(ds, &rex->ex_val, 4, DS_ZERO_EXTEND))
|
|
goto out;
|
|
if (fid == tokenmacfid_pcl) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
ok = 1; goto out;
|
|
}
|
|
tokenmac->pcl = rex->ex_val;
|
|
if (!ds_u_char(ds, &tokenmac->fty))
|
|
goto out;
|
|
if (fid == tokenmacfid_fty) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->fty;
|
|
ok = 1; goto out;
|
|
}
|
|
if (fid == tokenmacfid_mty) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacmty1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 4, DS_RELATIVE)) goto out;
|
|
if (fid == tokenmacfid_mnum) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacmnum1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 3, DS_RELATIVE)) goto out;
|
|
if (fid == tokenmacfid_snum) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacsnum1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 2, DS_RELATIVE)) goto out;
|
|
if (fid == tokenmacfid_seqn) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacseqn1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 7, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 35:
|
|
if (fid == tokenmacfid_rsml) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacrsml1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 10, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 38:
|
|
if (fid == tokenmacfid_wd) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacwd1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 1500, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 39:
|
|
/* XXX guarded backref: llen */
|
|
if (fid == tokenmacfid_macf) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacmacf1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * (*tokenmac).llen-4, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 40:
|
|
if (fid == tokenmacfid_sid) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacsid1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 6, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 41:
|
|
if (fid == tokenmacfid_rsss) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacrsss1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 6, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 42:
|
|
if (!ds_u_short(ds, &tokenmac->tsc))
|
|
goto out;
|
|
if (fid == tokenmacfid_tsc) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->tsc;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 43:
|
|
if (fid == tokenmacfid_ga) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacga1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 4, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 44:
|
|
if (fid == tokenmacfid_fa) {
|
|
rex->ex_op = EXOP_FIELD;
|
|
rex->ex_field = &tokenmacfa1_element;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_seek(ds, 1 * 4, DS_RELATIVE)) goto out;
|
|
break;
|
|
case 45:
|
|
if (!ds_u_char(ds, &tokenmac->lerr))
|
|
goto out;
|
|
if (fid == tokenmacfid_lerr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->lerr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->ierr))
|
|
goto out;
|
|
if (fid == tokenmacfid_ierr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->ierr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->berr))
|
|
goto out;
|
|
if (fid == tokenmacfid_berr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->berr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->acerr))
|
|
goto out;
|
|
if (fid == tokenmacfid_acerr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->acerr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->adt))
|
|
goto out;
|
|
if (fid == tokenmacfid_adt) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->adt;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->resv))
|
|
goto out;
|
|
if (fid == tokenmacfid_resv) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->resv;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 46:
|
|
if (!ds_u_char(ds, &tokenmac->lferr))
|
|
goto out;
|
|
if (fid == tokenmacfid_lferr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->lferr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->rj))
|
|
goto out;
|
|
if (fid == tokenmacfid_rj) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->rj;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->fcerr))
|
|
goto out;
|
|
if (fid == tokenmacfid_fcerr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->fcerr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->ferr))
|
|
goto out;
|
|
if (fid == tokenmacfid_ferr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->ferr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->terr))
|
|
goto out;
|
|
if (fid == tokenmacfid_terr) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->terr;
|
|
ok = 1; goto out;
|
|
}
|
|
if (!ds_u_char(ds, &tokenmac->resv))
|
|
goto out;
|
|
if (fid == tokenmacfid_resv) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->resv;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
case 48:
|
|
if (!ds_u_short(ds, &tokenmac->ec_errorcode))
|
|
goto out;
|
|
if (fid == tokenmacfid_ec) {
|
|
rex->ex_op = EXOP_NUMBER;
|
|
rex->ex_val = tokenmac->ec_errorcode;
|
|
ok = 1; goto out;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
out:
|
|
PS_POP(ps);
|
|
return ok;
|
|
} /* tokenmac_fetch */
|
|
|
|
static void
|
|
tokenmacsvidfrmt_decode(DataStream *ds, ProtoStack *ps, PacketView *pv)
|
|
{
|
|
struct tokenmacsvidfrmt *svidfrmt = ps->ps_slink;
|
|
long val;
|
|
|
|
pv_push(pv, ps->ps_top->psf_proto,
|
|
tokenmacsvidfrmt_struct.pst_parent->pf_name,
|
|
tokenmacsvidfrmt_struct.pst_parent->pf_namlen,
|
|
tokenmacsvidfrmt_struct.pst_parent->pf_title);
|
|
if (!ds_bits(ds, &val, 1, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
svidfrmt->cs = val;
|
|
pv_showfield(pv, &tokenmacsvidfrmt_fields[0], &val,
|
|
"%-8s", en_name(&tokenmaccsbit, svidfrmt->cs));
|
|
if (!ds_bits(ds, &val, 1, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
svidfrmt->ro = val;
|
|
pv_showfield(pv, &tokenmacsvidfrmt_fields[1], &val,
|
|
"%-8s", en_name(&tokenmacrobit, svidfrmt->ro));
|
|
if (!ds_bits(ds, &val, 6, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
svidfrmt->codept = val;
|
|
pv_showfield(pv, &tokenmacsvidfrmt_fields[2], &val,
|
|
"%-28s", en_name(&tokenmacsubvectype, svidfrmt->codept));
|
|
out: pv_pop(pv);
|
|
} /* tokenmacsvidfrmt_decode */
|
|
|
|
static void
|
|
tokenmac_decode(DataStream *ds, ProtoStack *ps, PacketView *pv)
|
|
{
|
|
struct tokenmac *tokenmac = &tokenmac_frame;
|
|
Protocol *pr;
|
|
long val;
|
|
|
|
PS_PUSH(ps, &tokenmac->_psf, &tokenmac_proto);
|
|
if (!ds_u_short(ds, &tokenmac->ll))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[0], &tokenmac->ll,
|
|
"%-5u", tokenmac->ll);
|
|
if (!ds_bits(ds, &val, 4, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->dcl = val;
|
|
pv_showfield(pv, &tokenmac_fields[1], &val,
|
|
"%-18s", en_name(&tokenmacfunclass, tokenmac->dcl));
|
|
if (!ds_bits(ds, &val, 4, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->scl = val;
|
|
pv_showfield(pv, &tokenmac_fields[2], &val,
|
|
"%-18s", en_name(&tokenmacfunclass, tokenmac->scl));
|
|
if (!ds_u_char(ds, &tokenmac->mvid))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[3], &tokenmac->mvid,
|
|
"%-36s", en_name(&tokenmacmvidcmd, tokenmac->mvid));
|
|
while (mac_do_subvector(ds)) {
|
|
{ int tell = ds_tellbit(ds);
|
|
if (!ds_u_char(ds, &tokenmac->len))
|
|
return;
|
|
ds_seekbit(ds, tell, DS_ABSOLUTE); }
|
|
if ((*tokenmac).len!=255) {
|
|
if (!ds_u_char(ds, &tokenmac->len))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[4], &tokenmac->len,
|
|
"%-3u", tokenmac->len);
|
|
ps->ps_slink = &tokenmac->svid;
|
|
tokenmacsvidfrmt_struct.pst_parent = &tokenmac_fields[5];
|
|
tokenmacsvidfrmt_decode(ds, ps, pv);
|
|
switch ((*tokenmac).svid.codept) {
|
|
case 1:
|
|
if (!ds_bits(ds, &val, 16, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->beacon_breasonF16 = val;
|
|
pv_showfield(pv, &tokenmac_fields[6], &val,
|
|
"%-31s", en_name(&tokenmacbreason, tokenmac->beacon_breasonF16));
|
|
break;
|
|
case 2:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 6; i0++) {
|
|
char name[18], title[21];
|
|
tokenmacnaun1_element.pf_namlen = nsprintf(name, sizeof name, "naun[%d]", i0);
|
|
nsprintf(title, sizeof title, "Address[%d]", i0);
|
|
tokenmacnaun1_element.pf_name = name, tokenmacnaun1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->naun[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacnaun1_element, &tokenmac->naun[i0],
|
|
"%-3u", tokenmac->naun[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 3:
|
|
if (!ds_u_short(ds, &tokenmac->lrn))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[8], &tokenmac->lrn,
|
|
"%-5u", tokenmac->lrn);
|
|
break;
|
|
case 4:
|
|
if (!ds_u_long(ds, &tokenmac->apl))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[9], &tokenmac->apl,
|
|
"%-10lu", tokenmac->apl);
|
|
break;
|
|
case 5:
|
|
if (!ds_u_short(ds, &tokenmac->stv))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[10], &tokenmac->stv,
|
|
"%-5u", tokenmac->stv);
|
|
break;
|
|
case 6:
|
|
if (!ds_u_short(ds, &tokenmac->efc))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[11], &tokenmac->efc,
|
|
"%-5u", tokenmac->efc);
|
|
break;
|
|
case 7:
|
|
if (!ds_bits(ds, &val, 14, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->pad_u_shortF14 = val;
|
|
tokenmac_fields[12].pf_size = -14;
|
|
pv_showfield(pv, &tokenmac_fields[12], &val,
|
|
"%-5u", tokenmac->pad_u_shortF14);
|
|
if (!ds_bits(ds, &val, 2, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->aap = val;
|
|
pv_showfield(pv, &tokenmac_fields[13], &val,
|
|
"%-3u", tokenmac->aap);
|
|
break;
|
|
case 8:
|
|
if (!ds_u_short(ds, &tokenmac->cor))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[14], &tokenmac->cor,
|
|
"%-5u", tokenmac->cor);
|
|
break;
|
|
case 9:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 6; i0++) {
|
|
char name[18], title[21];
|
|
tokenmaclnna1_element.pf_namlen = nsprintf(name, sizeof name, "lnna[%d]", i0);
|
|
nsprintf(title, sizeof title, "Address[%d]", i0);
|
|
tokenmaclnna1_element.pf_name = name, tokenmaclnna1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->lnna[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmaclnna1_element, &tokenmac->lnna[i0],
|
|
"%-3u", tokenmac->lnna[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 10:
|
|
if (!ds_u_long(ds, &tokenmac->pl))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[16], &tokenmac->pl,
|
|
"%-10lu", tokenmac->pl);
|
|
break;
|
|
case 32:
|
|
if (!ds_u_short(ds, &tokenmac->rc))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[17], &tokenmac->rc,
|
|
"%-25s", en_name(&tokenmacrespcode, tokenmac->rc));
|
|
if (!ds_bits(ds, &val, 4, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->rdcl = val;
|
|
pv_showfield(pv, &tokenmac_fields[18], &val,
|
|
"%-18s", en_name(&tokenmacfunclass, tokenmac->rdcl));
|
|
if (!ds_bits(ds, &val, 4, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->rscl = val;
|
|
pv_showfield(pv, &tokenmac_fields[19], &val,
|
|
"%-18s", en_name(&tokenmacfunclass, tokenmac->rscl));
|
|
if (!ds_u_char(ds, &tokenmac->rmvid))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[20], &tokenmac->rmvid,
|
|
"%-36s", en_name(&tokenmacmvidcmd, tokenmac->rmvid));
|
|
break;
|
|
case 33:
|
|
if (!ds_u_short(ds, &tokenmac->res))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[21], &tokenmac->res,
|
|
"%-5u [%u]", tokenmac->res, 0);
|
|
break;
|
|
case 34:
|
|
if (!ds_bits(ds, &val, 4, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->pad_u_charF4 = val;
|
|
tokenmac_fields[12].pf_size = -4;
|
|
pv_showfield(pv, &tokenmac_fields[12], &val,
|
|
"%-3u", tokenmac->pad_u_charF4);
|
|
if (!ds_bits(ds, &val, 4, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->pcl = val;
|
|
pv_showfield(pv, &tokenmac_fields[22], &val,
|
|
"%-19s", en_name(&tokenmacprodcode, tokenmac->pcl));
|
|
if (!ds_u_char(ds, &tokenmac->fty))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[23], &tokenmac->fty,
|
|
"%-26s", en_name(&tokenmacprodinst, tokenmac->fty));
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 4; i0++) {
|
|
char name[17], title[34];
|
|
tokenmacmty1_element.pf_namlen = nsprintf(name, sizeof name, "mty[%d]", i0);
|
|
nsprintf(title, sizeof title, "Machine Type, EBCDIC[%d]", i0);
|
|
tokenmacmty1_element.pf_name = name, tokenmacmty1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->mty[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacmty1_element, &tokenmac->mty[i0],
|
|
"%-3u", tokenmac->mty[i0]);
|
|
} /* for i0 */
|
|
}
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 3; i0++) {
|
|
char name[18], title[39];
|
|
tokenmacmnum1_element.pf_namlen = nsprintf(name, sizeof name, "mnum[%d]", i0);
|
|
nsprintf(title, sizeof title, "Machine Model Num, EBCDIC[%d]", i0);
|
|
tokenmacmnum1_element.pf_name = name, tokenmacmnum1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->mnum[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacmnum1_element, &tokenmac->mnum[i0],
|
|
"%-3u", tokenmac->mnum[i0]);
|
|
} /* for i0 */
|
|
}
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 2; i0++) {
|
|
char name[18], title[41];
|
|
tokenmacsnum1_element.pf_namlen = nsprintf(name, sizeof name, "snum[%d]", i0);
|
|
nsprintf(title, sizeof title, "Serial Num Modifier, EBCDIC[%d]", i0);
|
|
tokenmacsnum1_element.pf_name = name, tokenmacsnum1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->snum[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacsnum1_element, &tokenmac->snum[i0],
|
|
"%-3u", tokenmac->snum[i0]);
|
|
} /* for i0 */
|
|
}
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 7; i0++) {
|
|
char name[18], title[34];
|
|
tokenmacseqn1_element.pf_namlen = nsprintf(name, sizeof name, "seqn[%d]", i0);
|
|
nsprintf(title, sizeof title, "Sequence Num, EBCDIC[%d]", i0);
|
|
tokenmacseqn1_element.pf_name = name, tokenmacseqn1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->seqn[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacseqn1_element, &tokenmac->seqn[i0],
|
|
"%-3u", tokenmac->seqn[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 35:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 10; i0++) {
|
|
char name[18], title[40];
|
|
tokenmacrsml1_element.pf_namlen = nsprintf(name, sizeof name, "rsml[%d]", i0);
|
|
nsprintf(title, sizeof title, "of Sending Station, EBCDIC[%d]", i0);
|
|
tokenmacrsml1_element.pf_name = name, tokenmacrsml1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->rsml[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacrsml1_element, &tokenmac->rsml[i0],
|
|
"%-3u", tokenmac->rsml[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 38:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 1500; i0++) {
|
|
char name[16], title[27];
|
|
tokenmacwd1_element.pf_namlen = nsprintf(name, sizeof name, "wd[%d]", i0);
|
|
nsprintf(title, sizeof title, "for Lobe Test[%d]", i0);
|
|
tokenmacwd1_element.pf_name = name, tokenmacwd1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->wd[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacwd1_element, &tokenmac->wd[i0],
|
|
"%-3u", tokenmac->wd[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 39:
|
|
/* XXX guarded backref: len */
|
|
{ int i0;
|
|
tokenmac->macf = renew(tokenmac->macf, (*tokenmac).len-2, unsigned char);
|
|
if (tokenmac->macf == 0) goto out;
|
|
for (i0 = 0; i0 < (*tokenmac).len-2; i0++) {
|
|
char name[18], title[23];
|
|
tokenmacmacf1_element.pf_namlen = nsprintf(name, sizeof name, "macf[%d]", i0);
|
|
nsprintf(title, sizeof title, "Mac Frame[%d]", i0);
|
|
tokenmacmacf1_element.pf_name = name, tokenmacmacf1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->macf[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacmacf1_element, &tokenmac->macf[i0],
|
|
"%-3u", tokenmac->macf[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 40:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 6; i0++) {
|
|
char name[17], title[21];
|
|
tokenmacsid1_element.pf_namlen = nsprintf(name, sizeof name, "sid[%d]", i0);
|
|
nsprintf(title, sizeof title, "Address[%d]", i0);
|
|
tokenmacsid1_element.pf_name = name, tokenmacsid1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->sid[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacsid1_element, &tokenmac->sid[i0],
|
|
"%-3u", tokenmac->sid[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 41:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 6; i0++) {
|
|
char name[18], title[20];
|
|
tokenmacrsss1_element.pf_namlen = nsprintf(name, sizeof name, "rsss[%d]", i0);
|
|
nsprintf(title, sizeof title, "Status[%d]", i0);
|
|
tokenmacrsss1_element.pf_name = name, tokenmacrsss1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->rsss[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacrsss1_element, &tokenmac->rsss[i0],
|
|
"%-3u", tokenmac->rsss[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 42:
|
|
if (!ds_u_short(ds, &tokenmac->tsc))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[33], &tokenmac->tsc,
|
|
"%-5u", tokenmac->tsc);
|
|
break;
|
|
case 43:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 4; i0++) {
|
|
char name[16], title[35];
|
|
tokenmacga1_element.pf_namlen = nsprintf(name, sizeof name, "ga[%d]", i0);
|
|
nsprintf(title, sizeof title, "Lower 4 Bytes of Addr[%d]", i0);
|
|
tokenmacga1_element.pf_name = name, tokenmacga1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->ga[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacga1_element, &tokenmac->ga[i0],
|
|
"%-3u", tokenmac->ga[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 44:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 4; i0++) {
|
|
char name[16], title[40];
|
|
tokenmacfa1_element.pf_namlen = nsprintf(name, sizeof name, "fa[%d]", i0);
|
|
nsprintf(title, sizeof title, "Recognized by this Station[%d]", i0);
|
|
tokenmacfa1_element.pf_name = name, tokenmacfa1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->fa[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacfa1_element, &tokenmac->fa[i0],
|
|
"%-3u", tokenmac->fa[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 45:
|
|
if (!ds_u_char(ds, &tokenmac->lerr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[36], &tokenmac->lerr,
|
|
"%-3u", tokenmac->lerr);
|
|
if (!ds_u_char(ds, &tokenmac->ierr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[37], &tokenmac->ierr,
|
|
"%-3u", tokenmac->ierr);
|
|
if (!ds_u_char(ds, &tokenmac->berr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[38], &tokenmac->berr,
|
|
"%-3u", tokenmac->berr);
|
|
if (!ds_u_char(ds, &tokenmac->acerr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[39], &tokenmac->acerr,
|
|
"%-3u", tokenmac->acerr);
|
|
if (!ds_u_char(ds, &tokenmac->adt))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[40], &tokenmac->adt,
|
|
"%-3u", tokenmac->adt);
|
|
if (!ds_u_char(ds, &tokenmac->resv))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[41], &tokenmac->resv,
|
|
"%-3u", tokenmac->resv);
|
|
break;
|
|
case 46:
|
|
if (!ds_u_char(ds, &tokenmac->lferr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[42], &tokenmac->lferr,
|
|
"%-3u", tokenmac->lferr);
|
|
if (!ds_u_char(ds, &tokenmac->rj))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[43], &tokenmac->rj,
|
|
"%-3u", tokenmac->rj);
|
|
if (!ds_u_char(ds, &tokenmac->fcerr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[44], &tokenmac->fcerr,
|
|
"%-3u", tokenmac->fcerr);
|
|
if (!ds_u_char(ds, &tokenmac->ferr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[45], &tokenmac->ferr,
|
|
"%-3u", tokenmac->ferr);
|
|
if (!ds_u_char(ds, &tokenmac->terr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[46], &tokenmac->terr,
|
|
"%-3u", tokenmac->terr);
|
|
if (!ds_u_char(ds, &tokenmac->resv))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[41], &tokenmac->resv,
|
|
"%-3u", tokenmac->resv);
|
|
break;
|
|
case 48:
|
|
if (!ds_bits(ds, &val, 16, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->ec_errorcodeF16 = val;
|
|
pv_showfield(pv, &tokenmac_fields[47], &val,
|
|
"%-16s", en_name(&tokenmacerrorcode, tokenmac->ec_errorcodeF16));
|
|
break;
|
|
}
|
|
} else {
|
|
if (!ds_u_char(ds, &tokenmac->llong))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[48], &tokenmac->llong,
|
|
"%-3u", tokenmac->llong);
|
|
ps->ps_slink = &tokenmac->lsvid;
|
|
tokenmacsvidfrmt_struct.pst_parent = &tokenmac_fields[49];
|
|
tokenmacsvidfrmt_decode(ds, ps, pv);
|
|
if (!ds_u_short(ds, &tokenmac->llen))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[50], &tokenmac->llen,
|
|
"%-5u", tokenmac->llen);
|
|
switch ((*tokenmac).lsvid.codept) {
|
|
case 1:
|
|
if (!ds_u_short(ds, &tokenmac->beacon_breason))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[6], &tokenmac->beacon_breason,
|
|
"%-31s", en_name(&tokenmacbreason, tokenmac->beacon_breason));
|
|
break;
|
|
case 2:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 6; i0++) {
|
|
char name[18], title[21];
|
|
tokenmacnaun1_element.pf_namlen = nsprintf(name, sizeof name, "naun[%d]", i0);
|
|
nsprintf(title, sizeof title, "Address[%d]", i0);
|
|
tokenmacnaun1_element.pf_name = name, tokenmacnaun1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->naun[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacnaun1_element, &tokenmac->naun[i0],
|
|
"%-3u", tokenmac->naun[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 3:
|
|
if (!ds_u_short(ds, &tokenmac->lrn))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[8], &tokenmac->lrn,
|
|
"%-5u", tokenmac->lrn);
|
|
break;
|
|
case 4:
|
|
if (!ds_u_long(ds, &tokenmac->apl))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[9], &tokenmac->apl,
|
|
"%-10lu", tokenmac->apl);
|
|
break;
|
|
case 5:
|
|
if (!ds_u_short(ds, &tokenmac->stv))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[10], &tokenmac->stv,
|
|
"%-5u", tokenmac->stv);
|
|
break;
|
|
case 6:
|
|
if (!ds_u_short(ds, &tokenmac->efc))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[11], &tokenmac->efc,
|
|
"%-5u", tokenmac->efc);
|
|
break;
|
|
case 7:
|
|
if (!ds_bits(ds, &val, 14, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->pad_u_shortF14 = val;
|
|
tokenmac_fields[12].pf_size = -14;
|
|
pv_showfield(pv, &tokenmac_fields[12], &val,
|
|
"%-5u", tokenmac->pad_u_shortF14);
|
|
if (!ds_bits(ds, &val, 2, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->aap = val;
|
|
pv_showfield(pv, &tokenmac_fields[13], &val,
|
|
"%-3u", tokenmac->aap);
|
|
break;
|
|
case 8:
|
|
if (!ds_u_short(ds, &tokenmac->cor))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[14], &tokenmac->cor,
|
|
"%-5u", tokenmac->cor);
|
|
break;
|
|
case 9:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 6; i0++) {
|
|
char name[18], title[21];
|
|
tokenmaclnna1_element.pf_namlen = nsprintf(name, sizeof name, "lnna[%d]", i0);
|
|
nsprintf(title, sizeof title, "Address[%d]", i0);
|
|
tokenmaclnna1_element.pf_name = name, tokenmaclnna1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->lnna[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmaclnna1_element, &tokenmac->lnna[i0],
|
|
"%-3u", tokenmac->lnna[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 10:
|
|
if (!ds_u_long(ds, &tokenmac->pl))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[16], &tokenmac->pl,
|
|
"%-10lu", tokenmac->pl);
|
|
break;
|
|
case 32:
|
|
if (!ds_u_short(ds, &tokenmac->rc))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[17], &tokenmac->rc,
|
|
"%-25s", en_name(&tokenmacrespcode, tokenmac->rc));
|
|
if (!ds_bits(ds, &val, 4, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->rdcl = val;
|
|
pv_showfield(pv, &tokenmac_fields[18], &val,
|
|
"%-18s", en_name(&tokenmacfunclass, tokenmac->rdcl));
|
|
if (!ds_bits(ds, &val, 4, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->rscl = val;
|
|
pv_showfield(pv, &tokenmac_fields[19], &val,
|
|
"%-18s", en_name(&tokenmacfunclass, tokenmac->rscl));
|
|
if (!ds_u_char(ds, &tokenmac->rmvid))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[20], &tokenmac->rmvid,
|
|
"%-36s", en_name(&tokenmacmvidcmd, tokenmac->rmvid));
|
|
break;
|
|
case 33:
|
|
if (!ds_u_short(ds, &tokenmac->res))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[21], &tokenmac->res,
|
|
"%-5u [%u]", tokenmac->res, 0);
|
|
break;
|
|
case 34:
|
|
if (!ds_bits(ds, &val, 4, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->pad_u_charF4 = val;
|
|
tokenmac_fields[12].pf_size = -4;
|
|
pv_showfield(pv, &tokenmac_fields[12], &val,
|
|
"%-3u", tokenmac->pad_u_charF4);
|
|
if (!ds_bits(ds, &val, 4, DS_ZERO_EXTEND))
|
|
ds->ds_count = 0;
|
|
tokenmac->pcl = val;
|
|
pv_showfield(pv, &tokenmac_fields[22], &val,
|
|
"%-19s", en_name(&tokenmacprodcode, tokenmac->pcl));
|
|
if (!ds_u_char(ds, &tokenmac->fty))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[23], &tokenmac->fty,
|
|
"%-26s", en_name(&tokenmacprodinst, tokenmac->fty));
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 4; i0++) {
|
|
char name[17], title[34];
|
|
tokenmacmty1_element.pf_namlen = nsprintf(name, sizeof name, "mty[%d]", i0);
|
|
nsprintf(title, sizeof title, "Machine Type, EBCDIC[%d]", i0);
|
|
tokenmacmty1_element.pf_name = name, tokenmacmty1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->mty[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacmty1_element, &tokenmac->mty[i0],
|
|
"%-3u", tokenmac->mty[i0]);
|
|
} /* for i0 */
|
|
}
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 3; i0++) {
|
|
char name[18], title[39];
|
|
tokenmacmnum1_element.pf_namlen = nsprintf(name, sizeof name, "mnum[%d]", i0);
|
|
nsprintf(title, sizeof title, "Machine Model Num, EBCDIC[%d]", i0);
|
|
tokenmacmnum1_element.pf_name = name, tokenmacmnum1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->mnum[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacmnum1_element, &tokenmac->mnum[i0],
|
|
"%-3u", tokenmac->mnum[i0]);
|
|
} /* for i0 */
|
|
}
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 2; i0++) {
|
|
char name[18], title[41];
|
|
tokenmacsnum1_element.pf_namlen = nsprintf(name, sizeof name, "snum[%d]", i0);
|
|
nsprintf(title, sizeof title, "Serial Num Modifier, EBCDIC[%d]", i0);
|
|
tokenmacsnum1_element.pf_name = name, tokenmacsnum1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->snum[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacsnum1_element, &tokenmac->snum[i0],
|
|
"%-3u", tokenmac->snum[i0]);
|
|
} /* for i0 */
|
|
}
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 7; i0++) {
|
|
char name[18], title[34];
|
|
tokenmacseqn1_element.pf_namlen = nsprintf(name, sizeof name, "seqn[%d]", i0);
|
|
nsprintf(title, sizeof title, "Sequence Num, EBCDIC[%d]", i0);
|
|
tokenmacseqn1_element.pf_name = name, tokenmacseqn1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->seqn[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacseqn1_element, &tokenmac->seqn[i0],
|
|
"%-3u", tokenmac->seqn[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 35:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 10; i0++) {
|
|
char name[18], title[40];
|
|
tokenmacrsml1_element.pf_namlen = nsprintf(name, sizeof name, "rsml[%d]", i0);
|
|
nsprintf(title, sizeof title, "of Sending Station, EBCDIC[%d]", i0);
|
|
tokenmacrsml1_element.pf_name = name, tokenmacrsml1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->rsml[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacrsml1_element, &tokenmac->rsml[i0],
|
|
"%-3u", tokenmac->rsml[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 38:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 1500; i0++) {
|
|
char name[16], title[27];
|
|
tokenmacwd1_element.pf_namlen = nsprintf(name, sizeof name, "wd[%d]", i0);
|
|
nsprintf(title, sizeof title, "for Lobe Test[%d]", i0);
|
|
tokenmacwd1_element.pf_name = name, tokenmacwd1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->wd[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacwd1_element, &tokenmac->wd[i0],
|
|
"%-3u", tokenmac->wd[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 39:
|
|
/* XXX guarded backref: llen */
|
|
{ int i0;
|
|
tokenmac->macf = renew(tokenmac->macf, (*tokenmac).llen-4, unsigned char);
|
|
if (tokenmac->macf == 0) goto out;
|
|
for (i0 = 0; i0 < (*tokenmac).llen-4; i0++) {
|
|
char name[18], title[23];
|
|
tokenmacmacf1_element.pf_namlen = nsprintf(name, sizeof name, "macf[%d]", i0);
|
|
nsprintf(title, sizeof title, "Mac Frame[%d]", i0);
|
|
tokenmacmacf1_element.pf_name = name, tokenmacmacf1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->macf[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacmacf1_element, &tokenmac->macf[i0],
|
|
"%-3u", tokenmac->macf[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 40:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 6; i0++) {
|
|
char name[17], title[21];
|
|
tokenmacsid1_element.pf_namlen = nsprintf(name, sizeof name, "sid[%d]", i0);
|
|
nsprintf(title, sizeof title, "Address[%d]", i0);
|
|
tokenmacsid1_element.pf_name = name, tokenmacsid1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->sid[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacsid1_element, &tokenmac->sid[i0],
|
|
"%-3u", tokenmac->sid[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 41:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 6; i0++) {
|
|
char name[18], title[20];
|
|
tokenmacrsss1_element.pf_namlen = nsprintf(name, sizeof name, "rsss[%d]", i0);
|
|
nsprintf(title, sizeof title, "Status[%d]", i0);
|
|
tokenmacrsss1_element.pf_name = name, tokenmacrsss1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->rsss[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacrsss1_element, &tokenmac->rsss[i0],
|
|
"%-3u", tokenmac->rsss[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 42:
|
|
if (!ds_u_short(ds, &tokenmac->tsc))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[33], &tokenmac->tsc,
|
|
"%-5u", tokenmac->tsc);
|
|
break;
|
|
case 43:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 4; i0++) {
|
|
char name[16], title[35];
|
|
tokenmacga1_element.pf_namlen = nsprintf(name, sizeof name, "ga[%d]", i0);
|
|
nsprintf(title, sizeof title, "Lower 4 Bytes of Addr[%d]", i0);
|
|
tokenmacga1_element.pf_name = name, tokenmacga1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->ga[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacga1_element, &tokenmac->ga[i0],
|
|
"%-3u", tokenmac->ga[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 44:
|
|
{ int i0;
|
|
for (i0 = 0; i0 < 4; i0++) {
|
|
char name[16], title[40];
|
|
tokenmacfa1_element.pf_namlen = nsprintf(name, sizeof name, "fa[%d]", i0);
|
|
nsprintf(title, sizeof title, "Recognized by this Station[%d]", i0);
|
|
tokenmacfa1_element.pf_name = name, tokenmacfa1_element.pf_title = title;
|
|
if (!ds_u_char(ds, &tokenmac->fa[i0]))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmacfa1_element, &tokenmac->fa[i0],
|
|
"%-3u", tokenmac->fa[i0]);
|
|
} /* for i0 */
|
|
}
|
|
break;
|
|
case 45:
|
|
if (!ds_u_char(ds, &tokenmac->lerr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[36], &tokenmac->lerr,
|
|
"%-3u", tokenmac->lerr);
|
|
if (!ds_u_char(ds, &tokenmac->ierr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[37], &tokenmac->ierr,
|
|
"%-3u", tokenmac->ierr);
|
|
if (!ds_u_char(ds, &tokenmac->berr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[38], &tokenmac->berr,
|
|
"%-3u", tokenmac->berr);
|
|
if (!ds_u_char(ds, &tokenmac->acerr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[39], &tokenmac->acerr,
|
|
"%-3u", tokenmac->acerr);
|
|
if (!ds_u_char(ds, &tokenmac->adt))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[40], &tokenmac->adt,
|
|
"%-3u", tokenmac->adt);
|
|
if (!ds_u_char(ds, &tokenmac->resv))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[41], &tokenmac->resv,
|
|
"%-3u", tokenmac->resv);
|
|
break;
|
|
case 46:
|
|
if (!ds_u_char(ds, &tokenmac->lferr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[42], &tokenmac->lferr,
|
|
"%-3u", tokenmac->lferr);
|
|
if (!ds_u_char(ds, &tokenmac->rj))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[43], &tokenmac->rj,
|
|
"%-3u", tokenmac->rj);
|
|
if (!ds_u_char(ds, &tokenmac->fcerr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[44], &tokenmac->fcerr,
|
|
"%-3u", tokenmac->fcerr);
|
|
if (!ds_u_char(ds, &tokenmac->ferr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[45], &tokenmac->ferr,
|
|
"%-3u", tokenmac->ferr);
|
|
if (!ds_u_char(ds, &tokenmac->terr))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[46], &tokenmac->terr,
|
|
"%-3u", tokenmac->terr);
|
|
if (!ds_u_char(ds, &tokenmac->resv))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[41], &tokenmac->resv,
|
|
"%-3u", tokenmac->resv);
|
|
break;
|
|
case 48:
|
|
if (!ds_u_short(ds, &tokenmac->ec_errorcode))
|
|
ds->ds_count = 0;
|
|
pv_showfield(pv, &tokenmac_fields[47], &tokenmac->ec_errorcode,
|
|
"%-16s", en_name(&tokenmacerrorcode, tokenmac->ec_errorcode));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
pr = 0;
|
|
pv_decodeframe(pv, pr, ds, ps);
|
|
out:
|
|
PS_POP(ps);
|
|
} /* tokenmac_decode */
|