Esempio n. 1
0
void *app_glue_create_socket(int family,int type)
{
    struct timeval tv;
    struct socket *sock = NULL;
    if(sock_create_kern(family,type,0,&sock)) {
        ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"cannot create socket %s %d\n",__FILE__,__LINE__);
        return NULL;
    }
    tv.tv_sec = -1;
    tv.tv_usec = 0;
    if(sock_setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,(char *)&tv,sizeof(tv))) {
        ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"%s %d cannot set notimeout option\n",__FILE__,__LINE__);
    }
    tv.tv_sec = -1;
    tv.tv_usec = 0;
    if(sock_setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char *)&tv,sizeof(tv))) {
        ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"%s %d cannot set notimeout option\n",__FILE__,__LINE__);
    }
    if(type != SOCK_STREAM) {
        if(sock->sk) {
            sock_reset_flag(sock->sk,SOCK_USE_WRITE_QUEUE);
            sock->sk->sk_data_ready = app_glue_sock_readable;
            sock->sk->sk_write_space = app_glue_sock_write_space;
            app_glue_sock_write_space(sock->sk);
        }
    }
    return sock;
}
Esempio n. 2
0
void app_glue_print_stats()
{
    float ratio;

    ratio = (float)(total_cycles_stat - total_prev)/(float)(working_cycles_stat - work_prev);
    total_prev = total_cycles_stat;
    work_prev = working_cycles_stat;
    ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"total %"PRIu64" work %"PRIu64" ratio %f\n",total_cycles_stat,working_cycles_stat,ratio);
    ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"app_glue_periodic_called %"PRIu64"\n",app_glue_periodic_called);
    ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"app_glue_tx_queues_process %"PRIu64"\n",app_glue_tx_queues_process);
    ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"app_glue_rx_queues_process %"PRIu64"\n",app_glue_rx_queues_process);
    ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"app_glue_sock_readable_called %"PRIu64" app_glue_sock_writable_called %"PRIu64"\n",app_glue_sock_readable_called, app_glue_sock_writable_called);
}
Esempio n. 3
0
/*
 * This function may be called to get attached to the socket user's data .
 * Paramters: a pointer  to socket (returned, for example, by create_*_socket,)
 * Returns: pointer to data to be attached to the socket
 *
 */
inline void *app_glue_get_user_data(void *socket)
{
    struct socket *sock = (struct socket *)socket;
    if(!sock) {
        ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"PANIC: socket NULL %s %d\n",__FILE__,__LINE__);
        while(1);
    }
    if(!sock->sk) {
        ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"PANIC: socket->sk NULL\n");
        while(1);
    }
    return sock->sk->sk_user_data;
}
Esempio n. 4
0
int app_glue_v4_listen(struct socket *sock)
{
    if(sock->sk) {
        sock->sk->sk_state_change = app_glue_sock_wakeup;
    }
    else {
        ipaugenblick_log(IPAUGENBLICK_LOG_CRIT,"FATAL %s %d\n",__FILE__,__LINE__);
        exit(0);
    }
    if(kernel_listen(sock,32000)) {
        ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"cannot listen %s %d\n",__FILE__,__LINE__);
        return -1;
    }
    return 0;
}
Esempio n. 5
0
int app_glue_v4_connect(struct socket *sock,unsigned int ipaddr,unsigned short port)
{
    struct sockaddr_in sin;

    if(!sock->sk)
        return -1;
    struct inet_sock *inet = inet_sk(sock->sk);
    while(!inet->inet_num) {
        sin.sin_family = AF_INET;
        sin.sin_addr.s_addr = /*my_ip_addr*/0;
        sin.sin_port = htons(rand() & 0xffff);
        if(kernel_bind(sock,(struct sockaddr *)&sin,sizeof(sin))) {
            ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"cannot bind %s %d %d\n",__FILE__,__LINE__,sin.sin_port);
            continue;
        }
        break;
    }
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = ipaddr;
    sin.sin_port = port;
    if(sock->sk) {
        sock->sk->sk_state_change = app_glue_sock_wakeup;
    }
    kernel_connect(sock, (struct sockaddr *)&sin,sizeof(sin), 0);
    return 0;
}
Esempio n. 6
0
/*
 * This function must be called by application to initialize.
 * the rate of polling for driver, timer, readable & writable socket lists
 * Paramters: drv_poll_interval,timer_poll_interval,tx_ready_sockets_poll_interval,
 * rx_ready_sockets_poll_interval - all in micros
 * Returns: None
 *
 */
