Patches to argus-clients-3.0.0.rc.15 andargus-clients-2.0.6.fixes.1

carter at qosient.com carter at qosient.com
Sun Jul 9 11:56:03 EDT 2006


Hey Peter,
Thanks for the patches!!!  I am not doing anything with the Argus 2.x code, so if you would/could ablidge, and send a tar file that is your current image, I'll put it one the server as the last 2.x update, when we're done with this effort!!!

OK,  we are providing the info you're interested in, with regard to the window going to 0 ( flag indicators 'S/R' and filter support ' shut ') and the 'Idle' interpacket arrival numbers have the stats on how long the TCP was flow controlled.

Carter
Carter Bullard
QoSient LLC
150 E. 57th Street Suite 12D
New York, New York 10022
+1 212 588-9133 Phone
+1 212 588-9134 Fax  

-----Original Message-----
From: Peter Van Epp <vanepp at sfu.ca>
Date: Wed, 5 Jul 2006 19:53:55 
To:argus-info at lists.andrew.cmu.edu
Subject: [ARGUS] Patches to argus-clients-3.0.0.rc.15 and
	argus-clients-2.0.6.fixes.1

	Below are a pair of patch sets one each for (argus-clients-2.0.6.fixes.1
and argus-clients-3.0.0.rc.15) that almost fix most of the errors that occur
when comparing 2.0.6 ra output to 3.0 ra output. The user data stuff is still
broken (looks like thats a Carter task :-)) because I can't quite figure out
what its supposed to do :-).
	While fixing the tcp window code, the thought struck that it would be
interesting to know that a window hit 0 (indicating host buffer conjestion) and
for how long.

Peter Van Epp / Operations and Technical Support 
Simon Fraser University, Burnaby, B.C. Canada

 argus-clients-3.0.0.rc.15

*** common/argus_util.c.orig	Sun Jul  2 15:24:45 2006
--- common/argus_util.c	Wed Jul  5 19:33:14 2006
***************
*** 2869,2887 ****
  
                          case IPPROTO_ICMP: {
                             char type[32];
!                            sprintf (type, "%d", flow->flow_un.icmp.type);
                             if ((parser->RaFieldDelimiter != ' ') && (parser->RaFieldDelimiter != '\0')) {
                                switch (parser->RaFieldWidth) {
                                   case RA_FIXED_WIDTH:
                                      sprintf (&buf[strlen(buf)], "%-*.*s%c", len, len, type, parser->RaFieldDelimiter);
                                      break;
                                   default:
!                                     sprintf (&buf[strlen(buf)], "%d%c", flow->flow_un.icmp.type, parser->RaFieldDelimiter);
                                      break;
                                }
                             } else {
!                               sprintf (&buf[strlen(buf)], "%-*.*s ", len, len, type);
!                            }
                             done++;
                             break;
                          }
--- 2869,2887 ----
  
                          case IPPROTO_ICMP: {
                             char type[32];
! 			   type[0] = '\0';
                             if ((parser->RaFieldDelimiter != ' ') && (parser->RaFieldDelimiter != '\0')) {
                                switch (parser->RaFieldWidth) {
                                   case RA_FIXED_WIDTH:
                                      sprintf (&buf[strlen(buf)], "%-*.*s%c", len, len, type, parser->RaFieldDelimiter);
                                      break;
                                   default:
! 				    sprintf (&buf[strlen(buf)], "%s%c", type, parser->RaFieldDelimiter);
                                      break;
                                }
                             } else {
! 			      sprintf (&buf[strlen(buf)], "%-*.*s ", len, len, type);
! 			   }
                             done++;
                             break;
                          }
***************
*** 2988,2994 ****
  
                          case IPPROTO_ICMP: {
                             char code[32];
!                            sprintf (code, "%d", flow->flow_un.icmp.code);
  
                             if ((parser->RaFieldDelimiter != ' ') && (parser->RaFieldDelimiter != '\0')) {
                                switch (parser->RaFieldWidth) {
--- 2988,2994 ----
  
                          case IPPROTO_ICMP: {
                             char code[32];
! 			   code[0] = '\0';
  
                             if ((parser->RaFieldDelimiter != ' ') && (parser->RaFieldDelimiter != '\0')) {
                                switch (parser->RaFieldWidth) {
***************
*** 2996,3002 ****
                                      sprintf (&buf[strlen(buf)], "%-*.*s%c", len, len, code, parser->RaFieldDelimiter);
                                      break;
                                   default:
!                                     sprintf (&buf[strlen(buf)], "%d%c", flow->flow_un.icmp.code, parser->RaFieldDelimiter);
                                      break;
                                }
                             } else {
--- 2996,3002 ----
                                      sprintf (&buf[strlen(buf)], "%-*.*s%c", len, len, code, parser->RaFieldDelimiter);
                                      break;
                                   default:
!                                     sprintf (&buf[strlen(buf)], "%s%c", code, parser->RaFieldDelimiter);
                                      break;
                                }
                             } else {
***************
*** 4724,4733 ****
   
     } else {
        char value[32];
!       bzero(value, 4);
  
        if (argus && ((jitter = &argus->canon.jitter) != NULL)) {
!          double stdev = 0, sumsqrd1 = 0.0, sumsqrd2 = 0.0, sumsqrd;
           unsigned int n;
           float meanval;
  
--- 4724,4733 ----
   
     } else {
        char value[32];
!       bzero(value, 32);
  
        if (argus && ((jitter = &argus->canon.jitter) != NULL)) {
!          double stdev = 0.0, sumsqrd1 = 0.0, sumsqrd2 = 0.0, sumsqrd;
           unsigned int n;
           float meanval;
  
***************
*** 4811,4821 ****
        }
   
     } else {
!       double stdev = 0, sumsqrd1 = 0.0, sumsqrd2 = 0.0, sumsqrd;
        unsigned int n;
        float meanval;
        char sbuf[32];
!       bzero(sbuf, 4);
  
        if (argus && ((jitter = &argus->canon.jitter) != NULL)) {
           if ((n = (jitter->act.dst.n + jitter->idle.dst.n)) > 0) {
--- 4811,4821 ----
        }
   
     } else {
!       double stdev = 0.0, sumsqrd1 = 0.0, sumsqrd2 = 0.0, sumsqrd;
        unsigned int n;
        float meanval;
        char sbuf[32];
!       bzero(sbuf, 32);
  
        if (argus && ((jitter = &argus->canon.jitter) != NULL)) {
           if ((n = (jitter->act.dst.n + jitter->idle.dst.n)) > 0) {
***************
*** 5927,5933 ****
  
     bzero(vlanbuf, sizeof(vlanbuf));
     if (vlan != NULL) 
!       if ((vlan->hdr.argus_dsrvl8.qual & ARGUS_SRC_VLAN) || (vlan->sid > 0))
           sprintf (vlanbuf, "%d", (vlan->sid & 0x0FFF));
  
     if ((parser->RaFieldDelimiter != ' ') && (parser->RaFieldDelimiter != '\0')) {
--- 5927,5933 ----
  
     bzero(vlanbuf, sizeof(vlanbuf));
     if (vlan != NULL) 
!       if (vlan->hdr.argus_dsrvl8.qual & ARGUS_SRC_VLAN)
           sprintf (vlanbuf, "%d", (vlan->sid & 0x0FFF));
  
     if ((parser->RaFieldDelimiter != ' ') && (parser->RaFieldDelimiter != '\0')) {
***************
*** 6027,6033 ****
                                                                                                             
     bzero(vstr, sizeof(vstr));
     if (vlan != NULL)
!       if ((vlan->hdr.argus_dsrvl8.qual & ARGUS_SRC_VLAN) || (vlan->sid > 0))
           sprintf (vstr, "0x%04x", vlan->sid);
                                                                                                             
     if ((parser->RaFieldDelimiter != ' ') && (parser->RaFieldDelimiter != '\0')) {
--- 6027,6033 ----
                                                                                                             
     bzero(vstr, sizeof(vstr));
     if (vlan != NULL)
!       if (vlan->hdr.argus_dsrvl8.qual & ARGUS_SRC_VLAN)
           sprintf (vstr, "0x%04x", vlan->sid);
                                                                                                             
     if ((parser->RaFieldDelimiter != ' ') && (parser->RaFieldDelimiter != '\0')) {
***************
*** 6056,6062 ****
  
     bzero(vstr, sizeof(vstr));
     if (vlan != NULL)
!       if ((vlan->hdr.argus_dsrvl8.qual & ARGUS_DST_VLAN) || (vlan->did > 0))
           sprintf (vstr, "0x%04x", vlan->did);
  
     if ((parser->RaFieldDelimiter != ' ') && (parser->RaFieldDelimiter != '\0')) {
--- 6056,6062 ----
  
     bzero(vstr, sizeof(vstr));
     if (vlan != NULL)
!       if (vlan->hdr.argus_dsrvl8.qual & ARGUS_DST_VLAN)
           sprintf (vstr, "0x%04x", vlan->did);
  
     if ((parser->RaFieldDelimiter != ' ') && (parser->RaFieldDelimiter != '\0')) {
***************
*** 6240,6246 ****
                 switch (flow->ip_flow.ip_p) {
                    case  IPPROTO_TCP: {
                       int win = tcp->src.win << tcp->src.winshift;
!                      sprintf (winbuf, "%d", win);
                       break;
                    }
                    default:
--- 6240,6246 ----
                 switch (flow->ip_flow.ip_p) {
                    case  IPPROTO_TCP: {
                       int win = tcp->src.win << tcp->src.winshift;
!                      sprintf (winbuf, "%u", win);
                       break;
                    }
                    default:
***************
*** 6252,6258 ****
                 switch (flow->ipv6_flow.ip_p) {
                    case  IPPROTO_TCP: {
                       int win = tcp->src.win << tcp->src.winshift;
!                      sprintf (winbuf, "%d", win);
                       break;
                    }
                    default:
--- 6252,6258 ----
                 switch (flow->ipv6_flow.ip_p) {
                    case  IPPROTO_TCP: {
                       int win = tcp->src.win << tcp->src.winshift;
!                      sprintf (winbuf, "%u", win);
                       break;
                    }
                    default:
***************
*** 6301,6308 ****
              case ARGUS_TYPE_IPV4:
                 switch (flow->ip_flow.ip_p) {
                    case  IPPROTO_TCP: {
!                      int win = tcp->dst.win << tcp->src.winshift;
!                      sprintf (winbuf, "%d", win);
                       break;
                    }
                    default:
--- 6301,6308 ----
              case ARGUS_TYPE_IPV4:
                 switch (flow->ip_flow.ip_p) {
                    case  IPPROTO_TCP: {
!                      int win = tcp->dst.win << tcp->dst.winshift;
!                      sprintf (winbuf, "%u", win);
                       break;
                    }
                    default:
***************
*** 6314,6320 ****
                 switch (flow->ipv6_flow.ip_p) {
                    case  IPPROTO_TCP: {
                       int win = tcp->dst.win << tcp->src.winshift;
!                      sprintf (winbuf, "%d", win);
                       break;
                    }
                    default:
--- 6314,6320 ----
                 switch (flow->ipv6_flow.ip_p) {
                    case  IPPROTO_TCP: {
                       int win = tcp->dst.win << tcp->src.winshift;
!                      sprintf (winbuf, "%u", win);
                       break;
                    }
                    default:
***************
*** 8106,8112 ****
              break;
        }
        exlen += 8;
!       if (len > 10) exlen++;
  
        if ((user = (struct ArgusDataStruct *)argus->dsrs[ARGUS_SRCUSERDATA_INDEX]) != NULL) {
           unsigned short *sptr = &user->hdr.argus_dsrvl16.len;
--- 8106,8118 ----
              break;
        }
        exlen += 8;
! 
!       /* Assuming this compensates for the extra digit in the s[%d], it needs
!          to start at 10 and occur again at 100+ other than that this still
! 	 doesn't work correctly :-)  */
! 
!       if (len >= 10) exlen++;
!       if (len >= 100) exlen++;
  
        if ((user = (struct ArgusDataStruct *)argus->dsrs[ARGUS_SRCUSERDATA_INDEX]) != NULL) {
           unsigned short *sptr = &user->hdr.argus_dsrvl16.len;
***************
*** 12765,12770 ****
--- 12771,12777 ----
                          tcp->src.bytes            = nv2tcp->src.bytes;
                          tcp->src.retrans          = nv2tcp->src.rpkts;
                          tcp->src.win              = nv2tcp->src.win;
+ 			tcp->src.winshift 	  = 0;
                          tcp->src.flags            = nv2tcp->src.flags;
                          tcp->src.status           = 0; tcp->src.seq    = 0;
                          tcp->src.ack              = 0; tcp->src.winnum = 0;
***************
*** 12774,12779 ****
--- 12781,12787 ----
                          tcp->dst.bytes            = nv2tcp->dst.bytes;
                          tcp->dst.retrans          = nv2tcp->dst.rpkts;
                          tcp->dst.win              = nv2tcp->dst.win;
+ 			tcp->dst.winshift 	  = 0;
                          tcp->dst.flags            = nv2tcp->dst.flags;
                          tcp->dst.status           = 0; tcp->dst.seq    = 0;
                          tcp->dst.ack              = 0; tcp->dst.winnum = 0;
***************
*** 12825,12831 ****
                          user->hdr.subtype          =  ARGUS_LEN_16BITS | ARGUS_SRC_DATA;
                          user->hdr.argus_dsrvl16.len = nv2user->length + 1;
                          user->size                 = nv2user->length * 4;
!                         user->count                = user->size;
  
                          bcopy (&nv2user->data, &user->array, (nv2user->length - 1) * 4);
                          dsr += user->hdr.argus_dsrvl16.len;
--- 12833,12839 ----
                          user->hdr.subtype          =  ARGUS_LEN_16BITS | ARGUS_SRC_DATA;
                          user->hdr.argus_dsrvl16.len = nv2user->length + 1;
                          user->size                 = nv2user->length * 4;
!                         user->count                = user->hdr.argus_dsrvl16.len + 1;
  
                          bcopy (&nv2user->data, &user->array, (nv2user->length - 1) * 4);
                          dsr += user->hdr.argus_dsrvl16.len;
***************
*** 12840,12846 ****
                          user->hdr.subtype          =  ARGUS_LEN_16BITS | ARGUS_DST_DATA;
                          user->hdr.argus_dsrvl16.len = nv2user->length + 1;
                          user->size                 = nv2user->length * 4;
!                         user->count                = user->size;
  
                          bcopy (&nv2user->data, &user->array, (nv2user->length - 1) * 4);
                          dsr += user->hdr.argus_dsrvl16.len;
--- 12848,12854 ----
                          user->hdr.subtype          =  ARGUS_LEN_16BITS | ARGUS_DST_DATA;
                          user->hdr.argus_dsrvl16.len = nv2user->length + 1;
                          user->size                 = nv2user->length * 4;
!                         user->count                = user->hdr.argus_dsrvl16.len + 1;
  
                          bcopy (&nv2user->data, &user->array, (nv2user->length - 1) * 4);
                          dsr += user->hdr.argus_dsrvl16.len;
***************
*** 12924,12929 ****
--- 12932,12945 ----
                          vlan->hdr.type             = ARGUS_VLAN_DSR;
                          vlan->hdr.subtype          = 0;
                          vlan->hdr.argus_dsrvl8.len = sizeof(*vlan)/4;
+ 		        if (nv2vlan->status & ARGUS_SRC_VLAN)
+ 			   vlan->hdr.argus_dsrvl8.qual |= ARGUS_SRC_VLAN;
+ 			else 
+ 			   vlan->hdr.argus_dsrvl8.qual &= ~ARGUS_SRC_VLAN;
+ 		        if (nv2vlan->status & ARGUS_DST_VLAN)
+ 			   vlan->hdr.argus_dsrvl8.qual |= ARGUS_DST_VLAN;
+ 			else
+ 			   vlan->hdr.argus_dsrvl8.qual &= ~ARGUS_DST_VLAN;
                          vlan->sid = nv2vlan->sid;
                          vlan->did = nv2vlan->did;
  
argus-clients-2.0.6.fixes.1


*** common/argus_util.c.orig	Sat Dec  6 09:43:56 2003
--- common/argus_util.c	Wed Jul  5 18:20:13 2006
***************
*** 909,915 ****
  void
  ArgusPrintStartDate (char *date, struct ArgusRecord *ptr)
  {
-    char delim = ' ';
     struct timeval *tvp = NULL;
  
     if (ptr->ahdr.type & ARGUS_MAR)
--- 909,914 ----
***************
*** 917,932 ****
     else
        tvp = &ptr->argus_far.time.start;
  
!    if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
!       delim = RaFieldDelimiter;
! 
!    sprintf (&date[strlen(date)], "%s%c", print_time(tvp), delim);
  }
  
  void
  ArgusPrintLastDate (char *date, struct ArgusRecord *ptr)
  {
-    char delim = ' ';
     struct timeval *tvp = NULL;
  
     if (ptr->ahdr.type & ARGUS_MAR)
--- 916,927 ----
     else
        tvp = &ptr->argus_far.time.start;
  
!    sprintf (&date[strlen(date)], "%s", print_time(tvp));
  }
  
  void
  ArgusPrintLastDate (char *date, struct ArgusRecord *ptr)
  {
     struct timeval *tvp = NULL;
  
     if (ptr->ahdr.type & ARGUS_MAR)
***************
*** 934,943 ****
     else 
        tvp = &ptr->argus_far.time.last;
        
!    if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
!       delim = RaFieldDelimiter;
! 
!    sprintf (&date[strlen(date)], "%s%c", print_time(tvp), delim);
  }
  
  void
--- 929,935 ----
     else 
        tvp = &ptr->argus_far.time.last;
        
!    sprintf (&date[strlen(date)], "%s", print_time(tvp));
  }
  
  void
***************
*** 967,973 ****
           sprintf (&date[strlen(date)], " ");
  
     if (RaPrintLastTime)
!       sprintf (&date[strlen(date)], "%s%c", print_time(last), delim);
  }
  
  void ArgusPrintSrcRate (char *, struct ArgusRecord *);
--- 959,965 ----
           sprintf (&date[strlen(date)], " ");
  
     if (RaPrintLastTime)
!       sprintf (&date[strlen(date)], "%s", print_time(last));
  }
  
  void ArgusPrintSrcRate (char *, struct ArgusRecord *);
***************
*** 1003,1009 ****
        if (ArgusThisAgr && (ArgusThisAgr->type == ARGUS_AGR_DSR))
           hits = ArgusThisAgr->count;
  
!       sprintf(&buf[strlen(buf)], "%5d ", hits);
     }
  }
  
--- 995,1001 ----
        if (ArgusThisAgr && (ArgusThisAgr->type == ARGUS_AGR_DSR))
           hits = ArgusThisAgr->count;
  
!       sprintf(&buf[strlen(buf)], "%5d", hits);
     }
  }
  
***************
*** 1013,1019 ****
  ArgusPrintAvgDuration (char *date, struct ArgusRecord *ptr)
  {
     struct ArgusAGRStruct *ArgusThisAgr = NULL;
!    char *sptr, *iptr, delim = ' ';
     struct timeval *start = NULL, *last = NULL;
     struct timeval  buf,  *time = &buf;
  
--- 1005,1011 ----
  ArgusPrintAvgDuration (char *date, struct ArgusRecord *ptr)
  {
     struct ArgusAGRStruct *ArgusThisAgr = NULL;
!    char *sptr, *iptr;
     struct timeval *start = NULL, *last = NULL;
     struct timeval  buf,  *time = &buf;
  
***************
*** 1065,1081 ****
        sprintf(sptr, ".%06d", (int) time->tv_usec);
        sptr[pflag + 1] = '\0';
     }
- 
-    if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-       sprintf(&date[strlen(date)], "%c", delim);
-    else
-       sprintf(&date[strlen(date)], "%c", ' ');
  }
  
  void
  ArgusPrintDuration (char *date, struct ArgusRecord *ptr)
  {
!    char *sptr, *iptr, delim = ' ';
     struct timeval *start = NULL, *last = NULL;
     struct timeval  buf,  *time = &buf;
  
--- 1057,1068 ----
        sprintf(sptr, ".%06d", (int) time->tv_usec);
        sptr[pflag + 1] = '\0';
     }
  }
  
  void
  ArgusPrintDuration (char *date, struct ArgusRecord *ptr)
  {
!    char *sptr, *iptr;
     struct timeval *start = NULL, *last = NULL;
     struct timeval  buf,  *time = &buf;
  
***************
*** 1115,1125 ****
        sprintf(sptr, ".%06d", (int) time->tv_usec);
        sptr[pflag + 1] = '\0';
     }
- 
-    if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-       sprintf(&date[strlen(date)], "%c", delim);
-    else
-       sprintf(&date[strlen(date)], "%c", ' ');
  }
  
  void ArgusGetIndicatorString (struct ArgusRecord *, char *);
--- 1102,1107 ----
***************
*** 1215,1222 ****
           }
        }
  
-       *ptr = RaFieldDelimiter;
- 
     } else {
        int encdone = 0;
  
--- 1197,1202 ----
***************
*** 1386,1392 ****
     else
        sprintf (argusIDStr, "%u", argus->ahdr.argusid);
  
!    sprintf(buf, "%-15.15s ", argusIDStr);
  }
  
  void ArgusPrintBinNumber (char *, struct ArgusRecord *);
--- 1366,1372 ----
     else
        sprintf (argusIDStr, "%u", argus->ahdr.argusid);
  
!    sprintf(buf, "%-15.15s", argusIDStr);
  }
  
  void ArgusPrintBinNumber (char *, struct ArgusRecord *);
***************
*** 1404,1410 ****
  
  void
  ArgusPrintSequenceNumber (char *buf, struct ArgusRecord *argus) {
!    sprintf(buf, "%d ", argus->ahdr.seqNumber);
  }
  
  
--- 1384,1390 ----
  
  void
  ArgusPrintSequenceNumber (char *buf, struct ArgusRecord *argus) {
!    sprintf(buf, "%d", argus->ahdr.seqNumber);
  }
  
  
***************
*** 1424,1433 ****
        esrcString = etheraddr_string ((u_char *)&mac->phys_union.ether.ethersrc);
        edstString = etheraddr_string ((u_char *)&mac->phys_union.ether.etherdst);
   
!       sprintf (buf, "%17.17s %17.17s ", esrcString, edstString);
  
!    } else
!       sprintf (buf, "%17.17s %17.17s ", blankStr, blankStr);
  }
  
  void
--- 1404,1424 ----
        esrcString = etheraddr_string ((u_char *)&mac->phys_union.ether.ethersrc);
        edstString = etheraddr_string ((u_char *)&mac->phys_union.ether.etherdst);
   
!       sprintf (buf, "%17.17s", esrcString);
!       if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
!          sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
!       else
!          sprintf(&buf[strlen(buf)], "%c", ' ');
!       sprintf (&buf[strlen(buf)], "%17.17s", edstString);
  
!    } else {
!       sprintf (buf, "%17.17s", blankStr);
!       if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
!          sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
!       else
!          sprintf(&buf[strlen(buf)], "%c", ' ');
!       sprintf (&buf[strlen(buf)], "%17.17s", blankStr);
!    }
  }
  
  void
***************
*** 1468,1474 ****
     }
  
     if (protoStr != NULL)
!       sprintf (buf, "%4.4s ", protoStr);
  }
  
  int ArgusPrintNet = 0;
--- 1459,1465 ----
     }
  
     if (protoStr != NULL)
!       sprintf (buf, "%4.4s", protoStr);
  }
  
  int ArgusPrintNet = 0;
***************
*** 1537,1543 ****
     struct ArgusFlow *flow;
  
     if (argus->ahdr.type & ARGUS_MAR) {
!       sprintf (&buf[strlen(buf)], "%*d ", hfield, argus->argus_mar.nextMrSequenceNum);
  
     } else {
        flow = &argus->argus_far.flow;
--- 1528,1534 ----
     struct ArgusFlow *flow;
  
     if (argus->ahdr.type & ARGUS_MAR) {
!       sprintf (&buf[strlen(buf)], "%*u ", hfield, argus->argus_mar.nextMrSequenceNum);
  
     } else {
        flow = &argus->argus_far.flow;
***************
*** 1595,1603 ****
     }
  
     if (addr != NULL) 
!       sprintf (buf, "%*.*s ", thishfield, thishfield, addrstr);
     else
!       sprintf (buf, "%*.*s ", thishfield, thishfield, "                  ");
  }
  
  
--- 1586,1595 ----
     }
  
     if (addr != NULL) 
