1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /****************************************************************************** 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * (C)Copyright 1998,1999 SysKonnect, 5*4882a593Smuzhiyun * a business unit of Schneider & Koch & Co. Datensysteme GmbH. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * The information in this file is provided "AS IS" without warranty. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun ******************************************************************************/ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* 12*4882a593Smuzhiyun * SMT 7.2 frame definitions 13*4882a593Smuzhiyun */ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #ifndef _SMT_ 16*4882a593Smuzhiyun #define _SMT_ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* #define SMT5_10 */ 19*4882a593Smuzhiyun #define SMT6_10 20*4882a593Smuzhiyun #define SMT7_20 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define OPT_PMF /* if parameter management is supported */ 23*4882a593Smuzhiyun #define OPT_SRF /* if status report is supported */ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* 26*4882a593Smuzhiyun * SMT frame version 5.1 27*4882a593Smuzhiyun */ 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #define SMT_VID 0x0001 /* V 5.1 .. 6.1 */ 30*4882a593Smuzhiyun #define SMT_VID_2 0x0002 /* V 7.2 */ 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun struct smt_sid { 33*4882a593Smuzhiyun u_char sid_oem[2] ; /* implementation spec. */ 34*4882a593Smuzhiyun struct fddi_addr sid_node ; /* node address */ 35*4882a593Smuzhiyun } ; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun typedef u_char t_station_id[8] ; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun /* 40*4882a593Smuzhiyun * note on alignment : 41*4882a593Smuzhiyun * sizeof(struct smt_header) = 32 42*4882a593Smuzhiyun * all parameters are long aligned 43*4882a593Smuzhiyun * if struct smt_header starts at offset 0, all longs are aligned correctly 44*4882a593Smuzhiyun * (FC starts at offset 3) 45*4882a593Smuzhiyun */ 46*4882a593Smuzhiyun _packed struct smt_header { 47*4882a593Smuzhiyun struct fddi_addr smt_dest ; /* destination address */ 48*4882a593Smuzhiyun struct fddi_addr smt_source ; /* source address */ 49*4882a593Smuzhiyun u_char smt_class ; /* NIF, SIF ... */ 50*4882a593Smuzhiyun u_char smt_type ; /* req., response .. */ 51*4882a593Smuzhiyun u_short smt_version ; /* version id */ 52*4882a593Smuzhiyun u_int smt_tid ; /* transaction ID */ 53*4882a593Smuzhiyun struct smt_sid smt_sid ; /* station ID */ 54*4882a593Smuzhiyun u_short smt_pad ; /* pad with 0 */ 55*4882a593Smuzhiyun u_short smt_len ; /* length of info field */ 56*4882a593Smuzhiyun } ; 57*4882a593Smuzhiyun #define SWAP_SMTHEADER "662sl8ss" 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #if 0 60*4882a593Smuzhiyun /* 61*4882a593Smuzhiyun * MAC FC values 62*4882a593Smuzhiyun */ 63*4882a593Smuzhiyun #define FC_SMT_INFO 0x41 /* SMT info */ 64*4882a593Smuzhiyun #define FC_SMT_NSA 0x4f /* SMT Next Station Addressing */ 65*4882a593Smuzhiyun #endif 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun /* 69*4882a593Smuzhiyun * type codes 70*4882a593Smuzhiyun */ 71*4882a593Smuzhiyun #define SMT_ANNOUNCE 0x01 /* announcement */ 72*4882a593Smuzhiyun #define SMT_REQUEST 0x02 /* request */ 73*4882a593Smuzhiyun #define SMT_REPLY 0x03 /* reply */ 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun /* 76*4882a593Smuzhiyun * class codes 77*4882a593Smuzhiyun */ 78*4882a593Smuzhiyun #define SMT_NIF 0x01 /* neighbor information frames */ 79*4882a593Smuzhiyun #define SMT_SIF_CONFIG 0x02 /* station information configuration */ 80*4882a593Smuzhiyun #define SMT_SIF_OPER 0x03 /* station information operation */ 81*4882a593Smuzhiyun #define SMT_ECF 0x04 /* echo frames */ 82*4882a593Smuzhiyun #define SMT_RAF 0x05 /* resource allocation */ 83*4882a593Smuzhiyun #define SMT_RDF 0x06 /* request denied */ 84*4882a593Smuzhiyun #define SMT_SRF 0x07 /* status report */ 85*4882a593Smuzhiyun #define SMT_PMF_GET 0x08 /* parameter management get */ 86*4882a593Smuzhiyun #define SMT_PMF_SET 0x09 /* parameter management set */ 87*4882a593Smuzhiyun #define SMT_ESF 0xff /* extended service */ 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun #define SMT_MAX_ECHO_LEN 4458 /* max length of SMT Echo */ 90*4882a593Smuzhiyun #if defined(CONC) || defined(CONC_II) 91*4882a593Smuzhiyun #define SMT_TEST_ECHO_LEN 50 /* test length of SMT Echo */ 92*4882a593Smuzhiyun #else 93*4882a593Smuzhiyun #define SMT_TEST_ECHO_LEN SMT_MAX_ECHO_LEN /* test length */ 94*4882a593Smuzhiyun #endif 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun #define SMT_MAX_INFO_LEN (4352-20) /* max length for SMT info */ 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun /* 100*4882a593Smuzhiyun * parameter types 101*4882a593Smuzhiyun */ 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun struct smt_para { 104*4882a593Smuzhiyun u_short p_type ; /* type */ 105*4882a593Smuzhiyun u_short p_len ; /* length of parameter */ 106*4882a593Smuzhiyun } ; 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun #define PARA_LEN (sizeof(struct smt_para)) 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun #define SMTSETPARA(p,t) (p)->para.p_type = (t),\ 111*4882a593Smuzhiyun (p)->para.p_len = sizeof(*(p)) - PARA_LEN 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /* 114*4882a593Smuzhiyun * P01 : Upstream Neighbor Address, UNA 115*4882a593Smuzhiyun */ 116*4882a593Smuzhiyun #define SMT_P_UNA 0x0001 /* upstream neighbor address */ 117*4882a593Smuzhiyun #define SWAP_SMT_P_UNA "s6" 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun struct smt_p_una { 120*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 121*4882a593Smuzhiyun u_short una_pad ; 122*4882a593Smuzhiyun struct fddi_addr una_node ; /* node address, zero if unknown */ 123*4882a593Smuzhiyun } ; 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /* 126*4882a593Smuzhiyun * P02 : Station Descriptor 127*4882a593Smuzhiyun */ 128*4882a593Smuzhiyun #define SMT_P_SDE 0x0002 /* station descriptor */ 129*4882a593Smuzhiyun #define SWAP_SMT_P_SDE "1111" 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun #define SMT_SDE_STATION 0 /* end node */ 132*4882a593Smuzhiyun #define SMT_SDE_CONCENTRATOR 1 /* concentrator */ 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun struct smt_p_sde { 135*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 136*4882a593Smuzhiyun u_char sde_type ; /* station type */ 137*4882a593Smuzhiyun u_char sde_mac_count ; /* number of MACs */ 138*4882a593Smuzhiyun u_char sde_non_master ; /* number of A,B or S ports */ 139*4882a593Smuzhiyun u_char sde_master ; /* number of S ports on conc. */ 140*4882a593Smuzhiyun } ; 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun /* 143*4882a593Smuzhiyun * P03 : Station State 144*4882a593Smuzhiyun */ 145*4882a593Smuzhiyun #define SMT_P_STATE 0x0003 /* station state */ 146*4882a593Smuzhiyun #define SWAP_SMT_P_STATE "scc" 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun struct smt_p_state { 149*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 150*4882a593Smuzhiyun u_short st_pad ; 151*4882a593Smuzhiyun u_char st_topology ; /* topology */ 152*4882a593Smuzhiyun u_char st_dupl_addr ; /* duplicate address detected */ 153*4882a593Smuzhiyun } ; 154*4882a593Smuzhiyun #define SMT_ST_WRAPPED (1<<0) /* station wrapped */ 155*4882a593Smuzhiyun #define SMT_ST_UNATTACHED (1<<1) /* unattached concentrator */ 156*4882a593Smuzhiyun #define SMT_ST_TWISTED_A (1<<2) /* A-A connection, twisted ring */ 157*4882a593Smuzhiyun #define SMT_ST_TWISTED_B (1<<3) /* B-B connection, twisted ring */ 158*4882a593Smuzhiyun #define SMT_ST_ROOTED_S (1<<4) /* rooted station */ 159*4882a593Smuzhiyun #define SMT_ST_SRF (1<<5) /* SRF protocol supported */ 160*4882a593Smuzhiyun #define SMT_ST_SYNC_SERVICE (1<<6) /* use synchronous bandwidth */ 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun #define SMT_ST_MY_DUPA (1<<0) /* my station detected dupl. */ 163*4882a593Smuzhiyun #define SMT_ST_UNA_DUPA (1<<1) /* my UNA detected duplicate */ 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun /* 166*4882a593Smuzhiyun * P04 : timestamp 167*4882a593Smuzhiyun */ 168*4882a593Smuzhiyun #define SMT_P_TIMESTAMP 0x0004 /* time stamp */ 169*4882a593Smuzhiyun #define SWAP_SMT_P_TIMESTAMP "8" 170*4882a593Smuzhiyun struct smt_p_timestamp { 171*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 172*4882a593Smuzhiyun u_char ts_time[8] ; /* time, resolution 80nS, unique */ 173*4882a593Smuzhiyun } ; 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun /* 176*4882a593Smuzhiyun * P05 : station policies 177*4882a593Smuzhiyun */ 178*4882a593Smuzhiyun #define SMT_P_POLICY 0x0005 /* station policies */ 179*4882a593Smuzhiyun #define SWAP_SMT_P_POLICY "ss" 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun struct smt_p_policy { 182*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 183*4882a593Smuzhiyun u_short pl_config ; 184*4882a593Smuzhiyun u_short pl_connect ; /* bit string POLICY_AA ... */ 185*4882a593Smuzhiyun } ; 186*4882a593Smuzhiyun #define SMT_PL_HOLD 1 /* hold policy supported (Dual MAC) */ 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun /* 189*4882a593Smuzhiyun * P06 : latency equivalent 190*4882a593Smuzhiyun */ 191*4882a593Smuzhiyun #define SMT_P_LATENCY 0x0006 /* latency */ 192*4882a593Smuzhiyun #define SWAP_SMT_P_LATENCY "ssss" 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun /* 195*4882a593Smuzhiyun * note: latency has two phy entries by definition 196*4882a593Smuzhiyun * for a SAS, the 2nd one is null 197*4882a593Smuzhiyun */ 198*4882a593Smuzhiyun struct smt_p_latency { 199*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 200*4882a593Smuzhiyun u_short lt_phyout_idx1 ; /* index */ 201*4882a593Smuzhiyun u_short lt_latency1 ; /* latency , unit : byte clock */ 202*4882a593Smuzhiyun u_short lt_phyout_idx2 ; /* 0 if SAS */ 203*4882a593Smuzhiyun u_short lt_latency2 ; /* 0 if SAS */ 204*4882a593Smuzhiyun } ; 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun /* 207*4882a593Smuzhiyun * P07 : MAC neighbors 208*4882a593Smuzhiyun */ 209*4882a593Smuzhiyun #define SMT_P_NEIGHBORS 0x0007 /* MAC neighbor description */ 210*4882a593Smuzhiyun #define SWAP_SMT_P_NEIGHBORS "ss66" 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun struct smt_p_neighbor { 213*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 214*4882a593Smuzhiyun u_short nb_mib_index ; /* MIB index */ 215*4882a593Smuzhiyun u_short nb_mac_index ; /* n+1 .. n+m, m = #MACs, n = #PHYs */ 216*4882a593Smuzhiyun struct fddi_addr nb_una ; /* UNA , 0 for unknown */ 217*4882a593Smuzhiyun struct fddi_addr nb_dna ; /* DNA , 0 for unknown */ 218*4882a593Smuzhiyun } ; 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun /* 221*4882a593Smuzhiyun * PHY record 222*4882a593Smuzhiyun */ 223*4882a593Smuzhiyun #define SMT_PHY_A 0 /* A port */ 224*4882a593Smuzhiyun #define SMT_PHY_B 1 /* B port */ 225*4882a593Smuzhiyun #define SMT_PHY_S 2 /* slave port */ 226*4882a593Smuzhiyun #define SMT_PHY_M 3 /* master port */ 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun #define SMT_CS_DISABLED 0 /* connect state : disabled */ 229*4882a593Smuzhiyun #define SMT_CS_CONNECTING 1 /* connect state : connecting */ 230*4882a593Smuzhiyun #define SMT_CS_STANDBY 2 /* connect state : stand by */ 231*4882a593Smuzhiyun #define SMT_CS_ACTIVE 3 /* connect state : active */ 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun #define SMT_RM_NONE 0 234*4882a593Smuzhiyun #define SMT_RM_MAC 1 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun struct smt_phy_rec { 237*4882a593Smuzhiyun u_short phy_mib_index ; /* MIB index */ 238*4882a593Smuzhiyun u_char phy_type ; /* A/B/S/M */ 239*4882a593Smuzhiyun u_char phy_connect_state ; /* disabled/connecting/active */ 240*4882a593Smuzhiyun u_char phy_remote_type ; /* A/B/S/M */ 241*4882a593Smuzhiyun u_char phy_remote_mac ; /* none/remote */ 242*4882a593Smuzhiyun u_short phy_resource_idx ; /* 1 .. n */ 243*4882a593Smuzhiyun } ; 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun /* 246*4882a593Smuzhiyun * MAC record 247*4882a593Smuzhiyun */ 248*4882a593Smuzhiyun struct smt_mac_rec { 249*4882a593Smuzhiyun struct fddi_addr mac_addr ; /* MAC address */ 250*4882a593Smuzhiyun u_short mac_resource_idx ; /* n+1 .. n+m */ 251*4882a593Smuzhiyun } ; 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun /* 254*4882a593Smuzhiyun * P08 : path descriptors 255*4882a593Smuzhiyun * should be really an array ; however our environment has a fixed number of 256*4882a593Smuzhiyun * PHYs and MACs 257*4882a593Smuzhiyun */ 258*4882a593Smuzhiyun #define SMT_P_PATH 0x0008 /* path descriptor */ 259*4882a593Smuzhiyun #define SWAP_SMT_P_PATH "[6s]" 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun struct smt_p_path { 262*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 263*4882a593Smuzhiyun struct smt_phy_rec pd_phy[2] ; /* PHY A */ 264*4882a593Smuzhiyun struct smt_mac_rec pd_mac ; /* MAC record */ 265*4882a593Smuzhiyun } ; 266*4882a593Smuzhiyun 267*4882a593Smuzhiyun /* 268*4882a593Smuzhiyun * P09 : MAC status 269*4882a593Smuzhiyun */ 270*4882a593Smuzhiyun #define SMT_P_MAC_STATUS 0x0009 /* MAC status */ 271*4882a593Smuzhiyun #define SWAP_SMT_P_MAC_STATUS "sslllllllll" 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun struct smt_p_mac_status { 274*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 275*4882a593Smuzhiyun u_short st_mib_index ; /* MIB index */ 276*4882a593Smuzhiyun u_short st_mac_index ; /* n+1 .. n+m */ 277*4882a593Smuzhiyun u_int st_t_req ; /* T_Req */ 278*4882a593Smuzhiyun u_int st_t_neg ; /* T_Neg */ 279*4882a593Smuzhiyun u_int st_t_max ; /* T_Max */ 280*4882a593Smuzhiyun u_int st_tvx_value ; /* TVX_Value */ 281*4882a593Smuzhiyun u_int st_t_min ; /* T_Min */ 282*4882a593Smuzhiyun u_int st_sba ; /* synchr. bandwidth alloc */ 283*4882a593Smuzhiyun u_int st_frame_ct ; /* frame counter */ 284*4882a593Smuzhiyun u_int st_error_ct ; /* error counter */ 285*4882a593Smuzhiyun u_int st_lost_ct ; /* lost frames counter */ 286*4882a593Smuzhiyun } ; 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun /* 289*4882a593Smuzhiyun * P0A : PHY link error rate monitoring 290*4882a593Smuzhiyun */ 291*4882a593Smuzhiyun #define SMT_P_LEM 0x000a /* link error monitor */ 292*4882a593Smuzhiyun #define SWAP_SMT_P_LEM "ssccccll" 293*4882a593Smuzhiyun /* 294*4882a593Smuzhiyun * units of lem_cutoff,lem_alarm,lem_estimate : 10**-x 295*4882a593Smuzhiyun */ 296*4882a593Smuzhiyun struct smt_p_lem { 297*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 298*4882a593Smuzhiyun u_short lem_mib_index ; /* MIB index */ 299*4882a593Smuzhiyun u_short lem_phy_index ; /* 1 .. n */ 300*4882a593Smuzhiyun u_char lem_pad2 ; /* be nice and make it even . */ 301*4882a593Smuzhiyun u_char lem_cutoff ; /* 0x4 .. 0xf, default 0x7 */ 302*4882a593Smuzhiyun u_char lem_alarm ; /* 0x4 .. 0xf, default 0x8 */ 303*4882a593Smuzhiyun u_char lem_estimate ; /* 0x0 .. 0xff */ 304*4882a593Smuzhiyun u_int lem_reject_ct ; /* 0x00000000 .. 0xffffffff */ 305*4882a593Smuzhiyun u_int lem_ct ; /* 0x00000000 .. 0xffffffff */ 306*4882a593Smuzhiyun } ; 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun /* 309*4882a593Smuzhiyun * P0B : MAC frame counters 310*4882a593Smuzhiyun */ 311*4882a593Smuzhiyun #define SMT_P_MAC_COUNTER 0x000b /* MAC frame counters */ 312*4882a593Smuzhiyun #define SWAP_SMT_P_MAC_COUNTER "ssll" 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun struct smt_p_mac_counter { 315*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 316*4882a593Smuzhiyun u_short mc_mib_index ; /* MIB index */ 317*4882a593Smuzhiyun u_short mc_index ; /* mac index */ 318*4882a593Smuzhiyun u_int mc_receive_ct ; /* receive counter */ 319*4882a593Smuzhiyun u_int mc_transmit_ct ; /* transmit counter */ 320*4882a593Smuzhiyun } ; 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun /* 323*4882a593Smuzhiyun * P0C : MAC frame not copied counter 324*4882a593Smuzhiyun */ 325*4882a593Smuzhiyun #define SMT_P_MAC_FNC 0x000c /* MAC frame not copied counter */ 326*4882a593Smuzhiyun #define SWAP_SMT_P_MAC_FNC "ssl" 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun struct smt_p_mac_fnc { 329*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 330*4882a593Smuzhiyun u_short nc_mib_index ; /* MIB index */ 331*4882a593Smuzhiyun u_short nc_index ; /* mac index */ 332*4882a593Smuzhiyun u_int nc_counter ; /* not copied counter */ 333*4882a593Smuzhiyun } ; 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun /* 337*4882a593Smuzhiyun * P0D : MAC priority values 338*4882a593Smuzhiyun */ 339*4882a593Smuzhiyun #define SMT_P_PRIORITY 0x000d /* MAC priority values */ 340*4882a593Smuzhiyun #define SWAP_SMT_P_PRIORITY "ssl" 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun struct smt_p_priority { 343*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 344*4882a593Smuzhiyun u_short pr_mib_index ; /* MIB index */ 345*4882a593Smuzhiyun u_short pr_index ; /* mac index */ 346*4882a593Smuzhiyun u_int pr_priority[7] ; /* priority values */ 347*4882a593Smuzhiyun } ; 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun /* 350*4882a593Smuzhiyun * P0E : PHY elasticity buffer status 351*4882a593Smuzhiyun */ 352*4882a593Smuzhiyun #define SMT_P_EB 0x000e /* PHY EB status */ 353*4882a593Smuzhiyun #define SWAP_SMT_P_EB "ssl" 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun struct smt_p_eb { 356*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 357*4882a593Smuzhiyun u_short eb_mib_index ; /* MIB index */ 358*4882a593Smuzhiyun u_short eb_index ; /* phy index */ 359*4882a593Smuzhiyun u_int eb_error_ct ; /* # of eb overflows */ 360*4882a593Smuzhiyun } ; 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun /* 363*4882a593Smuzhiyun * P0F : manufacturer field 364*4882a593Smuzhiyun */ 365*4882a593Smuzhiyun #define SMT_P_MANUFACTURER 0x000f /* manufacturer field */ 366*4882a593Smuzhiyun #define SWAP_SMT_P_MANUFACTURER "" 367*4882a593Smuzhiyun 368*4882a593Smuzhiyun struct smp_p_manufacturer { 369*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 370*4882a593Smuzhiyun u_char mf_data[32] ; /* OUI + arbitrary data */ 371*4882a593Smuzhiyun } ; 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun /* 374*4882a593Smuzhiyun * P10 : user field 375*4882a593Smuzhiyun */ 376*4882a593Smuzhiyun #define SMT_P_USER 0x0010 /* manufacturer field */ 377*4882a593Smuzhiyun #define SWAP_SMT_P_USER "" 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun struct smp_p_user { 380*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 381*4882a593Smuzhiyun u_char us_data[32] ; /* arbitrary data */ 382*4882a593Smuzhiyun } ; 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun /* 387*4882a593Smuzhiyun * P11 : echo data 388*4882a593Smuzhiyun */ 389*4882a593Smuzhiyun #define SMT_P_ECHODATA 0x0011 /* echo data */ 390*4882a593Smuzhiyun #define SWAP_SMT_P_ECHODATA "" 391*4882a593Smuzhiyun 392*4882a593Smuzhiyun struct smt_p_echo { 393*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 394*4882a593Smuzhiyun u_char ec_data[SMT_MAX_ECHO_LEN-4] ; /* echo data */ 395*4882a593Smuzhiyun } ; 396*4882a593Smuzhiyun 397*4882a593Smuzhiyun /* 398*4882a593Smuzhiyun * P12 : reason code 399*4882a593Smuzhiyun */ 400*4882a593Smuzhiyun #define SMT_P_REASON 0x0012 /* reason code */ 401*4882a593Smuzhiyun #define SWAP_SMT_P_REASON "l" 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun struct smt_p_reason { 404*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 405*4882a593Smuzhiyun u_int rdf_reason ; /* CLASS/VERSION */ 406*4882a593Smuzhiyun } ; 407*4882a593Smuzhiyun #define SMT_RDF_CLASS 0x00000001 /* class not supported */ 408*4882a593Smuzhiyun #define SMT_RDF_VERSION 0x00000002 /* version not supported */ 409*4882a593Smuzhiyun #define SMT_RDF_SUCCESS 0x00000003 /* success (PMF) */ 410*4882a593Smuzhiyun #define SMT_RDF_BADSET 0x00000004 /* bad set count (PMF) */ 411*4882a593Smuzhiyun #define SMT_RDF_ILLEGAL 0x00000005 /* read only (PMF) */ 412*4882a593Smuzhiyun #define SMT_RDF_NOPARAM 0x6 /* parameter not supported (PMF) */ 413*4882a593Smuzhiyun #define SMT_RDF_RANGE 0x8 /* out of range */ 414*4882a593Smuzhiyun #define SMT_RDF_AUTHOR 0x9 /* not autohorized */ 415*4882a593Smuzhiyun #define SMT_RDF_LENGTH 0x0a /* length error */ 416*4882a593Smuzhiyun #define SMT_RDF_TOOLONG 0x0b /* length error */ 417*4882a593Smuzhiyun #define SMT_RDF_SBA 0x0d /* SBA denied */ 418*4882a593Smuzhiyun 419*4882a593Smuzhiyun /* 420*4882a593Smuzhiyun * P13 : refused frame beginning 421*4882a593Smuzhiyun */ 422*4882a593Smuzhiyun #define SMT_P_REFUSED 0x0013 /* refused frame beginning */ 423*4882a593Smuzhiyun #define SWAP_SMT_P_REFUSED "l" 424*4882a593Smuzhiyun 425*4882a593Smuzhiyun struct smt_p_refused { 426*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 427*4882a593Smuzhiyun u_int ref_fc ; /* 3 bytes 0 + FC */ 428*4882a593Smuzhiyun struct smt_header ref_header ; /* refused header */ 429*4882a593Smuzhiyun } ; 430*4882a593Smuzhiyun 431*4882a593Smuzhiyun /* 432*4882a593Smuzhiyun * P14 : supported SMT versions 433*4882a593Smuzhiyun */ 434*4882a593Smuzhiyun #define SMT_P_VERSION 0x0014 /* SMT supported versions */ 435*4882a593Smuzhiyun #define SWAP_SMT_P_VERSION "sccss" 436*4882a593Smuzhiyun 437*4882a593Smuzhiyun struct smt_p_version { 438*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 439*4882a593Smuzhiyun u_short v_pad ; 440*4882a593Smuzhiyun u_char v_n ; /* 1 .. 0xff, #versions */ 441*4882a593Smuzhiyun u_char v_index ; /* 1 .. 0xff, index of op. v. */ 442*4882a593Smuzhiyun u_short v_version[1] ; /* list of min. 1 version */ 443*4882a593Smuzhiyun u_short v_pad2 ; /* pad if necessary */ 444*4882a593Smuzhiyun } ; 445*4882a593Smuzhiyun 446*4882a593Smuzhiyun /* 447*4882a593Smuzhiyun * P15 : Resource Type 448*4882a593Smuzhiyun */ 449*4882a593Smuzhiyun #define SWAP_SMT_P0015 "l" 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun struct smt_p_0015 { 452*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 453*4882a593Smuzhiyun u_int res_type ; /* recsource type */ 454*4882a593Smuzhiyun } ; 455*4882a593Smuzhiyun 456*4882a593Smuzhiyun #define SYNC_BW 0x00000001L /* Synchronous Bandwidth */ 457*4882a593Smuzhiyun 458*4882a593Smuzhiyun /* 459*4882a593Smuzhiyun * P16 : SBA Command 460*4882a593Smuzhiyun */ 461*4882a593Smuzhiyun #define SWAP_SMT_P0016 "l" 462*4882a593Smuzhiyun 463*4882a593Smuzhiyun struct smt_p_0016 { 464*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 465*4882a593Smuzhiyun u_int sba_cmd ; /* command for the SBA */ 466*4882a593Smuzhiyun } ; 467*4882a593Smuzhiyun 468*4882a593Smuzhiyun #define REQUEST_ALLOCATION 0x1 /* req allocation of sync bandwidth */ 469*4882a593Smuzhiyun #define REPORT_ALLOCATION 0x2 /* rep of sync bandwidth allocation */ 470*4882a593Smuzhiyun #define CHANGE_ALLOCATION 0x3 /* forces a station using sync band-*/ 471*4882a593Smuzhiyun /* width to change its current allo-*/ 472*4882a593Smuzhiyun /* cation */ 473*4882a593Smuzhiyun 474*4882a593Smuzhiyun /* 475*4882a593Smuzhiyun * P17 : SBA Payload Request 476*4882a593Smuzhiyun */ 477*4882a593Smuzhiyun #define SWAP_SMT_P0017 "l" 478*4882a593Smuzhiyun 479*4882a593Smuzhiyun struct smt_p_0017 { 480*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 481*4882a593Smuzhiyun int sba_pl_req ; /* total sync bandwidth measured in */ 482*4882a593Smuzhiyun } ; /* bytes per 125 us */ 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun /* 485*4882a593Smuzhiyun * P18 : SBA Overhead Request 486*4882a593Smuzhiyun */ 487*4882a593Smuzhiyun #define SWAP_SMT_P0018 "l" 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun struct smt_p_0018 { 490*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 491*4882a593Smuzhiyun int sba_ov_req ; /* total sync bandwidth req for overhead*/ 492*4882a593Smuzhiyun } ; /* measuered in bytes per T_Neg */ 493*4882a593Smuzhiyun 494*4882a593Smuzhiyun /* 495*4882a593Smuzhiyun * P19 : SBA Allocation Address 496*4882a593Smuzhiyun */ 497*4882a593Smuzhiyun #define SWAP_SMT_P0019 "s6" 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun struct smt_p_0019 { 500*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 501*4882a593Smuzhiyun u_short sba_pad ; 502*4882a593Smuzhiyun struct fddi_addr alloc_addr ; /* Allocation Address */ 503*4882a593Smuzhiyun } ; 504*4882a593Smuzhiyun 505*4882a593Smuzhiyun /* 506*4882a593Smuzhiyun * P1A : SBA Category 507*4882a593Smuzhiyun */ 508*4882a593Smuzhiyun #define SWAP_SMT_P001A "l" 509*4882a593Smuzhiyun 510*4882a593Smuzhiyun struct smt_p_001a { 511*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 512*4882a593Smuzhiyun u_int category ; /* Allocator defined classification */ 513*4882a593Smuzhiyun } ; 514*4882a593Smuzhiyun 515*4882a593Smuzhiyun /* 516*4882a593Smuzhiyun * P1B : Maximum T_Neg 517*4882a593Smuzhiyun */ 518*4882a593Smuzhiyun #define SWAP_SMT_P001B "l" 519*4882a593Smuzhiyun 520*4882a593Smuzhiyun struct smt_p_001b { 521*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 522*4882a593Smuzhiyun u_int max_t_neg ; /* longest T_NEG for the sync service*/ 523*4882a593Smuzhiyun } ; 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun /* 526*4882a593Smuzhiyun * P1C : Minimum SBA Segment Size 527*4882a593Smuzhiyun */ 528*4882a593Smuzhiyun #define SWAP_SMT_P001C "l" 529*4882a593Smuzhiyun 530*4882a593Smuzhiyun struct smt_p_001c { 531*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 532*4882a593Smuzhiyun u_int min_seg_siz ; /* smallest number of bytes per frame*/ 533*4882a593Smuzhiyun } ; 534*4882a593Smuzhiyun 535*4882a593Smuzhiyun /* 536*4882a593Smuzhiyun * P1D : SBA Allocatable 537*4882a593Smuzhiyun */ 538*4882a593Smuzhiyun #define SWAP_SMT_P001D "l" 539*4882a593Smuzhiyun 540*4882a593Smuzhiyun struct smt_p_001d { 541*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 542*4882a593Smuzhiyun u_int allocatable ; /* total sync bw available for alloc */ 543*4882a593Smuzhiyun } ; 544*4882a593Smuzhiyun 545*4882a593Smuzhiyun /* 546*4882a593Smuzhiyun * P20 0B : frame status capabilities 547*4882a593Smuzhiyun * NOTE: not in swap table, is used by smt.c AND PMF table 548*4882a593Smuzhiyun */ 549*4882a593Smuzhiyun #define SMT_P_FSC 0x200b 550*4882a593Smuzhiyun /* #define SWAP_SMT_P_FSC "ssss" */ 551*4882a593Smuzhiyun 552*4882a593Smuzhiyun struct smt_p_fsc { 553*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 554*4882a593Smuzhiyun u_short fsc_pad0 ; 555*4882a593Smuzhiyun u_short fsc_mac_index ; /* mac index 1 .. ff */ 556*4882a593Smuzhiyun u_short fsc_pad1 ; 557*4882a593Smuzhiyun u_short fsc_value ; /* FSC_TYPE[0-2] */ 558*4882a593Smuzhiyun } ; 559*4882a593Smuzhiyun 560*4882a593Smuzhiyun #define FSC_TYPE0 0 /* "normal" node (A/C handling) */ 561*4882a593Smuzhiyun #define FSC_TYPE1 1 /* Special A/C indicator forwarding */ 562*4882a593Smuzhiyun #define FSC_TYPE2 2 /* Special A/C indicator forwarding */ 563*4882a593Smuzhiyun 564*4882a593Smuzhiyun /* 565*4882a593Smuzhiyun * P00 21 : user defined authoriziation (see pmf.c) 566*4882a593Smuzhiyun */ 567*4882a593Smuzhiyun #define SMT_P_AUTHOR 0x0021 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun /* 570*4882a593Smuzhiyun * notification parameters 571*4882a593Smuzhiyun */ 572*4882a593Smuzhiyun #define SWAP_SMT_P1048 "ll" 573*4882a593Smuzhiyun struct smt_p_1048 { 574*4882a593Smuzhiyun u_int p1048_flag ; 575*4882a593Smuzhiyun u_int p1048_cf_state ; 576*4882a593Smuzhiyun } ; 577*4882a593Smuzhiyun 578*4882a593Smuzhiyun /* 579*4882a593Smuzhiyun * NOTE: all 2xxx 3xxx and 4xxx must include the INDEX in the swap string, 580*4882a593Smuzhiyun * even so the INDEX is NOT part of the struct. 581*4882a593Smuzhiyun * INDEX is already swapped in pmf.c, format in string is '4' 582*4882a593Smuzhiyun */ 583*4882a593Smuzhiyun #define SWAP_SMT_P208C "4lss66" 584*4882a593Smuzhiyun struct smt_p_208c { 585*4882a593Smuzhiyun u_int p208c_flag ; 586*4882a593Smuzhiyun u_short p208c_pad ; 587*4882a593Smuzhiyun u_short p208c_dupcondition ; 588*4882a593Smuzhiyun struct fddi_addr p208c_fddilong ; 589*4882a593Smuzhiyun struct fddi_addr p208c_fddiunalong ; 590*4882a593Smuzhiyun } ; 591*4882a593Smuzhiyun 592*4882a593Smuzhiyun #define SWAP_SMT_P208D "4lllll" 593*4882a593Smuzhiyun struct smt_p_208d { 594*4882a593Smuzhiyun u_int p208d_flag ; 595*4882a593Smuzhiyun u_int p208d_frame_ct ; 596*4882a593Smuzhiyun u_int p208d_error_ct ; 597*4882a593Smuzhiyun u_int p208d_lost_ct ; 598*4882a593Smuzhiyun u_int p208d_ratio ; 599*4882a593Smuzhiyun } ; 600*4882a593Smuzhiyun 601*4882a593Smuzhiyun #define SWAP_SMT_P208E "4llll" 602*4882a593Smuzhiyun struct smt_p_208e { 603*4882a593Smuzhiyun u_int p208e_flag ; 604*4882a593Smuzhiyun u_int p208e_not_copied ; 605*4882a593Smuzhiyun u_int p208e_copied ; 606*4882a593Smuzhiyun u_int p208e_not_copied_ratio ; 607*4882a593Smuzhiyun } ; 608*4882a593Smuzhiyun 609*4882a593Smuzhiyun #define SWAP_SMT_P208F "4ll6666s6" 610*4882a593Smuzhiyun 611*4882a593Smuzhiyun struct smt_p_208f { 612*4882a593Smuzhiyun u_int p208f_multiple ; 613*4882a593Smuzhiyun u_int p208f_nacondition ; 614*4882a593Smuzhiyun struct fddi_addr p208f_old_una ; 615*4882a593Smuzhiyun struct fddi_addr p208f_new_una ; 616*4882a593Smuzhiyun struct fddi_addr p208f_old_dna ; 617*4882a593Smuzhiyun struct fddi_addr p208f_new_dna ; 618*4882a593Smuzhiyun u_short p208f_curren_path ; 619*4882a593Smuzhiyun struct fddi_addr p208f_smt_address ; 620*4882a593Smuzhiyun } ; 621*4882a593Smuzhiyun 622*4882a593Smuzhiyun #define SWAP_SMT_P2090 "4lssl" 623*4882a593Smuzhiyun 624*4882a593Smuzhiyun struct smt_p_2090 { 625*4882a593Smuzhiyun u_int p2090_multiple ; 626*4882a593Smuzhiyun u_short p2090_availablepaths ; 627*4882a593Smuzhiyun u_short p2090_currentpath ; 628*4882a593Smuzhiyun u_int p2090_requestedpaths ; 629*4882a593Smuzhiyun } ; 630*4882a593Smuzhiyun 631*4882a593Smuzhiyun /* 632*4882a593Smuzhiyun * NOTE: 633*4882a593Smuzhiyun * special kludge for parameters 320b,320f,3210 634*4882a593Smuzhiyun * these parameters are part of RAF frames 635*4882a593Smuzhiyun * RAF frames are parsed in SBA.C and must be swapped 636*4882a593Smuzhiyun * PMF.C has special code to avoid double swapping 637*4882a593Smuzhiyun */ 638*4882a593Smuzhiyun #ifdef LITTLE_ENDIAN 639*4882a593Smuzhiyun #define SBAPATHINDEX (0x01000000L) 640*4882a593Smuzhiyun #else 641*4882a593Smuzhiyun #define SBAPATHINDEX (0x01L) 642*4882a593Smuzhiyun #endif 643*4882a593Smuzhiyun 644*4882a593Smuzhiyun #define SWAP_SMT_P320B "42s" 645*4882a593Smuzhiyun 646*4882a593Smuzhiyun struct smt_p_320b { 647*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 648*4882a593Smuzhiyun u_int mib_index ; 649*4882a593Smuzhiyun u_short path_pad ; 650*4882a593Smuzhiyun u_short path_index ; 651*4882a593Smuzhiyun } ; 652*4882a593Smuzhiyun 653*4882a593Smuzhiyun #define SWAP_SMT_P320F "4l" 654*4882a593Smuzhiyun 655*4882a593Smuzhiyun struct smt_p_320f { 656*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 657*4882a593Smuzhiyun u_int mib_index ; 658*4882a593Smuzhiyun u_int mib_payload ; 659*4882a593Smuzhiyun } ; 660*4882a593Smuzhiyun 661*4882a593Smuzhiyun #define SWAP_SMT_P3210 "4l" 662*4882a593Smuzhiyun 663*4882a593Smuzhiyun struct smt_p_3210 { 664*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 665*4882a593Smuzhiyun u_int mib_index ; 666*4882a593Smuzhiyun u_int mib_overhead ; 667*4882a593Smuzhiyun } ; 668*4882a593Smuzhiyun 669*4882a593Smuzhiyun #define SWAP_SMT_P4050 "4l1111ll" 670*4882a593Smuzhiyun 671*4882a593Smuzhiyun struct smt_p_4050 { 672*4882a593Smuzhiyun u_int p4050_flag ; 673*4882a593Smuzhiyun u_char p4050_pad ; 674*4882a593Smuzhiyun u_char p4050_cutoff ; 675*4882a593Smuzhiyun u_char p4050_alarm ; 676*4882a593Smuzhiyun u_char p4050_estimate ; 677*4882a593Smuzhiyun u_int p4050_reject_ct ; 678*4882a593Smuzhiyun u_int p4050_ct ; 679*4882a593Smuzhiyun } ; 680*4882a593Smuzhiyun 681*4882a593Smuzhiyun #define SWAP_SMT_P4051 "4lssss" 682*4882a593Smuzhiyun struct smt_p_4051 { 683*4882a593Smuzhiyun u_int p4051_multiple ; 684*4882a593Smuzhiyun u_short p4051_porttype ; 685*4882a593Smuzhiyun u_short p4051_connectstate ; 686*4882a593Smuzhiyun u_short p4051_pc_neighbor ; 687*4882a593Smuzhiyun u_short p4051_pc_withhold ; 688*4882a593Smuzhiyun } ; 689*4882a593Smuzhiyun 690*4882a593Smuzhiyun #define SWAP_SMT_P4052 "4ll" 691*4882a593Smuzhiyun struct smt_p_4052 { 692*4882a593Smuzhiyun u_int p4052_flag ; 693*4882a593Smuzhiyun u_int p4052_eberrorcount ; 694*4882a593Smuzhiyun } ; 695*4882a593Smuzhiyun 696*4882a593Smuzhiyun #define SWAP_SMT_P4053 "4lsslss" 697*4882a593Smuzhiyun 698*4882a593Smuzhiyun struct smt_p_4053 { 699*4882a593Smuzhiyun u_int p4053_multiple ; 700*4882a593Smuzhiyun u_short p4053_availablepaths ; 701*4882a593Smuzhiyun u_short p4053_currentpath ; 702*4882a593Smuzhiyun u_int p4053_requestedpaths ; 703*4882a593Smuzhiyun u_short p4053_mytype ; 704*4882a593Smuzhiyun u_short p4053_neighbortype ; 705*4882a593Smuzhiyun } ; 706*4882a593Smuzhiyun 707*4882a593Smuzhiyun 708*4882a593Smuzhiyun #define SMT_P_SETCOUNT 0x1035 709*4882a593Smuzhiyun #define SWAP_SMT_P_SETCOUNT "l8" 710*4882a593Smuzhiyun 711*4882a593Smuzhiyun struct smt_p_setcount { 712*4882a593Smuzhiyun struct smt_para para ; /* generic parameter header */ 713*4882a593Smuzhiyun u_int count ; 714*4882a593Smuzhiyun u_char timestamp[8] ; 715*4882a593Smuzhiyun } ; 716*4882a593Smuzhiyun 717*4882a593Smuzhiyun /* 718*4882a593Smuzhiyun * SMT FRAMES 719*4882a593Smuzhiyun */ 720*4882a593Smuzhiyun 721*4882a593Smuzhiyun /* 722*4882a593Smuzhiyun * NIF : neighbor information frames 723*4882a593Smuzhiyun */ 724*4882a593Smuzhiyun struct smt_nif { 725*4882a593Smuzhiyun struct smt_header smt ; /* generic header */ 726*4882a593Smuzhiyun struct smt_p_una una ; /* UNA */ 727*4882a593Smuzhiyun struct smt_p_sde sde ; /* station descriptor */ 728*4882a593Smuzhiyun struct smt_p_state state ; /* station state */ 729*4882a593Smuzhiyun #ifdef SMT6_10 730*4882a593Smuzhiyun struct smt_p_fsc fsc ; /* frame status cap. */ 731*4882a593Smuzhiyun #endif 732*4882a593Smuzhiyun } ; 733*4882a593Smuzhiyun 734*4882a593Smuzhiyun /* 735*4882a593Smuzhiyun * SIF : station information frames 736*4882a593Smuzhiyun */ 737*4882a593Smuzhiyun struct smt_sif_config { 738*4882a593Smuzhiyun struct smt_header smt ; /* generic header */ 739*4882a593Smuzhiyun struct smt_p_timestamp ts ; /* time stamp */ 740*4882a593Smuzhiyun struct smt_p_sde sde ; /* station descriptor */ 741*4882a593Smuzhiyun struct smt_p_version version ; /* supported versions */ 742*4882a593Smuzhiyun struct smt_p_state state ; /* station state */ 743*4882a593Smuzhiyun struct smt_p_policy policy ; /* station policy */ 744*4882a593Smuzhiyun struct smt_p_latency latency ; /* path latency */ 745*4882a593Smuzhiyun struct smt_p_neighbor neighbor ; /* neighbors, we have only one*/ 746*4882a593Smuzhiyun #ifdef OPT_PMF 747*4882a593Smuzhiyun struct smt_p_setcount setcount ; /* Set Count mandatory */ 748*4882a593Smuzhiyun #endif 749*4882a593Smuzhiyun /* WARNING : path MUST BE LAST FIELD !!! (see smt.c:smt_fill_path) */ 750*4882a593Smuzhiyun struct smt_p_path path ; /* path descriptor */ 751*4882a593Smuzhiyun } ; 752*4882a593Smuzhiyun #define SIZEOF_SMT_SIF_CONFIG (sizeof(struct smt_sif_config)- \ 753*4882a593Smuzhiyun sizeof(struct smt_p_path)) 754*4882a593Smuzhiyun 755*4882a593Smuzhiyun struct smt_sif_operation { 756*4882a593Smuzhiyun struct smt_header smt ; /* generic header */ 757*4882a593Smuzhiyun struct smt_p_timestamp ts ; /* time stamp */ 758*4882a593Smuzhiyun struct smt_p_mac_status status ; /* mac status */ 759*4882a593Smuzhiyun struct smt_p_mac_counter mc ; /* MAC counter */ 760*4882a593Smuzhiyun struct smt_p_mac_fnc fnc ; /* MAC frame not copied */ 761*4882a593Smuzhiyun struct smp_p_manufacturer man ; /* manufacturer field */ 762*4882a593Smuzhiyun struct smp_p_user user ; /* user field */ 763*4882a593Smuzhiyun #ifdef OPT_PMF 764*4882a593Smuzhiyun struct smt_p_setcount setcount ; /* Set Count mandatory */ 765*4882a593Smuzhiyun #endif 766*4882a593Smuzhiyun /* must be last */ 767*4882a593Smuzhiyun struct smt_p_lem lem[1] ; /* phy lem status */ 768*4882a593Smuzhiyun } ; 769*4882a593Smuzhiyun #define SIZEOF_SMT_SIF_OPERATION (sizeof(struct smt_sif_operation)- \ 770*4882a593Smuzhiyun sizeof(struct smt_p_lem)) 771*4882a593Smuzhiyun 772*4882a593Smuzhiyun /* 773*4882a593Smuzhiyun * ECF : echo frame 774*4882a593Smuzhiyun */ 775*4882a593Smuzhiyun struct smt_ecf { 776*4882a593Smuzhiyun struct smt_header smt ; /* generic header */ 777*4882a593Smuzhiyun struct smt_p_echo ec_echo ; /* echo parameter */ 778*4882a593Smuzhiyun } ; 779*4882a593Smuzhiyun #define SMT_ECF_LEN (sizeof(struct smt_header)+sizeof(struct smt_para)) 780*4882a593Smuzhiyun 781*4882a593Smuzhiyun /* 782*4882a593Smuzhiyun * RDF : request denied frame 783*4882a593Smuzhiyun */ 784*4882a593Smuzhiyun struct smt_rdf { 785*4882a593Smuzhiyun struct smt_header smt ; /* generic header */ 786*4882a593Smuzhiyun struct smt_p_reason reason ; /* reason code */ 787*4882a593Smuzhiyun struct smt_p_version version ; /* supported versions */ 788*4882a593Smuzhiyun struct smt_p_refused refused ; /* refused frame fragment */ 789*4882a593Smuzhiyun } ; 790*4882a593Smuzhiyun 791*4882a593Smuzhiyun /* 792*4882a593Smuzhiyun * SBA Request Allocation Response Frame 793*4882a593Smuzhiyun */ 794*4882a593Smuzhiyun struct smt_sba_alc_res { 795*4882a593Smuzhiyun struct smt_header smt ; /* generic header */ 796*4882a593Smuzhiyun struct smt_p_0015 s_type ; /* resource type */ 797*4882a593Smuzhiyun struct smt_p_0016 cmd ; /* SBA command */ 798*4882a593Smuzhiyun struct smt_p_reason reason ; /* reason code */ 799*4882a593Smuzhiyun struct smt_p_320b path ; /* path type */ 800*4882a593Smuzhiyun struct smt_p_320f payload ; /* current SBA payload */ 801*4882a593Smuzhiyun struct smt_p_3210 overhead ; /* current SBA overhead */ 802*4882a593Smuzhiyun struct smt_p_0019 a_addr ; /* Allocation Address */ 803*4882a593Smuzhiyun struct smt_p_001a cat ; /* Category - from the request */ 804*4882a593Smuzhiyun struct smt_p_001d alloc ; /* SBA Allocatable */ 805*4882a593Smuzhiyun } ; 806*4882a593Smuzhiyun 807*4882a593Smuzhiyun /* 808*4882a593Smuzhiyun * SBA Request Allocation Request Frame 809*4882a593Smuzhiyun */ 810*4882a593Smuzhiyun struct smt_sba_alc_req { 811*4882a593Smuzhiyun struct smt_header smt ; /* generic header */ 812*4882a593Smuzhiyun struct smt_p_0015 s_type ; /* resource type */ 813*4882a593Smuzhiyun struct smt_p_0016 cmd ; /* SBA command */ 814*4882a593Smuzhiyun struct smt_p_320b path ; /* path type */ 815*4882a593Smuzhiyun struct smt_p_0017 pl_req ; /* requested payload */ 816*4882a593Smuzhiyun struct smt_p_0018 ov_req ; /* requested SBA overhead */ 817*4882a593Smuzhiyun struct smt_p_320f payload ; /* current SBA payload */ 818*4882a593Smuzhiyun struct smt_p_3210 overhead ; /* current SBA overhead */ 819*4882a593Smuzhiyun struct smt_p_0019 a_addr ; /* Allocation Address */ 820*4882a593Smuzhiyun struct smt_p_001a cat ; /* Category - from the request */ 821*4882a593Smuzhiyun struct smt_p_001b tneg ; /* max T-NEG */ 822*4882a593Smuzhiyun struct smt_p_001c segm ; /* minimum segment size */ 823*4882a593Smuzhiyun } ; 824*4882a593Smuzhiyun 825*4882a593Smuzhiyun /* 826*4882a593Smuzhiyun * SBA Change Allocation Request Frame 827*4882a593Smuzhiyun */ 828*4882a593Smuzhiyun struct smt_sba_chg { 829*4882a593Smuzhiyun struct smt_header smt ; /* generic header */ 830*4882a593Smuzhiyun struct smt_p_0015 s_type ; /* resource type */ 831*4882a593Smuzhiyun struct smt_p_0016 cmd ; /* SBA command */ 832*4882a593Smuzhiyun struct smt_p_320b path ; /* path type */ 833*4882a593Smuzhiyun struct smt_p_320f payload ; /* current SBA payload */ 834*4882a593Smuzhiyun struct smt_p_3210 overhead ; /* current SBA overhead */ 835*4882a593Smuzhiyun struct smt_p_001a cat ; /* Category - from the request */ 836*4882a593Smuzhiyun } ; 837*4882a593Smuzhiyun 838*4882a593Smuzhiyun /* 839*4882a593Smuzhiyun * SBA Report Allocation Request Frame 840*4882a593Smuzhiyun */ 841*4882a593Smuzhiyun struct smt_sba_rep_req { 842*4882a593Smuzhiyun struct smt_header smt ; /* generic header */ 843*4882a593Smuzhiyun struct smt_p_0015 s_type ; /* resource type */ 844*4882a593Smuzhiyun struct smt_p_0016 cmd ; /* SBA command */ 845*4882a593Smuzhiyun } ; 846*4882a593Smuzhiyun 847*4882a593Smuzhiyun /* 848*4882a593Smuzhiyun * SBA Report Allocation Response Frame 849*4882a593Smuzhiyun */ 850*4882a593Smuzhiyun struct smt_sba_rep_res { 851*4882a593Smuzhiyun struct smt_header smt ; /* generic header */ 852*4882a593Smuzhiyun struct smt_p_0015 s_type ; /* resource type */ 853*4882a593Smuzhiyun struct smt_p_0016 cmd ; /* SBA command */ 854*4882a593Smuzhiyun struct smt_p_320b path ; /* path type */ 855*4882a593Smuzhiyun struct smt_p_320f payload ; /* current SBA payload */ 856*4882a593Smuzhiyun struct smt_p_3210 overhead ; /* current SBA overhead */ 857*4882a593Smuzhiyun } ; 858*4882a593Smuzhiyun 859*4882a593Smuzhiyun /* 860*4882a593Smuzhiyun * actions 861*4882a593Smuzhiyun */ 862*4882a593Smuzhiyun #define SMT_STATION_ACTION 1 863*4882a593Smuzhiyun #define SMT_STATION_ACTION_CONNECT 0 864*4882a593Smuzhiyun #define SMT_STATION_ACTION_DISCONNECT 1 865*4882a593Smuzhiyun #define SMT_STATION_ACTION_PATHTEST 2 866*4882a593Smuzhiyun #define SMT_STATION_ACTION_SELFTEST 3 867*4882a593Smuzhiyun #define SMT_STATION_ACTION_DISABLE_A 4 868*4882a593Smuzhiyun #define SMT_STATION_ACTION_DISABLE_B 5 869*4882a593Smuzhiyun #define SMT_STATION_ACTION_DISABLE_M 6 870*4882a593Smuzhiyun 871*4882a593Smuzhiyun #define SMT_PORT_ACTION 2 872*4882a593Smuzhiyun #define SMT_PORT_ACTION_MAINT 0 873*4882a593Smuzhiyun #define SMT_PORT_ACTION_ENABLE 1 874*4882a593Smuzhiyun #define SMT_PORT_ACTION_DISABLE 2 875*4882a593Smuzhiyun #define SMT_PORT_ACTION_START 3 876*4882a593Smuzhiyun #define SMT_PORT_ACTION_STOP 4 877*4882a593Smuzhiyun 878*4882a593Smuzhiyun #endif /* _SMT_ */ 879