void app_glue_init_poll_intervals(int drv_poll_interval,
                                  int timer_poll_interval,
                                  int tx_ready_sockets_poll_interval,
                                  int rx_ready_sockets_poll_interval)
{
    ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"%s %d %d %d %d %d\n",__func__,__LINE__,
                     drv_poll_interval,timer_poll_interval,tx_ready_sockets_poll_interval,
                     rx_ready_sockets_poll_interval);
    float cycles_in_micro = rte_get_tsc_hz()/1000000;
    app_glue_drv_poll_interval = cycles_in_micro*(float)drv_poll_interval;
    app_glue_timer_poll_interval = cycles_in_micro*(float)timer_poll_interval;
    app_glue_tx_ready_sockets_poll_interval = cycles_in_micro*(float)tx_ready_sockets_poll_interval;
    app_glue_rx_ready_sockets_poll_interval = cycles_in_micro*(float)rx_ready_sockets_poll_interval;
    ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"%s %d %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64"\n",__func__,__LINE__,
                     app_glue_drv_poll_interval,app_glue_timer_poll_interval,
                     app_glue_tx_ready_sockets_poll_interval,app_glue_rx_ready_sockets_poll_interval);
}
Esempio n. 7
0
/*
 * This function polls the driver for the received packets.Called from app_glue_periodic
 * Paramters: ethernet port number.
 * Returns: None
 *
 */
static inline void app_glue_poll(int port_num)
{
    struct net_device *netdev = (struct net_device *)get_dpdk_dev_by_port_num(port_num);

    if(!netdev) {
        ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"Cannot get netdev %s %d\n",__FILE__,__LINE__);
        return;
    }
    netdev->netdev_ops->ndo_poll_controller(netdev);
}
Esempio n. 8
0
/*
 * This function may be called to get next readable socket .
 * Paramters: None
 * Returns: pointer to socket to be read
 *
 */
void *app_glue_get_next_reader()
{
    struct socket *sock;
    if(!TAILQ_EMPTY(&read_ready_socket_list_head)) {
        sock = TAILQ_FIRST(&read_ready_socket_list_head);
        sock->read_queue_present = 0;
        TAILQ_REMOVE(&read_ready_socket_list_head,sock,read_queue_entry);
        if(sock->sk)
            return sock->sk->sk_user_data;
        ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"PANIC: socket->sk is NULL\n");
    }
    return NULL;
}
Esempio n. 9
0
/*
 * This function may be called to attach user's data to the socket.
 * Paramters: a pointer  to socket (returned, for example, by create_*_socket)
 * a pointer to data to be attached to the socket
 * Returns: None
 *
 */
void app_glue_set_user_data(void *socket,void *data)
{
    struct socket *sock = (struct socket *)socket;

    if(!sock) {
        ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"PANIC: socket NULL %s %d \n",__FILE__,__LINE__);
        while(1);
    }
//	if(sock->sk)
    sock->sk->sk_user_data = data;
//	else
//		ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"PANIC: socket->sk is NULL\n");while(1);
}
void ipaugenblick_main_loop()
{
    struct rte_mbuf *mbuf;
    uint8_t ports_to_poll[1] = { 0 };
    int drv_poll_interval = get_max_drv_poll_interval_in_micros(0);
    app_glue_init_poll_intervals(drv_poll_interval/(2*MAX_PKT_BURST),
                                 100 /*timer_poll_interval*/,
                                 drv_poll_interval/(10*MAX_PKT_BURST),
                                drv_poll_interval/(60*MAX_PKT_BURST));
    
    ipaugenblick_service_api_init(COMMAND_POOL_SIZE,DATA_RINGS_SIZE,DATA_RINGS_SIZE);
    TAILQ_INIT(&buffers_available_notification_socket_list_head);
    TAILQ_INIT(&ipaugenblick_clients_list_head);
    init_systick(rte_lcore_id());
    ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"IPAugenblick service initialized\n");
    while(1) {
        process_commands();
	app_glue_periodic(1,ports_to_poll,1);
        while(!TAILQ_EMPTY(&buffers_available_notification_socket_list_head)) {
            if(get_buffer_count() > 0) {
                struct socket *sock = TAILQ_FIRST(&buffers_available_notification_socket_list_head);
                socket_satelite_data_t *socket_data = get_user_data(sock);
		if(socket_data->socket->type == SOCK_DGRAM)
		   	user_set_socket_tx_space(&g_ipaugenblick_sockets[socket_data->ringset_idx].tx_space,sk_stream_wspace(socket_data->socket->sk));
		//printf("%s %d %d %d %d\n",__FILE__,__LINE__,socket_data->ringset_idx,g_ipaugenblick_sockets[socket_data->ringset_idx].tx_space,sk_stream_wspace(socket_data->socket->sk));
                if(!ipaugenblick_mark_writable(socket_data)) { 
                    sock->buffers_available_notification_queue_present = 0;
                    TAILQ_REMOVE(&buffers_available_notification_socket_list_head,sock,buffers_available_notification_queue_entry); 
                }
                else {
                    break;
                }
            }
            else {
                break;
            }
        }
    }
}
Esempio n. 11
0
/*
 * This callback function is invoked when data arrives to socket.
 * It inserts the socket into a list of readable sockets
 * which is processed in periodic function app_glue_periodic
 * Paramters: a pointer to struct sock, len (dummy)
 * Returns: void
 *
 */