!       sprintf (buf, "%*.*s", thishfield, thishfield, addrstr);
     else
!       sprintf (buf, "%*.*s", thishfield, thishfield, "                  ");
! 
  }
  
  
***************
*** 1631,1638 ****
           case ETHERTYPE_REVARP:
           case ETHERTYPE_ARP:
              sprintf (&buf[strlen(buf)], "%*s", pfield - 1, " ");
-             if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-                sprintf (buf, "%c", RaFieldDelimiter);
              break;
  
           default:
--- 1623,1628 ----
***************
*** 1650,1656 ****
  ArgusPrintDstPort (char *buf, struct ArgusRecord *argus)
  {
     if (argus->ahdr.type & ARGUS_MAR) {
!       sprintf (&buf[strlen(buf)], "%-*d", pfield + 1, argus->argus_mar.flows);
  
     } else {
        struct ArgusFlow *flow = &argus->argus_far.flow;
--- 1640,1646 ----
  ArgusPrintDstPort (char *buf, struct ArgusRecord *argus)
  {
     if (argus->ahdr.type & ARGUS_MAR) {
!       sprintf (&buf[strlen(buf)], "%-*u", pfield + 1, argus->argus_mar.flows);
  
     } else {
        struct ArgusFlow *flow = &argus->argus_far.flow;
***************
*** 1673,1681 ****
              } else
                 sprintf (&buf[strlen(buf)], "%*s", pfield - 1, " ");
  
-             if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-                sprintf (buf, "%c", RaFieldDelimiter);
- 
              break;
  
           default:
--- 1663,1668 ----
***************
*** 1699,1769 ****
                 switch (proto) {
                    case IPPROTO_TCP:
                    case IPPROTO_UDP:
!                      if (RaPrintIndex > 0)
                          if ((RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintSrcAddr) ||
                               (RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintDstAddr))
                             if (RaFieldDelimiter == '\0')
                                if (buf[strlen(buf) - 1] == ' ')
                                   buf[strlen(buf) - 1] = '.';
  
-                      sprintf (buf, "%-*d ", thispfield, port);
                       break;
  
                    default:
-                      if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
-                         sprintf (&buf[strlen(buf)], "%c", RaFieldDelimiter);
-                      else
-                         sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
                       break;
                 }
              } else {
                 switch (proto) {
                    case IPPROTO_TCP:
                    case IPPROTO_UDP:
!                      if (RaPrintIndex > 0)
                          if ((RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintSrcAddr) ||
                               (RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintDstAddr))
                             if (RaFieldDelimiter == '\0')
                                if (buf[strlen(buf) - 1] == ' ')
                                   buf[strlen(buf) - 1] = '.';
  
                       if (proto == IPPROTO_TCP)
!                         sprintf (buf, "%-*.*s ", thispfield, thispfield, tcpport_string(port));
                       else
!                         sprintf (buf, "%-*.*s ", thispfield, thispfield, udpport_string(port));
                       break;
  
                    default:
!                      if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
!                         sprintf (&buf[strlen(buf)], "%c", RaFieldDelimiter);
!                      else
!                         sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
                       break;
                 }
              }
  
           } else {
              if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0')) {
-                sprintf (buf, "%c", RaFieldDelimiter);
              } else {
                 switch (proto) {
                    default:
!                      sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
                       break;
  
                    case IPPROTO_TCP:
                    case IPPROTO_UDP:
!                      if (RaPrintIndex > 0)
                          if ((RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintSrcAddr) ||
                               (RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintDstAddr))
                             if (RaFieldDelimiter == '\0')
                                if (buf[strlen(buf) - 1] == ' ')
                                   buf[strlen(buf) - 1] = '.';
! 
                       if (argus->ahdr.status & ARGUS_MERGED)
                          sprintf (buf, "%-*.*s ", thispfield, thispfield, "*");
                       else 
!                         sprintf (buf, "%-*d ", thispfield, port);
                       break;
                 }
              }
--- 1686,1762 ----
                 switch (proto) {
                    case IPPROTO_TCP:
                    case IPPROTO_UDP:
!                      if ((RaPrintIndex > 0) && ((RaFieldDelimiter == ' ') ||
! 			 (RaFieldDelimiter == '\0'))) {
                          if ((RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintSrcAddr) ||
                               (RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintDstAddr))
                             if (RaFieldDelimiter == '\0')
                                if (buf[strlen(buf) - 1] == ' ')
                                   buf[strlen(buf) - 1] = '.';
+ 		     }
+ 
+                      sprintf (buf, "%-*d", thispfield, port);
  
                       break;
  
                    default:
                       break;
                 }
              } else {
                 switch (proto) {
                    case IPPROTO_TCP:
                    case IPPROTO_UDP:
!                      if ((RaPrintIndex > 0) && ((RaFieldDelimiter == ' ') ||
! 			 (RaFieldDelimiter == '\0'))) {
                          if ((RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintSrcAddr) ||
                               (RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintDstAddr))
                             if (RaFieldDelimiter == '\0')
                                if (buf[strlen(buf) - 1] == ' ')
                                   buf[strlen(buf) - 1] = '.';
+ 		     }
  
                       if (proto == IPPROTO_TCP)
!                         sprintf (buf, "%-*.*s", thispfield, thispfield, tcpport_string(port));
                       else
!                         sprintf (buf, "%-*.*s", thispfield, thispfield, udpport_string(port));
                       break;
  
                    default:
! 
                       break;
                 }
              }
  
           } else {
              if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0')) {
              } else {
                 switch (proto) {
                    default:
!                      sprintf (buf, "%-*.*s", thispfield, thispfield, " ");
!                      if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
!                         sprintf (&buf[strlen(buf)], "%c", RaFieldDelimiter);
!                      else
!                         sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
                       break;
  
                    case IPPROTO_TCP:
                    case IPPROTO_UDP:
!                      if ((RaPrintIndex > 0) && ((RaFieldDelimiter == ' ') ||
! 			 (RaFieldDelimiter == '\0'))) {
                          if ((RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintSrcAddr) ||
                               (RaPrintAlgorithms[RaPrintIndex - 1] == ArgusPrintDstAddr))
                             if (RaFieldDelimiter == '\0')
                                if (buf[strlen(buf) - 1] == ' ')
                                   buf[strlen(buf) - 1] = '.';
! 		     }
                       if (argus->ahdr.status & ARGUS_MERGED)
                          sprintf (buf, "%-*.*s ", thispfield, thispfield, "*");
                       else 
!                         sprintf (buf, "%-*d", thispfield, port);
!                      if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
!                         sprintf (&buf[strlen(buf)], "%c", RaFieldDelimiter);
!                      else
!                         sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
                       break;
                 }
              }
