Changeset 8 for trunk/src/renetcol.c

Show
Ignore:
Timestamp:
10/20/05 15:05:40 (17 years ago)
Author:
andreu
Message:

second RENETCOL CVS Integration

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/renetcol.c

    r2 r8  
    2929char *configFileName;  
    3030char *prefixV4FileName;  
    31 sigjmp_buf contextSigalrm;  
    32 struct sigaction myAction;  /* for timer */  
    33 volatile sig_atomic_t isAlarmUp = 0; 
     31struct sigaction myAction; 
     32sigjmp_buf contextSigalrm; 
     33/* struct sigaction myAction;  for timer */  
     34volatile sig_atomic_t sigusr1Up = 0; 
    3435/* V9 */ 
    3536unsigned short offsetV9 = 0; 
     
    5859RuleDefPtr rulesAddress[FIELD_TYPE_NUMBER+1][MAX_RULES_PER_FIELD]; 
    5960RuleDefPtr *rulesAddressPtr; 
     61int reInitConf = 0; 
    6062/* ENDV9 */ 
    6163static unsigned long datagramNumber; 
     
    6971static int rcv; 
    7072static int sockBufSize = SOCKET_BUFFER_SIZE;             
    71 static unsigned short flowNumber; 
     73/* static unsigned short flowNumber; */ 
    7274static unsigned short receptPort = RECEPTION_PORT; 
    7375static unsigned char *ptr_buffer; 
     
    9193    exit(1); 
    9294  } 
     95 
    9396  openlog(argv[0], LOG_PID, LOG_USER); 
    9497 
     
    101104 
    102105  initCache(); 
     106  fprintf(stderr, "reading the routers list\n"); 
    103107  routerNb = getRegisteredRouters(configFileName, &sortedRouterList[0],  
    104108                                  &indexedRouterList[0]); 
     109  fprintf(stderr, "reading the IPv4 prefix\n"); 
    105110  if ( getPrefixV4(prefixV4FileName, &prefixV4Tab[0]) < 1){ 
    106111    fprintf(stderr, "Error during prefix v4 reading\n"); 
     
    108113  } 
    109114  rulesListPtr = NULL; 
     115  fprintf(stderr, "reading the rules\n"); 
    110116  rulesListPtr = getLightRules(rulesListPtr, rulesFileName); 
    111117  tmp = rulesListPtr; 
     
    115121    } 
    116122  } 
     123 
     124  fprintf(stderr, "I become a deamon, next messages via syslogd.\n"); 
     125  if (fork () != 0) 
     126    exit (0); 
     127  if (setsid() == -1){ 
     128    exit(4); 
     129  } 
     130 
     131  myAction.sa_handler = sigusr1Mgmt; 
     132  myAction.sa_flags = SA_RESTART; 
     133  sigemptyset (&(myAction.sa_mask)); 
     134  sigaddset (&(myAction.sa_mask), SIGALRM); 
     135  sigaction (SIGUSR1, &myAction, NULL); 
     136 
    117137  setCache(rulesListPtr); 
    118138  rulesAddressPtr = (RuleDefPtr *)rulesAddress; 
     
    121141  myKey = createKey(argv[0]); 
    122142  myQueue = createQueue(myKey); 
     143  sendMyPid(myQueue); 
    123144 
    124145  /* INIT THE CURRENTS VARIABLES*/ 
     
    146167  datagramNumber =0; 
    147168 
    148   /* INIT FROM CONFS FILES*/ 
    149   /*initConf();*/ 
    150  
    151169  /* TIME */ 
    152170  now = time((time_t *)NULL); 
     
    156174  fprintf(stderr, "END\n"); 
    157175  return (0); 
     176} 
     177 
     178/* 
     179 * 
     180 */ 
     181void sendMyPid(int queueID) 
     182{ 
     183  msgType myMsg; 
     184  char *msgTextIndex; 
     185  unsigned short tplMsgType = 12; 
     186  pid_t myPID; 
     187   
     188  myPID = getpid(); 
     189  msgTextIndex = mempcpy(mempcpy(myMsg.text, 
     190                                 &tplMsgType, 
     191                                 sizeof (unsigned short) 
     192                                 ), 
     193                         &myPID, 
     194                         sizeof(pid_t) 
     195                         ); 
     196  myMsg.type = 1; 
     197  msgSend(queueID, myMsg); 
     198} 
     199 
     200/* 
     201 * 
     202 */ 
     203void sendReadRulesSignal(int queueID) 
     204{ 
     205  msgType myMsg; 
     206  char *msgTextIndex; 
     207  unsigned short tplMsgType = 13; 
     208   
     209  msgTextIndex = mempcpy(myMsg.text, 
     210                         &tplMsgType, 
     211                         sizeof (unsigned short) 
     212                         ); 
     213  myMsg.type = 1; 
     214  msgSend(queueID, myMsg); 
     215} 
     216 
     217/* 
     218 * 
     219 */ 
     220void sigusr1Mgmt(int num) 
     221{ 
     222  sigusr1Up = 1; 
     223} 
     224 
     225/* 
     226 * 
     227 */ 
     228void  
     229initRule() 
     230{ 
     231  RulesPtr tmp = NULL; 
     232  initCache(); 
     233  tmp = rulesListPtr; 
     234  for ( ; tmp; tmp=tmp->next) { 
     235    rulesListPtr = delRule(tmp, rulesListPtr); 
     236  } 
     237  rulesListPtr = NULL; 
     238  rulesListPtr = getLightRules(rulesListPtr, rulesFileName); 
     239  tmp = rulesListPtr; 
     240  for ( ; tmp; tmp=tmp->next) { 
     241    if (tmp->type != 2) { 
     242      rulesListPtr = delRule(tmp, rulesListPtr); 
     243    } 
     244  } 
     245  tmp = NULL; 
     246  initCache(); 
     247  setCache(rulesListPtr); 
     248  sendReadRulesSignal(myQueue); 
    158249} 
    159250 
     
    223314  unsigned short shift; 
    224315  short version = 0; 
     316  int regRouter = 0; 
     317   
    225318  do { 
     319    if (sigusr1Up == 1){ 
     320      sigusr1Up = 0; 
     321      initRule(); 
     322    }  
    226323    socketReading(); 
    227324    getIpHeader(pcktPtr, ptr_buffer); 
    228     checkIpHeader(pcktPtr, &sortedRouterList[0], routerNb); 
     325    regRouter = checkIpHeader(pcktPtr, &sortedRouterList[0], routerNb); 
    229326    getUdpHeader(pcktPtr, ptr_buffer); 
    230     checkUdpHeader(pcktPtr); 
     327    checkUdpHeader(pcktPtr, regRouter, receptPort); 
    231328     
    232329    switch( version =  
     
    237334      break; 
    238335    case 5: 
    239       checkNetFlowHeader(pcktPtr); 
     336/*       if ((currentRouterPtr=notExistRouter(routersListPtr,  */ 
     337/*                                         pcktPtr->ipH->srcAdd))==NULL) { */ 
     338/*      routersListPtr = addRouter(routersListPtr,  */ 
     339/*                                 pcktPtr->ipH->srcAdd,  */ 
     340/*                                 (unsigned long) 0); */ 
     341/*      currentRouterPtr = routersListPtr; */ 
     342/*       } */ 
     343/*       currentFlowsetNumber = 0; */ 
     344/*       shift = 0; */ 
     345/*       while ((currentFlowsetNumber < currentHeaderV9Ptr->count)) { */ 
     346/*      curTplFlSetPtr = NULL; */ 
     347/*      currentFlowsetId=getFlowsetId(currentFlowsetNumber,  */ 
     348/*                                    offsetV9Ptr, ptr_buffer); */ 
     349        /* remplacer par creation du template v5 si pas deja fait */ 
     350/*      shift = checkTemplateFlowSet(currentRouterPtr, offsetV9Ptr,  */ 
     351/*                                   ptr_buffer, currentHeaderV9Ptr, */ 
     352/*                                   curTplFlSetPtr, */ 
     353/*                                   currentFlowsetNumberPtr, */ 
     354/*                                   myQueue); */ 
     355        /*        showAllTplFlSet();  */ 
     356/*      shift = checkDataFlowSet(shift, currentRouterPtr, */ 
     357/*                               currentHeaderV9Ptr, offsetV9Ptr, */ 
     358/*                               ptr_buffer, currentFlowsetNumberPtr, */ 
     359/*                               currentFlowsetIdPtr, pcktPtr, */ 
     360/*                               rulesAddressPtr, rulesListPtr, */ 
     361/*                               myQueue); */ 
     362/*       } */ 
    240363      break; 
    241364    case 9: