1
0
Files
irix-657m-src/irix/cmd/netman/lib/tokenring/tokenmac.c
2022-09-29 17:59:04 +03:00

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 */