***************
*** 1775,1790 ****
        default:
           thispfield -= 2;
  
!          if ((ArgusThisProto == 0) && (proto != 0)) {
!             sprintf (buf, "%-*.*s ", thispfield, thispfield, llcsap_string((unsigned char) port));
!          } else {
  
-             if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0')) {
-                sprintf (buf, "%c", RaFieldDelimiter);
-             } else {
-                sprintf (buf, "%-*.*s ", thispfield, thispfield, " ");
-             }
-          }
     }
  
  }
--- 1768,1776 ----
        default:
           thispfield -= 2;
  
!          if ((ArgusThisProto == 0) && (proto != 0)) 
!             sprintf (buf, "%-*.*s", thispfield, thispfield, llcsap_string((unsigned char) port));
  
     }
  
  }
***************
*** 1969,1975 ****
        }
     }
  
!    sprintf (buf, "%s ", dirStr);
  }
  
  void
--- 1955,1961 ----
        }
     }
  
!    sprintf (buf, "%s", dirStr);
  }
  
  void
***************
*** 1986,1992 ****
        dst_count = argus->argus_far.dst.count;
     }
  
!    sprintf (buf, "%-8u %-8u  ", src_count, dst_count);
  }
  
  void
--- 1972,1978 ----
        dst_count = argus->argus_far.dst.count;
     }
  
