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; }
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); }
/* * 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; }
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; }
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; }
/* * 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); }
/* * 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); }
/* * 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; }
/* * 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; } } } }
/* * 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++; }
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); }