void app_glue_sock_readable(struct sock *sk, int len)
{
    const struct tcp_sock *tp = tcp_sk(sk);

    if(!sk->sk_socket) {
        return;
    }
    if((sk->sk_state != TCP_ESTABLISHED)&&(sk->sk_socket->type == SOCK_STREAM)) {
        return;
    }
    if(sk->sk_socket->read_queue_present) {
        if(read_sockets_queue_len == 0) {
            ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"%s %d\n",__FILE__,__LINE__);
            exit(0);
        }
        return;
    }
    app_glue_sock_readable_called++;
    sock_hold(sk);
    sk->sk_socket->read_queue_present = 1;
    TAILQ_INSERT_TAIL(&read_ready_socket_list_head,sk->sk_socket,read_queue_entry);
    read_sockets_queue_len++;
}
Esempio n. 12
0
void show_mib_stats(void)
{
	struct netns_mib *p_mib = &init_net.mib;
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INPKTS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INPKTS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INOCTETS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INOCTETS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INDELIVERS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INDELIVERS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_OUTFORWDATAGRAMS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_OUTFORWDATAGRAMS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_OUTPKTS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_OUTPKTS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_OUTOCTETS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_OUTOCTETS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INHDRERRORS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INHDRERRORS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INTOOBIGERRORS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INTOOBIGERRORS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INNOROUTES %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INNOROUTES]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INADDRERRORS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INADDRERRORS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INUNKNOWNPROTOS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INUNKNOWNPROTOS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INTRUNCATEDPKTS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INTRUNCATEDPKTS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INDISCARDS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INDISCARDS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_OUTDISCARDS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_OUTDISCARDS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_OUTNOROUTES %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_OUTNOROUTES]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_REASMTIMEOUT %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_REASMTIMEOUT]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_REASMREQDS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_REASMREQDS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_REASMOKS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_REASMOKS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_REASMFAILS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_REASMFAILS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_FRAGOKS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_FRAGOKS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_FRAGFAILS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_FRAGFAILS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_FRAGCREATES %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_FRAGCREATES]);
	//ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INMCASTPKTS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INMCASTPKTS]);
	//ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_OUTMCASTPKTS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_OUTMCASTPKTS]);
	//ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INBCASTPKTS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INBCASTPKTS]);
	//ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_OUTBCASTPKTS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_OUTBCASTPKTS]);
	//ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INMCASTOCTETS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INMCASTOCTETS]);
	//ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_OUTMCASTOCTETS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_OUTMCASTOCTETS]);
	//ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_INBCASTOCTETS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_INBCASTOCTETS]);
	//ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_OUTBCASTOCTETS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_OUTBCASTOCTETS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_CSUMERRORS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_CSUMERRORS]);
	//ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_NOECTPKTS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_NOECTPKTS]);
	//ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_ECT1PKTS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_ECT1PKTS]);
	//ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_ECT0PKTS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_ECT0PKTS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," IPSTATS_MIB_CEPKTS %"PRIu64"\n",(unsigned long)p_mib->ip_statistics[0]->mibs[IPSTATS_MIB_CEPKTS]);

	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_DELAYEDACKS %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_DELAYEDACKS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_DELAYEDACKLOST %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_DELAYEDACKLOST]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPPREQUEUED %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPPREQUEUED]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPDIRECTCOPYFROMBACKLOG %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPDIRECTCOPYFROMBACKLOG]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPDIRECTCOPYFROMPREQUEUE %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPDIRECTCOPYFROMPREQUEUE]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPPREQUEUEDROPPED %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPPREQUEUEDROPPED]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPHPHITS %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPHPHITS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPHPHITSTOUSER %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPHPHITSTOUSER]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPPUREACKS %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPPUREACKS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPHPACKS %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPHPACKS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPRENORECOVERY %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPRENORECOVERY]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPSACKRECOVERY %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPSACKRECOVERY]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPSACKRENEGING %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPSACKRENEGING]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPFACKREORDER %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPFACKREORDER]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPSACKREORDER %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPSACKREORDER]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPRENOREORDER %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPRENOREORDER]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPTSREORDER %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPTSREORDER]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPFULLUNDO %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPFULLUNDO]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPPARTIALUNDO %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPPARTIALUNDO]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_DELAYEDACKLOCKED %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_DELAYEDACKLOCKED]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPDSACKUNDO %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPDSACKUNDO]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPLOSSUNDO %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPLOSSUNDO]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPLOSTRETRANSMIT %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPLOSTRETRANSMIT]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPRENOFAILURES %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPRENOFAILURES]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPSACKFAILURES %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPSACKFAILURES]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPLOSSFAILURES %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPLOSSFAILURES]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPFASTRETRANS %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPFASTRETRANS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPFORWARDRETRANS %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPFORWARDRETRANS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPSLOWSTARTRETRANS %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPSLOWSTARTRETRANS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPTIMEOUTS %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPTIMEOUTS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPLOSSPROBES %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPLOSSPROBES]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPLOSSPROBERECOVERY %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPLOSSPROBERECOVERY]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPSCHEDULERFAILED %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPSCHEDULERFAILED]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPRCVCOLLAPSED %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPRCVCOLLAPSED]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPDSACKOLDSENT %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPDSACKOLDSENT]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPDSACKOFOSENT %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPDSACKOFOSENT]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPDSACKRECV %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPDSACKRECV]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPDSACKOFORECV %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPDSACKOFORECV]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPABORTONDATA %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPABORTONDATA]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPABORTONCLOSE %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPABORTONCLOSE]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPABORTONMEMORY %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPABORTONMEMORY]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPABORTONTIMEOUT %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPABORTONTIMEOUT]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPABORTONLINGER %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPABORTONLINGER]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPABORTFAILED %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPABORTFAILED]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPMEMORYPRESSURES %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPMEMORYPRESSURES]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPSACKDISCARD %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPSACKDISCARD]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPDSACKIGNOREDOLD %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPDSACKIGNOREDOLD]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPDSACKIGNOREDNOUNDO %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPDSACKIGNOREDNOUNDO]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPSPURIOUSRTOS %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPSPURIOUSRTOS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPMD5NOTFOUND %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPMD5NOTFOUND]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPMD5UNEXPECTED %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPMD5UNEXPECTED]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_SACKSHIFTED %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_SACKSHIFTED]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_SACKMERGED %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_SACKMERGED]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_SACKSHIFTFALLBACK %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_SACKSHIFTFALLBACK]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPBACKLOGDROP %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPBACKLOGDROP]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPMINTTLDROP %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPMINTTLDROP]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPDEFERACCEPTDROP %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPDEFERACCEPTDROP]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_IPRPFILTER %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_IPRPFILTER]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPTIMEWAITOVERFLOW %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPTIMEWAITOVERFLOW]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPREQQFULLDOCOOKIES %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPREQQFULLDOCOOKIES]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPREQQFULLDROP %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPREQQFULLDROP]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPRETRANSFAIL %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPRETRANSFAIL]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPRCVCOALESCE %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPRCVCOALESCE]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPOFOQUEUE %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPOFOQUEUE]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPOFODROP %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPOFODROP]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPOFOMERGE %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPOFOMERGE]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPCHALLENGEACK %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPCHALLENGEACK]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPSYNCHALLENGE %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPSYNCHALLENGE]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPFASTOPENACTIVE %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPFASTOPENACTIVE]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPFASTOPENPASSIVE %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPFASTOPENPASSIVE]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPFASTOPENPASSIVEFAIL %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPFASTOPENPASSIVEFAIL]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPFASTOPENLISTENOVERFLOW %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPFASTOPENLISTENOVERFLOW]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPFASTOPENCOOKIEREQD %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPFASTOPENCOOKIEREQD]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_BUSYPOLLRXPACKETS %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_BUSYPOLLRXPACKETS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," LINUX_MIB_TCPAUTOCORKING %"PRIu64"\n",(unsigned long)p_mib->net_statistics[0]->mibs[LINUX_MIB_TCPAUTOCORKING]);

	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_RTOALGORITHM %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_RTOALGORITHM]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_RTOMIN %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_RTOMIN]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_RTOMAX %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_RTOMAX]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_MAXCONN %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_MAXCONN]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_ACTIVEOPENS %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_ACTIVEOPENS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_PASSIVEOPENS %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_PASSIVEOPENS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_ATTEMPTFAILS %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_ATTEMPTFAILS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_ESTABRESETS %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_ESTABRESETS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_CURRESTAB %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_CURRESTAB]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_INSEGS %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_INSEGS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_OUTSEGS %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_OUTSEGS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_RETRANSSEGS %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_RETRANSSEGS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_INERRS %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_INERRS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_OUTRSTS %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_OUTRSTS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," TCP_MIB_CSUMERRORS %"PRIu64"\n",(unsigned long)p_mib->tcp_statistics[0]->mibs[TCP_MIB_CSUMERRORS]);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," UDP_MIB_INDATAGRAMS %"PRIu64"\n",(unsigned long)p_mib->udp_statistics[0]->mibs[UDP_MIB_INDATAGRAMS]);
    	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," UDP_MIB_NOPORTS %"PRIu64"\n",(unsigned long)p_mib->udp_statistics[0]->mibs[UDP_MIB_NOPORTS]);
    	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," UDP_MIB_INERRORS %"PRIu64"\n",(unsigned long)p_mib->udp_statistics[0]->mibs[UDP_MIB_INERRORS]);
    	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," UDP_MIB_OUTDATAGRAMS %"PRIu64"\n",(unsigned long)p_mib->udp_statistics[0]->mibs[UDP_MIB_OUTDATAGRAMS]);
    	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," UDP_MIB_RCVBUFERRORS %"PRIu64"\n",(unsigned long)p_mib->udp_statistics[0]->mibs[UDP_MIB_RCVBUFERRORS]);
    	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," UDP_MIB_SNDBUFERRORS %"PRIu64"\n",(unsigned long)p_mib->udp_statistics[0]->mibs[UDP_MIB_SNDBUFERRORS]);
    	ipaugenblick_log(IPAUGENBLICK_LOG_INFO," UDP_MIB_CSUMERRORS %"PRIu64"\n",(unsigned long)p_mib->udp_statistics[0]->mibs[UDP_MIB_CSUMERRORS]);
}
/*this is called in non-data-path thread */
void print_user_stats()
{
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_on_tx_opportunity_called %"PRIu64"\n",user_on_tx_opportunity_called);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_on_tx_opportunity_api_nothing_to_tx %"PRIu64"user_on_tx_opportunity_socket_full %"PRIu64" \n",
                user_on_tx_opportunity_api_nothing_to_tx,user_on_tx_opportunity_socket_full);
        ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_kick_tx %"PRIu64" user_kick_rx %"PRIu64" user_kick_select_tx %"PRIu64" user_kick_select_rx %"PRIu64"\n",
                user_kick_tx,user_kick_rx,user_kick_select_tx,user_kick_select_rx);
        ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_on_tx_opportunity_cannot_send %"PRIu64"\n",user_on_tx_opportunity_cannot_send);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_on_tx_opportunity_socket_send_error %"PRIu64"\n",user_on_tx_opportunity_socket_send_error);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_on_tx_opportunity_cannot_get_buff %"PRIu64"\n",user_on_tx_opportunity_cannot_get_buff);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_on_tx_opportunity_getbuff_called %"PRIu64"\n",user_on_tx_opportunity_getbuff_called);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_on_tx_opportunity_api_failed %"PRIu64"\n",	user_on_tx_opportunity_api_failed);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_on_rx_opportunity_called %"PRIu64"\n",user_on_rx_opportunity_called);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_on_rx_opportunity_called_exhausted %"PRIu64"\n",user_on_rx_opportunity_called_exhausted);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_rx_mbufs %"PRIu64" user_rx_ring_full %"PRIu64"\n",user_rx_mbufs,user_rx_ring_full);
        ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_on_tx_opportunity_api_mbufs_sent %"PRIu64"\n",user_on_tx_opportunity_api_mbufs_sent);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_client_app_accepted %"PRIu64" user_pending_accept %"PRIu64"\n",user_client_app_accepted, user_pending_accept);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_sockets_closed %"PRIu64" user_sockets_shutdown %"PRIu64"\n",
	user_sockets_closed, user_sockets_shutdown);
	ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"user_flush_rx_cnt %"PRIu64" user_flush_tx_cnt %"PRIu64"\n",
	user_flush_rx_cnt, user_flush_tx_cnt);

}
static inline void process_commands()
{
    int ringset_idx;
    ipaugenblick_cmd_t *cmd;
    struct rte_mbuf *mbuf;
    struct socket *sock;
    char *p;
    struct sockaddr_in addr;
    struct sockaddr_in *p_sockaddr;
    struct rtentry rtentry;
    int len;

    cmd = ipaugenblick_dequeue_command_buf();
    if(!cmd)
        return;
    switch(cmd->cmd) {
        case IPAUGENBLICK_OPEN_SOCKET_COMMAND:
           ipaugenblick_log(IPAUGENBLICK_LOG_DEBUG,"open_sock %x %x %x %x\n",cmd->u.open_sock.family,cmd->u.open_sock.type);
           sock = app_glue_create_socket(cmd->u.open_sock.family,cmd->u.open_sock.type);
           if(sock) {
               ipaugenblick_log(IPAUGENBLICK_LOG_DEBUG,"setting user data %p\n",sock);
               socket_satelite_data[cmd->ringset_idx].ringset_idx = cmd->ringset_idx;
               socket_satelite_data[cmd->ringset_idx].parent_idx = cmd->parent_idx;
	       socket_satelite_data[cmd->ringset_idx].apppid = cmd->u.open_sock.pid;
               app_glue_set_user_data(sock,(void *)&socket_satelite_data[cmd->ringset_idx]);
               socket_satelite_data[cmd->ringset_idx].socket = sock;
	       ipaugenblick_log(IPAUGENBLICK_LOG_DEBUG,"%d setting tx_space %d\n",__LINE__,sk_stream_wspace(sock->sk));
	       user_set_socket_tx_space(&g_ipaugenblick_sockets[socket_satelite_data[cmd->ringset_idx].ringset_idx].tx_space,sk_stream_wspace(sock->sk));
           }
           ipaugenblick_log(IPAUGENBLICK_LOG_DEBUG,"Done\n");
           break;
	case IPAUGENBLICK_SOCKET_CONNECT_BIND_COMMAND:
           if(socket_satelite_data[cmd->ringset_idx].socket) { 
               if(cmd->u.socket_connect_bind.is_connect) {
			ipaugenblick_log(IPAUGENBLICK_LOG_DEBUG,"connect %x\n",cmd->ringset_idx);
		       if(app_glue_v4_connect(socket_satelite_data[cmd->ringset_idx].socket,
		   		     cmd->u.socket_connect_bind.ipaddr,
				     cmd->u.socket_connect_bind.port)) {
	                   ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"failed to connect socket\n");
        	       }
               	       else {
                   	   ipaugenblick_log(IPAUGENBLICK_LOG_DEBUG,"socket connected\n");
			   len = sizeof(addr);
			   inet_getname(socket_satelite_data[cmd->ringset_idx].socket,&addr,&len,0);
			   g_ipaugenblick_sockets[cmd->ringset_idx].local_ipaddr = addr.sin_addr.s_addr;
			   g_ipaugenblick_sockets[cmd->ringset_idx].local_port = addr.sin_port;
               	       } 
	       }
	       else {
			ipaugenblick_log(IPAUGENBLICK_LOG_DEBUG,"bind %x\n",cmd->ringset_idx);
		       if(app_glue_v4_bind(socket_satelite_data[cmd->ringset_idx].socket,
		   		     cmd->u.socket_connect_bind.ipaddr,
				     cmd->u.socket_connect_bind.port)) {
				ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"cannot bind %x %x\n",cmd->u.socket_connect_bind.ipaddr,cmd->u.socket_connect_bind.port);
			}
	       } 
           }
           else {
              ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"no socket to invoke command!!!\n");
           }
           break;
	case IPAUGENBLICK_LISTEN_SOCKET_COMMAND:
           ipaugenblick_log(IPAUGENBLICK_LOG_DEBUG,"listen %x\n",cmd->ringset_idx);
           if(app_glue_v4_listen(socket_satelite_data[cmd->ringset_idx].socket)) {
               ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"failed listening\n"); 
           }
           break;

        case IPAUGENBLICK_SOCKET_CLOSE_COMMAND:
           if(socket_satelite_data[cmd->ringset_idx].socket) {
//               ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"closing socket %d %p\n",cmd->ringset_idx,socket_satelite_data[cmd->ringset_idx].socket);
//	printf("%s %d %p\n",__FILE__,__LINE__,socket_satelite_data[cmd->ringset_idx].socket);
	//	user_on_transmission_opportunity(socket_satelite_data[cmd->ringset_idx].socket);
		user_flush_rx_tx((struct socket *)socket_satelite_data[cmd->ringset_idx].socket);
		app_glue_close_socket((struct socket *)socket_satelite_data[cmd->ringset_idx].socket);
		socket_satelite_data[cmd->ringset_idx].socket = NULL;
		socket_satelite_data[cmd->ringset_idx].ringset_idx = -1;
		socket_satelite_data[cmd->ringset_idx].parent_idx = -1;
		ipaugenblick_free_socket(cmd->ringset_idx);
		user_sockets_closed++;
           }
           break;
        case IPAUGENBLICK_SOCKET_TX_KICK_COMMAND:
           if(socket_satelite_data[cmd->ringset_idx].socket) {
               user_kick_tx++;
    //           user_data_available_cbk(socket_satelite_data[cmd->ringset_idx].socket);
               user_on_transmission_opportunity(socket_satelite_data[cmd->ringset_idx].socket);
           }
           break;
        case IPAUGENBLICK_SOCKET_RX_KICK_COMMAND:
           if(socket_satelite_data[cmd->ringset_idx].socket) {
               user_kick_rx++;
               user_data_available_cbk(socket_satelite_data[cmd->ringset_idx].socket);
      //         user_on_transmission_opportunity(socket_satelite_data[cmd->ringset_idx].socket);
           }
           break;
        case IPAUGENBLICK_SET_SOCKET_RING_COMMAND:
           //ipaugenblick_log(IPAUGENBLICK_LOG_DEBUG,"%s %d %d %d %p\n",__FILE__,__LINE__,cmd->ringset_idx,cmd->parent_idx,cmd->u.set_socket_ring.socket_descr);
           socket_satelite_data[cmd->ringset_idx].ringset_idx = cmd->ringset_idx;
	   if(cmd->parent_idx != -1)
	           socket_satelite_data[cmd->ringset_idx].parent_idx = cmd->parent_idx;
	   socket_satelite_data[cmd->ringset_idx].apppid = cmd->u.set_socket_ring.pid;
           app_glue_set_user_data(cmd->u.set_socket_ring.socket_descr,&socket_satelite_data[cmd->ringset_idx]);
           socket_satelite_data[cmd->ringset_idx].socket = cmd->u.set_socket_ring.socket_descr; 
	   //ipaugenblick_log(IPAUGENBLICK_LOG_DEBUG,"setting tx space: %d connidx %d\n",sk_stream_wspace(socket_satelite_data[cmd->ringset_idx].socket->sk),g_ipaugenblick_sockets[socket_satelite_data[cmd->ringset_idx].ringset_idx].connection_idx);
	   user_set_socket_tx_space(&g_ipaugenblick_sockets[socket_satelite_data[cmd->ringset_idx].ringset_idx].tx_space,sk_stream_wspace(socket_satelite_data[cmd->ringset_idx].socket->sk));