!    sprintf (buf, "%-8u%c%-8u", src_count,RaFieldDelimiter, dst_count);
  }
  
  void
***************
*** 2001,2007 ****
        src_count = argus->argus_far.src.count;
     }
   
!    sprintf (buf, "%-8u ", src_count);
  }
  
  void
--- 1987,1993 ----
        src_count = argus->argus_far.src.count;
     }
   
!    sprintf (buf, "%-8u", src_count);
  }
  
  void
***************
*** 2016,2022 ****
        dst_count = argus->argus_far.dst.count;
     }
   
!    sprintf (buf, "%-8u ", dst_count);
  }
  
  void
--- 2002,2008 ----
        dst_count = argus->argus_far.dst.count;
     }
   
!    sprintf (buf, "%-8u", dst_count);
  }
  
  void
***************
*** 2038,2044 ****
        }
     }
  
!    sprintf (buf, "%-12u %-12u", src_bytes, dst_bytes);
  }
  
  void
--- 2024,2030 ----
        }
     }
  
!    sprintf (buf, "%-12u%c%-12u", src_bytes, RaFieldDelimiter, dst_bytes);
  }
  
  void
***************
*** 2077,2084 ****
     sprintf (buf, "%-12u", dst_bytes);
  }
  
- 
- 
  #include <math.h>
  
  void
--- 2063,2068 ----
***************
*** 2092,2099 ****
  void
  ArgusPrintDstJitter (char *buf, struct ArgusRecord *argus)
  {
!    RaPrintSrcTime = 1;
!    RaPrintDstTime = 0;
     ArgusPrintJitter (buf, argus);
  }
  
--- 2076,2083 ----
  void
  ArgusPrintDstJitter (char *buf, struct ArgusRecord *argus)
  {
!    RaPrintSrcTime = 0;
!    RaPrintDstTime = 1;
     ArgusPrintJitter (buf, argus);
  }
  
***************
*** 2102,2110 ****
  {
     struct ArgusTimeStruct *time = NULL;
     char stdstr[128], jitterstr[128];
!    int maxval = 0, minval = 0x7FFFFFFF, n, meanval = 0;
     long long sumtime = 0, tmpsumtime = 0;
!    double sumsqrd = 0.0, stdev = 0.0;
  
     ArgusThisFarStatus = ArgusIndexRecord(argus, ArgusThisFarHdrs);
     time = (struct ArgusTimeStruct *) ArgusThisFarHdrs[ARGUS_TIME_DSR_INDEX];
--- 2086,2096 ----
  {
     struct ArgusTimeStruct *time = NULL;
     char stdstr[128], jitterstr[128];
!    unsigned int n;
!    int maxval = 0, minval = 0x7FFFFFFF;
     long long sumtime = 0, tmpsumtime = 0;
!    double stdev = 0.0, sumsqrd1 = 0.0, sumsqrd2 = 0.0, sumsqrd;
!    float meanval;
  
     ArgusThisFarStatus = ArgusIndexRecord(argus, ArgusThisFarHdrs);
     time = (struct ArgusTimeStruct *) ArgusThisFarHdrs[ARGUS_TIME_DSR_INDEX];
***************
*** 2117,2157 ****
        n = 0;
  
        if (time != NULL) {
!          if (RaPrintActTime && time->src.act.n) {
!             n += time->src.act.n;
!             tmpsumtime = (time->src.act.meanval * time->src.act.n);
!             sumtime += tmpsumtime;
!             sumsqrd += (time->src.act.n * pow(time->src.act.stdev, 2.0)) + pow(tmpsumtime, 2.0)/time->src.act.n;
!             maxval = (maxval < time->src.act.maxval) ? time->src.act.maxval : maxval;
!             minval = (minval > time->src.act.minval) ? time->src.act.minval : minval;
!          }
! 
!          if (RaPrintIdleTime && time->src.idle.n) {
!             n += time->src.idle.n;
!             tmpsumtime = (time->src.idle.meanval * time->src.idle.n);
!             sumtime += tmpsumtime;
!             sumsqrd += (time->src.idle.n * pow(time->src.idle.stdev, 2.0)) + pow(tmpsumtime, 2.0)/time->src.idle.n;
!             maxval = (maxval < time->src.idle.maxval) ? time->src.idle.maxval : maxval;
!             minval = (minval > time->src.idle.minval) ? time->src.idle.minval : minval;
!          }
!       }
! 
!       if (n > 0) {
!          meanval = sumtime/n;
! /*
!          stdev = sqrt (sumsqrd/n - pow (meanval, 2.0));
!          istdev = (stdev) * 1;
! 
!          sprintf (stdstr, "%d.%03d", istdev/1000, istdev%1000);
!          stdstr[6] = '\0';
!          sprintf (jitterstr, "%6d.%03d (%6s)", meanval/1000, meanval%1000, stdstr);
! */
!          sprintf (jitterstr, "%6d.%03d", meanval/1000, meanval%1000);
!          sprintf (&buf[strlen(buf)], "%-12s ", jitterstr);
! 
!       } else {
!          sprintf (jitterstr, "%6d.%03d", meanval/1000, meanval%1000);
!          sprintf (&buf[strlen(buf)], "%-12s ", jitterstr);
        }
     }
  
--- 2103,2138 ----
        n = 0;
  
        if (time != NULL) {
!          if ((RaPrintActTime) && ((n = (time->src.act.n + time->dst.idle.n)) > 0)) {
! 	    if (time->src.act.n && time->dst.act.n) {
! 	       meanval  = ((time->src.act.meanval * time->src.act.n) +
! 	      		  (time->dst.idle.meanval * time->dst.act.n)) / n;
! 	       if (time->src.act.n) {
! 		  stdev = time->src.act.stdev;
! 		  sumsqrd1 = (time->src.act.n * pow(stdev, 2.0)) +
! 		              pow((time->src.act.meanval * time->src.act.n), 2.0)/time->src.act.n;
! 	       }
! 
! 	       if (time->dst.act.n) {
! 		  stdev = time->dst.act.meanval;
! 		  sumsqrd2 = (time->dst.act.n * pow(stdev, 2.0)) + 
! 			      pow((time->dst.act.meanval * time->dst.act.n), 2.0)/time->dst.act.n;
! 	       }
! 
! 	       sumsqrd = sumsqrd1 + sumsqrd2;
! 	       stdev   = ((sqrt ((sumsqrd/n) - pow (meanval, 2.0))) * 1);
! 	    } else 
! 	       stdev = (time->src.act.n) ? time->src.act.stdev : time->dst.act.stdev;
! 
! 	    sprintf (&buf[strlen(buf)],  "%f", stdev);
! 	 }
!       }	    
! 
!       if (RaPrintDstTime) {
!          if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
!             sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
!          else 
!             sprintf(&buf[strlen(buf)], "%c", ' ');
        }
     }
  
***************
*** 2160,2207 ****
        bzero (jitterstr, 128);
        sumtime = 0;
        sumsqrd = 0.0;
!       meanval = 0;
        stdev = 0.0;
        maxval = 0;
        minval = 0x7FFFFFFF;
        n = 0;
  
        if (time != NULL) {
!          if (RaPrintActTime && time->dst.act.n) {
!             n += time->dst.act.n;
!             tmpsumtime = (time->dst.act.meanval * time->dst.act.n);
!             sumtime += tmpsumtime;
!             sumsqrd += (time->dst.act.n * pow(time->dst.act.stdev, 2.0)) + pow(tmpsumtime, 2.0)/time->dst.act.n;
!             maxval = (maxval < time->dst.act.maxval) ? time->dst.act.maxval : maxval;
!             minval = (minval > time->dst.act.minval) ? time->dst.act.minval : minval;
!          }
! 
!          if (RaPrintIdleTime && time->dst.idle.n) {
!             n += time->dst.idle.n;
!             tmpsumtime = (time->dst.idle.meanval * time->dst.idle.n);
!             sumtime += tmpsumtime;
!             sumsqrd += (time->dst.idle.n * pow(time->dst.idle.stdev, 2.0)) + pow(tmpsumtime, 2.0)/time->dst.idle.n;
!             maxval = (maxval < time->dst.idle.maxval) ? time->dst.idle.maxval : maxval;
!             minval = (minval > time->dst.idle.minval) ? time->dst.idle.minval : minval;
!          }
!       }
! 
!       if (n > 0) {
!          meanval = sumtime/n;
! /*
!          stdev = sqrt (sumsqrd/n - pow (meanval, 2.0));
!          istdev = (stdev)*1;
  
!          sprintf (stdstr, "%d.%03d", istdev/1000, istdev%1000);
!          stdstr[6] = '\0';
!          sprintf (jitterstr, "%6d.%03d (%s)", meanval/1000, meanval%1000, stdstr);
! */
!          sprintf (jitterstr, "%6d.%03d", meanval/1000, meanval%1000);
!          sprintf (&buf[strlen(buf)], "%-12s", jitterstr);
! 
!       } else {
!          sprintf (jitterstr, "%6d.%03d", meanval/1000, meanval%1000);
!          sprintf (&buf[strlen(buf)], "%-12s", jitterstr);
        }
     }
  }
