x2ap_common.h 5.3 KB
Newer Older
1 2 3 4 5
/*
 * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The OpenAirInterface Software Alliance licenses this file to You under
6
 * the OAI Public License, Version 1.1  (the "License"); you may not use this file
7 8 9 10 11 12 13 14 15 16 17 18 19 20
 * except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.openairinterface.org/?page_id=698
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *-------------------------------------------------------------------------------
 * For more information about the OpenAirInterface (OAI) Software Alliance:
 *      contact@openairinterface.org
 */
gauthier's avatar
gauthier committed
21 22 23 24 25

#if HAVE_CONFIG_H_
# include "config.h"
#endif

26 27 28 29 30 31 32 33 34 35
#include "X2AP_ProtocolIE-Field.h"
#include "X2AP_X2AP-PDU.h"
#include "X2AP_InitiatingMessage.h"
#include "X2AP_SuccessfulOutcome.h"
#include "X2AP_UnsuccessfulOutcome.h"
#include "X2AP_ProtocolIE-FieldPair.h"
#include "X2AP_ProtocolIE-ContainerPair.h"
#include "X2AP_ProtocolExtensionField.h"
#include "X2AP_ProtocolExtensionContainer.h"
#include "X2AP_asn_constant.h"
36
#include "intertask_interface.h"
37

gauthier's avatar
gauthier committed
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
#ifndef X2AP_COMMON_H_
#define X2AP_COMMON_H_

/** @defgroup _x2ap_impl_ X2AP Layer Reference Implementation
 * @ingroup _ref_implementation_
 * @{
 */

/* Checking version of ASN1C compiler */
#if (ASN1C_ENVIRONMENT_VERSION < 923)
# error "You are compiling x2ap with the wrong version of ASN1C"
#endif

#ifndef X2AP_PORT
# define X2AP_PORT 36422
#endif

laurent's avatar
laurent committed
55
#ifndef TRUE
gauthier's avatar
gauthier committed
56 57
#define TRUE 1
#define FALSE 0
laurent's avatar
laurent committed
58
#endif
gauthier's avatar
gauthier committed
59 60 61 62

extern int asn1_xer_print;

#if defined(ENB_MODE)
63
# include "common/utils/LOG/log.h"
64
# define X2AP_INFO(x, args...) LOG_I(X2AP, x, ##args)
gauthier's avatar
gauthier committed
65 66 67 68
# define X2AP_ERROR(x, args...) LOG_E(X2AP, x, ##args)
# define X2AP_WARN(x, args...)  LOG_W(X2AP, x, ##args)
# define X2AP_DEBUG(x, args...) LOG_D(X2AP, x, ##args)
#else
69
# define X2AP_INFO(x, args...) do { fprintf(stdout, "[X2AP][I]"x, ##args); } while(0)
gauthier's avatar
gauthier committed
70 71 72 73 74
# define X2AP_ERROR(x, args...) do { fprintf(stdout, "[X2AP][E]"x, ##args); } while(0)
# define X2AP_WARN(x, args...)  do { fprintf(stdout, "[X2AP][W]"x, ##args); } while(0)
# define X2AP_DEBUG(x, args...) do { fprintf(stdout, "[X2AP][D]"x, ##args); } while(0)
#endif

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
#define X2AP_FIND_PROTOCOLIE_BY_ID(IE_TYPE, ie, container, IE_ID, mandatory) \
  do {\
    IE_TYPE **ptr; \
    ie = NULL; \
    for (ptr = container->protocolIEs.list.array; \
         ptr < &container->protocolIEs.list.array[container->protocolIEs.list.count]; \
         ptr++) { \
      if((*ptr)->id == IE_ID) { \
        ie = *ptr; \
        break; \
      } \
    } \
    if (mandatory) DevAssert(ie != NULL); \
  } while(0)

gauthier's avatar
gauthier committed
90 91 92
/** \brief Function callback prototype.
 **/
typedef int (*x2ap_message_decoded_callback)(
93
  instance_t instance,
94 95
  uint32_t assocId,
  uint32_t stream,
96
  X2AP_X2AP_PDU_t *pdu);
gauthier's avatar
gauthier committed
97 98 99 100 101 102 103 104 105 106 107

/** \brief Encode a successfull outcome message
 \param buffer pointer to buffer in which data will be encoded
 \param length pointer to the length of buffer
 \param procedureCode Procedure code for the message
 \param criticality Criticality of the message
 \param td ASN1C type descriptor of the sptr
 \param sptr Deferenced pointer to the structure to encode
 @returns size in bytes encded on success or 0 on failure
 **/
ssize_t x2ap_generate_successfull_outcome(
108 109
  uint8_t               **buffer,
  uint32_t               *length,
110 111
  X2AP_ProcedureCode_t         procedureCode,
  X2AP_Criticality_t           criticality,
112 113
  asn_TYPE_descriptor_t  *td,
  void                   *sptr);
gauthier's avatar
gauthier committed
114 115 116 117 118 119 120 121 122 123 124

/** \brief Encode an initiating message
 \param buffer pointer to buffer in which data will be encoded
 \param length pointer to the length of buffer
 \param procedureCode Procedure code for the message
 \param criticality Criticality of the message
 \param td ASN1C type descriptor of the sptr
 \param sptr Deferenced pointer to the structure to encode
 @returns size in bytes encded on success or 0 on failure
 **/
ssize_t x2ap_generate_initiating_message(
125 126
  uint8_t               **buffer,
  uint32_t               *length,
127 128
  X2AP_ProcedureCode_t    procedureCode,
  X2AP_Criticality_t      criticality,
129 130
  asn_TYPE_descriptor_t  *td,
  void                   *sptr);
gauthier's avatar
gauthier committed
131 132 133 134 135 136 137 138 139 140 141

/** \brief Encode an unsuccessfull outcome message
 \param buffer pointer to buffer in which data will be encoded
 \param length pointer to the length of buffer
 \param procedureCode Procedure code for the message
 \param criticality Criticality of the message
 \param td ASN1C type descriptor of the sptr
 \param sptr Deferenced pointer to the structure to encode
 @returns size in bytes encded on success or 0 on failure
 **/
ssize_t x2ap_generate_unsuccessfull_outcome(
142 143
  uint8_t               **buffer,
  uint32_t               *length,
144 145
  X2AP_ProcedureCode_t         procedureCode,
  X2AP_Criticality_t           criticality,
146 147
  asn_TYPE_descriptor_t  *td,
  void                   *sptr);
gauthier's avatar
gauthier committed
148 149 150 151 152

/** \brief Handle criticality
 \param criticality Criticality of the IE
 @returns void
 **/
153
void x2ap_handle_criticality(X2AP_Criticality_t criticality);
gauthier's avatar
gauthier committed
154 155

#endif /* X2AP_COMMON_H_ */