Ejemplo n.º 1
0
/**
 * @brief linkstatd -- monitor interface status
 *
 * @param link_up   [in] callback when link up
 * @param link_down [in] callback when link down
 *
 * @return 0, if succ; -1, if failed
 */
int linkstatd(void (*link_up)(const char *ifname), void (*link_down)(const char *ifname))
{
    int fd = -1;
    char ifname[64] = {0};
    char msg[1024] = {0};
    struct sockaddr_nl sa = {0};
    struct ifinfomsg *ifi = NLMSG_DATA(msg);

    sa.nl_family = AF_NETLINK;
    sa.nl_groups = RTMGRP_LINK;

    if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE)) < 0)
        perror("linkstatd socket create");
    
    socket_bind(fd, (struct sockaddr *)&sa);

    while (read(fd, msg, sizeof(msg)))
    {
        if_indextoname(ifi->ifi_index, ifname);
        if (ifi->ifi_flags & IFF_RUNNING)
        {
            if (link_up != NULL) link_up(ifname);
        }
        else 
        {
            if (link_up != NULL) link_down(ifname);
        }
    }

    return 0;
}
Ejemplo n.º 2
0
// process any channel timeouts based on the current/given time
link_t link_process(link_t link, uint32_t now)
{
  if(!link || !now) return LOG("bad args");
  link->chans = link_process_chan(link->chans, now);
  if(link->csid) return link;

  // flagged to remove, do that now
  link_down(link);
  link_free(link);
  return NULL;
}
void handle_input(char *input, char *itc_file , int node_id)
{

      int quit_len;
      char *inp_ptr; 
      pthread_t thread;  
      int srv_len  = strlen("start_service");
      int exit_len = strlen("exit");   
      int stop_srv_len  = strlen("stop_service"); 
      int connect_len  = strlen("connect");
      int download_len = strlen("download");
      int dump_len    = strlen("route_table");
      int set_gar_len  =  strlen("set_garbler");
      int link_up_len   = strlen("link_up"); 
      int link_down_len  = strlen("link_down");  
      char file_name[NAME_MAX];
      int max_connections; 
      char *app_buffer= (char *)malloc(APP_HEADER_SIZE);
      int code;  
      int dest_node;
      int window_size;    

        

      quit_len  = strlen("quit");
      inp_ptr   = input; 
      srand(time(NULL));   
      if ( strncmp(input,"quit",quit_len) == 0 )
      {
            printf("\n Quiting ...  \n"); 
            exit(EXIT_SUCCESS);  

      }
      if ( strncmp(input,"exit",exit_len) == 0 )
      {
            printf("\n Quiting ...  \n"); 
            exit(EXIT_SUCCESS);  

      } 
      if ( strncmp(input,"start_service",srv_len) == 0 )
      {
            printf("\n Starting Server Thread : SID  = %d \n"  , rand()% 10000 );  
            inp_ptr += srv_len ;
	    sscanf(inp_ptr,"%d", &max_connections); 
            printf("\n Max connections = %d \n" , max_connections ); 
	    init_state(&__max_connections); 
	    set_state(&__max_connections,max_connections);
	    handle_start_server(itc_file , node_id , inp_ptr , &thread);   
      }     
      if ( strncmp(input,"stop_service",stop_srv_len) == 0 )
      {
           printf("\n  stoping the serivce  ... \n");      
           pthread_cancel(thread);     

      }	      
      if ( strncmp(input,"connect",connect_len) == 0)
      {

              
	      inp_ptr +=  connect_len;
	      sscanf(inp_ptr,"%d",&dest_node);
	      sscanf(inp_ptr,"%d",&window_size);          
	      nfd_send_buffer_transport("Donkey!" ,8,2); 

      
      }   
      if ( strncmp(input,"route_table",dump_len) == 0)
      {
           dump_route_table();    
	   printf("\n Route table dumped to file \n");  
      }
      if ( strncmp(input,"link_up",link_up_len) == 0)
      {
	   inp_ptr+=link_up_len;    
           sscanf(inp_ptr,"%d",&dest_node);  
	   link_up(dest_node); 
	   printf("\n Link upped :) \n");  
      }
      if ( strncmp(input,"link_down",link_down_len) == 0)
      {
           inp_ptr += link_down_len; 
           sscanf(inp_ptr,"%d",&dest_node); 	   
           link_down(dest_node); 
	   printf("\n Link downed!\n");  
      }
      if ( strncmp(input,"download",download_len) == 0 )
      {

	     inp_ptr += download_len;  
             sscanf(inp_ptr , "%d%s" , &dest_node , file_name); 
             code = CODE_GET ; 	     
	     pack_into_packet(app_buffer, CODE_OFFSET , &code , CODE_SIZE); 
             pack_into_packet(app_buffer ,FILENAME_OFFSET , file_name , strlen(file_name) +1 );
	     printf("\n Currnet node = %d "  , __current_node );
	     pack_into_packet(app_buffer , SRC_ID_OFFSET , &__current_node , SRC_ID_SIZE);
	     nfd_send_buffer_transport(app_buffer,APP_HEADER_SIZE,dest_node); 

      }  
      if ( strncmp(input,"set_garbler",set_gar_len) == 0)
      {

              
	      inp_ptr +=  connect_len;
	      sscanf(inp_ptr,"%d%d",&__loss_frac , &__corr_fact);
	      fprintf(stderr ,"\n garbler charecteristics set ... \n");         

      
      }
}