<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/20208">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ns2: Improve/extend doxygen comments for new ns2 implementation<br><br>I was reading through the code and noticed many functions not<br>documented yet, or with incomplete documentation. Change that.<br><br>Change-Id: I85a2419604a9fd9ff3c4828a7463e222652f77bf<br>---<br>M src/gb/gprs_ns2.c<br>1 file changed, 108 insertions(+), 72 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/08/20208/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c</span><br><span>index 0fa7197..21a45a1 100644</span><br><span>--- a/src/gb/gprs_ns2.c</span><br><span>+++ b/src/gb/gprs_ns2.c</span><br><span>@@ -203,6 +203,11 @@</span><br><span>      .class_id = OSMO_STATS_CLASS_PEER,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! string-format a given NS-VC into a user-supplied buffer.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] buf user-allocated output buffer</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] buf_len size of user-allocated output buffer in bytes</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsvc NS-VC to be string-formatted</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return pointer to buf on success; NULL on error */</span><br><span> char *gprs_ns2_ll_str_buf(char *buf, size_t buf_len, struct gprs_ns2_vc *nsvc)</span><br><span> {</span><br><span>  struct osmo_sockaddr *local;</span><br><span>@@ -256,12 +261,19 @@</span><br><span> /* udp is the longest: udp)[IP6]:65536<65536>[IP6]:65536 */</span><br><span> #define NS2_LL_MAX_STR 4+2*(INET6_ADDRSTRLEN+9)+8</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! string-format a given NS-VC to a thread-local static buffer.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsvc NS-VC to be string-formatted</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return pointer to the string on success; NULL on error */</span><br><span> const char *gprs_ns2_ll_str(struct gprs_ns2_vc *nsvc)</span><br><span> {</span><br><span>         static __thread char buf[NS2_LL_MAX_STR];</span><br><span>    return gprs_ns2_ll_str_buf(buf, sizeof(buf), nsvc);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! string-format a given NS-VC to a dynamically allocated string.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ctx talloc context from which to allocate</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsvc NS-VC to be string-formatted</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return pointer to the string on success; NULL on error */</span><br><span> char *gprs_ns2_ll_str_c(const void *ctx, struct gprs_ns2_vc *nsvc)</span><br><span> {</span><br><span>      char *buf = talloc_size(ctx, NS2_LL_MAX_STR);</span><br><span>@@ -270,12 +282,10 @@</span><br><span>        return gprs_ns2_ll_str_buf(buf, NS2_LL_MAX_STR, nsvc);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * Receive a primitive from the NS User (Gb)</span><br><span style="color: hsl(0, 100%, 40%);">- * \param nsi</span><br><span style="color: hsl(0, 100%, 40%);">- * \param oph The primitive.</span><br><span style="color: hsl(0, 100%, 40%);">- * \return 0 on success</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Receive a primitive from the NS User (Gb).</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsi NS instance to which the primitive is issued</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] oph The primitive</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return 0 on success; negative on error */</span><br><span> int gprs_ns2_recv_prim(struct gprs_ns2_inst *nsi, struct osmo_prim_hdr *oph)</span><br><span> {</span><br><span>    /* TODO: implement load distribution function */</span><br><span>@@ -329,6 +339,11 @@</span><br><span>      return ns2_tx_unit_data(nsvc, bvci, sducontrol, oph->msg);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Send a STATUS.ind primitive to the specified NS instance user.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsi NS instance on which we operate</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsei NSEI to which the statue relates</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bvci BVCI to which the status relates</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] cause The cause of the status */</span><br><span> void ns2_prim_status_ind(struct gprs_ns2_inst *nsi,</span><br><span>                    uint16_t nsei, uint16_t bvci,</span><br><span>                        enum gprs_ns2_affecting_cause cause)</span><br><span>@@ -343,13 +358,11 @@</span><br><span>        nsi->cb(&nsp.oph, nsi->cb_data);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * \brief ns2_vc_alloc</span><br><span style="color: hsl(0, 100%, 40%);">- * \param bind</span><br><span style="color: hsl(0, 100%, 40%);">- * \param nse</span><br><span style="color: hsl(0, 100%, 40%);">- * \param initiater - if this is an incoming remote (!initiater) or a local outgoing connection (initater)</span><br><span style="color: hsl(0, 100%, 40%);">- * \return</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Allocate a NS-VC within the given bind + NSE.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] bind The 'bind' on which we operate</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] nse The NS Entity on which we operate</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] initiater - if this is an incoming remote (!initiater) or a local outgoing connection (initater)</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return newly allocated NS-VC on success; NULL on error */</span><br><span> struct gprs_ns2_vc *ns2_vc_alloc(struct gprs_ns2_vc_bind *bind, struct gprs_ns2_nse *nse, bool initiater)</span><br><span> {</span><br><span>   struct gprs_ns2_vc *nsvc = talloc_zero(bind, struct gprs_ns2_vc);</span><br><span>@@ -390,7 +403,8 @@</span><br><span>      return NULL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Destroy/release given NS-VC.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsvc NS-VC to destroy */</span><br><span> void gprs_ns2_free_nsvc(struct gprs_ns2_vc *nsvc)</span><br><span> {</span><br><span>   if (!nsvc)</span><br><span>@@ -419,6 +433,7 @@</span><br><span>     talloc_free(nsvc);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Allocate a message buffer for use with the NS2 stack. */</span><br><span> struct msgb *gprs_ns2_msgb_alloc(void)</span><br><span> {</span><br><span>     struct msgb *msg = msgb_alloc_headroom(NS_ALLOC_SIZE, NS_ALLOC_HEADROOM,</span><br><span>@@ -430,14 +445,12 @@</span><br><span>     return msg;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * Create a status message to be sent over a new connection.</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[in] orig_msg the original message</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[in] tp TLVP parsed of the original message</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[out] reject</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[in] cause</span><br><span style="color: hsl(0, 100%, 40%);">- * \return 0 on success</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Create a status message to be sent over a new connection.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] orig_msg the original message</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] tp TLVP parsed of the original message</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[out] reject callee-allocated message buffer of the generated NS-STATUS</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] cause Cause for the rejection</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return 0 on success */</span><br><span> static int reject_status_msg(struct msgb *orig_msg, struct tlv_parsed *tp, struct msgb **reject, enum ns_cause cause)</span><br><span> {</span><br><span>         struct msgb *msg = gprs_ns2_msgb_alloc();</span><br><span>@@ -492,6 +505,10 @@</span><br><span>     return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Resolve a NS Entity based on its NSEI.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsi NS Instance in which we do the look-up</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsei NSEI to look up</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return NS Entity in successful case; NULL if none found */</span><br><span> struct gprs_ns2_nse *gprs_ns2_nse_by_nsei(struct gprs_ns2_inst *nsi, uint16_t nsei)</span><br><span> {</span><br><span>  struct gprs_ns2_nse *nse;</span><br><span>@@ -504,6 +521,10 @@</span><br><span>     return NULL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Resolve a NS-VC Entity based on its NS-VCI.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsi NS Instance in which we do the look-up</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsvci NS-VCI to look up</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return NS-VC Entity in successful case; NULL if none found */</span><br><span> struct gprs_ns2_vc *gprs_ns2_nsvc_by_nsvci(struct gprs_ns2_inst *nsi, uint16_t nsvci)</span><br><span> {</span><br><span>  struct gprs_ns2_nse *nse;</span><br><span>@@ -519,6 +540,10 @@</span><br><span>     return NULL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Create a NS Entity within given NS instance.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsi NS instance in which to create NS Entity</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsei NS Entity Identifier of to-be-created NSE</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns newly-allocated NS-E in successful case; NULL on error */</span><br><span> struct gprs_ns2_nse *gprs_ns2_create_nse(struct gprs_ns2_inst *nsi, uint16_t nsei)</span><br><span> {</span><br><span>       struct gprs_ns2_nse *nse;</span><br><span>@@ -541,6 +566,8 @@</span><br><span>      return nse;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Destroy given NS Entity.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nse NS Entity to destroy */</span><br><span> void gprs_ns2_free_nse(struct gprs_ns2_nse *nse)</span><br><span> {</span><br><span>      struct gprs_ns2_vc *nsvc, *tmp;</span><br><span>@@ -574,15 +601,13 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * Create a new VC based on a message. Depending on the bind it might create NSE.</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[in] bind</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[in] msg</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[in] logname A name to describe the VC. E.g. ip address pair</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[out] reject A message filled to be sent back. Only used in failure cases.</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[out] success A pointer which will be set to the new VC on success</span><br><span style="color: hsl(0, 100%, 40%);">- * \return</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Create a new NS-VC based on a [received] message. Depending on the bind it might create a NSE.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bind the bind through which msg was received</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] msg the actual received message</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] logname A name to describe the VC. E.g. ip address pair</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[out] reject A message filled to be sent back. Only used in failure cases.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[out] success A pointer which will be set to the new VC on success</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return enum value indicating the status, e.g. GPRS_NS2_CS_CREATED */</span><br><span> enum gprs_ns2_cs ns2_create_vc(struct gprs_ns2_vc_bind *bind,</span><br><span>                                struct msgb *msg,</span><br><span>                            const char *logname,</span><br><span>@@ -696,6 +721,12 @@</span><br><span>   return GPRS_NS2_CS_CREATED;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Create, and connect an inactive, new IP-based NS-VC</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bind bind in which the new NS-VC is to be created</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] remote remote address to which to connect</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nse NS Entity in which the NS-VC is to be created</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsvci is only required when bind->vc_mode == NS2_VC_MODE_BLOCKRESET</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return pointer to newly-allocated, connected and inactive NS-VC; NULL on error */</span><br><span> struct gprs_ns2_vc *gprs_ns2_ip_connect_inactive(struct gprs_ns2_vc_bind *bind,</span><br><span>                                        struct osmo_sockaddr *remote,</span><br><span>                                        struct gprs_ns2_nse *nse,</span><br><span>@@ -715,14 +746,12 @@</span><br><span>    return nsvc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * Create a new IP-based NSVC</span><br><span style="color: hsl(0, 100%, 40%);">- * \param bind</span><br><span style="color: hsl(0, 100%, 40%);">- * \param remote</span><br><span style="color: hsl(0, 100%, 40%);">- * \param nse</span><br><span style="color: hsl(0, 100%, 40%);">- * \param nsvci is only required when bind->vc_mode == NS2_VC_MODE_BLOCKRESET</span><br><span style="color: hsl(0, 100%, 40%);">- * \return</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Create, connect and activate a new IP-based NS-VC</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bind bind in which the new NS-VC is to be created</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] remote remote address to which to connect</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nse NS Entity in which the NS-VC is to be created</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsvci is only required when bind->vc_mode == NS2_VC_MODE_BLOCKRESET</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return pointer to newly-allocated, connected and activated NS-VC; NULL on error */</span><br><span> struct gprs_ns2_vc *gprs_ns2_ip_connect(struct gprs_ns2_vc_bind *bind,</span><br><span>                                         struct osmo_sockaddr *remote,</span><br><span>                                        struct gprs_ns2_nse *nse,</span><br><span>@@ -738,14 +767,12 @@</span><br><span>    return nsvc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * Create a new IP-based NSVC</span><br><span style="color: hsl(0, 100%, 40%);">- * \param bind</span><br><span style="color: hsl(0, 100%, 40%);">- * \param remote</span><br><span style="color: hsl(0, 100%, 40%);">- * \param nsei</span><br><span style="color: hsl(0, 100%, 40%);">- * \param nsvci only required when bind->vc_mode == NS2_VC_MODE_BLOCKRESET</span><br><span style="color: hsl(0, 100%, 40%);">- * \return</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Create, connect and activate a new IP-based NS-VC</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bind bind in which the new NS-VC is to be created</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] remote remote address to which to connect</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsei NSEI of the NS Entity in which the NS-VC is to be created</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsvci is only required when bind->vc_mode == NS2_VC_MODE_BLOCKRESET</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return pointer to newly-allocated, connected and activated NS-VC; NULL on error */</span><br><span> struct gprs_ns2_vc *gprs_ns2_ip_connect2(struct gprs_ns2_vc_bind *bind,</span><br><span>                                      struct osmo_sockaddr *remote,</span><br><span>                                        uint16_t nsei,</span><br><span>@@ -762,13 +789,11 @@</span><br><span>      return gprs_ns2_ip_connect(bind, remote, nse, nsvci);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * Create a new IP SNS NSE</span><br><span style="color: hsl(0, 100%, 40%);">- * \param bind</span><br><span style="color: hsl(0, 100%, 40%);">- * \param remote</span><br><span style="color: hsl(0, 100%, 40%);">- * \param nsei</span><br><span style="color: hsl(0, 100%, 40%);">- * \return 0 on success</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Create, connect and activate a new IP-SNS NSE.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bind bind in which the new NS-VC is to be created</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] remote remote address to which to connect</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsei NSEI of the NS Entity in which the NS-VC is to be created</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return 0 on success; negative on error */</span><br><span> int gprs_ns2_ip_connect_sns(struct gprs_ns2_vc_bind *bind,</span><br><span>                           struct osmo_sockaddr *remote,</span><br><span>                        uint16_t nsei)</span><br><span>@@ -795,6 +820,10 @@</span><br><span>    return ns2_sns_bss_fsm_start(nse, nsvc, remote);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Find NS-VC for given socket address.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nse NS Entity in which to search</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] sockaddr socket address to search for</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return NS-VC matching sockaddr; NULL if none found */</span><br><span> struct gprs_ns2_vc *gprs_ns2_nsvc_by_sockaddr(struct gprs_ns2_nse *nse,</span><br><span>                                          struct osmo_sockaddr *sockaddr)</span><br><span> {</span><br><span>@@ -814,13 +843,11 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * \brief gprs_ns2_recv_vc entrypoint of received NS PDU from the driver/bind</span><br><span style="color: hsl(0, 100%, 40%);">- * \param nsi</span><br><span style="color: hsl(0, 100%, 40%);">- * \param vc</span><br><span style="color: hsl(0, 100%, 40%);">- * \param msg the received message. Must not be freeded.</span><br><span style="color: hsl(0, 100%, 40%);">- * \return</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Bottom-side entry-point for received NS PDU from the driver/bind</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] nsi NS instance</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] nsvc NS-VC for which the message was received</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param msg the received message. Ownership is trasnferred, caller must not free it!</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return 0 on success; negative on error */</span><br><span> int ns2_recv_vc(struct gprs_ns2_inst *nsi,</span><br><span>                 struct gprs_ns2_vc *nsvc,</span><br><span>            struct msgb *msg)</span><br><span>@@ -893,7 +920,9 @@</span><br><span>      return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* notify a nse about the change of a nsvc */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Notify a nse about the change of a NS-VC.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsvc NS-VC which has detected the change (and shall not be notified).</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] unblocked whether the NSE should be marked as unblocked (true) or blocked (false) */</span><br><span> void ns2_nse_notify_unblocked(struct gprs_ns2_vc *nsvc, bool unblocked)</span><br><span> {</span><br><span>   struct gprs_ns2_nse *nse = nsvc->nse;</span><br><span>@@ -928,11 +957,10 @@</span><br><span> }</span><br><span> </span><br><span> /*! Create a new GPRS NS instance</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] ctx a talloc context</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] cb Call-back function for incoming BSSGP data</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] cb_data Call-back data</span><br><span style="color: hsl(0, 100%, 40%);">- *  \returns dynamically allocated gprs_ns_inst</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ctx a talloc context to allocate NS instance from</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] cb Call-back function for dispatching primitives to the user</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] cb_data transparent user data passed to Call-back</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns dynamically allocated gprs_ns_inst; NULL on error */</span><br><span> struct gprs_ns2_inst *gprs_ns2_instantiate(void *ctx, osmo_prim_cb cb, void *cb_data)</span><br><span> {</span><br><span>       struct gprs_ns2_inst *nsi;</span><br><span>@@ -958,6 +986,8 @@</span><br><span>     return nsi;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Destroy a NS Instance (including all its NSEs, binds, ...).</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsi NS instance to destroy */</span><br><span> void gprs_ns2_free(struct gprs_ns2_inst *nsi)</span><br><span> {</span><br><span>    struct gprs_ns2_vc_bind *bind, *tbind;</span><br><span>@@ -975,11 +1005,10 @@</span><br><span>      }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * \brief gprs_ns2_dynamic_create_nse</span><br><span style="color: hsl(0, 100%, 40%);">- * \param nsi the instance to modify</span><br><span style="color: hsl(0, 100%, 40%);">- * \param create_nse if NSE can be created on receiving package. SGSN set this.</span><br><span style="color: hsl(0, 100%, 40%);">- * \return</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Configure whether a NS Instance should dynamically create NSEs based on incoming traffic.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param nsi the instance to modify</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param create_nse if NSE can be created on receiving package. SGSN set this.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return 0 on success; negative on error</span><br><span>  */</span><br><span> int gprs_ns2_dynamic_create_nse(struct gprs_ns2_inst *nsi, bool create_nse)</span><br><span> {</span><br><span>@@ -988,6 +1017,8 @@</span><br><span>       return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Start the NS-ALIVE FSM in all NS-VCs of given NSE.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nse NS Entity in whihc to start NS-ALIVE FSMs */</span><br><span> void gprs_ns2_start_alive_all_nsvcs(struct gprs_ns2_nse *nse)</span><br><span> {</span><br><span>    struct gprs_ns2_vc *nsvc;</span><br><span>@@ -1001,11 +1032,16 @@</span><br><span>  }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Set the mode of given bind.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bind the bind we want to set the mode of</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] modde mode to set bind to */</span><br><span> void gprs_ns2_bind_set_mode(struct gprs_ns2_vc_bind *bind, enum gprs_ns2_vc_mode mode)</span><br><span> {</span><br><span>     bind->vc_mode = mode;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Destroy a given bind.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bind the bind we want to destroy */</span><br><span> void gprs_ns2_free_bind(struct gprs_ns2_vc_bind *bind)</span><br><span> {</span><br><span>      struct gprs_ns2_vc *nsvc, *tmp;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/20208">change 20208</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/libosmocore/+/20208"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I85a2419604a9fd9ff3c4828a7463e222652f77bf </div>
<div style="display:none"> Gerrit-Change-Number: 20208 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>