\doxysection{gprs\+\_\+ns2\+\_\+internal.\+h}
\label{gprs__ns2__internal_8h_source}\index{src/gb/gprs\_ns2\_internal.h@{src/gb/gprs\_ns2\_internal.h}}
\textbf{ Go to the documentation of this file.}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 }
\DoxyCodeLine{3 \textcolor{preprocessor}{\#pragma once}}
\DoxyCodeLine{4 }
\DoxyCodeLine{5 \textcolor{preprocessor}{\#include <stdbool.h>}}
\DoxyCodeLine{6 \textcolor{preprocessor}{\#include <stdint.h>}}
\DoxyCodeLine{7 }
\DoxyCodeLine{8 \textcolor{preprocessor}{\#include <osmocom/core/logging.h>}}
\DoxyCodeLine{9 \textcolor{preprocessor}{\#include <osmocom/core/rate\_ctr.h>}}
\DoxyCodeLine{10 \textcolor{preprocessor}{\#include <osmocom/gprs/protocol/gsm\_08\_16.h>}}
\DoxyCodeLine{11 \textcolor{preprocessor}{\#include <osmocom/gprs/gprs\_ns2.h>}}
\DoxyCodeLine{12 }
\DoxyCodeLine{13 \textcolor{preprocessor}{\#define LOGNSE(nse, lvl, fmt, args ...) \(\backslash\)}}
\DoxyCodeLine{14 \textcolor{preprocessor}{        LOGP(DLNS, lvl, "{}NSE(\%05u) "{}} fmt, (nse)-\/>nsei, \#\# args)}
\DoxyCodeLine{15 }
\DoxyCodeLine{16 \textcolor{preprocessor}{\#define LOGBIND(bind, lvl, fmt, args ...) \(\backslash\)}}
\DoxyCodeLine{17 \textcolor{preprocessor}{        LOGP(DLNS, lvl, "{}BIND(\%s) "{}} fmt, (bind)-\/>name, \#\# args)}
\DoxyCodeLine{18 }
\DoxyCodeLine{19 \textcolor{preprocessor}{\#define LOGNSVC\_SS(ss, nsvc, lvl, fmt, args ...)                                \(\backslash\)}}
\DoxyCodeLine{20 \textcolor{preprocessor}{        do \{                                                                    \(\backslash\)}}
\DoxyCodeLine{21 \textcolor{preprocessor}{                if ((nsvc)-\/>nsvci\_is\_valid) \{                                   \(\backslash\)}}
\DoxyCodeLine{22 \textcolor{preprocessor}{                        LOGP(ss, lvl, "{}NSE(\%05u)-\/NSVC(\%05u) "{}} fmt,              \(\backslash\)}
\DoxyCodeLine{23                              (nsvc)-\/>nse-\/>nsei, (nsvc)-\/>nsvci, \#\# args);        \(\backslash\)}
\DoxyCodeLine{24                 \} else \{                                                        \(\backslash\)}
\DoxyCodeLine{25                         LOGP(ss, lvl, "{}NSE(\%05u)-\/NSVC(none) "{} fmt,              \(\backslash\)}
\DoxyCodeLine{26                              (nsvc)-\/>nse-\/>nsei, \#\# args);                       \(\backslash\)}
\DoxyCodeLine{27                 \}                                                               \(\backslash\)}
\DoxyCodeLine{28         \} while (0)}
\DoxyCodeLine{29 }
\DoxyCodeLine{30 \textcolor{preprocessor}{\#define LOGNSVC(nsvc, lvl, fmt, args ...)                                       \(\backslash\)}}
\DoxyCodeLine{31 \textcolor{preprocessor}{        LOGNSVC\_SS(DLNS, nsvc, lvl, fmt, \#\# args)}}
\DoxyCodeLine{32 }
\DoxyCodeLine{33 \textcolor{preprocessor}{\#define LOG\_NS\_SIGNAL(nsvc, direction, pdu\_type, lvl, fmt, args ...)    \(\backslash\)}}
\DoxyCodeLine{34 \textcolor{preprocessor}{        LOGNSVC\_SS(DLNSSIGNAL, nsvc, lvl, "{}\%s \%s"{}} fmt, direction, get\_value\_string(gprs\_ns\_pdu\_strings, pdu\_type), \#\# args)}
\DoxyCodeLine{35 }
\DoxyCodeLine{36 \textcolor{preprocessor}{\#define LOG\_NS\_DATA(nsvc, direction, pdu\_type, lvl, fmt, args ...)      \(\backslash\)}}
\DoxyCodeLine{37 \textcolor{preprocessor}{        LOGNSVC\_SS(DLNSDATA, nsvc, lvl, "{}\%s \%s"{}} fmt, direction, get\_value\_string(gprs\_ns\_pdu\_strings, pdu\_type), \#\# args)}
\DoxyCodeLine{38 }
\DoxyCodeLine{39 \textcolor{preprocessor}{\#define LOG\_NS\_RX\_SIGNAL(nsvc, pdu\_type) LOG\_NS\_SIGNAL(nsvc, "{}Rx"{}}, pdu\_type, LOGL\_INFO, "{}\(\backslash\)n"{})}
\DoxyCodeLine{40 \textcolor{preprocessor}{\#define LOG\_NS\_TX\_SIGNAL(nsvc, pdu\_type) LOG\_NS\_SIGNAL(nsvc, "{}Tx"{}}, pdu\_type, LOGL\_INFO, "{}\(\backslash\)n"{})}
\DoxyCodeLine{41 }
\DoxyCodeLine{42 \textcolor{preprocessor}{\#define RATE\_CTR\_INC\_NS(nsvc, ctr) \(\backslash\)}}
\DoxyCodeLine{43 \textcolor{preprocessor}{        do \{ \(\backslash\)}}
\DoxyCodeLine{44 \textcolor{preprocessor}{                struct gprs\_ns2\_vc *\_nsvc = (nsvc); \(\backslash\)}}
\DoxyCodeLine{45 \textcolor{preprocessor}{                rate\_ctr\_inc(rate\_ctr\_group\_get\_ctr(\_nsvc-\/>ctrg, ctr)); \(\backslash\)}}
\DoxyCodeLine{46 \textcolor{preprocessor}{                rate\_ctr\_inc(rate\_ctr\_group\_get\_ctr(\_nsvc-\/>nse-\/>ctrg, ctr)); \(\backslash\)}}
\DoxyCodeLine{47 \textcolor{preprocessor}{        \} while (0)}}
\DoxyCodeLine{48 }
\DoxyCodeLine{49 \textcolor{preprocessor}{\#define RATE\_CTR\_ADD\_NS(nsvc, ctr, val) \(\backslash\)}}
\DoxyCodeLine{50 \textcolor{preprocessor}{        do \{ \(\backslash\)}}
\DoxyCodeLine{51 \textcolor{preprocessor}{                struct gprs\_ns2\_vc *\_nsvc = (nsvc); \(\backslash\)}}
\DoxyCodeLine{52 \textcolor{preprocessor}{                rate\_ctr\_add(rate\_ctr\_group\_get\_ctr(\_nsvc-\/>ctrg, ctr), val); \(\backslash\)}}
\DoxyCodeLine{53 \textcolor{preprocessor}{                rate\_ctr\_add(rate\_ctr\_group\_get\_ctr(\_nsvc-\/>nse-\/>ctrg, ctr), val); \(\backslash\)}}
\DoxyCodeLine{54 \textcolor{preprocessor}{        \} while (0)}}
\DoxyCodeLine{55 }
\DoxyCodeLine{56 }
\DoxyCodeLine{57 \textcolor{keyword}{struct }osmo\_fsm\_inst;}
\DoxyCodeLine{58 \textcolor{keyword}{struct }tlv\_parsed;}
\DoxyCodeLine{59 \textcolor{keyword}{struct }vty;}
\DoxyCodeLine{60 }
\DoxyCodeLine{61 \textcolor{keyword}{struct }gprs\_ns2\_vc\_driver;}
\DoxyCodeLine{62 \textcolor{keyword}{struct }gprs\_ns2\_vc\_bind;}
\DoxyCodeLine{63 }
\DoxyCodeLine{64 \textcolor{preprocessor}{\#define NS\_TIMERS\_COUNT 11}}
\DoxyCodeLine{65 }
\DoxyCodeLine{66 \textcolor{preprocessor}{\#define TNS\_BLOCK\_STR "{}tns-\/block"{}}}
\DoxyCodeLine{67 \textcolor{preprocessor}{\#define TNS\_BLOCK\_RETRIES\_STR "{}tns-\/block-\/retries"{}}}
\DoxyCodeLine{68 \textcolor{preprocessor}{\#define TNS\_RESET\_STR "{}tns-\/reset"{}}}
\DoxyCodeLine{69 \textcolor{preprocessor}{\#define TNS\_RESET\_RETRIES\_STR "{}tns-\/reset-\/retries"{}}}
\DoxyCodeLine{70 \textcolor{preprocessor}{\#define TNS\_TEST\_STR "{}tns-\/test"{}}}
\DoxyCodeLine{71 \textcolor{preprocessor}{\#define TNS\_ALIVE\_STR "{}tns-\/alive"{}}}
\DoxyCodeLine{72 \textcolor{preprocessor}{\#define TNS\_ALIVE\_RETRIES\_STR "{}tns-\/alive-\/retries"{}}}
\DoxyCodeLine{73 \textcolor{preprocessor}{\#define TSNS\_PROV\_STR "{}tsns-\/prov"{}}}
\DoxyCodeLine{74 \textcolor{preprocessor}{\#define TSNS\_SIZE\_RETRIES\_STR "{}tsns-\/size-\/retries"{}}}
\DoxyCodeLine{75 \textcolor{preprocessor}{\#define TSNS\_CONFIG\_RETRIES\_STR "{}tsns-\/config-\/retries"{}}}
\DoxyCodeLine{76 \textcolor{preprocessor}{\#define TSNS\_PROCEDURES\_RETRIES\_STR "{}tsns-\/procedures-\/retries"{}}}
\DoxyCodeLine{77 \textcolor{preprocessor}{\#define NS\_TIMERS "{}("{}} TNS\_BLOCK\_STR "{}|"{} TNS\_BLOCK\_RETRIES\_STR "{}|"{} TNS\_RESET\_STR "{}|"{} TNS\_RESET\_RETRIES\_STR "{}|"{} TNS\_TEST\_STR "{}|"{}\(\backslash\)}
\DoxyCodeLine{78         TNS\_ALIVE\_STR "{}|"{} TNS\_ALIVE\_RETRIES\_STR "{}|"{} TSNS\_PROV\_STR "{}|"{} TSNS\_SIZE\_RETRIES\_STR "{}|"{} TSNS\_CONFIG\_RETRIES\_STR "{}|"{}\(\backslash\)}
\DoxyCodeLine{79         TSNS\_PROCEDURES\_RETRIES\_STR "{})"{}}
\DoxyCodeLine{80 }
\DoxyCodeLine{81 \textcolor{preprocessor}{\#define NS\_TIMERS\_HELP  \(\backslash\)}}
\DoxyCodeLine{82 \textcolor{preprocessor}{        "{}(un)blocking Timer (Tns-\/block) timeout\(\backslash\)n"{}}              \(\backslash\)}
\DoxyCodeLine{83         "{}(un)blocking Timer (Tns-\/block) number of retries\(\backslash\)n"{}    \(\backslash\)}
\DoxyCodeLine{84         "{}Reset Timer (Tns-\/reset) timeout\(\backslash\)n"{}                     \(\backslash\)}
\DoxyCodeLine{85         "{}Reset Timer (Tns-\/reset) number of retries\(\backslash\)n"{}           \(\backslash\)}
\DoxyCodeLine{86         "{}Test Timer (Tns-\/test) timeout\(\backslash\)n"{}                       \(\backslash\)}
\DoxyCodeLine{87         "{}Alive Timer (Tns-\/alive) timeout\(\backslash\)n"{}                     \(\backslash\)}
\DoxyCodeLine{88         "{}Alive Timer (Tns-\/alive) number of retries\(\backslash\)n"{}           \(\backslash\)}
\DoxyCodeLine{89         "{}SNS Provision Timer (Tsns-\/prov) timeout\(\backslash\)n"{}             \(\backslash\)}
\DoxyCodeLine{90         "{}SNS Size number of retries\(\backslash\)n"{}                          \(\backslash\)}
\DoxyCodeLine{91         "{}SNS Config number of retries\(\backslash\)n"{}                        \(\backslash\)}
\DoxyCodeLine{92         "{}SNS Procedures number of retries\(\backslash\)n"{}                    \(\backslash\)}
\DoxyCodeLine{93 }
\DoxyCodeLine{94 \textcolor{comment}{/* Educated guess -\/ LLC user payload is 1500 bytes plus possible headers */}}
\DoxyCodeLine{95 \textcolor{preprocessor}{\#define NS\_ALLOC\_SIZE   3072}}
\DoxyCodeLine{96 \textcolor{preprocessor}{\#define NS\_ALLOC\_HEADROOM 20}}
\DoxyCodeLine{97 }
\DoxyCodeLine{98 \textcolor{preprocessor}{\#define NS\_DEFAULT\_TXQUEUE\_MAX\_LENGTH 128}}
\DoxyCodeLine{99 }
\DoxyCodeLine{100 \textcolor{keyword}{enum} ns2\_timeout \{}
\DoxyCodeLine{101         NS\_TOUT\_TNS\_BLOCK,}
\DoxyCodeLine{102         NS\_TOUT\_TNS\_BLOCK\_RETRIES,}
\DoxyCodeLine{103         NS\_TOUT\_TNS\_RESET,}
\DoxyCodeLine{104         NS\_TOUT\_TNS\_RESET\_RETRIES,}
\DoxyCodeLine{105         NS\_TOUT\_TNS\_TEST,}
\DoxyCodeLine{106         NS\_TOUT\_TNS\_ALIVE,}
\DoxyCodeLine{107         NS\_TOUT\_TNS\_ALIVE\_RETRIES,}
\DoxyCodeLine{108         NS\_TOUT\_TSNS\_PROV,}
\DoxyCodeLine{109         NS\_TOUT\_TSNS\_SIZE\_RETRIES,}
\DoxyCodeLine{110         NS\_TOUT\_TSNS\_CONFIG\_RETRIES,}
\DoxyCodeLine{111         NS\_TOUT\_TSNS\_PROCEDURES\_RETRIES,}
\DoxyCodeLine{112 \};}
\DoxyCodeLine{113 }
\DoxyCodeLine{114 \textcolor{keyword}{enum} nsvc\_timer\_mode \{}
\DoxyCodeLine{115         \textcolor{comment}{/* standard timers */}}
\DoxyCodeLine{116         NSVC\_TIMER\_TNS\_TEST,}
\DoxyCodeLine{117         NSVC\_TIMER\_TNS\_ALIVE,}
\DoxyCodeLine{118         NSVC\_TIMER\_TNS\_RESET,}
\DoxyCodeLine{119         \_NSVC\_TIMER\_NR,}
\DoxyCodeLine{120 \};}
\DoxyCodeLine{121 }
\DoxyCodeLine{122 \textcolor{keyword}{enum} ns2\_vc\_stat \{}
\DoxyCodeLine{123         NS\_STAT\_ALIVE\_DELAY,}
\DoxyCodeLine{124 \};}
\DoxyCodeLine{125 }
\DoxyCodeLine{126 \textcolor{keyword}{enum} ns2\_bind\_stat \{}
\DoxyCodeLine{127         NS2\_BIND\_STAT\_BACKLOG\_LEN,}
\DoxyCodeLine{128 \};}
\DoxyCodeLine{129 }
\DoxyCodeLine{131 \textcolor{keyword}{enum} ns2\_cs \{}
\DoxyCodeLine{132         NS2\_CS\_CREATED,     }
\DoxyCodeLine{133         NS2\_CS\_FOUND,       }
\DoxyCodeLine{134         NS2\_CS\_REJECTED,    }
\DoxyCodeLine{135         NS2\_CS\_SKIPPED,     }
\DoxyCodeLine{136         NS2\_CS\_ERROR,       }
\DoxyCodeLine{137 \};}
\DoxyCodeLine{138 }
\DoxyCodeLine{139 \textcolor{keyword}{enum} ns\_ctr \{}
\DoxyCodeLine{140         NS\_CTR\_PKTS\_IN,}
\DoxyCodeLine{141         NS\_CTR\_PKTS\_OUT,}
\DoxyCodeLine{142         NS\_CTR\_PKTS\_OUT\_DROP,}
\DoxyCodeLine{143         NS\_CTR\_BYTES\_IN,}
\DoxyCodeLine{144         NS\_CTR\_BYTES\_OUT,}
\DoxyCodeLine{145         NS\_CTR\_BYTES\_OUT\_DROP,}
\DoxyCodeLine{146         NS\_CTR\_BLOCKED,}
\DoxyCodeLine{147         NS\_CTR\_UNBLOCKED,}
\DoxyCodeLine{148         NS\_CTR\_DEAD,}
\DoxyCodeLine{149         NS\_CTR\_REPLACED,}
\DoxyCodeLine{150         NS\_CTR\_NSEI\_CHG,}
\DoxyCodeLine{151         NS\_CTR\_INV\_VCI,}
\DoxyCodeLine{152         NS\_CTR\_INV\_NSEI,}
\DoxyCodeLine{153         NS\_CTR\_LOST\_ALIVE,}
\DoxyCodeLine{154         NS\_CTR\_LOST\_RESET,}
\DoxyCodeLine{155 \};}
\DoxyCodeLine{156 }
\DoxyCodeLine{157 \textcolor{preprocessor}{\#define NSE\_S\_BLOCKED   0x0001}}
\DoxyCodeLine{158 \textcolor{preprocessor}{\#define NSE\_S\_ALIVE     0x0002}}
\DoxyCodeLine{159 \textcolor{preprocessor}{\#define NSE\_S\_RESET     0x0004}}
\DoxyCodeLine{160 }
\DoxyCodeLine{161 \textcolor{preprocessor}{\#define NS\_DESC\_B(st) ((st) \& NSE\_S\_BLOCKED ? "{}BLOCKED"{}} : "{}UNBLOCKED"{})}
\DoxyCodeLine{162 \textcolor{preprocessor}{\#define NS\_DESC\_A(st) ((st) \& NSE\_S\_ALIVE ? "{}ALIVE"{}} : "{}DEAD"{})}
\DoxyCodeLine{163 \textcolor{preprocessor}{\#define NS\_DESC\_R(st) ((st) \& NSE\_S\_RESET ? "{}RESET"{}} : "{}UNRESET"{})}
\DoxyCodeLine{164 }
\DoxyCodeLine{166 \textcolor{keyword}{struct }gprs\_ns2\_inst \{}
\DoxyCodeLine{168         osmo\_prim\_cb cb;}
\DoxyCodeLine{169 }
\DoxyCodeLine{171         \textcolor{keywordtype}{void} *cb\_data;}
\DoxyCodeLine{172 }
\DoxyCodeLine{174         \textcolor{keyword}{struct }llist\_head binding;}
\DoxyCodeLine{175 }
\DoxyCodeLine{177         \textcolor{keyword}{struct }llist\_head nse;}
\DoxyCodeLine{178 }
\DoxyCodeLine{179         uint16\_t timeout[NS\_TIMERS\_COUNT];}
\DoxyCodeLine{180 }
\DoxyCodeLine{182         uint32\_t nsvc\_rate\_ctr\_idx;}
\DoxyCodeLine{183         uint32\_t bind\_rate\_ctr\_idx;}
\DoxyCodeLine{184 }
\DoxyCodeLine{185         uint32\_t txqueue\_max\_length;}
\DoxyCodeLine{186 \};}
\DoxyCodeLine{187 }
\DoxyCodeLine{188 }
\DoxyCodeLine{190 \textcolor{keyword}{struct }gprs\_ns2\_nse \{}
\DoxyCodeLine{191         uint16\_t nsei;}
\DoxyCodeLine{192 }
\DoxyCodeLine{194         \textcolor{keyword}{struct }gprs\_ns2\_inst *nsi;}
\DoxyCodeLine{195 }
\DoxyCodeLine{197         \textcolor{keyword}{struct }llist\_head list;}
\DoxyCodeLine{198 }
\DoxyCodeLine{200         \textcolor{keyword}{struct }llist\_head nsvc;}
\DoxyCodeLine{201 }
\DoxyCodeLine{203         \textcolor{keywordtype}{int} nsvc\_count;}
\DoxyCodeLine{204 }
\DoxyCodeLine{206         \textcolor{keywordtype}{bool} persistent;}
\DoxyCodeLine{207 }
\DoxyCodeLine{210         \textcolor{keywordtype}{bool} first;}
\DoxyCodeLine{211 }
\DoxyCodeLine{213         \textcolor{keywordtype}{bool} alive;}
\DoxyCodeLine{214 }
\DoxyCodeLine{216         \textcolor{keyword}{enum} gprs\_ns2\_ll ll;}
\DoxyCodeLine{217 }
\DoxyCodeLine{219         \textcolor{keyword}{enum} gprs\_ns2\_dialect dialect;}
\DoxyCodeLine{220 }
\DoxyCodeLine{221         \textcolor{keyword}{struct }osmo\_fsm\_inst *bss\_sns\_fi;}
\DoxyCodeLine{222 }
\DoxyCodeLine{224         uint32\_t sum\_data\_weight;}
\DoxyCodeLine{225 }
\DoxyCodeLine{227         uint32\_t sum\_sig\_weight;}
\DoxyCodeLine{228 }
\DoxyCodeLine{230         uint16\_t mtu;}
\DoxyCodeLine{231 }
\DoxyCodeLine{233         \textcolor{keywordtype}{bool} ip\_sns\_role\_sgsn;}
\DoxyCodeLine{234 }
\DoxyCodeLine{236         \textcolor{keyword}{struct }rate\_ctr\_group *ctrg;}
\DoxyCodeLine{237 }
\DoxyCodeLine{239         \textcolor{keywordtype}{bool} freed;}
\DoxyCodeLine{240 }
\DoxyCodeLine{242         \textcolor{keyword}{struct }timespec ts\_alive\_change;}
\DoxyCodeLine{243 \};}
\DoxyCodeLine{244 }
\DoxyCodeLine{246 \textcolor{keyword}{struct }gprs\_ns2\_vc \{}
\DoxyCodeLine{248         \textcolor{keyword}{struct }llist\_head list;}
\DoxyCodeLine{249 }
\DoxyCodeLine{251         \textcolor{keyword}{struct }llist\_head blist;}
\DoxyCodeLine{252 }
\DoxyCodeLine{254         \textcolor{keyword}{struct }gprs\_ns2\_nse *nse;}
\DoxyCodeLine{255 }
\DoxyCodeLine{257         \textcolor{keyword}{struct }gprs\_ns2\_vc\_bind *bind;}
\DoxyCodeLine{258 }
\DoxyCodeLine{260         \textcolor{keywordtype}{bool} persistent;}
\DoxyCodeLine{261 }
\DoxyCodeLine{263         uint16\_t nsvci;}
\DoxyCodeLine{264 }
\DoxyCodeLine{266         uint8\_t sig\_weight;}
\DoxyCodeLine{267 }
\DoxyCodeLine{269         uint8\_t sig\_counter;}
\DoxyCodeLine{270 }
\DoxyCodeLine{272         uint8\_t data\_weight;}
\DoxyCodeLine{273 }
\DoxyCodeLine{275         \textcolor{keywordtype}{void} *priv;}
\DoxyCodeLine{276 }
\DoxyCodeLine{277         \textcolor{keywordtype}{bool} nsvci\_is\_valid;}
\DoxyCodeLine{279         \textcolor{keywordtype}{bool} sns\_only;}
\DoxyCodeLine{280 }
\DoxyCodeLine{281         \textcolor{keyword}{struct }rate\_ctr\_group *ctrg;}
\DoxyCodeLine{282         \textcolor{keyword}{struct }osmo\_stat\_item\_group *statg;}
\DoxyCodeLine{283 }
\DoxyCodeLine{284         \textcolor{keyword}{enum} gprs\_ns2\_vc\_mode mode;}
\DoxyCodeLine{285 }
\DoxyCodeLine{286         \textcolor{keyword}{struct }osmo\_fsm\_inst *fi;}
\DoxyCodeLine{287 }
\DoxyCodeLine{289         \textcolor{keywordtype}{bool} freed;}
\DoxyCodeLine{290 }
\DoxyCodeLine{292         \textcolor{keywordtype}{bool} om\_blocked;}
\DoxyCodeLine{293 }
\DoxyCodeLine{295         \textcolor{keyword}{struct }timespec ts\_alive\_change;}
\DoxyCodeLine{296 \};}
\DoxyCodeLine{297 }
\DoxyCodeLine{299 \textcolor{keyword}{struct }gprs\_ns2\_vc\_bind \{}
\DoxyCodeLine{301         \textcolor{keyword}{const} \textcolor{keywordtype}{char} *name;}
\DoxyCodeLine{303         \textcolor{keyword}{struct }llist\_head list;}
\DoxyCodeLine{305         \textcolor{keyword}{struct }llist\_head nsvc;}
\DoxyCodeLine{307         \textcolor{keywordtype}{void} *priv;}
\DoxyCodeLine{309         \textcolor{keyword}{struct }gprs\_ns2\_inst *nsi;}
\DoxyCodeLine{310         \textcolor{keyword}{struct }gprs\_ns2\_vc\_driver *driver;}
\DoxyCodeLine{311 }
\DoxyCodeLine{312         \textcolor{keywordtype}{bool} accept\_ipaccess;}
\DoxyCodeLine{313         \textcolor{keywordtype}{bool} accept\_sns;}
\DoxyCodeLine{314 }
\DoxyCodeLine{316         \textcolor{keywordtype}{int} transfer\_capability;}
\DoxyCodeLine{317 }
\DoxyCodeLine{319         uint16\_t mtu;}
\DoxyCodeLine{320 }
\DoxyCodeLine{322         \textcolor{keyword}{enum} gprs\_ns2\_ll ll;}
\DoxyCodeLine{323 }
\DoxyCodeLine{325         int (*send\_vc)(\textcolor{keyword}{struct }gprs\_ns2\_vc *nsvc, \textcolor{keyword}{struct }msgb *msg);}
\DoxyCodeLine{326 }
\DoxyCodeLine{328         void (*free\_vc)(\textcolor{keyword}{struct }gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{329 }
\DoxyCodeLine{331         void (*dump\_vty)(\textcolor{keyword}{const} \textcolor{keyword}{struct }gprs\_ns2\_vc\_bind *bind,}
\DoxyCodeLine{332                          \textcolor{keyword}{struct }vty *vty, \textcolor{keywordtype}{bool} stats);}
\DoxyCodeLine{333 }
\DoxyCodeLine{335         uint8\_t sns\_sig\_weight;}
\DoxyCodeLine{337         uint8\_t sns\_data\_weight;}
\DoxyCodeLine{338 }
\DoxyCodeLine{339         \textcolor{keyword}{struct }osmo\_stat\_item\_group *statg;}
\DoxyCodeLine{340 }
\DoxyCodeLine{342         \textcolor{keywordtype}{bool} freed;}
\DoxyCodeLine{343 \};}
\DoxyCodeLine{344 }
\DoxyCodeLine{345 \textcolor{keyword}{struct }gprs\_ns2\_vc\_driver \{}
\DoxyCodeLine{346         \textcolor{keyword}{const} \textcolor{keywordtype}{char} *name;}
\DoxyCodeLine{347         \textcolor{keywordtype}{void} *priv;}
\DoxyCodeLine{348         void (*free\_bind)(\textcolor{keyword}{struct }gprs\_ns2\_vc\_bind *driver);}
\DoxyCodeLine{349 \};}
\DoxyCodeLine{350 }
\DoxyCodeLine{351 \textcolor{keyword}{enum} ns2\_sns\_event \{}
\DoxyCodeLine{352         NS2\_SNS\_EV\_REQ\_SELECT\_ENDPOINT,   }
\DoxyCodeLine{353         NS2\_SNS\_EV\_RX\_SIZE,}
\DoxyCodeLine{354         NS2\_SNS\_EV\_RX\_SIZE\_ACK,}
\DoxyCodeLine{355         NS2\_SNS\_EV\_RX\_CONFIG,}
\DoxyCodeLine{356         NS2\_SNS\_EV\_RX\_CONFIG\_END,               }
\DoxyCodeLine{357         NS2\_SNS\_EV\_RX\_CONFIG\_ACK,}
\DoxyCodeLine{358         NS2\_SNS\_EV\_RX\_ADD,}
\DoxyCodeLine{359         NS2\_SNS\_EV\_RX\_DELETE,}
\DoxyCodeLine{360         NS2\_SNS\_EV\_RX\_CHANGE\_WEIGHT,}
\DoxyCodeLine{361         NS2\_SNS\_EV\_RX\_ACK,                     }
\DoxyCodeLine{362         NS2\_SNS\_EV\_REQ\_NO\_NSVC,           }
\DoxyCodeLine{363         NS2\_SNS\_EV\_REQ\_FREE\_NSVCS,             }
\DoxyCodeLine{364         NS2\_SNS\_EV\_REQ\_NSVC\_ALIVE,             }
\DoxyCodeLine{365         NS2\_SNS\_EV\_REQ\_ADD\_BIND,         }
\DoxyCodeLine{366         NS2\_SNS\_EV\_REQ\_DELETE\_BIND,           }
\DoxyCodeLine{367         NS2\_SNS\_EV\_REQ\_CHANGE\_WEIGHT,               }
\DoxyCodeLine{368 \};}
\DoxyCodeLine{369 }
\DoxyCodeLine{370 \textcolor{keyword}{enum} ns2\_cs ns2\_create\_vc(\textcolor{keyword}{struct} gprs\_ns2\_vc\_bind *bind,}
\DoxyCodeLine{371                                \textcolor{keyword}{struct} msgb *msg,}
\DoxyCodeLine{372                                \textcolor{keyword}{const} \textcolor{keyword}{struct} osmo\_sockaddr *remote,}
\DoxyCodeLine{373                                \textcolor{keyword}{const} \textcolor{keywordtype}{char} *logname,}
\DoxyCodeLine{374                                \textcolor{keyword}{struct} msgb **reject,}
\DoxyCodeLine{375                                \textcolor{keyword}{struct} gprs\_ns2\_vc **success);}
\DoxyCodeLine{376 }
\DoxyCodeLine{377 \textcolor{keywordtype}{int} ns2\_recv\_vc(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc,}
\DoxyCodeLine{378                 \textcolor{keyword}{struct} msgb *msg);}
\DoxyCodeLine{379 }
\DoxyCodeLine{380 \textcolor{keyword}{struct }gprs\_ns2\_vc *ns2\_vc\_alloc(\textcolor{keyword}{struct} gprs\_ns2\_vc\_bind *bind,}
\DoxyCodeLine{381                                  \textcolor{keyword}{struct} gprs\_ns2\_nse *nse,}
\DoxyCodeLine{382                                  \textcolor{keywordtype}{bool} initiater,}
\DoxyCodeLine{383                                  \textcolor{keyword}{enum} gprs\_ns2\_vc\_mode vc\_mode,}
\DoxyCodeLine{384                                  \textcolor{keyword}{const} \textcolor{keywordtype}{char} *\textcolor{keywordtype}{id});}
\DoxyCodeLine{385 }
\DoxyCodeLine{386 \textcolor{keywordtype}{void} ns2\_free\_nsvcs(\textcolor{keyword}{struct} gprs\_ns2\_nse *nse);}
\DoxyCodeLine{387 \textcolor{keywordtype}{int} ns2\_bind\_alloc(\textcolor{keyword}{struct} gprs\_ns2\_inst *nsi, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *name,}
\DoxyCodeLine{388                    \textcolor{keyword}{struct} gprs\_ns2\_vc\_bind **result);}
\DoxyCodeLine{389 }
\DoxyCodeLine{390 \textcolor{keyword}{struct }msgb *ns2\_msgb\_alloc(\textcolor{keywordtype}{void});}
\DoxyCodeLine{391 }
\DoxyCodeLine{392 \textcolor{keywordtype}{void} ns2\_sns\_write\_vty(\textcolor{keyword}{struct} vty *vty, \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns2\_nse *nse);}
\DoxyCodeLine{393 \textcolor{keywordtype}{void} ns2\_sns\_dump\_vty(\textcolor{keyword}{struct} vty *vty, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *prefix, \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns2\_nse *nse, \textcolor{keywordtype}{bool} stats);}
\DoxyCodeLine{394 \textcolor{keywordtype}{void} ns2\_prim\_status\_ind(\textcolor{keyword}{struct} gprs\_ns2\_nse *nse,}
\DoxyCodeLine{395                          \textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc,}
\DoxyCodeLine{396                          uint16\_t bvci,}
\DoxyCodeLine{397                          \textcolor{keyword}{enum} gprs\_ns2\_affecting\_cause cause);}
\DoxyCodeLine{398 \textcolor{keywordtype}{void} ns2\_nse\_notify\_alive(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, \textcolor{keywordtype}{bool} alive);}
\DoxyCodeLine{399 \textcolor{keywordtype}{void} ns2\_nse\_update\_mtu(\textcolor{keyword}{struct} gprs\_ns2\_nse *nse);}
\DoxyCodeLine{400 \textcolor{keywordtype}{int} ns2\_nse\_set\_dialect(\textcolor{keyword}{struct} gprs\_ns2\_nse *nse, \textcolor{keyword}{enum} gprs\_ns2\_dialect dialect);}
\DoxyCodeLine{401 }
\DoxyCodeLine{402 \textcolor{comment}{/* message */}}
\DoxyCodeLine{403 \textcolor{keywordtype}{int} ns2\_validate(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc,}
\DoxyCodeLine{404                  uint8\_t pdu\_type,}
\DoxyCodeLine{405                  \textcolor{keyword}{struct} msgb *msg,}
\DoxyCodeLine{406                  \textcolor{keyword}{struct} tlv\_parsed *tp,}
\DoxyCodeLine{407                  uint8\_t *cause);}
\DoxyCodeLine{408 }
\DoxyCodeLine{409 \textcolor{comment}{/* SNS messages */}}
\DoxyCodeLine{410 \textcolor{keywordtype}{int} ns2\_tx\_sns\_ack(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, uint8\_t trans\_id, uint8\_t *cause,}
\DoxyCodeLine{411                         \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns\_ie\_ip4\_elem *ip4\_elems,}
\DoxyCodeLine{412                         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} num\_ip4\_elems,}
\DoxyCodeLine{413                         \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns\_ie\_ip6\_elem *ip6\_elems,}
\DoxyCodeLine{414                         \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} num\_ip6\_elems);}
\DoxyCodeLine{415 \textcolor{keywordtype}{int} ns2\_tx\_sns\_config(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, \textcolor{keywordtype}{bool} end\_flag,}
\DoxyCodeLine{416                            \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns\_ie\_ip4\_elem *ip4\_elems,}
\DoxyCodeLine{417                            \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} num\_ip4\_elems,}
\DoxyCodeLine{418                            \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns\_ie\_ip6\_elem *ip6\_elems,}
\DoxyCodeLine{419                            \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} num\_ip6\_elems);}
\DoxyCodeLine{420 \textcolor{keywordtype}{int} ns2\_tx\_sns\_config\_ack(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, uint8\_t *cause);}
\DoxyCodeLine{421 \textcolor{keywordtype}{int} ns2\_tx\_sns\_size(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, \textcolor{keywordtype}{bool} reset\_flag, uint16\_t max\_nr\_nsvc,}
\DoxyCodeLine{422                          \textcolor{keywordtype}{int} ip4\_ep\_nr, \textcolor{keywordtype}{int} ip6\_ep\_nr);}
\DoxyCodeLine{423 \textcolor{keywordtype}{int} ns2\_tx\_sns\_size\_ack(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, uint8\_t *cause);}
\DoxyCodeLine{424 }
\DoxyCodeLine{425 \textcolor{keywordtype}{int} ns2\_tx\_sns\_add(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc,}
\DoxyCodeLine{426                    uint8\_t trans\_id,}
\DoxyCodeLine{427                    \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns\_ie\_ip4\_elem *ip4\_elems,}
\DoxyCodeLine{428                    \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} num\_ip4\_elems,}
\DoxyCodeLine{429                    \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns\_ie\_ip6\_elem *ip6\_elems,}
\DoxyCodeLine{430                    \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} num\_ip6\_elems);}
\DoxyCodeLine{431 \textcolor{keywordtype}{int} ns2\_tx\_sns\_change\_weight(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc,}
\DoxyCodeLine{432                              uint8\_t trans\_id,}
\DoxyCodeLine{433                              \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns\_ie\_ip4\_elem *ip4\_elems,}
\DoxyCodeLine{434                              \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} num\_ip4\_elems,}
\DoxyCodeLine{435                              \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns\_ie\_ip6\_elem *ip6\_elems,}
\DoxyCodeLine{436                              \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} num\_ip6\_elems);}
\DoxyCodeLine{437 \textcolor{keywordtype}{int} ns2\_tx\_sns\_del(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc,}
\DoxyCodeLine{438                    uint8\_t trans\_id,}
\DoxyCodeLine{439                    \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns\_ie\_ip4\_elem *ip4\_elems,}
\DoxyCodeLine{440                    \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} num\_ip4\_elems,}
\DoxyCodeLine{441                    \textcolor{keyword}{const} \textcolor{keyword}{struct} gprs\_ns\_ie\_ip6\_elem *ip6\_elems,}
\DoxyCodeLine{442                    \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} num\_ip6\_elems);}
\DoxyCodeLine{443 }
\DoxyCodeLine{444 \textcolor{comment}{/* transmit message over a VC */}}
\DoxyCodeLine{445 \textcolor{keywordtype}{int} ns2\_tx\_block(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, uint8\_t cause, uint16\_t *nsvci);}
\DoxyCodeLine{446 \textcolor{keywordtype}{int} ns2\_tx\_block\_ack(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, uint16\_t *nsvci);}
\DoxyCodeLine{447 }
\DoxyCodeLine{448 \textcolor{keywordtype}{int} ns2\_tx\_reset(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, uint8\_t cause);}
\DoxyCodeLine{449 \textcolor{keywordtype}{int} ns2\_tx\_reset\_ack(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{450 }
\DoxyCodeLine{451 \textcolor{keywordtype}{int} ns2\_tx\_unblock(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{452 \textcolor{keywordtype}{int} ns2\_tx\_unblock\_ack(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{453 }
\DoxyCodeLine{454 \textcolor{keywordtype}{int} ns2\_tx\_alive(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{455 \textcolor{keywordtype}{int} ns2\_tx\_alive\_ack(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{456 }
\DoxyCodeLine{457 \textcolor{keywordtype}{int} ns2\_tx\_unit\_data(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc,}
\DoxyCodeLine{458                      uint16\_t bvci, uint8\_t sducontrol,}
\DoxyCodeLine{459                      \textcolor{keyword}{struct} msgb *msg);}
\DoxyCodeLine{460 }
\DoxyCodeLine{461 \textcolor{keywordtype}{int} ns2\_tx\_status(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, uint8\_t cause,}
\DoxyCodeLine{462                   uint16\_t bvci, \textcolor{keyword}{struct} msgb *orig\_msg, uint16\_t *nsvci);}
\DoxyCodeLine{463 }
\DoxyCodeLine{464 \textcolor{comment}{/* driver */}}
\DoxyCodeLine{465 \textcolor{keyword}{struct }gprs\_ns2\_vc *ns2\_ip\_bind\_connect(\textcolor{keyword}{struct} gprs\_ns2\_vc\_bind *bind,}
\DoxyCodeLine{466                                         \textcolor{keyword}{struct} gprs\_ns2\_nse *nse,}
\DoxyCodeLine{467                                         \textcolor{keyword}{const} \textcolor{keyword}{struct} osmo\_sockaddr *remote);}
\DoxyCodeLine{468 \textcolor{keywordtype}{int} ns2\_ip\_count\_bind(\textcolor{keyword}{struct} gprs\_ns2\_inst *nsi, \textcolor{keyword}{struct} osmo\_sockaddr *remote);}
\DoxyCodeLine{469 \textcolor{keyword}{struct }gprs\_ns2\_vc\_bind *ns2\_ip\_get\_bind\_by\_index(\textcolor{keyword}{struct} gprs\_ns2\_inst *nsi,}
\DoxyCodeLine{470                                                   \textcolor{keyword}{struct} osmo\_sockaddr *remote,}
\DoxyCodeLine{471                                                   \textcolor{keywordtype}{int} index);}
\DoxyCodeLine{472 \textcolor{keywordtype}{void} ns2\_ip\_set\_txqueue\_max\_length(\textcolor{keyword}{struct} gprs\_ns2\_vc\_bind *bind, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{int} max\_length);}
\DoxyCodeLine{473 }
\DoxyCodeLine{474 \textcolor{comment}{/* sns */}}
\DoxyCodeLine{475 \textcolor{keywordtype}{int} ns2\_sns\_rx(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, \textcolor{keyword}{struct} msgb *msg, \textcolor{keyword}{struct} tlv\_parsed *tp);}
\DoxyCodeLine{476 \textcolor{keyword}{struct }osmo\_fsm\_inst *ns2\_sns\_bss\_fsm\_alloc(\textcolor{keyword}{struct} gprs\_ns2\_nse *nse,}
\DoxyCodeLine{477                                              \textcolor{keyword}{const} \textcolor{keywordtype}{char} *\textcolor{keywordtype}{id});}
\DoxyCodeLine{478 \textcolor{keyword}{struct }osmo\_fsm\_inst *ns2\_sns\_sgsn\_fsm\_alloc(\textcolor{keyword}{struct} gprs\_ns2\_nse *nse, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *\textcolor{keywordtype}{id});}
\DoxyCodeLine{479 \textcolor{keywordtype}{void} ns2\_sns\_replace\_nsvc(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{480 \textcolor{keywordtype}{void} ns2\_sns\_notify\_alive(\textcolor{keyword}{struct} gprs\_ns2\_nse *nse, \textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, \textcolor{keywordtype}{bool} alive);}
\DoxyCodeLine{481 \textcolor{keywordtype}{void} ns2\_sns\_update\_weights(\textcolor{keyword}{struct} gprs\_ns2\_vc\_bind *bind);}
\DoxyCodeLine{482 }
\DoxyCodeLine{483 \textcolor{comment}{/* vc */}}
\DoxyCodeLine{484 \textcolor{keyword}{struct }osmo\_fsm\_inst *ns2\_vc\_fsm\_alloc(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc,}
\DoxyCodeLine{485                                             \textcolor{keyword}{const} \textcolor{keywordtype}{char} *\textcolor{keywordtype}{id}, \textcolor{keywordtype}{bool} initiate);}
\DoxyCodeLine{486 \textcolor{keywordtype}{int} ns2\_vc\_fsm\_start(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{487 \textcolor{keywordtype}{int} ns2\_vc\_force\_unconfigured(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{488 \textcolor{keywordtype}{int} ns2\_vc\_rx(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, \textcolor{keyword}{struct} msgb *msg, \textcolor{keyword}{struct} tlv\_parsed *tp);}
\DoxyCodeLine{489 \textcolor{keywordtype}{int} ns2\_vc\_is\_alive(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{490 \textcolor{keywordtype}{int} ns2\_vc\_is\_unblocked(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{491 \textcolor{keywordtype}{int} ns2\_vc\_block(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{492 \textcolor{keywordtype}{int} ns2\_vc\_reset(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{493 \textcolor{keywordtype}{int} ns2\_vc\_unblock(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc);}
\DoxyCodeLine{494 \textcolor{keywordtype}{void} ns2\_vty\_dump\_nsvc(\textcolor{keyword}{struct} vty *vty, \textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, \textcolor{keywordtype}{bool} stats);}
\DoxyCodeLine{495 }
\DoxyCodeLine{496 \textcolor{comment}{/* nse */}}
\DoxyCodeLine{497 \textcolor{keywordtype}{void} ns2\_nse\_notify\_unblocked(\textcolor{keyword}{struct} gprs\_ns2\_vc *nsvc, \textcolor{keywordtype}{bool} unblocked);}
\DoxyCodeLine{498 \textcolor{keyword}{enum} gprs\_ns2\_vc\_mode ns2\_dialect\_to\_vc\_mode(\textcolor{keyword}{enum} gprs\_ns2\_dialect dialect);}
\DoxyCodeLine{499 \textcolor{keywordtype}{int} ns2\_count\_transfer\_cap(\textcolor{keyword}{struct} gprs\_ns2\_nse *nse,}
\DoxyCodeLine{500                            uint16\_t bvci);}
\DoxyCodeLine{501 }
\DoxyCodeLine{502 \textcolor{comment}{/* vty */}}
\DoxyCodeLine{503 \textcolor{keywordtype}{int} ns2\_sns\_add\_sns\_default\_binds(\textcolor{keyword}{struct} gprs\_ns2\_nse *nse);}

\end{DoxyCode}
