local.h 5.68 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 21
 * 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
 */

22 23 24 25
/***************************************************************************
                          local.h  -  description
                             -------------------
    copyright            : (C) 2002 by Eurecom
26 27
    email                : navid.nikaein@eurecom.fr
                          lionel.gauthier@eurecom.fr
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
                           knopp@eurecom.fr
 ***************************************************************************

 ***************************************************************************/

#ifndef LOCAL_H
#define LOCAL_H

#include <linux/if_arp.h>
#include <linux/types.h>
#include <linux/spinlock.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/ipv6.h>
#include <linux/ip.h>
#include <linux/sysctl.h>
#include <linux/timer.h>
#include <linux/unistd.h>
#include <asm/param.h>
//#include <sys/sysctl.h>
#include <linux/udp.h>
#include <linux/tcp.h>
#include <linux/icmp.h>
#include <linux/icmpv6.h>
#include <linux/in.h>
#include <net/ndisc.h>


//#include "rrc_nas_primitives.h"
//#include "rrc_sap.h"

59
#define PDCP2PDCP_USE_RT_FIFO 21
60 61 62 63 64
#define NAS2PDCP_FIFO 22

#include "constant.h"
#include "sap.h"
#include "rrc_nas_primitives.h"
65
#include "COMMON/platform_types.h"
66

67
struct rb_entity {
68 69 70
  nasRadioBearerId_t rab_id;
  nasSapId_t sapi;
  nasQoSTrafficClass_t qos;
71 72 73
  uint8_t state;
  uint8_t retry;
  uint32_t countimer;
74 75 76
  struct rb_entity *next;
};

77
struct cx_entity {
78
  int sap[NAS_SAPI_CX_MAX];
79 80 81 82 83
  uint8_t state;      // state of the connection
  nasLocalConnectionRef_t lcr;  // Local connection reference
  nasCellID_t cellid;   // cell identification
  uint32_t countimer;     // timeout's counter
  uint8_t retry;      // number of retransmission
84 85
  struct classifier_entity *sclassifier[NAS_DSCP_MAX]; // send classifier;
  struct classifier_entity *fclassifier[NAS_DSCP_MAX]; // send classifier;
86 87
  uint16_t nsclassifier;
  uint16_t nfclassifier;
88 89
  uint32_t iid6[2];       // IPv6  interface identification
  uint8_t iid4;       // IPv4 interface identification
90
  struct rb_entity *rb;
91
  uint16_t num_rb;
92 93 94 95 96 97 98
  int lastRRCprimitive;
  //measures
  int req_prov_id[MAX_MEASURE_NB];
  int num_measures;
  int meas_cell_id[MAX_MEASURE_NB];
  int meas_level[MAX_MEASURE_NB];
  int provider_id[MAX_MEASURE_NB];
99

100
};
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
//#define NAS_RETRY_LIMIT_DEFAULT 5

struct nas_priv {
  int irq;
  struct timer_list timer;
  spinlock_t lock;
  struct net_device_stats stats;
  uint8_t retry_limit;
  uint32_t timer_establishment;
  uint32_t timer_release;
  struct cx_entity cx[NAS_CX_MAX];
  struct classifier_entity *rclassifier[NAS_DSCP_MAX]; // receive classifier
  uint16_t nrclassifier;
  int sap[NAS_SAPI_MAX];
  struct sock *nl_sk;
  uint8_t nlmsg[NAS_MAX_LENGTH+sizeof(struct nlmsghdr)];
  uint8_t xbuffer[NAS_MAX_LENGTH]; // transmition buffer
  uint8_t rbuffer[NAS_MAX_LENGTH]; // reception buffer
};

121

122
struct classifier_entity {
123
  uint32_t classref;
124
  struct classifier_entity *next;
125
  uint8_t version;
126
  union {
127
    struct in6_addr ipv6;
128
    uint32_t ipv4;
129
  } saddr; // IP source address
130
  uint8_t splen; // prefix length
131
  union {
132
    struct in6_addr ipv6;
133
    uint32_t ipv4;
134 135
    unsigned int mpls_label;
  } daddr; // IP destination address
136
  uint8_t dplen; // prefix length
137
  uint8_t protocol;   // high layer protocol type
138
  unsigned char protocol_message_type;
139 140
  uint16_t sport;   // source port
  uint16_t dport;   // destination port
141 142 143
  struct rb_entity *rb;      //pointer to rb_entity for sending function or receiving in case of forwarding rule
  struct rb_entity *rb_rx;   //pointer to rb_entity for receiving (in case of forwarding rule)
  nasRadioBearerId_t rab_id;            // RAB identification for sending
144
  nasRadioBearerId_t rab_id_rx;   // RAB identification for receiving (in case of forwarding rule)
145
  void (*fct)(struct sk_buff *skb, struct cx_entity *cx, struct classifier_entity *gc,int inst, struct nas_priv *gpriv);
146 147 148 149
};

struct ipversion {
#if defined(__LITTLE_ENDIAN_BITFIELD)
150 151
  uint8_t    reserved:4,
             version:4;
152
#else
153 154
  uint8_t    version:4,
             reserved:4;
155 156 157
#endif
};

158 159 160 161
typedef struct pdcp_data_req_header_s {
  rb_id_t             rb_id;
  sdu_size_t          data_size;
  signed int          inst;
162
  ip_traffic_type_t   traffic_type;
163 164
  uint32_t sourceL2Id;
  uint32_t destinationL2Id;
165 166
} pdcp_data_req_header_t;

167 168 169 170
typedef struct pdcp_data_ind_header_s {
  rb_id_t             rb_id;
  sdu_size_t          data_size;
  signed int          inst;
171
  ip_traffic_type_t   dummy_traffic_type;
172 173
  uint32_t sourceL2Id;
  uint32_t destinationL2Id;
174 175 176
} pdcp_data_ind_header_t;

extern struct net_device *nasdev[NB_INSTANCES_MAX];
177

178

179
extern uint8_t NAS_NULL_IMEI[14];
180 181

//global variables shared with RRC
182
#ifndef PDCP_USE_NETLINK
183
  extern int pdcp_2_nas_irq;
184
#endif
185

186 187

#endif