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

Diff for /src/usr.bin/netstat/show.c between version 1.12 and 1.13

version 1.12, 2007/12/14 18:35:46 version 1.13, 2008/05/08 07:19:42
Line 44 
Line 44 
 #include <netinet/in.h>  #include <netinet/in.h>
 #include <netinet/if_ether.h>  #include <netinet/if_ether.h>
 #include <netinet/ip_ipsp.h>  #include <netinet/ip_ipsp.h>
   #include <netmpls/mpls.h>
 #include <arpa/inet.h>  #include <arpa/inet.h>
   
 #include <err.h>  #include <err.h>
Line 59 
Line 60 
   
 char    *any_ntoa(const struct sockaddr *);  char    *any_ntoa(const struct sockaddr *);
 char    *link_print(struct sockaddr *);  char    *link_print(struct sockaddr *);
   char    *label_print_op(u_int8_t);
   char    *label_print(struct sockaddr *);
   
 #define ROUNDUP(a) \  #define ROUNDUP(a) \
         ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))          ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
Line 100 
Line 103 
 void     pr_family(int);  void     pr_family(int);
 void     p_encap(struct sockaddr *, struct sockaddr *, int);  void     p_encap(struct sockaddr *, struct sockaddr *, int);
 void     p_protocol(struct sadb_protocol *, struct sockaddr *, struct  void     p_protocol(struct sadb_protocol *, struct sockaddr *, struct
             sadb_protocol *, int);               sadb_protocol *, int);
 void     p_sockaddr(struct sockaddr *, struct sockaddr *, int, int);  void     p_sockaddr(struct sockaddr *, struct sockaddr *, int, int);
 void     p_flags(int, char *);  void     p_flags(int, char *);
 char    *routename4(in_addr_t);  char    *routename4(in_addr_t);
Line 196 
Line 199 
  * width of destination/gateway column   * width of destination/gateway column
  * strlen("fe80::aaaa:bbbb:cccc:dddd@gif0") == 30, strlen("/128") == 4   * strlen("fe80::aaaa:bbbb:cccc:dddd@gif0") == 30, strlen("/128") == 4
  */   */
 #define WID_DST(af)     ((af) == AF_INET6 ? (nflag ? 34 : 18) : 18)  
 #define WID_GW(af)      ((af) == AF_INET6 ? (nflag ? 30 : 18) : 18)  #define WID_GW(af)      ((af) == AF_INET6 ? (nflag ? 30 : 18) : 18)
   
   int
   WID_DST(int af)
   {
   
           if (nflag)
                   switch (af) {
                   case AF_MPLS:
                           return 34;
                   case AF_INET6:
                           return 34;
                   default:
                           return 18;
                   }
           else
                   switch (af) {
                   case AF_MPLS:
                           return 34;
                   default:
                           return 18;
                   }
   }
   
 /*  /*
  * Print header for routing table columns.   * Print header for routing table columns.
  */   */
Line 207 
Line 231 
 {  {
         if (Aflag)          if (Aflag)
                 printf("%-*.*s ", PLEN, PLEN, "Address");                  printf("%-*.*s ", PLEN, PLEN, "Address");
         if (af != PF_KEY)          switch (af) {
                 printf("%-*.*s %-*.*s %-6.6s %6.6s %8.8s %6.6s  %s\n",          case PF_KEY:
                     WID_DST(af), WID_DST(af), "Destination",  
                     WID_GW(af), WID_GW(af), "Gateway",  
                     "Flags", "Refs", "Use", "Mtu", "Interface");  
         else  
                 printf("%-18s %-5s %-18s %-5s %-5s %-22s\n",                  printf("%-18s %-5s %-18s %-5s %-5s %-22s\n",
                     "Source", "Port", "Destination",                      "Source", "Port", "Destination",
                     "Port", "Proto", "SA(Address/Proto/Type/Direction)");                      "Port", "Proto", "SA(Address/Proto/Type/Direction)");
                   break;
           case PF_MPLS:
                   printf("%-16s %-10s %-6s %-18s %-6.6s %5.5s %8.8s %5.5s  %4.4s %s\n",
                       "In label", "Out label", "Op", "Gateway",
                       "Flags", "Refs", "Use", "Mtu", "Prio", "Interface");
                   break;
           default:
                   printf("%-*.*s %-*.*s %-6.6s %5.5s %8.8s %5.5s  %4.4s %s\n",
                       WID_DST(af), WID_DST(af), "Destination",
                       WID_GW(af), WID_GW(af), "Gateway",
                       "Flags", "Refs", "Use", "Mtu", "Prio", "Iface");
                   break;
           }
 }  }
   
 static void  static void
