Changes to stub code to add support for BAL2.4
diff --git a/device_simulator/bal_server.c b/device_simulator/bal_server.c
index 38f18ba..9d6402f 100644
--- a/device_simulator/bal_server.c
+++ b/device_simulator/bal_server.c
@@ -22,8 +22,8 @@
 static grpc_c_server_t *test_server;
 
 static void sigint_handler (int x) { 
-        grpc_c_server_destroy(test_server);
-        exit(0);
+	grpc_c_server_destroy(test_server);
+	exit(0);
 }
 
 /*
@@ -31,14 +31,15 @@
  */
 void bal__bal_cfg_get_cb(grpc_c_context_t *context)
 {
-        BalCfg *get_cfg;
+	BalCfg *get_cfg;
 
-        /*
-         * Read incoming message into get_cfg
-         */
-        if (context->gcc_payload) {
-                context->gcc_stream->read(context, (void **)&get_cfg, 0);
-        }
+	/*
+	 * Read incoming message into get_cfg
+	 */
+	if (context->gcc_payload) {
+		context->gcc_stream->read(context, (void **)&get_cfg, 0);
+	}
+
 }
 
 /*
@@ -46,88 +47,133 @@
  */
 void bal__bal_cfg_set_cb(grpc_c_context_t *context)
 {
-        BalCfg *set_cfg;
-        BalErr bal_err;
+	BalCfg *set_cfg;
+	BalErr bal_err;
 
-        /*
-         * Read incoming message into set_cfg
-         */
-        if (context->gcc_payload) {
-                context->gcc_stream->read(context, (void **)&set_cfg, 0);
-        }
+	/*
+	 * Read incoming message into set_cfg
+	 */
+	if (context->gcc_payload) {
+		context->gcc_stream->read(context, (void **)&set_cfg, 0);
+	}
 
-        /*
-         * send it to BAL
-         */
+	/*
+	 * send it to BAL
+	 */
 
-        bal_err__init(&bal_err);
+	bal_err__init(&bal_err);
 
-        bal_err.err= 0;
+	bal_err.err= 0;
 
-        /*
-         * Write reply back to the client
-         */
-        if (!context->gcc_stream->write(context, &bal_err, 0)) {
-        } else {
-                printf("Failed to write\n");
-                exit(1);
-        }
+	/*
+	 * Write reply back to the client
+	 */
+	if (!context->gcc_stream->write(context, &bal_err, 0)) {
+	} else {
+		printf("Failed to write\n");
+		exit(1);
+	}
 
-        grpc_c_status_t status;
-        status.gcs_code = 0;
+	grpc_c_status_t status;
+	status.gcs_code = 0;
 
-        /*
-         * Finish response for RPC
-         */
-        if (context->gcc_stream->finish(context, &status)) {
-                printf("Failed to write status\n");
-                exit(1);
-        }
+	/*
+	 * Finish response for RPC
+	 */
+	if (context->gcc_stream->finish(context, &status)) {
+		printf("Failed to write status\n");
+		exit(1);
+	}
 
 #ifdef BAL_STUB
-        pthread_mutex_lock(&lock);
-        if(set_cfg->hdr->has_obj_type)
-        {
-                enQueue(set_cfg->hdr->obj_type, BAL_ERRNO__BAL_ERR_OK);
-                switch(set_cfg->hdr->obj_type)
-                {
-                        case BAL_OBJ_ID__BAL_OBJ_ID_ACCESS_TERMINAL:
+	pthread_mutex_lock(&lock);
+
+	struct QNode *temp = newNode(set_cfg->hdr->obj_type, 
+			BAL_ERRNO__BAL_ERR_OK, 
+			set_cfg->device_id);
+
+	if(set_cfg->hdr->has_obj_type)
+	{
+
+		switch(set_cfg->hdr->obj_type)
+		{
+			case BAL_OBJ_ID__BAL_OBJ_ID_ACCESS_TERMINAL:
+				{
+					printf("\n***************************************************\n");  
+					printf("Received Access Terminal Configuration msg\n");
+					printf("***************************************************\n");  
+				}
+				break;
+			case BAL_OBJ_ID__BAL_OBJ_ID_INTERFACE:
+				{
+					printf("\n***************************************************\n");  
+					printf("Received PON Interface Configuration msg\n");
+					printf("***************************************************\n");  
+					temp->intf_id = set_cfg->interface->key->intf_id;
+					printf("Pon ID = %d\n", temp->intf_id);
+				}
+				break;
+			case BAL_OBJ_ID__BAL_OBJ_ID_SUBSCRIBER_TERMINAL:
+				{
+					printf("\n*****************************************************\n");  
+					printf("Received ONU Activation msg\n");
+					printf("*****************************************************\n");  
+					temp->intf_id = set_cfg->terminal->key->intf_id;
+					temp->onu_id = set_cfg->terminal->key->sub_term_id;
+				}
+				break;
+                        case BAL_OBJ_ID__BAL_OBJ_ID_PACKET:
                                 {
-                                        printf("\n***************************************************\n");  
-                                        printf("Received Access Terminal Configuration msg\n");
-                                        printf("***************************************************\n");  
+                                   switch(set_cfg->packet->key->packet_send_dest->type)
+                                   {
+					case BAL_DEST_TYPE__BAL_DEST_TYPE_ITU_OMCI_CHANNEL:
+				        {
+						printf("\n*****************************************************\n");  
+						printf("Received OMCI msg\n");
+						printf("*****************************************************\n");  
+						temp->intf_id = set_cfg->terminal->key->intf_id;
+						temp->onu_id = set_cfg->terminal->key->sub_term_id;
+					}
+					break;
+					default:
+					{
+						("\n*****************************************************\n");  
+						printf("Dest type invalid\n");
+						printf("*****************************************************\n");  
+					}
+					break;
+				   }
                                 }
                                 break;
-                        case BAL_OBJ_ID__BAL_OBJ_ID_INTERFACE:
-                                {
-                                        printf("\n***************************************************\n");  
-                                        printf("Received PON Interface Configuration msg\n");
-                                        printf("***************************************************\n");  
-                                }
-                                break;
-                        case BAL_OBJ_ID__BAL_OBJ_ID_SUBSCRIBER_TERMINAL:
-                                {
-                                        printf("\n*****************************************************\n");  
-                                        printf("Received ONU Activation msg\n");
-                                        printf("*****************************************************\n");  
-                                }
-                        default:
-                                break;
-                }
-        }
-        else
-        {
-                printf("BALSTUB:Cfg Set recevied without object type");
-        }
-        pthread_mutex_unlock(&lock);
-        sleep(2);   
-        pthread_cond_signal(&cv);
-        if(BAL_OBJ_ID__BAL_OBJ_ID_INTERFACE == set_cfg->hdr->obj_type)
-        {
-                sleep(5); 
-                enQueue(BAL_OBJ_ID__BAL_OBJ_ID_SUBSCRIBER_TERMINAL, BAL_ERRNO__BAL_ERR_OK);
-                pthread_cond_signal(&cv);
-        }
+			default:
+				{
+				("\n*****************************************************\n");  
+				printf("Received Invalid msg\n");
+				printf("*****************************************************\n");  
+				}
+				break;
+		}
+		enQueue(set_cfg->hdr->obj_type, temp);
+	}
+	else
+	{
+		printf("BALSTUB:Cfg Set recevied without object type");
+	}
+	pthread_mutex_unlock(&lock);
+	sleep(2);   
+	pthread_cond_signal(&cv);
+	if(BAL_OBJ_ID__BAL_OBJ_ID_INTERFACE == set_cfg->hdr->obj_type)
+	{
+		sleep(5); 
+		struct QNode *temp1 = newNode(BAL_OBJ_ID__BAL_OBJ_ID_SUBSCRIBER_TERMINAL, 
+				BAL_ERRNO__BAL_ERR_OK, 
+				set_cfg->device_id);
+		temp1->intf_id = set_cfg->interface->key->intf_id;
+		temp1->onu_id = 65535;
+		printf("sending _onu_discovery_indiaction\n");
+		enQueue(BAL_OBJ_ID__BAL_OBJ_ID_SUBSCRIBER_TERMINAL, temp1); 
+		pthread_cond_signal(&cv);
+	}
 #endif
 }
 