--- 2141,2179 ----
        bzero (jitterstr, 128);
        sumtime = 0;
        sumsqrd = 0.0;
!       meanval = 0.0;
        stdev = 0.0;
        maxval = 0;
        minval = 0x7FFFFFFF;
+       stdev = 0.0;
+       sumsqrd1 = 0.0;
+       sumsqrd2 = 0.0;
        n = 0;
  
        if (time != NULL) {
!          if ((RaPrintDstTime) && ((n = (time->src.idle.n + time->dst.idle.n)) > 0)) {
! 	    if (time->src.idle.n && time->dst.idle.n) {
! 	       meanval  = ((time->src.idle.meanval * time->src.idle.n) +
! 	      		  (time->dst.idle.meanval * time->dst.idle.n)) / n;
! 	       if (time->src.idle.n) {
! 		  stdev = time->src.idle.stdev;
! 		  sumsqrd1 = (time->src.idle.n * pow(stdev, 2.0)) +
! 		              pow((time->src.idle.meanval * time->src.idle.n), 2.0)/time->src.idle.n;
! 	       }
! 
! 	       if (time->dst.idle.n) {
! 		  stdev = time->dst.idle.stdev;
! 		  sumsqrd2 = (time->dst.idle.n * pow(time->dst.idle.stdev, 2.0)) + 
! 			      pow((time->dst.idle.meanval * time->dst.idle.n), 2.0)/time->dst.idle.n;
! 	       }
! 
! 	       sumsqrd = sumsqrd1 + sumsqrd2;
! 	       stdev   = ((sqrt ((sumsqrd/n) - pow (meanval, 2.0))) * 1);
! 	    } else 
! 	       stdev = (time->src.idle.n) ? time->src.idle.stdev : time->dst.idle.stdev;
  
! 	    sprintf (&buf[strlen(buf)],  "%f", stdev);
! 	 }
        }
     }
  }
