VOL-513: Support ASFVOLT16 Adapter in Swarm Mode -VOL-467 Phase 1 - Polling Mode
Follow up changes to do the following.
1) Remove reduntant spaces in the code
2) Change the grpc-c stream write mechanism from non-blocking to blocking
3) Increase the bal_indication queue size from 25 to 1000
4) Compilation warning fixes
Change-Id: I3917d526d4db59601ca9d8468f66f4219d735e17
diff --git a/src/asfvolt16_driver.h b/src/asfvolt16_driver.h
index 6871e2b..ab24309 100755
--- a/src/asfvolt16_driver.h
+++ b/src/asfvolt16_driver.h
@@ -26,6 +26,8 @@
#include "bal_errno.grpc-c.h"
#include "bal.grpc-c.h"
+#include <stdio.h>
+
#define ASFVOLT_ERROR 1
#define ASFVOLT_INFO 2
#define ASFVOLT_DEBUG 3
diff --git a/src/bal_indications_hdlr.c b/src/bal_indications_hdlr.c
index b807c73..8066d18 100755
--- a/src/bal_indications_hdlr.c
+++ b/src/bal_indications_hdlr.c
@@ -141,7 +141,7 @@
list_node *bal_indication_node = malloc(sizeof(list_node));
bal_indication_node->bal_indication = balIndCfg;
-
+
pthread_mutex_lock(&bal_ind_queue_lock);
add_bal_indication_node(bal_indication_node);
pthread_mutex_unlock(&bal_ind_queue_lock);
@@ -491,6 +491,7 @@
bcmos_errno bal_group_indication_cb(bcmbal_obj *obj)
{
bcmos_errno result = BCM_ERR_OK;
+ unsigned int i = 0;
if(BCMBAL_OBJ_ID_GROUP != obj->obj_type ||
bcmbal_group_auto_id_ind != obj->subgroup)
@@ -557,51 +558,54 @@
balIndCfg->group_ind->data->members->n_val = group_ind->data.members.len;
BalGroupMemberInfo *balMemberInfo;
- balMemberInfo = (BalGroupMemberInfo *)malloc(sizeof(BalGroupMemberInfo) * \
- balIndCfg->group_ind->data->members->n_val);
- memset(balMemberInfo, 0, sizeof(BalGroupMemberInfo) * \
- balIndCfg->group_ind->data->members->n_val);
- bal_group_member_info__init(balMemberInfo);
- balIndCfg->group_ind->data->members->val = balMemberInfo;
-
- balMemberInfo->has_intf_id = BAL_GRPC_PRES;
- balMemberInfo->intf_id = group_ind->data.members.val->intf_id;
- balMemberInfo->has_svc_port_id = BAL_GRPC_PRES;
- balMemberInfo->svc_port_id = group_ind->data.members.val->svc_port_id;
-
BalAction *balAction;
- balAction = malloc(sizeof(BalAction));
- memset(balAction, 0, sizeof(BalAction));
- bal_action__init(balAction);
- balMemberInfo->action = balAction;
-
- balMemberInfo->action->has_presence_mask = BAL_GRPC_PRES;
- balMemberInfo->action->presence_mask = group_ind->data.members.val->action.presence_mask;
- balMemberInfo->action->has_cmds_bitmask = BAL_GRPC_PRES;
- balMemberInfo->action->cmds_bitmask = group_ind->data.members.val->action.cmds_bitmask;
- balMemberInfo->action->has_o_vid = BAL_GRPC_PRES;
- balMemberInfo->action->o_vid = group_ind->data.members.val->action.o_vid;
- balMemberInfo->action->has_o_pbits = BAL_GRPC_PRES;
- balMemberInfo->action->o_pbits = group_ind->data.members.val->action.o_pbits;
- balMemberInfo->action->has_o_tpid = BAL_GRPC_PRES;
- balMemberInfo->action->o_tpid = group_ind->data.members.val->action.o_tpid;
- balMemberInfo->action->has_i_vid = BAL_GRPC_PRES;
- balMemberInfo->action->i_vid = group_ind->data.members.val->action.i_vid;
- balMemberInfo->action->has_i_pbits = BAL_GRPC_PRES;
- balMemberInfo->action->i_pbits = group_ind->data.members.val->action.i_pbits;
- balMemberInfo->action->has_i_tpid = BAL_GRPC_PRES;
- balMemberInfo->action->i_tpid = group_ind->data.members.val->action.i_tpid;
-
BalTmQueueRef *balQueue;
- balQueue = malloc(sizeof(BalTmQueueRef));
- memset(balQueue, 0, sizeof(BalTmQueueRef));
- bal_tm_queue_ref__init(balQueue);
- balMemberInfo->queue = balQueue;
+ for (i = 0; i < balIndCfg->group_ind->data->members->n_val; i++)
+ {
+ balMemberInfo = malloc(sizeof(BalGroupMemberInfo));
+ memset(balMemberInfo, 0, sizeof(BalGroupMemberInfo));
+ bal_group_member_info__init(balMemberInfo);
- balMemberInfo->queue->has_sched_id = BAL_GRPC_PRES;
- balMemberInfo->queue->sched_id = group_ind->data.members.val->queue.sched_id;
- balMemberInfo->queue->has_queue_id = BAL_GRPC_PRES;
- balMemberInfo->queue->queue_id = group_ind->data.members.val->queue.queue_id;
+ balMemberInfo->has_intf_id = BAL_GRPC_PRES;
+ balMemberInfo->intf_id = group_ind->data.members.val->intf_id;
+ balMemberInfo->has_svc_port_id = BAL_GRPC_PRES;
+ balMemberInfo->svc_port_id = group_ind->data.members.val->svc_port_id;
+
+ balAction = malloc(sizeof(BalAction));
+ memset(balAction, 0, sizeof(BalAction));
+ bal_action__init(balAction);
+ balMemberInfo->action = balAction;
+
+ balMemberInfo->action->has_presence_mask = BAL_GRPC_PRES;
+ balMemberInfo->action->presence_mask = group_ind->data.members.val->action.presence_mask;
+ balMemberInfo->action->has_cmds_bitmask = BAL_GRPC_PRES;
+ balMemberInfo->action->cmds_bitmask = group_ind->data.members.val->action.cmds_bitmask;
+ balMemberInfo->action->has_o_vid = BAL_GRPC_PRES;
+ balMemberInfo->action->o_vid = group_ind->data.members.val->action.o_vid;
+ balMemberInfo->action->has_o_pbits = BAL_GRPC_PRES;
+ balMemberInfo->action->o_pbits = group_ind->data.members.val->action.o_pbits;
+ balMemberInfo->action->has_o_tpid = BAL_GRPC_PRES;
+ balMemberInfo->action->o_tpid = group_ind->data.members.val->action.o_tpid;
+ balMemberInfo->action->has_i_vid = BAL_GRPC_PRES;
+ balMemberInfo->action->i_vid = group_ind->data.members.val->action.i_vid;
+ balMemberInfo->action->has_i_pbits = BAL_GRPC_PRES;
+ balMemberInfo->action->i_pbits = group_ind->data.members.val->action.i_pbits;
+ balMemberInfo->action->has_i_tpid = BAL_GRPC_PRES;
+ balMemberInfo->action->i_tpid = group_ind->data.members.val->action.i_tpid;
+
+ balQueue = malloc(sizeof(BalTmQueueRef));
+ memset(balQueue, 0, sizeof(BalTmQueueRef));
+ bal_tm_queue_ref__init(balQueue);
+ balMemberInfo->queue = balQueue;
+
+ balMemberInfo->queue->has_sched_id = BAL_GRPC_PRES;
+ balMemberInfo->queue->sched_id = group_ind->data.members.val->queue.sched_id;
+ balMemberInfo->queue->has_queue_id = BAL_GRPC_PRES;
+ balMemberInfo->queue->queue_id = group_ind->data.members.val->queue.queue_id;
+
+ balIndCfg->group_ind->data->members->val[i] = balMemberInfo;
+ }
+
BalIdList *balFlows;
balFlows = malloc(sizeof(BalIdList));
diff --git a/src/bal_indications_hdlr.h b/src/bal_indications_hdlr.h
index abaa88c..84b8e27 100755
--- a/src/bal_indications_hdlr.h
+++ b/src/bal_indications_hdlr.h
@@ -32,7 +32,7 @@
#include "asfvolt16_driver.h"
#include "bal_indications_queue.h"
-#define BAL_GRPC_PRES 1
+#define BAL_GRPC_PRES 1
extern bcmos_errno bal_indication_cb(bcmbal_obj *obj);
extern bcmos_errno bal_acc_term_osc_indication_cb(bcmbal_obj *obj);
diff --git a/src/bal_indications_queue.c b/src/bal_indications_queue.c
index ffc9a15..36ec466 100644
--- a/src/bal_indications_queue.c
+++ b/src/bal_indications_queue.c
@@ -15,6 +15,9 @@
*/
#include "bal_indications_queue.h"
+#include "asfvolt16_driver.h"
+
+long unsigned int indication_drop_count = 0;
/*
* Implements a circular queue whose size can grow upto MAX_QUEUE_SIZE defined.
@@ -50,8 +53,8 @@
/*'bal_ind_queue_head' should be thread safe there could be simultaneous
write from BAL and adapter trying to read from the 'bal_ind_queue_head'.
So, protect it under a mutex(bal_ind_queue_lock), before using this MACRO*/
- if (num_of_nodes == 0 &&
- bal_ind_queue_head == NULL &&
+ if (num_of_nodes == 0 &&
+ bal_ind_queue_head == NULL &&
bal_ind_queue_tail == NULL ) {
/*Case where the queue is empty*/
bal_ind_queue_head = node;
@@ -60,27 +63,29 @@
bal_ind_queue_tail->next = node;
++num_of_nodes;
}
- else if (num_of_nodes == 1 &&
- bal_ind_queue_head != NULL &&
+ else if (num_of_nodes == 1 &&
+ bal_ind_queue_head != NULL &&
bal_ind_queue_tail != NULL ) {
bal_ind_queue_head->next = node;
bal_ind_queue_tail = node;
bal_ind_queue_tail->next = bal_ind_queue_head;
++num_of_nodes;
}
- else if (num_of_nodes > 1 &&
- num_of_nodes < MAX_QUEUE_SIZE &&
- bal_ind_queue_head != NULL &&
+ else if (num_of_nodes > 1 &&
+ num_of_nodes < MAX_QUEUE_SIZE &&
+ bal_ind_queue_head != NULL &&
bal_ind_queue_tail != NULL ) {
bal_ind_queue_tail->next = node;
bal_ind_queue_tail = node;
bal_ind_queue_tail->next = bal_ind_queue_head;
++num_of_nodes;
}
- else if (num_of_nodes == MAX_QUEUE_SIZE &&
- bal_ind_queue_head != NULL &&
+ else if (num_of_nodes == MAX_QUEUE_SIZE &&
+ bal_ind_queue_head != NULL &&
bal_ind_queue_tail != NULL ) {
list_node *head_ref = bal_ind_queue_head;
+ ASFVOLT_LOG(ASFVOLT_DEBUG, "Queue full, deleting a node. Drop cnt = %lu\n",\
+ ++indication_drop_count);
bal_ind_queue_tail->next = node;
bal_ind_queue_tail = node;
bal_ind_queue_head = bal_ind_queue_head->next;
diff --git a/src/bal_indications_queue.h b/src/bal_indications_queue.h
index 075f747..72b6013 100755
--- a/src/bal_indications_queue.h
+++ b/src/bal_indications_queue.h
@@ -19,7 +19,7 @@
#include "bal_indications.grpc-c.h"
-#define MAX_QUEUE_SIZE 25
+#define MAX_QUEUE_SIZE 1000
typedef struct node {
struct node *next;
@@ -38,4 +38,4 @@
-#endif /*__BAL_INDICATIONS_QUEUE_H__*/
\ No newline at end of file
+#endif /*__BAL_INDICATIONS_QUEUE_H__*/