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

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