@@ -137,14 +183,14 @@
  */
 void bal__bal_cfg_clear_cb(grpc_c_context_t *context)
 {
-        BalKey *clear_key;
+	BalKey *clear_key;
 
-        /*
-         * Read incoming message into clear_key 
-         */
-        if (context->gcc_payload) {
-                context->gcc_stream->read(context, (void **)&clear_key, 0);
-        }
+	/*
+	 * Read incoming message into clear_key 
+	 */
+	if (context->gcc_payload) {
+		context->gcc_stream->read(context, (void **)&clear_key, 0);
+	}
 
 }
 
@@ -154,14 +200,48 @@
  */
 void bal__bal_api_init_cb(grpc_c_context_t *context)
 {
-        BalInit *bal_init;
+	BalInit *bal_init;
+	BalErr bal_err;
 
-        /*
-         * Read incoming message into set_cfg
-         */
-        if (context->gcc_payload) {
-                context->gcc_stream->read(context, (void **)&bal_init, 0);
-        }
+	/*
+	 * Read incoming message into set_cfg
+	 */
+	if (context->gcc_payload) {
+		context->gcc_stream->read(context, (void **)&bal_init, 0);
+	}
+
+	/*
+	 * send it to BAL
+	 */
+
+
+	("\n*****************************************************\n");  
+	printf("Received API Init msg\n");
+	printf("*****************************************************\n");  
+
+	bal_err__init(&bal_err);
+
+	bal_err.err= 0;
+
+	/*
+	 * Write reply back to the client
+	 */
+	if (!context->gcc_stream->write(context, &bal_err, 0)) {
+	} else {
+		printf("Failed to write\n");
+		exit(1);
+	}
+
+	grpc_c_status_t status;
+	status.gcs_code = 0;
+
+	/*
+	 * Finish response for RPC
+	 */
+	if (context->gcc_stream->finish(context, &status)) {
+		printf("Failed to write status\n");
+		exit(1);
+	}
 
 }
 