***************
*** 2209,2215 ****
  void
  ArgusPrintSrcRate (char *buf, struct ArgusRecord *argus)
  {
!    int src_count = 0;
     struct timeval *start = NULL, *last = NULL;
     struct timeval  timebuf,  *time = &timebuf;
     char tmpbuf[128], *ptr = tmpbuf;
--- 2181,2187 ----
  void
  ArgusPrintSrcRate (char *buf, struct ArgusRecord *argus)
  {
!    uint src_count = 0;
     struct timeval *start = NULL, *last = NULL;
     struct timeval  timebuf,  *time = &timebuf;
     char tmpbuf[128], *ptr = tmpbuf;
***************
*** 2236,2242 ****
  
     src_count = argus->argus_far.src.count;
  
!    if (src_count > 1)
        sprintf (ptr, "%.2f", ((double)(src_count)/seconds));
     else
        sprintf (ptr, "%.2f", 0.0);
--- 2208,2214 ----
  
     src_count = argus->argus_far.src.count;
  
!    if (src_count > 0)
        sprintf (ptr, "%.2f", ((double)(src_count)/seconds));
     else
        sprintf (ptr, "%.2f", 0.0);
***************
*** 2247,2253 ****
  void
  ArgusPrintDstRate (char *buf, struct ArgusRecord *argus)
  {
!    int dst_count = 0;
     struct timeval *start = NULL, *last = NULL;
     struct timeval  timebuf,  *time = &timebuf;
     char tmpbuf[128], *ptr = tmpbuf;
--- 2219,2225 ----
  void
  ArgusPrintDstRate (char *buf, struct ArgusRecord *argus)
  {
!    uint dst_count = 0;
     struct timeval *start = NULL, *last = NULL;
     struct timeval  timebuf,  *time = &timebuf;
     char tmpbuf[128], *ptr = tmpbuf;
***************
*** 2274,2280 ****
  
     dst_count = argus->argus_far.dst.count;
  
!    if (dst_count > 1)
        sprintf (ptr, "%.2f", ((double)(dst_count)/seconds));
     else
        sprintf (ptr, "%.2f", 0.0);
--- 2246,2252 ----
  
     dst_count = argus->argus_far.dst.count;
  
!    if (dst_count > 0)
        sprintf (ptr, "%.2f", ((double)(dst_count)/seconds));
     else
        sprintf (ptr, "%.2f", 0.0);
***************
*** 2285,2291 ****
  void
  ArgusPrintRate (char *buf, struct ArgusRecord *argus)
  {
!    int src_count = 0, dst_count = 0;
     struct timeval *start = NULL, *last = NULL;
     struct timeval  timebuf,  *time = &timebuf;
     char tmpbuf[128], *ptr = tmpbuf;
--- 2257,2263 ----
  void
  ArgusPrintRate (char *buf, struct ArgusRecord *argus)
  {
!    uint src_count = 0, dst_count = 0;
     struct timeval *start = NULL, *last = NULL;
     struct timeval  timebuf,  *time = &timebuf;
     char tmpbuf[128], *ptr = tmpbuf;
***************
*** 2313,2331 ****
     src_count = argus->argus_far.src.count;
     dst_count = argus->argus_far.dst.count;
  
!    if (src_count > 1)
        sprintf (ptr, "%.2f", ((double)(src_count)/seconds));
     else
        sprintf (ptr, "%.2f", 0.0);
  
     sprintf (buf, "%10s", ptr);
  
!    if (dst_count > 1)
        sprintf (ptr, "%.2f", ((double)(dst_count)/seconds));
     else
        sprintf (ptr, "%.2f", 0.0);
  
!    sprintf (&buf[strlen(buf)], "%10s  ", ptr);
  }
  
  /*
--- 2285,2308 ----
     src_count = argus->argus_far.src.count;
     dst_count = argus->argus_far.dst.count;
  
!    if (src_count > 0)
        sprintf (ptr, "%.2f", ((double)(src_count)/seconds));
     else
        sprintf (ptr, "%.2f", 0.0);
  
     sprintf (buf, "%10s", ptr);
  
!    if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
!       sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
!    else
!       sprintf(&buf[strlen(buf)], "%c", ' ');
! 
!    if (dst_count > 0)
        sprintf (ptr, "%.2f", ((double)(dst_count)/seconds));
     else
        sprintf (ptr, "%.2f", 0.0);
  
!    sprintf (&buf[strlen(buf)], "%10s", ptr);
  }
  
  /*
***************
*** 2443,2453 ****
        if (seconds) {
           sprintf (ptr, "%.4f", ((double)srcLossPkts));
           sprintf (buf, "%10s", ptr);
           sprintf (ptr, "%.4f", ((double)dstLossPkts));
!          sprintf (&buf[strlen(buf)], "%10s  ", ptr);
        } else {
           sprintf (ptr, "%.4f", 0.0);
           sprintf (buf, "%10s", ptr);
           sprintf (ptr, "%.4f", 0.0);
           sprintf (&buf[strlen(buf)], "%10s  ", ptr);
        }
--- 2420,2438 ----
        if (seconds) {
           sprintf (ptr, "%.4f", ((double)srcLossPkts));
           sprintf (buf, "%10s", ptr);
+          if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+             sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
+          else
+             sprintf(&buf[strlen(buf)], "%c", ' ');
           sprintf (ptr, "%.4f", ((double)dstLossPkts));
!          sprintf (&buf[strlen(buf)], "%10s", ptr);
        } else {
           sprintf (ptr, "%.4f", 0.0);
           sprintf (buf, "%10s", ptr);
+          if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+             sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
+          else
+             sprintf(&buf[strlen(buf)], "%c", ' ');
           sprintf (ptr, "%.4f", 0.0);
           sprintf (&buf[strlen(buf)], "%10s  ", ptr);
        }
***************
*** 2492,2501 ****
  
     if (seconds) {
        sprintf (ptr, "%.2f", ((double)(src_bytes * 8.0))/seconds);
!       sprintf (&buf[strlen(buf)], "%11s ", ptr);
     } else {
        sprintf (ptr, "%.2f", 0.0);
!       sprintf (&buf[strlen(buf)], "%11s ", ptr);
     }
  }
  
--- 2477,2486 ----
  
     if (seconds) {
        sprintf (ptr, "%.2f", ((double)(src_bytes * 8.0))/seconds);
!       sprintf (&buf[strlen(buf)], "%11s", ptr);
     } else {
        sprintf (ptr, "%.2f", 0.0);
!       sprintf (&buf[strlen(buf)], "%11s", ptr);
     }
  }
  
***************
*** 2538,2557 ****
  
     if (seconds) {
        sprintf (ptr, "%.2f", ((double)(dst_bytes * 8.0))/seconds);
!       sprintf (&buf[strlen(buf)], "%13s  ", ptr);
     } else {
        sprintf (ptr, "%.2f", 0.0);
!       sprintf (&buf[strlen(buf)], "%13s  ", ptr);
     }
  }
  
  void
  ArgusPrintLoad (char *buf, struct ArgusRecord *argus)
  {
!    int src_count = 0, dst_count = 0, src_bytes = 0, dst_bytes = 0;
     struct timeval *start = NULL, *last = NULL;
     struct timeval  timebuf,  *time = &timebuf;
!    char tmpbuf[128], *ptr = tmpbuf;
     double seconds;
  
     start = &argus->argus_far.time.start;
--- 2523,2542 ----
  
     if (seconds) {
        sprintf (ptr, "%.2f", ((double)(dst_bytes * 8.0))/seconds);
!       sprintf (&buf[strlen(buf)], "%13s", ptr);
     } else {
        sprintf (ptr, "%.2f", 0.0);
!       sprintf (&buf[strlen(buf)], "%13s", ptr);
     }
  }
  
  void
  ArgusPrintLoad (char *buf, struct ArgusRecord *argus)
  {
!    uint src_count = 0, dst_count = 0, src_bytes = 0, dst_bytes = 0;
     struct timeval *start = NULL, *last = NULL;
     struct timeval  timebuf,  *time = &timebuf;
!    char tmpbuf[128], *ptr = tmpbuf, delim = ' ';
     double seconds;
  
     start = &argus->argus_far.time.start;
***************
*** 2583,2599 ****
        src_bytes = argus->argus_far.src.bytes;
        dst_bytes = argus->argus_far.dst.bytes;
     }
  
     if (seconds) {
        sprintf (ptr, "%.2f", ((double)(src_bytes * 8.0))/seconds);
!       sprintf (buf, "%13s", ptr);
        sprintf (ptr, "%.2f", ((double)(dst_bytes * 8.0))/seconds);
!       sprintf (&buf[strlen(buf)], "%13s  ", ptr);
     } else {
        sprintf (ptr, "%.2f", 0.0);
!       sprintf (buf, "%13s", ptr);
        sprintf (ptr, "%.2f", 0.0);
!       sprintf (&buf[strlen(buf)], "%13s  ", ptr);
     }
  }
  
--- 2568,2587 ----
        src_bytes = argus->argus_far.src.bytes;
        dst_bytes = argus->argus_far.dst.bytes;
     }
+ 	
+    if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
+       delim = RaFieldDelimiter;
  
     if (seconds) {
        sprintf (ptr, "%.2f", ((double)(src_bytes * 8.0))/seconds);
!       sprintf (buf, "%13s%c", ptr, delim);
        sprintf (ptr, "%.2f", ((double)(dst_bytes * 8.0))/seconds);
!       sprintf (&buf[strlen(buf)], "%13s", ptr);
     } else {
        sprintf (ptr, "%.2f", 0.0);
!       sprintf (buf, "%13s%c", ptr, delim);
        sprintf (ptr, "%.2f", 0.0);
!       sprintf (&buf[strlen(buf)], "%13s", ptr);
     }
  }
  
***************
*** 2608,2616 ****
              sdis = i - argus->argus_far.attr_ip.sttl;
           }
        }
!       sprintf (&buf[strlen(buf)], "  %3d  ", sdis);
     } else
!       sprintf (&buf[strlen(buf)], "  %3d  ", argus->argus_far.attr_ip.sttl);
  }
  
  void
--- 2596,2604 ----
              sdis = i - argus->argus_far.attr_ip.sttl;
           }
        }
!       sprintf (&buf[strlen(buf)], "  %3d", sdis);
     } else
!       sprintf (&buf[strlen(buf)], "  %3d", argus->argus_far.attr_ip.sttl);
  }
  
  void
***************
*** 2624,2633 ****
              ddis = i - argus->argus_far.attr_ip.dttl;
           }
        }
!       sprintf (&buf[strlen(buf)], "  %3d  ", ddis);
   
     } else
!       sprintf (&buf[strlen(buf)], "  %3d  ", argus->argus_far.attr_ip.dttl);
  }
  
  void
--- 2612,2621 ----
              ddis = i - argus->argus_far.attr_ip.dttl;
           }
        }
!       sprintf (&buf[strlen(buf)], "  %3d", ddis);
   
     } else
!       sprintf (&buf[strlen(buf)], "  %3d", argus->argus_far.attr_ip.dttl);
  }
  
  void
***************
*** 2637,2651 ****
        struct ArgusVlanStruct *vlan = (struct ArgusVlanStruct *) ArgusThisFarHdrs[ARGUS_VLAN_DSR_INDEX];
   
        if (vlan->status & ARGUS_SRC_VLAN)
!          sprintf (&buf[strlen(buf)], "0x%04x ", vlan->sid);
        else
!          sprintf(&buf[strlen(buf)], "       ");
        if (vlan->status & ARGUS_DST_VLAN)
!          sprintf (&buf[strlen(buf)], "0x%04x ", vlan->did);
        else
!          sprintf(&buf[strlen(buf)], "       ");
     } else
!       sprintf (&buf[strlen(buf)], "              ");
  }
  
  void
--- 2625,2646 ----
        struct ArgusVlanStruct *vlan = (struct ArgusVlanStruct *) ArgusThisFarHdrs[ARGUS_VLAN_DSR_INDEX];
   
        if (vlan->status & ARGUS_SRC_VLAN)
!          sprintf (&buf[strlen(buf)], "0x%04x%c", vlan->sid, RaFieldDelimiter);
        else
! 	 if (RaFieldDelimiter == ' ') 
!             sprintf(&buf[strlen(buf)], "       ");
! 	 else 
!             sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
        if (vlan->status & ARGUS_DST_VLAN)
!          sprintf (&buf[strlen(buf)], "0x%04x", vlan->did);
        else
! 	 if (RaFieldDelimiter == ' ')
!             sprintf(&buf[strlen(buf)], "      ");
     } else
!       if (RaFieldDelimiter == ' ') 
!          sprintf (&buf[strlen(buf)], "             ");
!       else 
! 	 sprintf(&buf[strlen(buf)], "%c", RaFieldDelimiter);
  }
  
  void
***************
*** 2655,2682 ****
        struct ArgusMplsStruct *mpls = (struct ArgusMplsStruct *) ArgusThisFarHdrs[ARGUS_MPLS_DSR_INDEX];
   
        if (mpls->status & ARGUS_SRC_MPLS)
!          sprintf (&buf[strlen(buf)], " %5x ", mpls->slabel);
        else
!          sprintf(&buf[strlen(buf)], "       ");
  
        if (mpls->status & ARGUS_DST_MPLS)
!          sprintf (&buf[strlen(buf)], " %5x ", mpls->dlabel);
        else
!          sprintf(&buf[strlen(buf)], "       ");
     } else 
!       sprintf (&buf[strlen(buf)], "              ");
  }
  
  void
  ArgusPrintSrcTOS (char *buf, struct ArgusRecord *argus)
  {
!    sprintf (&buf[strlen(buf)], "  %3d  ", argus->argus_far.attr_ip.stos);
  }
  
  void
  ArgusPrintDstTOS (char *buf, struct ArgusRecord *argus)
  {
!    sprintf (&buf[strlen(buf)], "  %3d  ", argus->argus_far.attr_ip.dtos);
  }
  
  
--- 2650,2681 ----
        struct ArgusMplsStruct *mpls = (struct ArgusMplsStruct *) ArgusThisFarHdrs[ARGUS_MPLS_DSR_INDEX];
   
        if (mpls->status & ARGUS_SRC_MPLS)
!          sprintf (&buf[strlen(buf)], "%5x%c", mpls->slabel, RaFieldDelimiter);
        else
!          sprintf(&buf[strlen(buf)], "     %c", RaFieldDelimiter);
  
        if (mpls->status & ARGUS_DST_MPLS)
!          sprintf (&buf[strlen(buf)], "%5x", mpls->dlabel);
        else
! 	 if (RaFieldDelimiter == ' ')
!             sprintf(&buf[strlen(buf)], "     ");
     } else 
! 	 if (RaFieldDelimiter == ' ')
!             sprintf(&buf[strlen(buf)], "     ");
! 	 else 
!             sprintf (&buf[strlen(buf)], "%c", RaFieldDelimiter);
  }
  
  void
  ArgusPrintSrcTOS (char *buf, struct ArgusRecord *argus)
  {
!    sprintf (&buf[strlen(buf)], "  %3d ", argus->argus_far.attr_ip.stos);
  }
  
  void
  ArgusPrintDstTOS (char *buf, struct ArgusRecord *argus)
  {
!    sprintf (&buf[strlen(buf)], "  %3d" , argus->argus_far.attr_ip.dtos);
  }
  
  
***************
*** 2694,2708 ****
           if (tcp != NULL) {
              srcwin = tcp->src.win;
              dstwin = tcp->dst.win;
!             sprintf (&buf[strlen(buf)], "%-5d  %-5d  ", srcwin, dstwin);
           } else {
!             sprintf (&buf[strlen(buf)], "%14s", " ");
           }
           break;
        }
  
        default:
!          sprintf (&buf[strlen(buf)], "%14s", " ");
     }
  }
  
--- 2693,2707 ----
           if (tcp != NULL) {
              srcwin = tcp->src.win;
              dstwin = tcp->dst.win;
!             sprintf (&buf[strlen(buf)], "%-5d%c%-5d", srcwin, RaFieldDelimiter, dstwin);
           } else {
!             sprintf (&buf[strlen(buf)], "%5s%c%5s", " ", RaFieldDelimiter, " ");
           }
           break;
        }
  
        default:
!          sprintf (&buf[strlen(buf)], "%5s%c%5s", " ", RaFieldDelimiter, " ");
     }
  }
  
***************
*** 2850,2858 ****
     bzero (tmpbuf, MAXSTRLEN);
  
     for (RaPrintIndex = 0; RaPrintIndex < MAX_PRINT_ALG_TYPES; RaPrintIndex++) {
!       if (RaPrintAlgorithms[RaPrintIndex] != NULL)
           RaPrintAlgorithms[RaPrintIndex](&argus_strbuf[strlen(argus_strbuf)], argus);
!       else
           break;
     }
  
--- 2849,2861 ----
     bzero (tmpbuf, MAXSTRLEN);
  
     for (RaPrintIndex = 0; RaPrintIndex < MAX_PRINT_ALG_TYPES; RaPrintIndex++) {
!       if (RaPrintAlgorithms[RaPrintIndex] != NULL) {
           RaPrintAlgorithms[RaPrintIndex](&argus_strbuf[strlen(argus_strbuf)], argus);
!          if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
!             sprintf(&argus_strbuf[strlen(argus_strbuf)], "%c", RaFieldDelimiter);
!          else
!             sprintf(&argus_strbuf[strlen(argus_strbuf)], "%c", ' ');
!       } else
           break;
     }
  
***************
*** 2882,2894 ****
        }
  
        while (*str) {
!          if (*str == ' ') {
!             if (lastchr != RaFieldDelimiter)
!                *ptr++ = RaFieldDelimiter;
              while (isspace((int)*str)) str++;
-          }
-          lastchr = *str;
- 
           *ptr++ = *str++;
        }
  
--- 2885,2892 ----
        }
  
        while (*str) {
!          if (*str == ' ') 
              while (isspace((int)*str)) str++;
           *ptr++ = *str++;
        }
  
***************
*** 3227,3233 ****
     if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
        delim = RaFieldDelimiter;
  
!    if ((ArgusSrcUserDataLen > 0) || (ArgusDstUserDataLen)) {
        if (ArgusSrcUserDataLen > 0) {
           switch (eflag) {
              case ARGUS_ENCODE_ASCII:
--- 3225,3231 ----
     if ((RaFieldDelimiter != ' ') && (RaFieldDelimiter != '\0'))
        delim = RaFieldDelimiter;
  
!    if ((ArgusSrcUserDataLen > 0) || (ArgusDstUserDataLen > 0)) {
        if (ArgusSrcUserDataLen > 0) {
           switch (eflag) {
              case ARGUS_ENCODE_ASCII:
***************
*** 3253,3274 ****
              bzero (strbuf, sizeof(strbuf));
              bzero (conbuf, sizeof(conbuf));
              if ((len = ArgusEncode (&user->data, NULL, len, str, sizeof(strbuf))) > 0)
!                sprintf (con, "%cs[%d]=%s", delim, len, str);
              else
                 sprintf (con, " ");
  
              if (delim == ' ')
!                sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, con);
              else
!                sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-s ", con);
  
-          } else {
-             if (delim != ' ')
-                sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%c", delim);
-             else
-                sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, " ");
           }
        }
  
        if (ArgusDstUserDataLen > 0) {
           switch (eflag) {
--- 3251,3271 ----
              bzero (strbuf, sizeof(strbuf));
              bzero (conbuf, sizeof(conbuf));
              if ((len = ArgusEncode (&user->data, NULL, len, str, sizeof(strbuf))) > 0)
!                sprintf (con, "s[%d]=%s", len, str);
              else
                 sprintf (con, " ");
  
              if (delim == ' ')
!                sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s", exlen, con);
              else
!                sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-s", con);
  
           }
        }
+       if (delim != ' ')
+          sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%c", delim);
+       else
+          sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, " ");
  
        if (ArgusDstUserDataLen > 0) {
           switch (eflag) {
***************
*** 3296,3318 ****
              bzero (strbuf, sizeof(strbuf));
              bzero (conbuf, sizeof(conbuf));
              if ((len = ArgusEncode (&user->data, NULL, len, str, sizeof(strbuf))) > 0)
!                sprintf (con, "%cd[%d]=%s", delim, len, str);
              else
                 sprintf (con, " ");
  
              if (delim == ' ')
                 sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, con);
              else
!                sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-s ", con);
  
!          } else
!             if (delim != ' ')
!                sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%c", delim);
!             else
!                sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, " ");
        }
! 
!       sprintf (&RaUserDataStr[strlen(RaUserDataStr)], " ");
     }
  }
  
--- 3293,3314 ----
              bzero (strbuf, sizeof(strbuf));
              bzero (conbuf, sizeof(conbuf));
              if ((len = ArgusEncode (&user->data, NULL, len, str, sizeof(strbuf))) > 0)
!                sprintf (con, "d[%d]=%s", len, str);
              else
                 sprintf (con, " ");
  
              if (delim == ' ')
                 sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s ", exlen, con);
              else
!                sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-s", con);
  
!          }
        }
!    } else {
!       if (delim != ' ')
!          sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%c", delim);
!       else
!          sprintf (&RaUserDataStr[strlen(RaUserDataStr)], "%-*s %-*s ", exlen, " ", exlen, " ");
     }
  }
  



More information about the argus mailing list