<p>laforge <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ggsn/+/14557">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gtp: queue.c: Document queue APIs<br><br>Change-Id: I8523a0d0508d7fb870a4a9119aa8eb4c3a4d6f17<br>---<br>M gtp/queue.c<br>1 file changed, 46 insertions(+), 9 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/gtp/queue.c b/gtp/queue.c</span><br><span>index 305a33c..ce4713e 100644</span><br><span>--- a/gtp/queue.c</span><br><span>+++ b/gtp/queue.c</span><br><span>@@ -62,7 +62,7 @@</span><br><span>        return seq % QUEUE_HASH_SIZE;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief Insert a message with given sequence number into the hash</span><br><span style="color: hsl(120, 100%, 40%);">+/*! \brief Insert a message with given sequence number into the hash.</span><br><span>  *</span><br><span>  * This function sets the peer and the seq of the qmsg and then inserts</span><br><span>  * the qmsg into the queue hash.  To do so, it does a hashtable lookup</span><br><span>@@ -121,7 +121,10 @@</span><br><span>  return EOF;             /* End of linked list and not found */</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief Allocates and initialises new queue structure */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Allocates and initialises new queue structure.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[out] queue pointer where to store the allocated object. Must be freed with queue_free</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns zero on success, non-zero on error</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span> int queue_new(struct queue_t **queue)</span><br><span> {</span><br><span>         if (QUEUE_DEBUG)</span><br><span>@@ -138,7 +141,10 @@</span><br><span>      return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief Deallocates queue structure */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Deallocates queue structure.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] queue pointer previously allocated by queue_new</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns zero on success, non-zero on error.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span> int queue_free(struct queue_t *queue)</span><br><span> {</span><br><span>   if (QUEUE_DEBUG)</span><br><span>@@ -149,7 +155,13 @@</span><br><span>      return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief Add a new message to the queue */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Add a new message to the queue.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] queue pointer previously allocated by queue_new</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[out] qmsg first message from the queue (if succeeds)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] peer who sent the message to add</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] seq sequence number of the message to add</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns zero on success, non-zero on error.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span> int queue_newmsg(struct queue_t *queue, struct qmsg_t **qmsg,</span><br><span>               struct sockaddr_in *peer, uint16_t seq)</span><br><span> {</span><br><span>@@ -176,7 +188,11 @@</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief Simply remoev a given qmsg_t from the queue</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Remove an element from the queue.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] queue pointer previously allocated by queue_new</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] qmsg message to free</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns zero on success, non-zero on error.</span><br><span>  *</span><br><span>  * Internally, we first delete the entry from the queue, and then update</span><br><span>  * up our global queue->first / queue->last pointers.  Finally,</span><br><span>@@ -210,7 +226,11 @@</span><br><span>   return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief Move a given qmsg_t to the end of the queue ?!? */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Move a given qmsg_t to the end of the queue.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] queue pointer previously allocated by queue_new</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] qmsg message to move to the end of the queue</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns zero on success, non-zero on error.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span> int queue_back(struct queue_t *queue, struct qmsg_t *qmsg)</span><br><span> {</span><br><span>     if (QUEUE_DEBUG)</span><br><span>@@ -236,7 +256,11 @@</span><br><span>      return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief Get the first element in the entire queue */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Get the first element in the entire queue.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] queue pointer previously allocated by queue_new</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[out] qmsg first message from the queue (if succeeds)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns zero on success, non-zero on error.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span> int queue_getfirst(struct queue_t *queue, struct qmsg_t **qmsg)</span><br><span> {</span><br><span>    /*printf("queue_getfirst\n"); */</span><br><span>@@ -250,7 +274,13 @@</span><br><span>    return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief Get a queue entry for a given peer + seq */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Get a queue entry for a given peer + seq.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] queue pointer previously allocated by queue_new</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[out] qmsg first message from the queue (if succeeds)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] peer who sent the message to retrieve</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] seq sequence number of the message to retrive</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns zero on success, non-zero on error.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span> int queue_seqget(struct queue_t *queue, struct qmsg_t **qmsg,</span><br><span>                  struct sockaddr_in *peer, uint16_t seq)</span><br><span> {</span><br><span>@@ -272,7 +302,14 @@</span><br><span>         return EOF;             /* End of linked list and not found */</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! \brief look-up a given seq/peer, return cbp + type and free entry */</span><br><span style="color: hsl(120, 100%, 40%);">+/*! look-up a given seq/peer, return cbp + type and free entry.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] queue pointer previously allocated by queue_new</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] peer who sent the message to retrieve</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] seq sequence number of the message to retrive</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[out] type GTP message type</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[out] type callback pointer of the message</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns zero on success, non-zero on error.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span> int queue_freemsg_seq(struct queue_t *queue, struct sockaddr_in *peer,</span><br><span>                 uint16_t seq, uint8_t * type, void **cbp)</span><br><span> {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ggsn/+/14557">change 14557</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/osmo-ggsn/+/14557"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ggsn </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I8523a0d0508d7fb870a4a9119aa8eb4c3a4d6f17 </div>
<div style="display:none"> Gerrit-Change-Number: 14557 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>