@@ -172,14 +252,14 @@
 void bal__bal_api_finish_cb(grpc_c_context_t *context)
 {
 #if 0
-        void *finish_init;
+	void *finish_init;
 
-        /*
-         * Read incoming message into set_cfg
-         */
-        if (context->gcc_payload) {
-                context->gcc_stream->read(context, (void **)&finish_init);
-        }
+	/*
+	 * Read incoming message into set_cfg
+	 */
+	if (context->gcc_payload) {
+		context->gcc_stream->read(context, (void **)&finish_init);
+	}
 #endif
 }
 
@@ -190,85 +270,74 @@
 void bal_ind__bal_ind_info_cb(grpc_c_context_t *context)
 {
 #if 0
-        void *finish_init;
+	void *finish_init;
 
-        /*
-         * Read incoming message into set_cfg
-         */
-        if (context->gcc_payload) {
-                context->gcc_stream->read(context, (void **)&finish_init);
-        }
+	/*
+	 * Read incoming message into set_cfg
+	 */
+	if (context->gcc_payload) {
+		context->gcc_stream->read(context, (void **)&finish_init);
+	}
 #endif
 }
 
 
 /*
- * This functions gets invoked whenever bal RPC gets called
- */
-void bal__bal_omci_msg_cb(grpc_c_context_t *context)
-{
-        char *omci_msg;
-
-        /*
-         * Read incoming message into omci_msg
-         */
-        if (context->gcc_payload) {
-                context->gcc_stream->read(context, (void **)&omci_msg, 0);
-        }
-}
-
-/*
  * Takes socket path as argument
  */
 int main (int argc, char **argv) 
 {
-        int i = 0;
-        grpc_c_server_t *server = NULL;
+	int i = 0;
+	grpc_c_server_t *server = NULL;
 
-        printf("*************\n");
-        printf("BAL STUB\n");
-        printf("*************\n");
-        if (argc < 2) {
-                fprintf(stderr, "Missing socket path argument\n");
-                exit(1);
-        }
+	printf("*************\n");
+	printf("BAL STUB\n");
+	printf("*************\n");
+	if (argc < 2) {
+		fprintf(stderr, "Missing socket path argument\n");
+		exit(1);
+	}
 
-        signal(SIGINT, sigint_handler);
-        /*
-         * Initialize grpc-c library to be used with vanilla gRPC
-         */
-        grpc_c_init(GRPC_THREADS, NULL);
+	signal(SIGINT, sigint_handler);
+	/*
+	 * Initialize grpc-c library to be used with vanilla gRPC
+	 */
+	grpc_c_init(GRPC_THREADS, NULL);
 
-        /*
-         * Create server object
-         */
-        test_server = grpc_c_server_create(argv[1]); 
-        if (test_server == NULL) {
-                printf("Failed to create server\n");
-                exit(1);
-        }
+	/*
+	 * Create server object
+	 */
+	test_server = grpc_c_server_create(argv[1]);
 
-        /*
-         * Initialize greeter service
-         */
-        printf("\nCreating a test server\n");
-        bal__service_init(test_server);
+	if (test_server == NULL) {
+		printf("Failed to create server\n");
+		exit(1);
+	}
 
-        /*
-         * Start server
-         */
-        grpc_c_server_start(test_server);
+	/*
+	 * Initialize greeter service
+	 */
+	printf("\nCreating a test server\n");
+	bal__service_init(test_server);
+
+	/*
+	 * Start server
+	 */
+	grpc_c_server_start(test_server);
 
 #ifdef BAL_STUB
-        printf("\nCreating a stub thread\n");
-        create_stub_thread();
+	printf("\nCreating a stub thread\n");
+	create_stub_thread();
+#else
+	grpc_c_client_t *client = grpc_c_client_init("172.24.150.114:60001", "bal_client", NULL);
 #endif
 
-        /*
-         * Blocks server to wait to completion
-         */
-        grpc_c_server_wait(test_server);
+	/*
+	 * Blocks server to wait to completion
+	 */
+	grpc_c_server_wait(test_server);
 
-        bal__service_init(server);
+	/* code added for example Makefile to compile grpc-c along with edgecore driver */
+	bal__service_init(server);
 
 }