You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
203 lines
6.5 KiB
C
203 lines
6.5 KiB
C
1 year ago
|
/************************************************************************/
|
||
|
/* SISCO SOFTWARE MODULE HEADER *****************************************/
|
||
|
/************************************************************************/
|
||
|
/* (c) Copyright Systems Integration Specialists Company, Inc., */
|
||
|
/* 1999-2002, All Rights Reserved. */
|
||
|
/* */
|
||
|
/* PROPRIETARY AND CONFIDENTIAL */
|
||
|
/* */
|
||
|
/* MODULE NAME : goose.h */
|
||
|
/* PRODUCT(S) : */
|
||
|
/* */
|
||
|
/* MODULE DESCRIPTION : */
|
||
|
/* */
|
||
|
/* GLOBAL FUNCTIONS DEFINED IN THIS MODULE : */
|
||
|
/* */
|
||
|
/* MODIFICATION LOG : */
|
||
|
/* Date Who Rev Comments */
|
||
|
/* -------- --- ------ ------------------------------------------- */
|
||
|
/* 01/08/03 JRB 08 Del obsolete dataRef, elementId from structs */
|
||
|
/* & from gse_iec_data_init args. */
|
||
|
/* 12/03/02 ASK 07 Chg Goose structs for new ASN.1 encoding. Chg*/
|
||
|
/* gse_iec_encode and gse_iec_hdr_decode protos */
|
||
|
/* for Ethertype. include "ethertyp.h" */
|
||
|
/* 09/30/02 NAV 06 Add ifdef __cplusplus */
|
||
|
/* 02/26/02 JRB 05 Chg IEC GOOSE asn1Data args to UCHAR. */
|
||
|
/* Chg some IEC GOOSE decode params to INT32. */
|
||
|
/* 01/02/02 JRB 04 Add IEC GOOSE definitions. */
|
||
|
/* 07/25/00 RKR 03 changed VisibleString SendingIED to ST_CHAR */
|
||
|
/* 09/10/99 JRB 02 Chg SqNum, StNum, HoldTim, & BackTim */
|
||
|
/* to UINT32 to match GOMSFE 0.9. */
|
||
|
/* 06/25/99 MDE 01 Created */
|
||
|
/************************************************************************/
|
||
|
#ifndef GOOSE_HDR_INCLUDED
|
||
|
#define GOOSE_HDR_INCLUDED
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include "asn1r.h" /* need MMS_UTC_TIME */
|
||
|
#include "clnp_usr.h"
|
||
|
#include "clnp_sne.h"
|
||
|
#include "acse2usr.h"
|
||
|
#include "ethertyp.h"
|
||
|
/* NOTE: need runtime_type from "mms_vvar.h" but requires bunch of */
|
||
|
/* other includes, so just use forward declaration. */
|
||
|
struct runtime_type; /* forward declaration */
|
||
|
|
||
|
/************************************************************************/
|
||
|
|
||
|
|
||
|
#define GOOSE_NAME_MISMATCH 0x112
|
||
|
#define GOOSE_DONE_TOO_SOON 0x113
|
||
|
|
||
|
/************************************************************************/
|
||
|
#define GOOSE_MAX_NUM_DNA_BITS 128
|
||
|
#define GOOSE_MAX_NUM_USR_BITS 512
|
||
|
|
||
|
#define GOOSE_DEF_NUM_DNA_BITS 64
|
||
|
#define GOOSE_DEF_NUM_USR_BITS 128
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
/* GOOSE Stack addressing information */
|
||
|
AUDT_APDU audtApdu;
|
||
|
|
||
|
/* GOOSE MMS values */
|
||
|
ST_CHAR SendingIED[66];
|
||
|
MMS_BTOD t;
|
||
|
ST_UINT32 SqNum;
|
||
|
ST_UINT32 StNum;
|
||
|
ST_UINT32 HoldTim;
|
||
|
ST_UINT32 BackTim;
|
||
|
ST_UINT16 PhsID;
|
||
|
|
||
|
ST_INT num_dna_bits;
|
||
|
ST_UCHAR DNA[GOOSE_MAX_NUM_DNA_BITS/8];
|
||
|
|
||
|
ST_INT num_usr_bits;
|
||
|
ST_UCHAR UserSt[GOOSE_MAX_NUM_USR_BITS/8];
|
||
|
} GOOSE_INFO;
|
||
|
|
||
|
/************************************************************************/
|
||
|
/* The user makes use of these functions to send and receive GOOSE */
|
||
|
/* messages. */
|
||
|
|
||
|
ST_RET mmsl_send_goose (GOOSE_INFO *gi);
|
||
|
ST_VOID u_mmsl_goose_received (GOOSE_INFO *goose_info);
|
||
|
|
||
|
/************************************************************************/
|
||
|
/* Internal */
|
||
|
|
||
|
#define GOOSE_MAX_PDU_SIZE 200
|
||
|
|
||
|
/* Define macro so new function just calls old function. */
|
||
|
#define gse_uca_write(gi) mmsl_send_goose (gi)
|
||
|
|
||
|
ST_RET gse_uca_decode (SN_UNITDATA *sn_udt, /* input subnet packet */
|
||
|
GOOSE_INFO *goose_info); /* output GOOSE data */
|
||
|
|
||
|
/************************************************************************/
|
||
|
/* BEGIN IEC GOOSE DEFINITIONS */
|
||
|
/************************************************************************/
|
||
|
typedef struct
|
||
|
{
|
||
|
struct runtime_type *runtimeTypeHead; /* Array of Runtime Types */
|
||
|
ST_INT numRuntimeTypes; /* # of Runtime Types in array */
|
||
|
ST_CHAR *dataBuf; /* ptr to local data */
|
||
|
ST_VOID *userInfo; /* To store anything user wants.*/
|
||
|
/* GSE code does not use it. */
|
||
|
} GSE_IEC_DATA_ENTRY;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
ST_UINT8 *asn1Ptr;
|
||
|
ST_INT asn1Len;
|
||
|
} GSE_IEC_DATA_ENTRY_RX;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
ST_CHAR *gcRef;
|
||
|
ST_UINT32 timeToLive;
|
||
|
ST_CHAR *dataSetRef;
|
||
|
ST_BOOLEAN appID_pres;
|
||
|
ST_CHAR *appID;
|
||
|
MMS_UTC_TIME utcTime;
|
||
|
ST_UINT32 stNum;
|
||
|
ST_UINT32 sqNum;
|
||
|
ST_BOOLEAN test;
|
||
|
ST_INT confRev;
|
||
|
ST_BOOLEAN needsCommissioning;
|
||
|
ST_INT numDataEntries;
|
||
|
GSE_IEC_DATA_ENTRY *dataEntries; /* array of data entry structs */
|
||
|
}GSE_IEC_CTRL;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
ST_CHAR *gcRef;
|
||
|
ST_UINT32 timeToLive;
|
||
|
ST_CHAR *dataSetRef;
|
||
|
ST_BOOLEAN appID_pres;
|
||
|
ST_CHAR *appID;
|
||
|
MMS_UTC_TIME utcTime;
|
||
|
ST_UINT32 stNum;
|
||
|
ST_UINT32 sqNum;
|
||
|
ST_BOOLEAN test;
|
||
|
ST_INT32 confRev;
|
||
|
ST_BOOLEAN needsCommissioning;
|
||
|
ST_INT32 numDataEntries;
|
||
|
ST_INT tmpIndex; /* index to current entry in "dataEntries" array.*/
|
||
|
/* Used during decode when filling in "dataEntries".*/
|
||
|
GSE_IEC_DATA_ENTRY_RX *dataEntries; /* array of data entry structs */
|
||
|
}GSE_IEC_HDR;
|
||
|
|
||
|
/* Subnet functions (clnp_snet_*) must be used to set multicast filters.*/
|
||
|
/* The following "gse_*" macros may be used to access these functions. */
|
||
|
#define gse_set_multicast_filter clnp_snet_set_multicast_filter
|
||
|
#define gse_discovery_start clnp_snet_rx_all_multicast_start
|
||
|
#define gse_discovery_stop clnp_snet_rx_all_multicast_stop
|
||
|
|
||
|
GSE_IEC_HDR *gse_iec_hdr_decode (ST_UCHAR *apdu, ST_INT apdu_len);
|
||
|
/* After calling "gse_iec_hdr_decode", user can examine "dataEntries" */
|
||
|
/* array in GSE_IEC_HDR, and call "ms_asn1_to_local" to decode any or */
|
||
|
/* all dataEntries. */
|
||
|
|
||
|
/* User must call this function when they are done with the decoded */
|
||
|
/* GOOSE info to free up the resources. */
|
||
|
ST_RET gse_iec_decode_done (GSE_IEC_HDR *hdr);
|
||
|
|
||
|
|
||
|
GSE_IEC_CTRL *gse_iec_control_create (ST_CHAR *gcRef, ST_CHAR *dataSetRefRef, ST_CHAR *appId,
|
||
|
ST_INT numDataEntry);
|
||
|
ST_RET gse_iec_control_destroy (GSE_IEC_CTRL *ctrl);
|
||
|
|
||
|
ST_RET gse_iec_data_init (GSE_IEC_CTRL *ctrl,
|
||
|
ST_INT index,
|
||
|
struct runtime_type *runtimeTypeHead,
|
||
|
ST_INT numRuntimeTypes
|
||
|
);
|
||
|
|
||
|
ST_RET gse_iec_data_update (GSE_IEC_CTRL *ctrl,
|
||
|
ST_INT index,
|
||
|
ST_VOID *dataPtr);
|
||
|
|
||
|
ST_UCHAR *gse_iec_encode (GSE_IEC_CTRL *ctrl,
|
||
|
ST_UCHAR *asn1DataBuf, /* buffer to encode in */
|
||
|
ST_INT asn1DataBufLen, /* len of buffer */
|
||
|
ST_INT *asn1DataLenOut, /* ptr to len encoded */
|
||
|
ETYPE_INFO *etype_info);/* ptr to Ethertype info*/
|
||
|
|
||
|
ST_RET gse_iec_send (GSE_IEC_CTRL *ctrl,
|
||
|
ST_UCHAR *dstMac, /* Destination MAC addr */
|
||
|
ST_UCHAR *asn1Data, /* ptr to ASN.1 encoded data*/
|
||
|
ST_INT asn1DataLen); /* len of ASN.1 encoded data*/
|
||
|
|
||
|
/************************************************************************/
|
||
|
/* END IEC GOOSE DEFINITIONS */
|
||
|
/************************************************************************/
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
#endif /* included */
|