Changes to stub code to add support for BAL2.4
diff --git a/device_simulator/bal_stub.c b/device_simulator/bal_stub.c
index e6d7945..b169e50 100644
--- a/device_simulator/bal_stub.c
+++ b/device_simulator/bal_stub.c
@@ -15,195 +15,235 @@
void *stub_thread(void *v)
{
- int status;
- grpc_c_client_t *client = grpc_c_client_init("172.24.150.114:60001", "bal_client", NULL);
- pthread_mutex_lock(&lock);
- pthread_cond_wait(&cv, &lock);
- while(NULL != shared_queue->front)
- {
- BalObjId prevObjType;
- struct QNode *front = deQueue(shared_queue);
- /* prepare and send rpc response */
- BalIndications balIndCfg;
- memset(&balIndCfg, 0, sizeof(BalIndications));
- bal_indications__init(&balIndCfg);
- BalObjInd bal_obj_ind;
- memset(&bal_obj_ind, 0, sizeof(BalObjInd));
- bal_obj_ind__init(&bal_obj_ind);
- balIndCfg.u_case = BAL_INDICATIONS__U_BAL_OBJ_INFO;
- balIndCfg.balobjinfo = &bal_obj_ind;
- balIndCfg.balobjinfo->has_objtype = 1;
- balIndCfg.balobjinfo->objtype = front->obj_type;
- balIndCfg.balobjinfo->has_status = 1;
- balIndCfg.balobjinfo->status = front->status;
- char keystr;
- balIndCfg.balobjinfo->keystr = &keystr;
- switch(front->obj_type)
- {
- case BAL_OBJ_ID__BAL_OBJ_ID_ACCESS_TERMINAL:
- {
- printf("***************************************************\n");
- printf("Successful Indication sent for ACCESS_TERMINAL\n");
- printf("***************************************************\n");
- balIndCfg.balobjinfo->u_case = BAL_OBJ_IND__U__NOT_SET;
- prevObjType = front->obj_type;
- }
- break;
- case BAL_OBJ_ID__BAL_OBJ_ID_INTERFACE:
- {
- printf("***************************************************\n");
- printf("Successful Indication sent for PON INTERFACE UP\n");
- printf("***************************************************\n");
- balIndCfg.balobjinfo->u_case = BAL_OBJ_IND__U__NOT_SET;
- prevObjType = front->obj_type;
- }
- break;
- case BAL_OBJ_ID__BAL_OBJ_ID_SUBSCRIBER_TERMINAL:
- {
- balIndCfg.balobjinfo->u_case = BAL_OBJ_IND__U_ONU_DISCOVERY_INFO;
- BalSubscriberTerminalCfg onudiscoveryinfo;
- memset(&onudiscoveryinfo, 0, sizeof(BalSubscriberTerminalCfg));
- bal_subscriber_terminal_cfg__init(&onudiscoveryinfo);
- balIndCfg.balobjinfo->onudiscoveryinfo = &onudiscoveryinfo;
+ int status;
+ grpc_c_client_t *client = grpc_c_client_init("172.24.150.167:60001", "bal_client", NULL);
+ pthread_mutex_lock(&lock);
+ pthread_cond_wait(&cv, &lock);
+ while(NULL != shared_queue->front)
+ {
+ BalObjId prevObjType;
+ char vendor_id[20];
+ char vendor_specific[20];
+ struct QNode *front = deQueue(shared_queue);
+ /* prepare and send rpc response */
+ BalIndications balIndCfg;
+ memset(&balIndCfg, 0, sizeof(BalIndications));
+ bal_indications__init(&balIndCfg);
+ balIndCfg.has_objtype = 1;
+ balIndCfg.objtype = front->obj_type;
+ balIndCfg.device_id = front->device_id;
+ printf("Device Id = %s\n", front->device_id);
+ switch(front->obj_type)
+ {
+ case BAL_OBJ_ID__BAL_OBJ_ID_ACCESS_TERMINAL:
+ {
+ printf("***************************************************\n");
+ printf("Successful Indication sent for ACCESS_TERMINAL\n");
+ printf("***************************************************\n");
+ balIndCfg.u_case = BAL_INDICATIONS__U_ACCESS_TERM_IND;
+ prevObjType = front->obj_type;
+ }
+ break;
+ case BAL_OBJ_ID__BAL_OBJ_ID_INTERFACE:
+ {
+ printf("***************************************************\n");
+ printf("Successful Indication sent for PON INTERFACE UP\n");
+ printf("***************************************************\n");
+ balIndCfg.u_case = BAL_INDICATIONS__U_INTERFACE_IND;
+ prevObjType = front->obj_type;
+ }
+ break;
+ case BAL_OBJ_ID__BAL_OBJ_ID_SUBSCRIBER_TERMINAL:
+ {
+ BalSubscriberTerminalKey subTermKey;
+ memset(&subTermKey, 0, sizeof(BalSubscriberTerminalKey));
+ bal_subscriber_terminal_key__init(&subTermKey);
- BalSubscriberTerminalKey subTermKey;
- memset(&subTermKey, 0, sizeof(BalSubscriberTerminalKey));
- bal_subscriber_terminal_key__init(&subTermKey);
- balIndCfg.balobjinfo->onudiscoveryinfo->key = &subTermKey;
- balIndCfg.balobjinfo->onudiscoveryinfo->key->has_sub_term_id = 1;
- balIndCfg.balobjinfo->onudiscoveryinfo->key->sub_term_id = 65535;
- balIndCfg.balobjinfo->onudiscoveryinfo->key->has_intf_id = 1;
- balIndCfg.balobjinfo->onudiscoveryinfo->key->intf_id = 0;
-
- BalSubscriberTerminalCfgData subTermCfgData;
- memset(&subTermCfgData, 0, sizeof(BalSubscriberTerminalCfgData));
- bal_subscriber_terminal_cfg_data__init(&subTermCfgData);
- balIndCfg.balobjinfo->onudiscoveryinfo->data = &subTermCfgData;
- if(BAL_OBJ_ID__BAL_OBJ_ID_INTERFACE == prevObjType)
- {
- balIndCfg.balobjinfo->onudiscoveryinfo->data->has_admin_state = 1;
- balIndCfg.balobjinfo->onudiscoveryinfo->data->admin_state = BAL_STATE__BAL_STATE_DOWN;
- balIndCfg.balobjinfo->onudiscoveryinfo->data->has_oper_status = 1;
- balIndCfg.balobjinfo->onudiscoveryinfo->data->oper_status = BAL_STATUS__BAL_STATUS_DOWN;
- printf("\n***************************************************\n");
- printf("Sending ONU discovery message\n");
- printf("***************************************************\n");
- }
- else
- {
- balIndCfg.balobjinfo->onudiscoveryinfo->data->has_admin_state = 1;
- balIndCfg.balobjinfo->onudiscoveryinfo->data->admin_state = BAL_STATE__BAL_STATE_UP;
- balIndCfg.balobjinfo->onudiscoveryinfo->data->has_oper_status = 1;
- balIndCfg.balobjinfo->onudiscoveryinfo->data->oper_status = BAL_STATUS__BAL_STATUS_UP;
- printf("***************************************************\n");
- printf("ONU Activation Successful\n");
- printf("***************************************************\n");
- }
- BalSerialNumber serial_number;
- memset(&serial_number, 0, sizeof(BalSerialNumber));
- bal_serial_number__init(&serial_number);
- balIndCfg.balobjinfo->onudiscoveryinfo->data->serial_number = &serial_number;
- char vendor_id[20];
- memset(&vendor_id, 0, 20);
- strcpy(vendor_id,"4252434D");
- balIndCfg.balobjinfo->onudiscoveryinfo->data->serial_number->vendor_id = vendor_id;
- char vendor_specific[20];
- memset(&vendor_specific, 0, 20);
- strcpy(vendor_specific,"12345678");
- balIndCfg.balobjinfo->onudiscoveryinfo->data->serial_number->vendor_specific = vendor_specific;
+ BalSerialNumber serial_number;
+ memset(&serial_number, 0, sizeof(BalSerialNumber));
+ bal_serial_number__init(&serial_number);
- prevObjType = front->obj_type;
- }
- break;
- case BAL_OBJ_ID__BAL_OBJ_ID_PACKET:
- {
- balIndCfg.balobjinfo->u_case = BAL_OBJ_IND__U_PKT_DATA;
- }
- break;
- default:
- {
- balIndCfg.balobjinfo->u_case = BAL_OBJ_IND__U__NOT_SET;
- prevObjType = front->obj_type;
- }
- break;
- }
- BalErr *output;
- status = bal_ind__bal_ind_info(client, NULL, &balIndCfg, &output, NULL, 0);
- free(front);
- pthread_mutex_unlock(&lock);
- pthread_mutex_lock(&lock);
- pthread_cond_wait(&cv, &lock);
- }
- return NULL;
+ char vendor_id[20];
+ memset(&vendor_id, 0, 20);
+ strcpy(vendor_id,"4252434D");
+ char vendor_specific[20];
+ memset(&vendor_specific, 0, 20);
+ strcpy(vendor_specific,"12345678");
+
+ if(BAL_OBJ_ID__BAL_OBJ_ID_INTERFACE == prevObjType)
+ {
+ balIndCfg.u_case = BAL_INDICATIONS__U_TERMINAL_DISC;
+ BalSubscriberTerminalSubTermDisc terminal_disc;
+ memset(&terminal_disc, 0, sizeof(BalSubscriberTerminalSubTermDisc));
+ bal_subscriber_terminal_sub_term_disc__init(&terminal_disc);
+ balIndCfg.terminal_disc = &terminal_disc;
+
+ balIndCfg.terminal_disc->key = &subTermKey;
+ balIndCfg.terminal_disc->key->has_sub_term_id = 1;
+ balIndCfg.terminal_disc->key->sub_term_id = front->onu_id;
+ balIndCfg.terminal_disc->key->has_intf_id = 1;
+ balIndCfg.terminal_disc->key->intf_id = front->intf_id;
+
+ BalSubscriberTerminalSubTermDiscData subTermCfgData;
+ memset(&subTermCfgData, 0, sizeof(BalSubscriberTerminalSubTermDiscData));
+ bal_subscriber_terminal_sub_term_disc_data__init(&subTermCfgData);
+ balIndCfg.terminal_disc->data = &subTermCfgData;
+ balIndCfg.terminal_disc->data->serial_number = &serial_number;
+ balIndCfg.terminal_disc->data->serial_number->vendor_id = vendor_id;
+ printf("\n***************************************************\n");
+ printf("Sending ONU discovery message\n");
+ printf("***************************************************\n");
+ }
+ else
+ {
+ balIndCfg.u_case = BAL_INDICATIONS__U_TERMINAL_IND;
+ BalSubscriberTerminalInd terminal_ind;
+ memset(&terminal_ind, 0, sizeof(BalSubscriberTerminalInd));
+ bal_subscriber_terminal_ind__init(&terminal_ind);
+ balIndCfg.terminal_ind = &terminal_ind;
+
+ balIndCfg.terminal_ind->key = &subTermKey;
+ balIndCfg.terminal_ind->key->has_sub_term_id = 1;
+ balIndCfg.terminal_ind->key->sub_term_id = front->onu_id;
+ balIndCfg.terminal_ind->key->has_intf_id = 1;
+ balIndCfg.terminal_ind->key->intf_id = front->intf_id;
+
+ BalSubscriberTerminalIndData subTermCfgData;
+ memset(&subTermCfgData, 0, sizeof(BalSubscriberTerminalIndData));
+ bal_subscriber_terminal_ind_data__init(&subTermCfgData);
+ balIndCfg.terminal_ind->data = &subTermCfgData;
+ balIndCfg.terminal_ind->data->has_admin_state = 1;
+ balIndCfg.terminal_ind->data->admin_state = BAL_STATE__BAL_STATE_UP;
+ balIndCfg.terminal_ind->data->has_oper_status = 1;
+ balIndCfg.terminal_ind->data->oper_status = BAL_STATUS__BAL_STATUS_UP;
+ balIndCfg.terminal_ind->data->serial_number = &serial_number;
+ balIndCfg.terminal_ind->data->serial_number->vendor_id = vendor_id;
+ balIndCfg.terminal_ind->data->serial_number->vendor_specific = vendor_specific;
+ printf("***************************************************\n");
+ printf("ONU Activation Successful\n");
+ printf("***************************************************\n");
+ }
+ prevObjType = front->obj_type;
+ }
+ break;
+ case BAL_OBJ_ID__BAL_OBJ_ID_PACKET:
+ {
+ balIndCfg.u_case = BAL_INDICATIONS__U_BAL_OMCI_RESP;
+ BalPacketItuOmciChannelRx balomciresp;
+ memset(&balomciresp, 0, sizeof(BalPacketItuOmciChannelRx));
+ bal_packet_itu_omci_channel_rx__init(&balomciresp);
+
+ BalPacketKey balomcirespkey;
+ memset(&balomcirespkey, 0, sizeof(BalPacketKey));
+ bal_packet_key__init(&balomcirespkey);
+ balomciresp.key = &balomcirespkey;
+
+ BalDest balomcirespkeydest;
+ memset(&balomcirespkeydest, 0, sizeof(BalDest));
+ bal_dest__init(&balomcirespkeydest);
+ balomciresp.key->packet_send_dest = &balomcirespkeydest;
+ balomciresp.key->packet_send_dest->has_type = 1;
+ balomciresp.key->packet_send_dest->type = BAL_DEST_TYPE__BAL_DEST_TYPE_ITU_OMCI_CHANNEL;
+ balomciresp.key->packet_send_dest->u_case = BAL_DEST__U_ITU_OMCI_CHANNEL;
+
+ BalItuOmciChannel itu_omci_channel;
+ memset(&itu_omci_channel, 0, sizeof(BalItuOmciChannel));
+ bal_itu_omci_channel__init(&itu_omci_channel);
+ balomciresp.key->packet_send_dest->itu_omci_channel = &itu_omci_channel;
+ balomciresp.key->packet_send_dest->itu_omci_channel->has_sub_term_id = 1;
+ balomciresp.key->packet_send_dest->itu_omci_channel->sub_term_id = front->onu_id;
+ balomciresp.key->packet_send_dest->itu_omci_channel->has_int_id = 1;
+ balomciresp.key->packet_send_dest->itu_omci_channel->int_id = front->intf_id;
+ }
+ break;
+ default:
+ {
+ balIndCfg.u_case = BAL_INDICATIONS__U__NOT_SET;
+ prevObjType = front->obj_type;
+ }
+ break;
+ }
+ BalErr *output;
+ status = bal_ind__bal_ind_info(client, NULL, &balIndCfg, &output, NULL, 0);
+ free(front);
+ pthread_mutex_unlock(&lock);
+ pthread_mutex_lock(&lock);
+ pthread_cond_wait(&cv, &lock);
+ }
+ return NULL;
}
void create_stub_thread()
{
- pthread_t threadId = 0;
+ pthread_t threadId = 0;
- /* create shared queue */
- shared_queue = createQueue();
+ /* create shared queue */
+ shared_queue = createQueue();
- pthread_create(&threadId, NULL, stub_thread, NULL);
+ pthread_create(&threadId, NULL, stub_thread, NULL);
}
/* A utility function to create an empty queue */
bal_queue *createQueue()
{
- shared_queue = (struct Queue*)malloc(sizeof(struct Queue));
- shared_queue->front = shared_queue->rear = NULL;
- return shared_queue;
+ shared_queue = (struct Queue*)malloc(sizeof(struct Queue));
+ shared_queue->front = shared_queue->rear = NULL;
+ return shared_queue;
}
/* A utility function to create a new linked list node */
-struct QNode* newNode(int objKey, int status)
+struct QNode* newNode(int objKey, int status, char *device_id)
{
- struct QNode *temp = (struct QNode*)malloc(sizeof(struct QNode));
- temp->obj_type = objKey;
- temp->status = status;
- temp->next = NULL;
- return temp;
+ struct QNode *temp = (struct QNode*)malloc(sizeof(struct QNode));
+ temp->obj_type = objKey;
+ temp->status = status;
+ if(device_id != NULL)
+ {
+ memset(temp->device_id, 0, BAL_DEVICE_STR_LEN);
+ memcpy(temp->device_id, device_id, strlen(device_id));
+ }
+ temp->next = NULL;
+ return temp;
}
/* The function to add data to shared_queue - Add end of the queue */
-void enQueue(int objKey, int status)
+void enQueue(int objKey, struct QNode *temp)
{
- /* Create a new LL node */
- struct QNode *temp = newNode(objKey, status);
+ /* Create a new LL node */
- /* If queue is empty, then new node is front and rear both */
- if (shared_queue->rear == NULL)
- {
- shared_queue->front = shared_queue->rear = temp;
- return;
- }
+ /* If queue is empty, then new node is front and rear both */
+ if (shared_queue->rear == NULL)
+ {
+ shared_queue->front = shared_queue->rear = temp;
+ return;
+ }
- /* Add the new node at the end of queue and change rear */
- shared_queue->rear->next = temp;
- shared_queue->rear = temp;
+ /* Add the new node at the end of queue and change rear */
+ shared_queue->rear->next = temp;
+ shared_queue->rear = temp;
}
/* Function to remove data from shared_queue - FIFO */
struct QNode *deQueue()
{
- /* If queue is empty, return NULL */
- if (shared_queue->front == NULL)
- {
- return NULL;
- }
+ /* If queue is empty, return NULL */
+ if (shared_queue->front == NULL)
+ {
+ return NULL;
+ }
- /* Store previous front and move front one node ahead */
- struct QNode *temp = shared_queue->front;
- shared_queue->front = shared_queue->front->next;
+ /* Store previous front and move front one node ahead */
+ struct QNode *temp = shared_queue->front;
+ shared_queue->front = shared_queue->front->next;
- /* If front becomes NULL, then change rear also as NULL */
- if (shared_queue->front == NULL)
- {
- shared_queue->rear = NULL;
- }
+ /* If front becomes NULL, then change rear also as NULL */
+ if (shared_queue->front == NULL)
+ {
+ shared_queue->rear = NULL;
+ }
- return temp;
+ return temp;
}
#endif