[BACK]Return to route.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / netstat

Diff for /src/usr.bin/netstat/route.c between version 1.35 and 1.36

version 1.35, 2000/02/05 18:46:50 version 1.36, 2000/05/18 01:20:48
Line 433 
Line 433 
         register char *cp = workbuf;          register char *cp = workbuf;
         size_t n;          size_t n;
   
         switch(sa->sa_family) {          switch (sa->sa_family) {
         case AF_INET:          case AF_INET:
             {              {
                 register struct sockaddr_in *sin = (struct sockaddr_in *)sa;                  register struct sockaddr_in *sin = (struct sockaddr_in *)sa;
Line 725 
Line 725 
         masklen = 0;          masklen = 0;
         lim = (u_char *)(mask + 1);          lim = (u_char *)(mask + 1);
         i = 0;          i = 0;
         for (p = (u_char *)mask; p < lim; p++) {          if (mask) {
                 if (final && *p) {                  for (p = (u_char *)mask; p < lim; p++) {
                         illegal++;                          if (final && *p) {
                         sin6.sin6_addr.s6_addr[i++] = 0x00;                                  illegal++;
                         continue;                                  sin6.sin6_addr.s6_addr[i++] = 0x00;
                 }                                  continue;
                           }
   
                 switch (*p & 0xff) {                          switch (*p & 0xff) {
                 case 0xff:                          case 0xff:
                         masklen += 8;                                  masklen += 8;
                         break;                                  break;
                 case 0xfe:                          case 0xfe:
                         masklen += 7;                                  masklen += 7;
                         final++;                                  final++;
                         break;                                  break;
                 case 0xfc:                          case 0xfc:
                         masklen += 6;                                  masklen += 6;
                         final++;                                  final++;
                         break;                                  break;
                 case 0xf8:                          case 0xf8:
                         masklen += 5;                                  masklen += 5;
                         final++;                                  final++;
                         break;                                  break;
                 case 0xf0:                          case 0xf0:
                         masklen += 4;                                  masklen += 4;
                         final++;                                  final++;
                         break;                                  break;
                 case 0xe0:                          case 0xe0:
                         masklen += 3;                                  masklen += 3;
                         final++;                                  final++;
                         break;                                  break;
                 case 0xc0:                          case 0xc0:
                         masklen += 2;                                  masklen += 2;
                         final++;                                  final++;
                         break;                                  break;
                 case 0x80:                          case 0x80:
                         masklen += 1;                                  masklen += 1;
                         final++;                                  final++;
                         break;                                  break;
                 case 0x00:                          case 0x00:
                         final++;                                  final++;
                         break;                                  break;
                 default:                          default:
                         final++;                                  final++;
                         illegal++;                                  illegal++;
                         break;                                  break;
                 }                          }
   
                 if (!illegal)                          if (!illegal)
                         sin6.sin6_addr.s6_addr[i++] &= *p;                                  sin6.sin6_addr.s6_addr[i++] &= *p;
                 else                          else
                         sin6.sin6_addr.s6_addr[i++] = 0x00;                                  sin6.sin6_addr.s6_addr[i++] = 0x00;
         }                  }
           } else
                   masklen = 128;
   
         if (masklen == 0 && IN6_IS_ADDR_UNSPECIFIED(&sin6.sin6_addr))          if (masklen == 0 && IN6_IS_ADDR_UNSPECIFIED(&sin6.sin6_addr))
                 return("default");                  return("default");

Legend:
Removed from v.1.35  
changed lines
  Added in v.1.36