Log In
New Account
  
 
Home My Page Project Tree Code Snippets Project Openings NUTSS
 
 
Summary Tracker Lists CVS Files
 

CVS | Administration

Diff for /libnutss/examples/slinks_variable_load.c between versions 1.13 and 1.14

version 1.13, 2007/06/30 20:57:28 version 1.14, 2007/06/30 21:57:25
Line 1 Line 1
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <stdlib.h>
#ifndef WIN32
#include <poll.h> #include <string.h>
#include <sys/socket.h>
#endif #ifndef WIN32
#include <pthread.h>
#include "../include/swaplinks.h" #include <poll.h>
#ifdef WIN32 #include <sys/socket.h>
#define sleep(sec) Sleep((sec)*1000)
#define snprintf   _snprintf #endif
#endif
#include <pthread.h>
#define assert(p) if(!(p)) { printf("AssertionFAILED!\n"); exit(1); }
#include "../include/swaplinks.h"
typedef struct flow {
   int duration;
   int weight;
   char source[256]; #ifdef WIN32
   struct flow *next, *last;
} flow_t; #define sleep(sec) Sleep((sec)*1000)
int num, peers, limit, maxload; #define snprintf   _snprintf
swaplinks_p swp;
FILE *f = NULL, *s = NULL; #endif
void *recvthread(void *arg) {
   swaplinks_p swp = (swaplinks_p)arg;
   struct sockaddr_ns peer; #define assert(p) if(!(p)) { printf("Assertion'%s' FAILED!\n", #p); exit(1); }
   socklen_t len = sizeof(peer);
   flow_t *flows = NULL, *newflow = NULL, *ptr = NULL, *axe = NULL;
   char msg[64], tmp[128], buf[2048];
   int time = 0, load = 0, busy = 0, exts, delta, expiration; typedef struct flow {
   buf[0] = 0;    int duration;
   while(time < limit) {    int weight;
      sleep(1);
      if(swaplinks_recvfrom(swp, tmp, sizeof(tmp), 0, &peer, &len) > 0) {    char source[256];
     time++; delta = 0;
     if(s) fprintf(s,"      %d recvd request %d\n",num,time);    struct flow *next, *last;
     newflow = (flow_t*)calloc(1,sizeof(flow_t));
     newflow->duration = atoi(strtok(tmp,";")); } flow_t;
     newflow->weight = atoi(strtok(NULL,";"));
     exts = atoi(strtok(NULL,";"));
     if(load < maxload) {
    strncpy(newflow->source,peer.user+4,sizeof(newflow->source)); int num, peers, limit, maxload;
    snprintf(buf,2048,"->%d:%d<->",newflow->duration,newflow->weight);
    for(ptr = flows; ptr;) { swaplinks_p swp;
   sprintf(buf,"%s%d:%d<->",buf,ptr->duration,ptr->weight);
   expiration = 0; axe = NULL; FILE *f = NULL, *s = NULL;
   if(--ptr->duration == 0) {
  axe = ptr;
  load -= ptr->weight;
  delta -= ptr->weight; void *recvthread(void *arg) {
  if(ptr->last && ptr->next) {    swaplinks_p swp = (swaplinks_p)arg;
 assert(flows != ptr);
 ptr->last->next = ptr->next;    struct sockaddr_ns peer;
 ptr->next->last = ptr->last;
  }    socklen_t len = sizeof(peer);
  else if(ptr->next) {
 assert(flows == ptr);    flow_t *flows = NULL, *newflow = NULL, *ptr = NULL, *axe = NULL;
 flows = ptr->next;
  }    char msg[64], tmp[128], buf[2048];
  if(flows) flows->last = NULL;    int time = 0, load = 0, busy = 0, exts, delta, expiration;
  else if(ptr->last) {
 assert(flows != ptr);
 ptr->last->next = NULL;
  }    buf[0] = 0;
  else {
 assert(flows == ptr);
 flows = NULL;
  }    while(time < limit) {
      if(s) fprintf(s,"%d EXPIRED FLOW from %s:d%d/w%d\n",num,ptr->source,ptr->duration,ptr->weight);       sleep(1);
  expiration = 1;
   }       if(swaplinks_recvfrom(swp, tmp, sizeof(tmp), 0, &peer, &len) > 0) {
   ptr = ptr->next;
   if(expiration) free(axe);      time++; delta = 0;
    }
    sprintf(buf,"%s||\n",buf);      if(s) fprintf(s,"      %d recvd request %d\n",num,time);
      //          if(s) fprintf(s,"%d ACCEPTED FLOW from %s:d%d/w%d\n",num,newflow->source,newflow->duration,newflow->weight);      newflow = (flow_t*)calloc(1,sizeof(flow_t));
       if(s) fprintf(s,"%s",buf);
     newflow->duration = atoi(strtok(tmp,";"));
    load += newflow->weight;
    delta += newflow->weight;      newflow->weight = atoi(strtok(NULL,";"));
    newflow->next = flows;
    if(newflow->next) newflow->next->last = newflow;      exts = atoi(strtok(NULL,";"));
    flows = newflow;
    if(f) fprintf(f,"%d\n",load);      if(load < maxload) {
     }
     // ADMISSION CONTROL     strncpy(newflow->source,peer.user+4,sizeof(newflow->source));
     // if we're overloaded, drop it if its been pushed too far,
     // or pass on to a neighbor and mark it as such if not     snprintf(buf,2048,"->%d:%d<->",newflow->duration,newflow->weight);
     else if(exts < 5) {
    swaplinks_update_walk_length(swp,1);     for(ptr = flows; ptr;) {
    snprintf(msg,64,"%d;%d;%d;",newflow->duration,newflow->weight,exts+1);
    swaplinks_sendtoany(swp,msg,strlen(msg)+1,0);    sprintf(buf,"%s%d:%d<->",buf,ptr->duration,ptr->weight);
    swaplinks_update_walk_length(swp,peers);
     }    expiration = 0; axe = NULL;
      }
   }    if(--ptr->duration == 0) {
   if(s) fprintf(s,"%d DONE RECEIVING\n",num);
  axe = ptr;
   if(f) { fclose(f); f = NULL; }
   if(s) { fclose(s); s = NULL; }   load -= ptr->weight;
   pthread_exit(NULL);   delta -= ptr->weight;
}
int main(int argc, char **argv) {
   struct sockaddr_ns reg;   if(ptr->last && ptr->next) {
   char tmp[256];
   int time = 0, duration, weight, sendcount = 0;  assert(flows != ptr);
   pthread_t tid;
 ptr->last->next = ptr->next;
   if (argc > 6) {
       num = atoi(argv[1]);  ptr->next->last = ptr->last;
       peers = atoi(argv[2]);
       limit = atoi(argv[3]);   }
       duration = atoi(argv[4]);
       weight = atoi(argv[5]);   else if(ptr->next) {
      maxload = atoi(argv[6]);
   }  assert(flows == ptr);
   else {
       printf("Usage:\n  slinks_variable_load node_number peers_number time_limit flow_duration flow_weight max_load\n");  flows = ptr->next;
       exit(1);
   }   }
   snprintf(tmp, sizeof(tmp), "test%d", num);
   nutss_config_set(NUTSS_CONFIG_USERNAME, tmp, strlen(tmp));
   nutss_config_set(NUTSS_CONFIG_PROXYUSERNAME, tmp, strlen(tmp));   if(flows) flows->last = NULL;
   nutss_config_set(NUTSS_CONFIG_PROXYPASSWORD, tmp, strlen(tmp));
   strncpy(tmp, "nutss.net", sizeof(tmp));   else if(ptr->last) {
   nutss_config_set(NUTSS_CONFIG_DOMAINNAME, tmp, strlen(tmp));
   strncpy(tmp, "sip.nutss.net:5060", sizeof(tmp));  assert(flows != ptr);
   nutss_config_set(NUTSS_CONFIG_SIGPROXY, tmp, strlen(tmp));
 ptr->last->next = NULL;
   sprintf(tmp, "output/data_node%d.txt", num); f = fopen(tmp,"w");
//    sprintf(tmp, "output/output_node%d.txt", num); s = fopen(tmp,"w");   }
   if (f == NULL) f = stderr;
   if (s == NULL) s = stdout;   else {
   memset(&reg, 0, sizeof(reg));  assert(flows == ptr);
   reg.family = AF_NUTSS;
   strncpy(reg.user, "ths1", sizeof(reg.user));  flows = NULL;
   strncpy(reg.domain, "nutss.net", sizeof(reg.domain));
   strncpy(reg.service, "swaplinksd", sizeof(reg.service));   }
   swaplinks_init();
   swp = swaplinks_new("cloud9", &reg, peers, peers);
      if(s) fprintf(s,"%d EXPIRED FLOW from %s:d%d/w%d\n",num,ptr->source,ptr->duration,ptr->weight);
   // let swaplinks get going.
   sleep(10);   expiration = 1;
   pthread_create(&tid, NULL, recvthread, swp);    }
   sleep(1);    ptr = ptr->next;
   snprintf(tmp, sizeof(tmp), "%d;%d;0;", duration, weight);    if(expiration) free(axe);
   while (time++ <3*limit) { // (i-- != 0) {     }
       swaplinks_sendtoany(swp, tmp, strlen(tmp)+1, 0);
       if(s) fprintf(s,"   %d sent request %d\n",num,time);     sprintf(buf,"%s||\n",buf);
else printf("   %d sent request %d\n",num,time);
       sleep(10);
   }
      //          if(s) fprintf(s,"%d ACCEPTED FLOW from %s:d%d/w%d\n",num,newflow->source,newflow->duration,newflow->weight);
       pthread_join(tid, NULL);
       if(s) fprintf(s,"%s",buf);
   if(s) fprintf(s,"%dDONE SENDING\n",num);
//    if(num == 1) system("echo \" \" | mail -s\"node one finished sending!\" ths22@cs.cornell.edu");
    load += newflow->weight;
   return 0;
}     delta += newflow->weight;
 
      newflow->next = flows;
 
      if(newflow->next) newflow->next->last = newflow;
 
      flows = newflow;
 
      if(f) fprintf(f,"%d\n",load);
 
       }
 
       // ADMISSION CONTROL
 
       // if we're overloaded, drop it if its been pushed too far,
 
       // or pass on to a neighbor and mark it as such if not
 
       else if(exts < 5) {
 
      swaplinks_update_walk_length(swp,1);
 
      snprintf(msg,64,"%d;%d;%d;",newflow->duration,newflow->weight,exts+1);
 
      swaplinks_sendtoany(swp,msg,strlen(msg)+1,0);
 
      swaplinks_update_walk_length(swp,peers);
 
       }
 
        }
 
     }
 
     if(s) fprintf(s,"%d DONE RECEIVING\n",num);
 
 
 
     if(f&& f != stderr) { fclose(f); f = NULL; }
 
     if(s&& s != stdout) { fclose(s); s = NULL; }
 
 
 
     pthread_exit(NULL);
 
 }
 
 
 
 int main(int argc, char **argv) {
 
     struct sockaddr_ns reg;
 
     char tmp[256];
 
     int time = 0, duration, weight, sendcount = 0;
 
     pthread_t tid;
 
 
 
     if (argc > 6) {
 
         num = atoi(argv[1]);
 
         peers = atoi(argv[2]);
 
         limit = atoi(argv[3]);
 
         duration = atoi(argv[4]);
 
         weight = atoi(argv[5]);
 
        maxload = atoi(argv[6]);
 
     }
 
     else {
 
         printf("Usage:\n  slinks_variable_load node_number peers_number time_limit flow_duration flow_weight max_load\n");
 
         exit(1);
 
     }
 
 
 
     snprintf(tmp, sizeof(tmp), "test%d", num);
 
     nutss_config_set(NUTSS_CONFIG_USERNAME, tmp, strlen(tmp));
 
     nutss_config_set(NUTSS_CONFIG_PROXYUSERNAME, tmp, strlen(tmp));
 
     nutss_config_set(NUTSS_CONFIG_PROXYPASSWORD, tmp, strlen(tmp));
 
     strncpy(tmp, "nutss.net", sizeof(tmp));
 
     nutss_config_set(NUTSS_CONFIG_DOMAINNAME, tmp, strlen(tmp));
 
     strncpy(tmp, "sip.nutss.net:5060", sizeof(tmp));
 
     nutss_config_set(NUTSS_CONFIG_SIGPROXY, tmp, strlen(tmp));
 
 
 
     sprintf(tmp, "output/data_node%d.txt", num); f = fopen(tmp,"w");
 
 //    sprintf(tmp, "output/output_node%d.txt", num); s = fopen(tmp,"w");
 
     if (f == NULL) f = stderr;
 
     if (s == NULL) s = stdout;
 
 
 
     memset(&reg, 0, sizeof(reg));
 
     reg.family = AF_NUTSS;
 
     strncpy(reg.user, "ths1", sizeof(reg.user));
 
     strncpy(reg.domain, "nutss.net", sizeof(reg.domain));
 
     strncpy(reg.service, "swaplinksd", sizeof(reg.service));
 
 
 
     swaplinks_init();
 
     swp = swaplinks_new("cloud9", &reg, peers, peers);
 
 
 
     // let swaplinks get going.
 
     sleep(10);
 
 
 
     pthread_create(&tid, NULL, recvthread, swp);
 
 
 
     sleep(1);
 
 
 
     snprintf(tmp, sizeof(tmp), "%d;%d;0;", duration, weight);
 
 
 
     while (time++ <4*limit) { // (i-- != 0) {
 
         swaplinks_sendtoany(swp, tmp, strlen(tmp)+1, 0);
 
         if(s) fprintf(s,"   %d sent request %d\n",num,time);
 
 sleep(1);
 
     }
 
 
 
         if(s) fprintf(s,"%d DONE SENDING\n",num);
 
 
 
         pthread_join(tid, NULL);
 
 
 
     if(s) fprintf(s,"%dSHUTTING DOWN\n",num);
 
 
 
 if(num == 1) system("echo \" \" | mail -s\"node one finished sending!\" ths22@cs.cornell.edu");
 
 
 
     return 0;
 
 }
 

Removed from v.1.13  
changed lines
  Added in v.1.14


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
 

GForge.cis.cornell.edu is brought to you by

Cornell Computing and Information Science


Powered By GForge Collaborative Development Environment