/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "HNBAP-IEs"
 * 	found in "../../asn1/hnbap/HNBAP-IEs.asn"
 * 	`asn1c -gen-PER`
 */

#ifndef	_IP_Address_H_
#define	_IP_Address_H_


#include <asn_application.h>

/* Including external dependencies */
#include <osmocom/hnbap/Ipv4Address.h>
#include <osmocom/hnbap/Ipv6Address.h>
#include <constr_CHOICE.h>
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum ipaddress_PR {
	ipaddress_PR_NOTHING,	/* No components present */
	ipaddress_PR_ipv4info,
	ipaddress_PR_ipv6info,
	/* Extensions may appear below */
	
} ipaddress_PR;

/* Forward declarations */
struct IE_Extensions;

/* IP-Address */
typedef struct IP_Address {
	struct ipaddress {
		ipaddress_PR present;
		union IP_Address__ipaddress_u {
			Ipv4Address_t	 ipv4info;
			Ipv6Address_t	 ipv6info;
			/*
			 * This type is extensible,
			 * possible extensions are below.
			 */
		} choice;
		
		/* Context for parsing across buffer boundaries */
		asn_struct_ctx_t _asn_ctx;
	} ipaddress;
	struct IE_Extensions	*iE_Extensions	/* OPTIONAL */;
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} IP_Address_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_IP_Address;

#ifdef __cplusplus
}
#endif

/* Referred external types */
#include <osmocom/hnbap/IE-Extensions.h>

#endif	/* _IP_Address_H_ */
#include <asn_internal.h>