//           user_on_transmission_opportunity(socket_satelite_data[cmd->ringset_idx].socket);
           user_data_available_cbk(socket_satelite_data[cmd->ringset_idx].socket);
	   ipaugenblick_mark_writable(&socket_satelite_data[cmd->ringset_idx]);
	   ipaugenblick_mark_readable(&socket_satelite_data[cmd->ringset_idx]);
	   user_client_app_accepted++;
           break;
        case IPAUGENBLICK_SET_SOCKET_SELECT_COMMAND:
//           ipaugenblick_log(IPAUGENBLICK_LOG_DEBUG,"setting selector %d for socket %d\n",cmd->u.set_socket_select.socket_select,cmd->ringset_idx);
           socket_satelite_data[cmd->ringset_idx].parent_idx = cmd->u.set_socket_select.socket_select;
	   socket_satelite_data[cmd->ringset_idx].apppid = cmd->u.set_socket_select.pid;
	   user_data_available_cbk(socket_satelite_data[cmd->ringset_idx].socket);
           ipaugenblick_mark_writable(&socket_satelite_data[cmd->ringset_idx]);
	   ipaugenblick_mark_readable(&socket_satelite_data[cmd->ringset_idx]);
           break;
        case IPAUGENBLICK_SOCKET_TX_POOL_EMPTY_COMMAND:
           if(socket_satelite_data[cmd->ringset_idx].socket) {
               if(!socket_satelite_data[cmd->ringset_idx].socket->buffers_available_notification_queue_present) {
                   TAILQ_INSERT_TAIL(&buffers_available_notification_socket_list_head,socket_satelite_data[cmd->ringset_idx].socket,buffers_available_notification_queue_entry);
                   socket_satelite_data[cmd->ringset_idx].socket->buffers_available_notification_queue_present = 1;
		   if(socket_satelite_data[cmd->ringset_idx].socket->type == SOCK_DGRAM)
		   	user_set_socket_tx_space(&g_ipaugenblick_sockets[socket_satelite_data[cmd->ringset_idx].ringset_idx].tx_space,sk_stream_wspace(socket_satelite_data[cmd->ringset_idx].socket->sk));
               }
           }
           break;
	case IPAUGENBLICK_ROUTE_ADD_COMMAND:
   	   memset((void *)&rtentry,0,sizeof(rtentry));
	   rtentry.rt_metric = cmd->u.route.metric;
	   rtentry.rt_flags = RTF_UP|RTF_GATEWAY;
	   p_sockaddr = (struct sockaddr_in *)&rtentry.rt_dst;
	   p_sockaddr->sin_family = AF_INET;
           p_sockaddr->sin_addr.s_addr = cmd->u.route.dest_ipaddr;
	   p_sockaddr = (struct sockaddr_in *)&rtentry.rt_gateway;
	   p_sockaddr->sin_family = AF_INET;
           p_sockaddr->sin_addr.s_addr = cmd->u.route.next_hop;
	   p_sockaddr = (struct sockaddr_in *)&rtentry.rt_genmask;
	   p_sockaddr->sin_family = AF_INET;
           p_sockaddr->sin_addr.s_addr = cmd->u.route.dest_mask;
	   if(ip_rt_ioctl(&init_net,SIOCADDRT,&rtentry)) {
		ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"CANNOT ADD ROUTE ENTRY %x %x %x\n",
			((struct sockaddr_in *)&rtentry.rt_dst)->sin_addr.s_addr,
			((struct sockaddr_in *)&rtentry.rt_gateway)->sin_addr.s_addr,
			((struct sockaddr_in *)&rtentry.rt_genmask)->sin_addr.s_addr);
	   }
	   else {
		ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"ROUTE ENTRY %x %x %x is added\n",
			((struct sockaddr_in *)&rtentry.rt_dst)->sin_addr.s_addr,
			((struct sockaddr_in *)&rtentry.rt_gateway)->sin_addr.s_addr,
			((struct sockaddr_in *)&rtentry.rt_genmask)->sin_addr.s_addr);
	   }
	   break;
    	case IPAUGENBLICK_ROUTE_DEL_COMMAND:
	   memset((void *)&rtentry,0,sizeof(rtentry));
	   p_sockaddr = (struct sockaddr_in *)&rtentry.rt_dst;
	   p_sockaddr->sin_family = AF_INET;
           p_sockaddr->sin_addr.s_addr = cmd->u.route.dest_ipaddr;
	   p_sockaddr = (struct sockaddr_in *)&rtentry.rt_gateway;
	   p_sockaddr->sin_family = AF_INET;
           p_sockaddr->sin_addr.s_addr = cmd->u.route.next_hop;
	   p_sockaddr = (struct sockaddr_in *)&rtentry.rt_genmask;
	   p_sockaddr->sin_family = AF_INET;
           p_sockaddr->sin_addr.s_addr = cmd->u.route.dest_mask;
	   if(ip_rt_ioctl(&init_net,SIOCDELRT,&rtentry)) {
		ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"CANNOT DELETE ROUTE ENTRY %x %x %x\n",
			((struct sockaddr_in *)&rtentry.rt_dst)->sin_addr.s_addr,
			((struct sockaddr_in *)&rtentry.rt_gateway)->sin_addr.s_addr,
			((struct sockaddr_in *)&rtentry.rt_genmask)->sin_addr.s_addr);
	   }
	   else {
		ipaugenblick_log(IPAUGENBLICK_LOG_INFO,"ROUTE ENTRY %x %x %x is deleted\n",
			((struct sockaddr_in *)&rtentry.rt_dst)->sin_addr.s_addr,
			((struct sockaddr_in *)&rtentry.rt_gateway)->sin_addr.s_addr,
			((struct sockaddr_in *)&rtentry.rt_genmask)->sin_addr.s_addr);
	   }
	   break;
	case IPAUGENBLICK_CONNECT_CLIENT:
	   if(cmd->ringset_idx >= IPAUGENBLICK_CLIENTS_POOL_SIZE) {
		break;
	   }
	   if(!ipaugenblick_clients[cmd->ringset_idx].is_busy) {
	   	TAILQ_INSERT_TAIL(&ipaugenblick_clients_list_head,&ipaugenblick_clients[cmd->ringset_idx],queue_entry);
		ipaugenblick_clients[cmd->ringset_idx].is_busy = 1;
		on_client_connect(cmd->ringset_idx);
	   }
	   break;
	case IPAUGENBLICK_DISCONNECT_CLIENT:
	   if(cmd->ringset_idx >= IPAUGENBLICK_CLIENTS_POOL_SIZE) {
		break;
	   }
	   if(ipaugenblick_clients[cmd->ringset_idx].is_busy) {
	   	TAILQ_REMOVE(&ipaugenblick_clients_list_head,&ipaugenblick_clients[cmd->ringset_idx],queue_entry);
		ipaugenblick_clients[cmd->ringset_idx].is_busy = 0;
	   }
	   break;
	case IPAUGENBLICK_SETSOCKOPT_COMMAND:
	   if(socket_satelite_data[cmd->ringset_idx].socket) { 
	   	sock_setsockopt(socket_satelite_data[cmd->ringset_idx].socket, cmd->u.setsockopt.level, cmd->u.setsockopt.optname, cmd->u.setsockopt.optval, cmd->u.setsockopt.optlen);
	   }
	   break;
	case IPAUGENBLICK_SOCKET_SHUTDOWN_COMMAND:
	   if(socket_satelite_data[cmd->ringset_idx].socket) {
		inet_shutdown(socket_satelite_data[cmd->ringset_idx].socket, cmd->u.socket_shutdown.how);
		user_sockets_shutdown++;
	   }
	   break;
	case IPAUGENBLICK_SOCKET_DECLINE_COMMAND:
	   user_flush_rx_tx((struct socket *)cmd->u.socket_decline.socket_descr);
	   app_glue_close_socket((struct socket *)cmd->u.socket_decline.socket_descr);
	   user_sockets_closed++;
	   break;
        default:
           ipaugenblick_log(IPAUGENBLICK_LOG_ERR,"unknown cmd %d\n",cmd->cmd);
           break;
    }
    ipaugenblick_free_command_buf(cmd);
}