libosmoisdn  1.9.0.20-4ca0f.202311062026
Osmocom ISDN library
lapd_core.h
Go to the documentation of this file.
1 
4 #pragma once
5 
6 #include <stdint.h>
7 
8 #include <osmocom/core/timer.h>
9 #include <osmocom/core/msgb.h>
10 #include <osmocom/gsm/prim.h>
11 
17 #define LOGDL(dl, level, fmt, args...) \
18  LOGP(DLLAPD, level, "(%s) " fmt, (dl)->name, ## args)
19 
30 };
31 
32 /* Uses the same values as RLL, so no conversion for GSM is required. */
33 #define MDL_CAUSE_T200_EXPIRED 0x01
34 #define MDL_CAUSE_REEST_REQ 0x02
35 #define MDL_CAUSE_UNSOL_UA_RESP 0x03
36 #define MDL_CAUSE_UNSOL_DM_RESP 0x04
37 #define MDL_CAUSE_UNSOL_DM_RESP_MF 0x05
38 #define MDL_CAUSE_UNSOL_SPRV_RESP 0x06
39 #define MDL_CAUSE_SEQ_ERR 0x07
40 #define MDL_CAUSE_UFRM_INC_PARAM 0x08
41 #define MDL_CAUSE_SFRM_INC_PARAM 0x09
42 #define MDL_CAUSE_IFRM_INC_MBITS 0x0a
43 #define MDL_CAUSE_IFRM_INC_LEN 0x0b
44 #define MDL_CAUSE_FRM_UNIMPL 0x0c
45 #define MDL_CAUSE_SABM_MF 0x0d
46 #define MDL_CAUSE_SABM_INFO_NOTALL 0x0e
47 #define MDL_CAUSE_FRMR 0x0f
48 
51  uint8_t cause;
52 };
53 
56  uint8_t mode;
57 };
58 
61  struct osmo_prim_hdr oph;
62  union {
63  struct mdl_error_ind_param error_ind;
64  struct dl_rel_req_param rel_req;
65  } u;
66 };
67 
69 enum lapd_mode {
72 };
73 
75 enum lapd_state {
85 };
86 
93 };
94 
96 struct lapd_msg_ctx {
97  struct lapd_datalink *dl;
98  int n201;
99  /* address */
100  uint8_t cr;
101  uint8_t sapi;
102  uint8_t tei;
103  uint8_t lpd;
104  /* control */
105  uint8_t format;
106  uint8_t p_f; /* poll / final bit */
107  uint8_t n_send;
108  uint8_t n_recv;
109  uint8_t s_u; /* S or repectivly U function bits */
110  /* length */
111  int length;
112  uint8_t more;
113 };
114 
115 struct lapd_cr_ent {
116  uint8_t cmd;
117  uint8_t resp;
118 };
119 
120 struct lapd_history {
121  struct msgb *msg; /* message to be sent / NULL, if histoy is empty */
122  int more; /* if message is fragmented */
123 };
124 
127  int (*send_dlsap)(struct osmo_dlsap_prim *dp, struct lapd_msg_ctx *lctx);
128  int (*send_ph_data_req)(struct lapd_msg_ctx *lctx, struct msgb *msg);
129  int (*update_pending_frames)(struct lapd_msg_ctx *lctx);
130  struct {
132  struct lapd_cr_ent loc2rem;
133  struct lapd_cr_ent rem2loc;
134  } cr;
135  enum lapd_mode mode;
136  int use_sabme;
138  int n200, n200_est_rel;
139  struct lapd_msg_ctx lctx;
140  int maxf;
141  uint8_t k;
142  uint8_t v_range;
143  uint8_t v_send;
144  uint8_t v_ack;
145  uint8_t v_recv;
146  uint32_t state;
148  uint8_t own_busy;
149  uint8_t peer_busy;
150  int t200_sec, t200_usec;
151  int t203_sec, t203_usec;
152  struct osmo_timer_list t200;
153  struct osmo_timer_list t203;
154  uint8_t retrans_ctr;
155  struct llist_head tx_queue;
156  struct llist_head send_queue;
157  struct msgb *send_buffer;
158  int send_out;
160  uint8_t range_hist;
161  struct msgb *rcv_buffer;
162  struct msgb *cont_res;
163  char *name;
164 };
165 
166 void lapd_dl_init(struct lapd_datalink *dl, uint8_t k, uint8_t v_range, int maxf)
167  OSMO_DEPRECATED("Use lapd_dl_init2() instead");
168 void lapd_dl_init2(struct lapd_datalink *dl, uint8_t k, uint8_t v_range, int maxf, const char *name);
169 void lapd_dl_set_name(struct lapd_datalink *dl, const char *name);
170 void lapd_dl_exit(struct lapd_datalink *dl);
171 void lapd_dl_reset(struct lapd_datalink *dl);
172 int lapd_set_mode(struct lapd_datalink *dl, enum lapd_mode mode);
173 int lapd_ph_data_ind(struct msgb *msg, struct lapd_msg_ctx *lctx);
174 int lapd_recv_dlsap(struct osmo_dlsap_prim *dp, struct lapd_msg_ctx *lctx);
175 
primitive header for LAPD DL-SAP primitives
Definition: lapd_core.h:60
void lapd_dl_init2(struct lapd_datalink *dl, uint8_t k, uint8_t v_range, int maxf, const char *name)
Initialize LAPD datalink instance and allocate history.
Definition: lapd_core.c:262
DL-RESUME.
Definition: lapd_core.h:27
MDL-ERROR.
Definition: lapd_core.h:29
#define OSMO_DEPRECATED(text)
uint8_t n_recv
Definition: lapd_core.h:108
lapd_mode
LAPD mode/role.
Definition: lapd_core.h:69
uint8_t more
Definition: lapd_core.h:112
Definition: lapd_core.h:80
DL-ESTABLISH.
Definition: lapd_core.h:24
Definition: lapd_core.h:84
uint8_t lpd
Definition: lapd_core.h:103
Definition: lapd_core.h:76
DL-UNIT-DATA.
Definition: lapd_core.h:22
Definition: lapd_core.h:78
int lapd_recv_dlsap(struct osmo_dlsap_prim *dp, struct lapd_msg_ctx *lctx)
Definition: lapd_core.c:2200
int lapd_ph_data_ind(struct msgb *msg, struct lapd_msg_ctx *lctx)
Definition: lapd_core.c:1696
for DL-REL.req
Definition: lapd_core.h:55
void lapd_dl_reset(struct lapd_datalink *dl)
Definition: lapd_core.c:337
DL-RECONNECT.
Definition: lapd_core.h:28
Definition: lapd_core.h:120
for MDL-ERROR.ind
Definition: lapd_core.h:50
uint8_t cmd
Definition: lapd_core.h:116
uint8_t cr
Definition: lapd_core.h:100
uint8_t tei
Definition: lapd_core.h:102
uint8_t mode
release mode
Definition: lapd_core.h:56
Definition: lapd_core.h:89
void lapd_dl_exit(struct lapd_datalink *dl)
Definition: lapd_core.c:358
uint8_t p_f
Definition: lapd_core.h:106
Definition: lapd_core.h:91
struct lapd_datalink * dl
Definition: lapd_core.h:97
osmo_dl_prim
LAPD related primitives (L2<->L3 SAP)
Definition: lapd_core.h:21
LAPD message context.
Definition: lapd_core.h:96
DL-RLEEASE.
Definition: lapd_core.h:25
Definition: lapd_core.h:77
Definition: lapd_core.h:115
behave like network
Definition: lapd_core.h:71
int lapd_set_mode(struct lapd_datalink *dl, enum lapd_mode mode)
Set the lapdm_mode of a LAPDm entity.
Definition: lapd_core.c:374
behave like user
Definition: lapd_core.h:70
void lapd_dl_init(struct lapd_datalink *dl, uint8_t k, uint8_t v_range, int maxf) OSMO_DEPRECATED("Use lapd_dl_init2() instead")
Initialize LAPD datalink instance and allocate history.
Definition: lapd_core.c:324
int length
Definition: lapd_core.h:111
Definition: lapd_core.h:83
DL-DATA.
Definition: lapd_core.h:23
Definition: lapd_core.h:90
Definition: lapd_core.h:92
int n201
Definition: lapd_core.h:98
uint8_t format
Definition: lapd_core.h:105
struct msgb * msg
Definition: lapd_core.h:121
uint8_t s_u
Definition: lapd_core.h:109
Definition: lapd_core.h:82
uint8_t cause
generic cause value
Definition: lapd_core.h:51
uint8_t n_send
Definition: lapd_core.h:107
lapd_format
LAPD message format (I / S / U)
Definition: lapd_core.h:88
lapd_state
LAPD state (Figure B.2/Q.921)
Definition: lapd_core.h:75
int more
Definition: lapd_core.h:122
uint8_t resp
Definition: lapd_core.h:117
Definition: lapd_core.h:81
DL-SUSPEND.
Definition: lapd_core.h:26
void lapd_dl_set_name(struct lapd_datalink *dl, const char *name)
Definition: lapd_core.c:329
Definition: lapd_core.h:79
uint8_t sapi
Definition: lapd_core.h:101