/*
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2018 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
///////////////////////////////////////////////////////////////////////////////
//
//  File:          Revised_Notification_Indicator_IE_Data_Structure.asn
//  Description:   Functional protocol for ISDN
//
//  References:    ETSI EN 300 196-1 V1.3.2 (2001-06)
//                 Integrated Services Digital Network (ISDN);
//                 Generic functional protocol for the support
//                 of supplementary services;
//  Rev:          R3C
//  Prodnr:       CNL 113 435
//  Updated:      2006.01.10.
//  Contact:      http://ttcn.ericsson.se
*/

Revised-Notification-Indicator-IE-Data-Structure {itu-t identified-organization etsi(0) 196
							  revised-notification-data-structure(13)}

DEFINITIONS ::=

BEGIN

EXPORTS	NOTIFICATION;

IMPORTS;

NOTIFICATION ::=	CLASS
			{
			  &ArgumentType	  OPTIONAL,
			  &operationCode  Code-NotificationIndicator UNIQUE OPTIONAL
			}
WITH SYNTAX
			{
				[ARGUMENT      &ArgumentType]
				[CODE          &operationCode]
			}

Code-NotificationIndicator ::=		CHOICE
			{
				local			INTEGER,
				global			OBJECT IDENTIFIER
			}




NotificationDataStructure ::=	SEQUENCE
		{
			opcode		NOTIFICATION.&operationCode,
			argument	NOTIFICATION.&ArgumentType
		}

END -- of Revised-Notification-Indicator-IE-Data-Structure