Line 265 
Line 298 
         p_sockaddr(rti_info[RTAX_GATEWAY], NULL, RTF_HOST,          p_sockaddr(rti_info[RTAX_GATEWAY], NULL, RTF_HOST,
             WID_GW(sa->sa_family));              WID_GW(sa->sa_family));
         p_flags(rtm->rtm_flags, "%-6.6s ");          p_flags(rtm->rtm_flags, "%-6.6s ");
         printf("%6u %8llu ", rtm->rtm_rmx.rmx_refcnt,          printf("%5u %8llu ", rtm->rtm_rmx.rmx_refcnt,
             rtm->rtm_rmx.rmx_pksent);              rtm->rtm_rmx.rmx_pksent);
         if (rtm->rtm_rmx.rmx_mtu)          if (rtm->rtm_rmx.rmx_mtu)
                 printf("%6u ", rtm->rtm_rmx.rmx_mtu);                  printf("%5u ", rtm->rtm_rmx.rmx_mtu);
         else          else
                 printf("%6s ", "-");                  printf("%5s ", "-");
         putchar((rtm->rtm_rmx.rmx_locks & RTV_MTU) ? 'L' : ' ');          putchar((rtm->rtm_rmx.rmx_locks & RTV_MTU) ? 'L' : ' ');
         printf(" %.16s", if_indextoname(rtm->rtm_index, ifbuf));          printf("  %2d %.16s", rtm->rtm_priority,
               if_indextoname(rtm->rtm_index, ifbuf));
         putchar('\n');          putchar('\n');
 }  }
   
Line 282 
Line 316 
 void  void
 p_pfkentry(struct sadb_msg *msg)  p_pfkentry(struct sadb_msg *msg)
 {  {
         static int               old = 0;          static int               old = 0;
         struct sadb_address     *saddr;          struct sadb_address     *saddr;
         struct sadb_protocol    *sap, *saft;          struct sadb_protocol    *sap, *saft;
         struct sockaddr         *sa, *mask;          struct sockaddr         *sa, *mask;
Line 341 
Line 375 
         case PF_KEY:          case PF_KEY:
                 afname = "Encap";                  afname = "Encap";
                 break;                  break;
           case AF_MPLS:
                   afname = "MPLS";
                   break;
         case AF_APPLETALK:          case AF_APPLETALK:
                 afname = "AppleTalk";                  afname = "AppleTalk";
                 break;                  break;
Line 369 
Line 406 
 void  void
 p_encap(struct sockaddr *sa, struct sockaddr *mask, int width)  p_encap(struct sockaddr *sa, struct sockaddr *mask, int width)
 {  {
         char            *cp;          char            *cp;
         unsigned short   port;          unsigned short   port = 0;
   
         if (mask)          if (mask)
                 cp = netname(sa, mask);                  cp = netname(sa, mask);
Line 568 
Line 605 
   
         case AF_LINK:          case AF_LINK:
                 return (link_print(sa));                  return (link_print(sa));
           case AF_MPLS:
                   return (label_print(sa));
         case AF_UNSPEC:          case AF_UNSPEC:
                 if (sa->sa_len == sizeof(struct sockaddr_rtlabel)) {                  if (sa->sa_len == sizeof(struct sockaddr_rtlabel)) {
                         static char name[RTLABEL_LEN];                          static char name[RTLABEL_LEN];
Line 775 
Line 813 
                     (struct sockaddr_in6 *)mask);                      (struct sockaddr_in6 *)mask);
         case AF_LINK:          case AF_LINK:
                 return (link_print(sa));                  return (link_print(sa));
           case AF_MPLS:
                   return (label_print(sa));
         default:          default:
                 snprintf(line, sizeof(line), "af %d: %s",                  snprintf(line, sizeof(line), "af %d: %s",
                     sa->sa_family, any_ntoa(sa));                      sa->sa_family, any_ntoa(sa));
Line 821 
Line 861 
         default:          default:
                 return (link_ntoa(sdl));                  return (link_ntoa(sdl));
         }          }
   }
   
   char *
   label_print_op(u_int8_t type)
   {
           switch (type) {
           case MPLS_OP_POP:
                   return ("POP");
           case MPLS_OP_SWAP:
                   return ("SWAP");
           case MPLS_OP_PUSH:
                   return ("PUSH");
           default:
                   return ("?");
           }
   }
   
   char *
   label_print(struct sockaddr *sa)
   {
           struct sockaddr_mpls    *smpls = (struct sockaddr_mpls *)sa;
           char                     ifname_in[IF_NAMESIZE];
           char                     ifname_out[IF_NAMESIZE];
           char                    *in_label;
           char                    *out_label;
   
           if (asprintf(&in_label, "%u%%%s",
               ntohl(smpls->smpls_in_label) >> MPLS_LABEL_OFFSET,
               if_indextoname(smpls->smpls_in_ifindex, ifname_in)) == -1)
                   err(1, NULL);
   
           if (asprintf(&out_label, "%u",
               ntohl(smpls->smpls_out_label) >> MPLS_LABEL_OFFSET) == -1)
                   err(1, NULL);
   
           (void)snprintf(line, sizeof(line), "%-16s %-10s %-6s", in_label,
               smpls->smpls_operation == MPLS_OP_POP ? "-" : out_label,
               label_print_op(smpls->smpls_operation));
   
           free(in_label);
           free(out_label);
   
           return (line);
 }  }
   
 void  void

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.13