x2ap_common.h 5.33 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
 */
Lionel Gauthier's avatar
 
Lionel 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 36
#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-Field.h"
#include "X2AP_ProtocolIE-FieldPair.h"
#include "X2AP_ProtocolIE-ContainerPair.h"
#include "X2AP_ProtocolExtensionField.h"
#include "X2AP_ProtocolExtensionContainer.h"
#include "X2AP_asn_constant.h"
37

Lionel Gauthier's avatar
 
Lionel 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
Lionel Gauthier's avatar
 
Lionel Gauthier committed
56 57
#define TRUE 1
#define FALSE 0
laurent's avatar
laurent committed
58
#endif
Lionel Gauthier's avatar
 
Lionel 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)
Lionel Gauthier's avatar
 
Lionel 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)
Lionel Gauthier's avatar
 
Lionel 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)

Lionel Gauthier's avatar
 
Lionel Gauthier committed
90 91 92 93 94 95
//Forward declaration
struct x2ap_message_s;

/** \brief Function callback prototype.
 **/
typedef int (*x2ap_message_decoded_callback)(
96 97 98
  uint32_t assocId,
  uint32_t stream,
  struct x2ap_message_s *message);
Lionel Gauthier's avatar
 
Lionel Gauthier committed
99 100 101 102 103 104 105 106 107 108 109

/** \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(
110 111
  uint8_t               **buffer,
  uint32_t               *length,
112 113
  X2AP_ProcedureCode_t         procedureCode,
  X2AP_Criticality_t           criticality,
114 115
  asn_TYPE_descriptor_t  *td,
  void                   *sptr);
Lionel Gauthier's avatar
 
Lionel Gauthier committed
116 117 118 119 120 121 122 123 124 125 126

/** \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(
127 128
  uint8_t               **buffer,
  uint32_t               *length,
129 130
  X2AP_ProcedureCode_t    procedureCode,
  X2AP_Criticality_t      criticality,
131 132
  asn_TYPE_descriptor_t  *td,
  void                   *sptr);
Lionel Gauthier's avatar
 
Lionel Gauthier committed
133 134 135 136 137 138 139 140 141 142 143

/** \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(
144 145
  uint8_t               **buffer,
  uint32_t               *length,
146 147
  X2AP_ProcedureCode_t         procedureCode,
  X2AP_Criticality_t           criticality,
148 149
  asn_TYPE_descriptor_t  *td,
  void                   *sptr);
Lionel Gauthier's avatar
 
Lionel Gauthier committed
150 151 152 153 154

/** \brief Handle criticality
 \param criticality Criticality of the IE
 @returns void
 **/
155
void x2ap_handle_criticality(X2AP_Criticality_t criticality);
Lionel Gauthier's avatar
 
Lionel Gauthier committed
156 157

#endif /* X2AP_COMMON_H_ */