Beispiel #1
0
int c_brem(w_coord wcoord, b_coord bcoord) {

    server_socket *dst;

    n_coord ncoord;

    void *p;
    lt_packet out_packet;

    client_func_checks();

    ncoord = wcoord_to_ncoord(wcoord);

    dst = find_neighbor(ncoord);

    if (!dst) return 0;

    makepacket(&out_packet, T_BREM);
    p = &out_packet.payload;

    if (!put_wx(&p, wcoord.x, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_wy(&p, wcoord.y, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_wz(&p, wcoord.z, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_bx(&p, bcoord.x, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_by(&p, bcoord.y, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_bz(&p, bcoord.z, &PLength(&out_packet), &PArgc(&out_packet))) return 1;

    return (sendpacket(dst, &out_packet));

}
Beispiel #2
0
int c_lusers() {

    lt_packet out_packet;

    client_func_checks();

    makepacket(&out_packet, T_LUSERS);
    return (sendpacket(neighbor_table[1][1][1], &out_packet));

}
Beispiel #3
0
int c_p_empty(void) {

    lt_packet out_packet;

    client_func_checks();

    makepacket(&out_packet, T_P);

    return (sendpacket(neighbor_table[1][1][1], &out_packet));

}
Beispiel #4
0
int c_sc(int32_t csid) {

    void *p;
    lt_packet out_packet;

    client_func_checks();

    makepacket(&out_packet, T_SC);
    p = &out_packet.payload;

    if (!put_csid(&p, csid, &PLength(&out_packet), &PArgc(&out_packet))) return 1;

    return (sendpacket(neighbor_table[1][1][1], &out_packet));

}
Beispiel #5
0
int c_schat(const char *schat_text) {

    void *p;
    lt_packet out_packet;

    client_func_checks();

    makepacket(&out_packet, T_SCHAT);
    p = &out_packet.payload;

    if (schat_text)
        put_chat(&p, schat_text, &PLength(&out_packet), &PArgc(&out_packet));

    return sendpacket(neighbor_table[1][1][1], &out_packet);

}
Beispiel #6
0
int c_pmine(int mining) {

    void *p;
    lt_packet out_packet;

    client_func_checks();

    lattice_player.mining = mining ? 1 : 0;

    makepacket(&out_packet, T_PMINE);
    p = &out_packet.payload;

    if (!put_mining(&p, mining ? 1 : 0, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    return (sendpacket(neighbor_table[1][1][1], &out_packet));

}
Beispiel #7
0
int c_action(const char *action_text) {

    void *p;
    lt_packet out_packet;

    client_func_checks();

    makepacket(&out_packet, T_ACTION);
    p = &out_packet.payload;

    if (action_text)
        put_action(&p, action_text, &PLength(&out_packet), &PArgc(&out_packet));

    return sendpacket(neighbor_table[1][1][1], &out_packet);

}
Beispiel #8
0
int c_pc(uint32_t color) {

    void *p;
    lt_packet out_packet;

    client_func_checks();

    lattice_player.usercolor = color;

    makepacket(&out_packet, T_PC);
    p = &out_packet.payload;
    if (!put_usercolor(&p, color, &PLength(&out_packet), &PArgc(&out_packet))) return 1;

    return (sendpacket(neighbor_table[1][1][1], &out_packet));

}
Beispiel #9
0
int c_quit(const char *reason) {

    void *p;
    lt_packet out_packet;

    client_func_checks();

    makepacket(&out_packet, T_QUIT);
    p = &out_packet.payload;

    if (reason)
        put_quitreason(&p, reason, &PLength(&out_packet), &PArgc(&out_packet));

    return sendpacket(neighbor_table[1][1][1], &out_packet);

}
Beispiel #10
0
int c_ph(hand_hold hand) {

    void *p;
    lt_packet out_packet;

    client_func_checks();

    lattice_player.hhold = hand;

    makepacket(&out_packet, T_PH);
    p = &out_packet.payload;
    if (!put_item_id(&p, hand.item_id, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_item_type(&p, hand.item_type, &PLength(&out_packet), &PArgc(&out_packet))) return 1;

    return (sendpacket(neighbor_table[1][1][1], &out_packet));

}
Beispiel #11
0
int c_pr(head_rot rot) {

    void *p;
    lt_packet out_packet;

    client_func_checks();

    lattice_player.hrot = rot;

    makepacket(&out_packet, T_PR);
    p = &out_packet.payload;
    if (!put_xrot(&p, rot.xrot, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_yrot(&p, rot.yrot, &PLength(&out_packet), &PArgc(&out_packet))) return 1;

    return (sendpacket(neighbor_table[1][1][1], &out_packet));

}
Beispiel #12
0
int c_pchat(uint32_t uid, const char *chat_text) {

    void *p;
    lt_packet out_packet;

    client_func_checks();

    makepacket(&out_packet, T_PCHAT);
    p = &out_packet.payload;

    if (!put_uid(&p, uid, &PLength(&out_packet), &PArgc(&out_packet))) return 1;

    if (chat_text)
        put_chat(&p, chat_text, &PLength(&out_packet), &PArgc(&out_packet));

    return sendpacket(neighbor_table[1][1][1], &out_packet);


}
Beispiel #13
0
int c_bo(w_coord wcoord, b_coord bcoord, int32_t id) {

    void *p;
    lt_packet out_packet;

    client_func_checks();

    makepacket(&out_packet, T_BO);
    p = &out_packet.payload;

    if (!put_wx(&p, wcoord.x, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_wy(&p, wcoord.y, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_wz(&p, wcoord.z, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_bx(&p, bcoord.x, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_by(&p, bcoord.y, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_bz(&p, bcoord.z, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
    if (!put_boid(&p, id, &PLength(&out_packet), &PArgc(&out_packet))) return 1;

    return (sendpacket(neighbor_table[1][1][1], &out_packet));

}
Beispiel #14
0
int c_p(w_coord wcoord, b_coord bcoord) {

    server_socket *s;
    w_coord oldwcoord;
    int x;
    int y;
    int z;
    n_coord newcenter;
    void *p;
    lt_packet out_packet;

    lattice_message mess;
    lattice_bump submess;

    client_func_checks();

    oldwcoord = lattice_player.wpos;

    newcenter = wcoord_to_ncoord(wcoord);

    if (!find_neighbor(newcenter)) {
        if (!lattice_player.last_p_oob) {
            mess.type = T_BUMP;
            ClrFlagFrom(&mess);
            mess.fromuid = 0;
            mess.length = sizeof submess;
            mess.args = &submess;
            submess.wcoord = lattice_player.wpos;
            submess.bcoord = lattice_player.bpos;
            submess.bad_wcoord = wcoord;
            submess.bad_bcoord = bcoord;
            (*gcallback)(&mess);
        }
        lattice_player.last_p_oob = 1;
        return 0;
    }

    lattice_player.last_p_oob = 0;
    lattice_player.wpos = wcoord;
    lattice_player.bpos = bcoord;

    if (user_is_within_outer_border(lattice_player.wpos, lattice_player.centeredon)) {
        // we are within the centered servers outer border
        for (x=0;x<3;x++)
        for (y=0;y<3;y++)
        for (z=0;z<3;z++) {
            if ((s=neighbor_table[x][y][z])) {
                if (user_is_within_outer_border(lattice_player.wpos, s->coord)) {
                    // we need to relay the P
                    makepacket(&out_packet, T_P);
                    p = &out_packet.payload;
                    if (!put_wx(&p, wcoord.x, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
                    if (!put_wy(&p, wcoord.y, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
                    if (!put_wz(&p, wcoord.z, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
                    if (!put_bx(&p, bcoord.x, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
                    if (!put_by(&p, bcoord.y, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
                    if (!put_bz(&p, bcoord.z, &PLength(&out_packet), &PArgc(&out_packet))) return 1;
                    sendpacket(s, &out_packet);
                    //sendto_one(s, "P %d %d %d %d %d %d\n", wcoord.x, wcoord.y, wcoord.z, bcoord.x, bcoord.y, bcoord.z);
                } else {
                    // need to ENDP if we are walking away
                    if (user_is_within_outer_border(oldwcoord, s->coord)) {
                        makepacket(&out_packet, T_ENDP);
                        sendpacket(s, &out_packet);
                        //sendto_one(s, "ENDP\n");
                    }
                }
            }
        }
    } else {
        // we need to recenter to the neighboring server

        packet_recenter_neighbors(newcenter);

    }

    return 0;

}
int main(int argc,char *argv[])
{
FILE *rm;
char *save;
char *tokens;
int timeval;
unsigned int packetsize=0;
int x,y;
char buffer[5000];
char recvbuffer[68];
char str[20];
char filename[30];

int sockfd;
struct addrinfo hints, *servinfo, *p;
void *addr;
int rv;
int numbytes;
int rvdbytes;
struct sockaddr_storage their_addr;
socklen_t addr_len;
char ipstr[INET6_ADDRSTRLEN];
char s[INET6_ADDRSTRLEN];
fd_set master;   
fd_set readfds;
int mm,sel;
struct sockaddr_in b;
char arg1[10],arg2[10],arg3[30],arg4[5],arg5[5]; //for sscanf
uint16_t cost;
int16_t recvdonemorepacket;

struct token pc[50];                //for strtok
struct details neigh[10];           //to store neighbour details
struct message revddata[10];        //structure to store the message
struct message sendmsg[10];         // structure to send the message
struct dv dv1[10];                  //to maintain the routing table


//getting the timout value from the startup command
timeval=atoi(argv[4]);

//initialising 
for(x=0;x<=4;x++)
 {
  
    dv1[x].cost=0xffff;
    neigh[x].cost=0xffff;
    neigh[x].expire=3*timeval;
    sendmsg[x].h=0x0;
   
 }
 
if(argc<5)
{
fflush(stdout);
printf("please follow the syntax \n");
return 1;
}

if((strcmp(argv[1],"-t") != 0) && (strcmp(argv[3],"-i") != 0))
{
fflush(stdout);
printf("please specify the update interval \n");
return 1;
}

 //reading topology file
 strcpy(filename,argv[2]);
 rm = fopen(filename, "r");
 if(rm<=0)
 {
 fflush(stdout);
 printf("error opening the file \n");
 }
 while (!feof(rm)) 
   {
    fread(buffer, 1, (sizeof buffer)-1, rm);
    tokens = strtok_r(buffer, " \n", &save); 
    int count = 0;
    while (tokens != NULL) 
   {
        strcpy(str,tokens);
        strcpy(pc[count].arguments,tokens);
        count++;
        tokens = strtok_r(NULL, " \n", &save);
    }
   
  }
  
  //copying from topology file to variables
  dv1[0].n=atoi(pc[0].arguments);
  dv1[0].nongh = atoi(pc[1].arguments);
  neigh[0].id = atoi(pc[2].arguments);
  
  inet_pton(AF_INET,pc[3].arguments,&b.sin_addr);
  memcpy(&neigh[0].nip,&b.sin_addr,sizeof(b.sin_addr));
  
  neigh[0].nport = atoi(pc[4].arguments);
  neigh[1].id = atoi(pc[5].arguments);
  
  inet_pton(AF_INET,pc[6].arguments,&b.sin_addr);
  memcpy(&neigh[1].nip,&b.sin_addr,sizeof(b.sin_addr));
   
  neigh[1].nport = atoi(pc[7].arguments);
  neigh[2].id = atoi(pc[8].arguments);
  neigh[2].nip= atoi(pc[9].arguments);
  inet_pton(AF_INET,pc[9].arguments,&b.sin_addr);
  memcpy(&neigh[2].nip,&b.sin_addr,sizeof(b.sin_addr));
  neigh[2].nport = atoi(pc[10].arguments);
  neigh[3].id = atoi(pc[11].arguments);
  
  inet_pton(AF_INET,pc[12].arguments,&b.sin_addr);
  memcpy(&neigh[3].nip,&b.sin_addr,sizeof(b.sin_addr));
  neigh[3].nport = atoi(pc[13].arguments);
  neigh[4].id = atoi(pc[14].arguments);
  
  inet_pton(AF_INET,pc[15].arguments,&b.sin_addr);
  memcpy(&neigh[4].nip,&b.sin_addr,sizeof(b.sin_addr));
  neigh[4].nport= atoi(pc[16].arguments);
   

 //initialised
 neigh[0].updatefields=dv1[0].n;
 dv1[0].hopto =neigh[0].id;
 dv1[1].hopto =neigh[1].id;
 dv1[2].hopto =neigh[2].id;
 dv1[3].hopto =neigh[3].id;
 dv1[4].hopto =neigh[4].id;


//cost
  int i=0;
  for(i=0;i<=4;i++)
  {
  if((neigh[i].id == atoi(pc[17].arguments)) || (neigh[i].id == atoi(pc[20].arguments)) || (neigh[i].id == atoi(pc[23].arguments)) || (neigh[i].id == atoi(pc[26].arguments))||(neigh[i].id == atoi(pc[29].arguments)))
   {
   neigh[i].cost=0;
   dv1[0].presentnode=neigh[i].id;
   dv1[0].presentip=neigh[i].nip;
  }
  
  if(neigh[i].id == atoi(pc[18].arguments))
  {
   neigh[i].cost = atoi(pc[19].arguments);
   }
  if(neigh[i].id == atoi(pc[21].arguments))
  {
    neigh[i].cost = atoi(pc[22].arguments);
   }
  if(neigh[i].id == atoi(pc[24].arguments))
  {
    neigh[i].cost = atoi(pc[25].arguments);
   }
   if (neigh[i].id == atoi(pc[27].arguments))
   {
    neigh[i].cost = atoi(pc[28].arguments);
   }
   if (neigh[i].id == atoi(pc[30].arguments))
  {
    neigh[i].cost = atoi(pc[31].arguments);
  }
  }//for

 //cpoying the details to the distance vector table
 for(i=0;i<dv1[0].n;i++)
 {  
 dv1[i].sid=neigh[i].id;
 dv1[i].cost=neigh[i].cost;
 dv1[i].ip=neigh[i].nip;
 dv1[i].port=neigh[i].nport;
 }//for

//reference to beej
//socket
int portn;
int16_t z=0;
for(z=0;z<dv1[0].n;z++)
{
if(dv1[0].presentnode==z)
{
portn=neigh[z-1].nport;
}
}
char portno[5];
sprintf(portno,"%d",portn);
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // set to AF_INET to force IPv4
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE; // use my IP
if ((rv = getaddrinfo(NULL, portno, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}
// loop through all the results and bind to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror("listener: socket");
continue;
}
if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
close(sockfd);
perror("listener: bind");
continue;
}
break;
}


if (p == NULL) {
fprintf(stderr, "listener: failed to bind socket STEP\n");
return 1;
}

freeaddrinfo(servinfo);


for(;;)
{
 
 FD_ZERO(&master);
 FD_ZERO(&readfds);
 FD_SET(sockfd,&master);
 FD_SET(0,&master);
 readfds = master;
mm=sockfd;

struct timeval time;
time.tv_sec=timeval;
sel =  select((mm+1),&master,NULL,NULL,&time); //reference to recitation material

 //to send an update after every timeout to its neighbouring nodes
 if(sel < 0)      
 {
 fprintf(stdout,"\n couldnt select");
 fflush(stdout);
 return 1;
 }
 
 //after timeout
 if(sel==0)                       //reference to recitation material
 {
 fflush(stdout);
 printf("\ntimed out");
 fflush(stdout);
 for(i=0;i<dv1[0].n;i++)
 {
  if(neigh[i].expire !=0)
  {
  neigh[i].expire =neigh[i].expire-timeval;
  }
 
  if(neigh[i].id == dv1[0].presentnode)
    neigh[i].expire = 0;
  
  if(neigh[i].expire == 0 && neigh[i].id != dv1[0].presentnode)
  {
  neigh[i].cost = 0xffff;
  }
 
 }//for


 //copying the neighbour details into the routing table
 for(i=0;i<dv1[0].n;i++)
 {  
 dv1[i].sid=neigh[i].id;
 dv1[i].cost=neigh[i].cost;
 dv1[i].ip=neigh[i].nip;
 dv1[i].port=neigh[i].nport;
 }//for
 makepacket(dv1,sendmsg,neigh,portn);
 }//if

//if a packet is received
if(FD_ISSET(sockfd,&master))  //reference to beej
{

int rvdbytes;
struct sockaddr_storage their_addr;
socklen_t addr_len;
char s[INET6_ADDRSTRLEN];

addr_len=sizeof(their_addr);
addr_len = sizeof their_addr;

if ((rvdbytes = recvfrom(sockfd, recvbuffer, sizeof(recvbuffer) , 0,(struct sockaddr *)&their_addr, &addr_len)) == -1) 
  {
  perror("recvfrom");
  exit(1);
  }
else
  recvdonemorepacket+=1;


//deserialization //reference to beej
unpack(recvbuffer,"hhllhhhhlhhhhlhhhhlhhhhlhhhh",&revddata[0].noofupdate,&revddata[0].senderport,&revddata[0].senderip,&revddata[0].ip,&revddata[0].port,&revddata[0].h,&revddata[0].id,&revddata[0].cost,&revddata[1].ip,&revddata[1].port,&revddata[1].h,&revddata[1].id,&revddata[1].cost,&revddata[2].ip,&revddata[2].port,&revddata[2].h,&revddata[2].id,&revddata[2].cost,&revddata[3].ip,&revddata[3].port,&revddata[3].h,&revddata[3].id,&revddata[3].cost,&revddata[4].ip,&revddata[4].port,&revddata[4].h,&revddata[4].id,&revddata[4].cost);


//to display the received message on the receiver side
for(i=0;i<dv1[0].n;i++)
{
if(neigh[i].nip==revddata[0].senderip)
{
fflush(stdout);
printf("\n RECEIVED A MESSAGE FROM SERVER <%d>",neigh[i].id);
neigh[i].expire=3*timeval;
}
 int j=0;
  for(j=0;j<dv1[0].n;j++)
  {
 if(revddata[0].senderip==neigh[i].nip)
  {
   if(dv1[0].presentip == neigh[j].nip)
    {
     if(neigh[i].cost>revddata[j].cost)
       neigh[i].cost = revddata[j].cost;
     }//if
  }//if i
 }//for j
 }//for i

//copying the neigh details to the distance vector
 for(i=0;i<dv1[0].n;i++)
 {  
 dv1[i].sid=neigh[i].id;
 dv1[i].cost=neigh[i].cost;
 dv1[i].ip=neigh[i].nip;
 dv1[i].port=neigh[i].nport;
 }//for

updaterouting(dv1,sendmsg,revddata,neigh);
}//fdisset sock

else if(sel>0)   //reference to beej
{
//user command
if(FD_ISSET(0,&master))
{ 
fflush(stdin);
fgets(buffer,150,stdin);
sscanf(buffer,"%s %s %s %s %s",arg1,arg2,arg3,arg4,arg5);
fflush(stdout);
if(strcmp(arg1,"update") == 0)
 {
    
  char prst[5];
  char st[INET6_ADDRSTRLEN];
  struct sockaddr_in g;
  char portno[5];
  sprintf(prst,"%d",dv1[0].presentnode);
  if(strcmp(prst,arg2)==0)
  {
   int i=0;
   for(i=0;i<dv1[0].n;i++)
    {
    char nei[5];
    int16_t packetsize=0;
    int16_t h=0x0;
     sprintf(nei,"%d",neigh[i].id);
    if(strcmp(nei,arg3)==0 && neigh[i].cost != 0xffff)
     { 
      uint8_t bufr[68];
      if(strcmp(arg4,"inf")==0 || strcmp(arg4,"INF")==0 )
         neigh[i].cost=0xffff;
        
    
      else
        
         neigh[i].cost=atoi(arg4);
     
  
   
   packetsize=pack(bufr,"hhllhhhhlhhhhlhhhhlhhhhlhhhh",neigh[0].updatefields,portn,dv1[0].presentip,neigh[0].nip,neigh[0].nport,h,neigh[0].id,neigh[0].cost,neigh[1].nip,neigh[1].nport,h,neigh[1].id,neigh[1].cost,neigh[2].nip,neigh[2].nport,h,neigh[2].id,neigh[2].cost,neigh[3].nip,neigh[3].nport,h,neigh[3].id,neigh[3].cost,neigh[4].nip,neigh[4].nport,h,neigh[4].id,neigh[4].cost); //reference to beej
   
    
    memcpy(&g.sin_addr,&neigh[i].nip,sizeof(details));
    inet_ntop(AF_INET,&g.sin_addr,st,INET_ADDRSTRLEN);
   
  
  //reference to beej
  //UDP socket to send packets
   sprintf(portno,"%d",neigh[i].nport);
   memset(&hints, 0, sizeof hints);
   hints.ai_family = AF_UNSPEC;
   hints.ai_socktype = SOCK_DGRAM;
   if ((rv = getaddrinfo(st, portno, &hints, &servinfo)) != 0)
   {
   fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
   return 1;
   }
   // loop through all the results and make a socket
   for(p = servinfo; p != NULL; p = p->ai_next)
   {
   if ((sockfd = socket(p->ai_family, p->ai_socktype,p->ai_protocol)) == -1) 
   {
   perror("talker: socket");
   continue;
   }
   break;
   }
   if (p == NULL) 
   {
   fprintf(stderr, "talker: failed to bind socket STEP\n");
   return 2;
   }

   if ((numbytes = sendto(sockfd, bufr, sizeof(bufr), 0,p->ai_addr, p->ai_addrlen)) == -1)
   {
    perror("talker: sendto");
    exit(1);
   }  
   else{
    fflush(stdout);
    printf("update SUCCESS \n");
    }
   }// ifarg3
   }//for
  
  for(i=0;i<dv1[0].n;i++)
  {
  if(atoi(arg3) == neigh[i].id)
  {
   if(neigh[i].cost == 0xffff){
       fflush(stdout);
       printf(" \n UPDATE server is not my neighbour %d \n",neigh[i].id);
         }
  }
  }  
   
     
   }//if arg2
  
 //copying the neigh details to the distance vector
 for(i=0;i<dv1[0].n;i++)
 {  
 dv1[i].sid=neigh[i].id;
 dv1[i].cost=neigh[i].cost;
 dv1[i].ip=neigh[i].nip;
 dv1[i].port=neigh[i].nport;
 }//for
  
 }//if update

 if(strcmp(arg1,"step")==0)
  {
  makepacket(dv1,sendmsg,neigh,portn);
  fflush(stdout);
  printf("\n step SUCCESS");
   if(arg2 !=0)
    printf("\n 'step' please follow the command format");
  //sendupdate();
  }

 if(strcmp(arg1,"display")==0)
  {printf("\nid\tdest\thop\tcost\t\n");
  for(i=0;i<dv1[0].n;i++)
  { fflush(stdout);
    printf("\n%d\t%d\t%d\t%d\t\n",dv1[0].presentnode,dv1[i].sid,dv1[i].hopto,dv1[i].cost);
   }
   fflush(stdout);
   printf("display SUCCESS \n");
   
  }

 if(strcmp(arg1,"crash")==0)
 {
  fflush(stdout);
  printf("\n CRASH SUCCESS \n");
  close(sockfd);
 }
if(strcmp(arg1,"disable")==0)
{
  
  for(i=0;i<dv1[0].n;i++)
  {
     if(atoi(arg2)==neigh[i].id)
     {
    neigh[i].cost=0xffff;
     }
   }//for
 
 //copying the neighbour details t the distance vector table
 for(i=0;i<dv1[0].n;i++)
 {  
 dv1[i].sid=neigh[i].id;
 dv1[i].cost=neigh[i].cost;
 dv1[i].ip=neigh[i].nip;
 dv1[i].port=neigh[i].nport;
 }//for
 fflush(stdout);
 printf("\n disable SUCCESS \n");
  
  if((atoi(arg2)!=neigh[0].id) && (atoi(arg2)!=neigh[1].id) && (atoi(arg2)!=neigh[2].id) && (atoi(arg2)!=neigh[3].id) && (atoi(arg2)!=neigh[4].id) && (atoi(arg2)!=neigh[5].id))
  {
   fflush(stdout);
   printf("\n the server id is not my neighbour DISABLE \n");
  }
 
}//disable

if(strcmp(arg1,"packets")==0)
{
 fflush(stdout);
 printf("\npackets received %d",recvdonemorepacket);
 fflush(stdout);
 printf("\n PACKETS SUCCESS \n");
 if(recvdonemorepacket == 0)
 { fflush(stdout);
  printf("\n PACKETS No packets have been received \n");
 }
 recvdonemorepacket=0;
}
}//STDIN
}//sel
}//infinite loop
return 0;
}