neels has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmo-pfcp/+/28337 )


Change subject: separate pfcp_queue_timer_cb() in req and resp
......................................................................

separate pfcp_queue_timer_cb() in req and resp

Having separate callbacks for request and response messages makes for
an easier read. No functional change.

This applies code review from
https://gerrit.osmocom.org/c/osmo-upf/+/28244
Ic8d42e201b63064a71b40ca45a5a40e29941e8ac (osmo-upf.git)

Related: SYS#5599
Change-Id: Ic8ab71f5efd4cf669689a0b075f9a52ce66bdd5d
---
M src/libosmo-pfcp/pfcp_endpoint.c
1 file changed, 30 insertions(+), 17 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmo-pfcp refs/changes/37/28337/1

diff --git a/src/libosmo-pfcp/pfcp_endpoint.c b/src/libosmo-pfcp/pfcp_endpoint.c
index 83b7c1a..e58cc1d 100644
--- a/src/libosmo-pfcp/pfcp_endpoint.c
+++ b/src/libosmo-pfcp/pfcp_endpoint.c
@@ -171,27 +171,38 @@
        return true;
 }

-/* T1 for a given queue entry has expired */
-static void pfcp_queue_timer_cb(void *data)
+/* T1 for a given sent_requests queue entry has expired */
+static void pfcp_queue_sent_req_timer_cb(void *data)
 {
        struct osmo_pfcp_queue_entry *qe = data;
        bool keep;

-       if (qe->m->is_response) {
-               /* The response has waited in the queue for any retransmissions 
of its initiating request. Now that time
-                * has passed and the response can be dropped from the queue. */
-               keep = false;
-       } else {
-               /* The request is still here, which means it has not received a 
response from the remote side.
-                * Retransmit the request. */
-               keep = pfcp_queue_retrans(qe);
-       }
+       /* qe->m is a request sent earlier */
+       OSMO_ASSERT(!qe->m->is_response);

+       /* The request is still here, which means it has not received a 
response from the remote side.
+        * Retransmit the request. */
+       keep = pfcp_queue_retrans(qe);
        if (keep)
                return;
+
+       /* Retransmission has elapsed. Notify resp_cb that receiving a response 
has failed. */
+       if (qe->m->ctx.resp_cb)
+               qe->m->ctx.resp_cb(qe->m, NULL, "PFCP request retransmissions 
elapsed, no response received");
        /* Drop the queue entry. No more retransmissions. */
-       if (!qe->m->is_response && qe->m->ctx.resp_cb)
-               qe->m->ctx.resp_cb(qe->m, NULL, "PFCP retransmissions elapsed, 
no response received");
+       osmo_pfcp_queue_del(qe);
+}
+
+/* T1 for a given sent_responses queue entry has expired */
+static void pfcp_queue_sent_resp_timer_cb(void *data)
+{
+       struct osmo_pfcp_queue_entry *qe = data;
+
+       /* qe->m is a response sent earlier */
+       OSMO_ASSERT(qe->m->is_response);
+
+       /* The response has waited in the queue for any retransmissions of its 
initiating request. Now that time
+        * has passed and the response can be dropped from the queue. */
        osmo_pfcp_queue_del(qe);
 }

@@ -268,13 +279,15 @@
        /* Slight optimization: Add sent requests to the start of the list: we 
will usually receive a response shortly
         * after sending a request, removing that entry from the queue quickly.
         * Add sent responses to the end of the list: they will rarely be 
retransmitted at all. */
-       if (m->is_response)
+       if (m->is_response) {
                llist_add_tail(&qe->entry, &endpoint->sent_responses);
-       else
-               llist_add_tail(&qe->entry, &endpoint->sent_requests);
+               osmo_timer_setup(&qe->t1, pfcp_queue_sent_resp_timer_cb, qe);
+       } else {
+               llist_add(&qe->entry, &endpoint->sent_requests);
+               osmo_timer_setup(&qe->t1, pfcp_queue_sent_req_timer_cb, qe);
+       }
        talloc_set_destructor(qe, osmo_pfcp_queue_destructor);

-       osmo_timer_setup(&qe->t1, pfcp_queue_timer_cb, qe);
        osmo_timer_schedule(&qe->t1, timeout/1000, timeout%1000);
        return 0;
 }

--
To view, visit https://gerrit.osmocom.org/c/libosmo-pfcp/+/28337
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmo-pfcp
Gerrit-Branch: master
Gerrit-Change-Id: Ic8ab71f5efd4cf669689a0b075f9a52ce66bdd5d
Gerrit-Change-Number: 28337
Gerrit-PatchSet: 1
Gerrit-Owner: neels <[email protected]>
Gerrit-MessageType: newchange

Reply via email to