286 * 先级1为未标识表记标帜的帧,应避免采取优先级0,因为这会引起正常通信下不成预感的传输时延。优先级和虚拟
287 * 网标识(VID)的缺省值表:优先级和虚拟网标识(VID)的缺省值
288 * 办事 VID缺省值 优先级缺省值
289 * 采样值 0 4
290 * ETHER_TYPE 值: 以太网类型码16位默示,下表描述[以太网类型码]取值和[APPID类型码]取值;
291 * 表:分派的以太网类型码取值([APPID类型码]指APPID的最高两位)
292 * 应用 以太网类型码取值(16进制) APPID类型
293 * IEC61850-8-1GOOSE 88-B8 0 0
294 * IEC61850-8-1GSE经管 88-B9 0 0
295 * IEC61850-9-1采样值 88-BA 0 1
296 * IEC61850-9-2采样值 88-BA 0 1
297 * APPID 值:应用标识。APPID 用以选择采样值信息并区分应用接洽关系。APPID的值是[APPID 类型码]和[实际标识]
298 * 的组合,APPID 类型码被定义为其最高两位(如表8 所定义)。因而采样值取如下值:
299 * 为采样值保存的取值局限为 0 x4000~0 x7fff。若是没有设备APPID,缺省值应为0 x4000。缺省值被保存为
300 * 注解缺乏设备。强烈推荐在同一体系内采取独一的、面向数据源的采样值应用标识(SV APPID)。这该当由
301 * 设备体系强迫履行。 302 *
303 */
304 struct svpdu_lpdu_head {
305 u8 des_mac[6];
306 u8 src_mac[6];
307 u16 tpid;
308 u16 tci;
309 u16 ether_type;
310 u16 appid;
311 u16 epdu_length;
312 u16 reserve1;
313 u16 reserve2; 314 }; 315 316 317 /*
318 * SVPDU_APDU_TAG_91/SVPDU_APDU_TAG_92 - 应用层和谈标识,可用来区分该数据包类型; 319 */
320 #define SVPDU_APDU_TAG_91 0 x80
321 #define SVPDU_APDU_TAG_92 0 x60
322 /*
323 * SVPDU_ASDUNUM_TAG_92 - asdu个数标识(9-2) 324 */
325 #define SVPDU_ASDUNUM_TAG_92 0 x80 326 /*
327 * SVPDU_SECURITY_TAG_92 - 安然信息标识(9-2) 328 */
329 #define SVPDU_SECURITY_TAG_92 0 x81 330 /*
331 * SVPDU_SEQUENCE_TAG_92 - 关于sequence of asdu的宏定义 332 */
333 #define SVPDU_SEQUENCE_TAG_92 0 xA2 334 335 /*
336 * svpdu_apdu_head - 9-2/9-1 svpdu中应用层(Application Layer)apdu头部信息;
337 * @apdu_tag: 应用层和谈标识;为0 x60时为9-2数据,为0 x80时为9-1数据,该标识可以用来区分该数据包类型;
338 * @apdu_length: apdu数据包的长度值(从apdu_length的下一个数据开端计数);该数据本身是变长数据,采取
339 * ASN.1 根蒂根基编码规矩(ISO/IEC 8825-1),在此商定该值不会跨越0 xffffff,最长为4字节,采取u32
340 * 类型数据存储;
341 * @asdu_num_tag: asdu个数标识;该值在9-2中为0 x80,9-1中没有该标识;
342 * @asdu_num_length: [asdu个数]的长度值;标识num数据本身的长度信息,该值在9-2中一般为0 x01,9-1中没有
343 * 该标识;该数据本身是变长数据,采取ASN.1编码;在此商定该值不会跨越0 xffffff,最长为4
344 * 字节(实际一般为1在字节),采取u32类型数据存储;
345 * @asdu_num_value: asdu个数;该值在9-2中,该数据是变长数据,长度(字节数)由asdu_num_length中的len
346 * 值(不是码)决意;在9-1中,固定采取2字节默示;在此直接用2字节默示,应为其值一般不克不及
347 * 跨越2字节;
348 * @asdu_security_tag: 安然信息标识;该值在9-2中为0 x81,为可选数据(一般不选);在9-1中无该数据;
349 * @asdu_security_length: 安然信息长度;采取ASN.1编码,变长,该项在9-2中为可选数据(一般不选),其值一
350 * 般为0;在9-1中无该数据;在此商定该值不会跨越0 xffffff,最长为4字节,采取u32类型数据存储;
351 * @asdu_sequence_tag: asdu序列信息标识;该值在9-2中为0 xA2;在9-1中无该数据;
352 * @asdu_sequence_length: asdu序列信息长度;采取ASN.1编码,变长;在9-1中无该数据;在此商定该值不会跨越
353 * 0 xffffff,最长为4字节,采取u32类型数据存储; 354 *
355 * 注:
356 * 布局体中的ASN.1长度码同一采取u32默示,策画实际长度值时,须要解码;ASN.1长度策画办法如下:
357 * 长度值在[0 x000000, 0 x00007f],1个字节默示;
358 * 长度值在[0 x000080, 0 x0000ff],2个字节默示,第一个字节填0 x81;
359 * 长度值在[0 x000100, 0 x00ffff],3个字节默示,第一个字节填0 x82,后面用收集字节序;
360 * 长度值在[0 x010000, 0 xffffff],4个字节默示,第一个字节填0 x83,后面用收集字节序;
361 * 一般景象下,asdu_security_tag、asdu_security_length没有;
362 * 61850编码规矩基于ASN.1根蒂根基编码规矩(BER),传输语法采取8位位组和面向“Big Endian(高字节在前)”的。 363 * 364 */
365 struct svpdu_apdu_head {
366 u8 apdu_tag;
367 u32 apdu_length;
368 u8 asdu_num_tag;
369 u32 asdu_num_length;