pppShow.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:13k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* pppShow.c - Point-to-Point Protocol show routines */
  2. /* Copyright 1995-1999 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01j,14mar99,jdi  doc: removed refs to config.h and/or configAll.h (SPR 25663).
  8. 01i,11jul95,dzb  more doc tweaks.
  9. 01h,06jul95,dzb  doc tweaks.
  10. 01g,23jun95,dzb  changed to pppInfoGet() to copy out structures.
  11.                  added PAP stats to pppInfoShow().
  12. 01f,15jun95,dzb  header file consolidation.
  13. 01e,08may95,dzb  Added pppSecretShow().
  14. 01d,07mar95,dzb  Changed "ip packets" tp be  a real count of IP packets.
  15.                  additional doc/formatting.
  16. 01c,09feb95,dab  changed pppInfoShow() format.  removed lcp_echo_fails_reached.
  17.                  included VJ, mtu, and mru info (SPR #4045).
  18. 01b,13jan95,dzb  warnings cleanup.  changed to include pppShow.h.  ANSI-fied.
  19. 01a,21dec94,dab  VxWorks port - first WRS version.
  20.    +dzb  added: path for ppp header files, WRS copyright.
  21. */
  22. /*
  23. DESCRIPTION
  24. This library provides routines to show Point-to-Point Protocol (PPP) link
  25. status information and statistics.  Also provided are routines that
  26. programmatically access this same information.
  27. This library is automatically linked into the VxWorks system image when
  28. the configuration macro INCLUDE_PPP is defined.
  29. INCLUDE FILES: pppLib.h
  30. SEE ALSO: pppLib,
  31. .pG "Network"
  32. */
  33. /* includes */
  34. #include <vxWorks.h>
  35. #include <stdio.h>
  36. #include <ioctl.h>
  37. #include <net/mbuf.h>
  38. #include <sys/types.h>
  39. #include <sys/socket.h>
  40. #include <net/if.h>
  41. #include <netinet/in.h>
  42. #include <netinet/in_systm.h>
  43. #include <netinet/ip.h>
  44. #include <netinet/ip_var.h>
  45. #include "pppLib.h"
  46. /* pointer to the per task variables */
  47. extern PPP_TASK_VARS *ppp_if[];
  48. extern struct ppp_softc *ppp_softc[];
  49. static char *link_phase[] =
  50.     {
  51.     "DEAD",
  52.     "ESTABLISH",
  53.     "AUTHENTICATE",
  54.     "NETWORK",
  55.     "TERMINATE"
  56.     };
  57. static char *link_state[] =
  58.     {
  59.     "INITIAL",
  60.     "STARTING",
  61.     "CLOSED",
  62.     "STOPPED",
  63.     "CLOSING",
  64.     "STOPPING",
  65.     "REQUEST SENT",
  66.     "ACK RECEIVED",
  67.     "ACK SENT",
  68.     "OPENED"
  69.     };
  70. static char *client_pap_state[] =
  71.     {
  72.     "INITIAL",
  73.     "CLOSED",
  74.     "PENDING",
  75.     "AUTHENTICATION REQ",
  76.     "OPEN",
  77.     "BAD AUTHENTICATION"
  78.     };
  79. static char *server_pap_state[] =
  80.     {
  81.     "INITIAL",
  82.     "CLOSED",
  83.     "PENDING",
  84.     "LISTEN",
  85.     "OPEN",
  86.     "BAD AUTHENTICATION"
  87.     };
  88. static char *client_chap_state[] =
  89.     {
  90.     "INITIAL",
  91.     "CLOSED",
  92.     "PENDING",
  93.     "LISTEN",
  94.     "RESPONSE",
  95.     "OPEN"
  96.     };
  97. static char *server_chap_state[] =
  98.     {
  99.     "INITIAL",
  100.     "CLOSED",
  101.     "PENDING",
  102.     "INITIAL CHALLENGE",
  103.     "OPEN",
  104.     "RECHALLENGE",
  105.     "BAD AUTHENTICATION"
  106.     };
  107. /******************************************************************************
  108. *
  109. * pppShowInit - initialize the PPP show facility
  110. *
  111. * This routine links the PPP show facility into the VxWorks system image.
  112. * It is called from usrNetwork.c when the configuration macro INCLUDE_PPP
  113. * is defined.
  114. *
  115. * RETURNS: N/A
  116. *
  117. * NOMANUAL
  118. */
  119. void pppShowInit (void)
  120.     {
  121.     }
  122. /*******************************************************************************
  123. *
  124. * pppInfoShow - display PPP link status information
  125. *
  126. * This routine displays status information pertaining to each initialized
  127. * Point-to-Point Protocol (PPP) link, regardless of the link state.
  128. * State and option information is gathered for the Link Control Protocol
  129. * (LCP), Internet Protocol Control Protocol (IPCP), Password Authentication
  130. * Protocol (PAP), and Challenge-Handshake Authentication Protocol (CHAP).
  131. *
  132. * RETURNS: N/A
  133. *
  134. * SEE ALSO: pppLib
  135. */
  136. void pppInfoShow (void)
  137.     {
  138.     FAST int i;
  139.     FAST PPP_TASK_VARS *tmp;    /* per task PPP variables */
  140.     int link_found = 0;
  141.     int n;
  142.     for (i = 0; i < NPPP; i++)
  143. {
  144. if ((tmp = ppp_if[i]) == NULL)
  145.     continue;
  146. link_found = 1;
  147. printf ("ppp%drn", i);
  148. printf ("tLCP Statsrn");
  149. printf ("tt%-30.30s  %srn", "LCP phase", link_phase[tmp->phase]);
  150. printf ("tt%-30.30s  %srn", "LCP state",
  151. link_state[tmp->lcp_fsm.state]);
  152. printf ("tt%-30.30s  %srn", "passive",
  153.         tmp->lcp_wantoptions.passive ? "ON" : "OFF");
  154. printf ("tt%-30.30s  %srn", "silent",
  155.         tmp->lcp_wantoptions.silent ? "ON" : "OFF");
  156. printf ("tt%-30.30s  %srn", "restart",
  157.         tmp->lcp_wantoptions.restart ? "ON" : "OFF");
  158.         if (tmp->lcp_fsm.state == OPENED)
  159.             {
  160.             ppptioctl (i, PPPIOCGMRU, (caddr_t) &n);
  161.             printf ("tt%-30.30s  %drn", "mru", n);
  162.             ppptioctl (i, SIOCGIFMTU, (caddr_t) &n);
  163.             printf ("tt%-30.30s  %drn", "mtu", n);
  164.             ppptioctl (i, PPPIOCGASYNCMAP, (caddr_t) &n);
  165.             printf ("tt%-30.30s  0x%xrn", "async map", n);
  166.             printf ("tt%-30.30s  0x%xrn", "local magic number",
  167.                     tmp->lcp_gotoptions.magicnumber);
  168.             printf ("tt%-30.30s  %srn", "protocol field compression",
  169.                     tmp->lcp_gotoptions.neg_pcompression ? "ON" : "OFF");
  170.             printf ("tt%-30.30s  %srn", "addr/ctrl field compression",
  171.                     tmp->lcp_gotoptions.neg_accompression ? "ON" : "OFF");
  172.             }
  173. printf ("tt%-30.30s  %srn", "lcp echo timer",
  174.         tmp->lcp_echo_timer_running ? "ON" : "OFF");
  175.         if (tmp->lcp_echo_timer_running)
  176.             {
  177.     printf ("tt%-30.30s  %drn", "lcp echos pending",
  178.             tmp->lcp_echos_pending);
  179.     printf ("tt%-30.30s  %drn", "lcp echo number",
  180.             tmp->lcp_echo_number);
  181.          printf ("tt%-30.30s  %drn", "lcp echo interval",
  182.             tmp->lcp_echo_interval);
  183.             printf ("tt%-30.30s  %drn", "lcp echo fails",
  184.             tmp->lcp_echo_fails);
  185.             }
  186.         printf ("tIPCP Statsrn");
  187.         printf ("tt%-30.30s  %srn", "IPCP state",
  188.                 link_state[tmp->ipcp_fsm.state]);
  189.      
  190.         if (tmp->ipcp_fsm.state == OPENED)
  191.             {
  192.             printf ("tt%-30.30s  %srn", "local IP address",
  193.                     ip_ntoa(tmp->ipcp_gotoptions.ouraddr));
  194.             printf ("tt%-30.30s  %srn", "remote IP address",
  195.                     ip_ntoa(tmp->ipcp_hisoptions.hisaddr));
  196.             printf ("tt%-30.30s  %srn", "vj compression protocol",
  197.                      tmp->ipcp_gotoptions.neg_vj ? "ON" : "OFF");
  198.             }
  199. printf ("tPAP Statsrn");
  200. printf ("tt%-30.30s  %srn", "client PAP state",
  201.         client_pap_state[tmp->upap.us_clientstate]);
  202. printf ("tt%-30.30s  %srn", "server PAP state",
  203.         server_pap_state[tmp->upap.us_serverstate]);
  204. printf ("tCHAP Statsrn");
  205. printf ("tt%-30.30s  %srn", "client CHAP state",
  206.         client_chap_state[tmp->chap.clientstate]);
  207. printf ("tt%-30.30s  %srn", "server CHAP state",
  208.         server_chap_state[tmp->chap.serverstate]);
  209. printf ("n");
  210.         }
  211.     if (!link_found)
  212. printf ("No PPP links are presentrn");
  213.     }
  214. /*******************************************************************************
  215. *
  216. * pppInfoGet - get PPP link status information
  217. *
  218. * This routine gets status information pertaining to the specified
  219. * Point-to-Point Protocol (PPP) link, regardless of the link state.
  220. * State and option information is gathered for the Link Control Protocol
  221. * (LCP), Internet Protocol Control Protocol (IPCP), Password Authentication
  222. * Protocol (PAP), and Challenge-Handshake Authentication Protocol (CHAP).
  223. *
  224. * The PPP link information is returned through a PPP_INFO structure, which
  225. * is defined in h/netinet/ppp/pppShow.h.
  226. *
  227. * RETURNS: OK, or ERROR if <unit> is an invalid PPP unit number.
  228. *
  229. * SEE ALSO: pppLib
  230. */
  231. STATUS pppInfoGet
  232.     (
  233.     int unit, /* PPP interface unit number to examine */
  234.     PPP_INFO *pInfo /* PPP_INFO structure to be filled */
  235.     )
  236.     {
  237.     FAST PPP_TASK_VARS *tmp;
  238.     if (unit < 0 || unit > NPPP || (tmp = ppp_if[unit]) == NULL ||
  239. pInfo == NULL)
  240.         return (ERROR);
  241.     /* LCP variables */
  242.     BCOPY (&tmp->lcp_wantoptions, &pInfo->lcp_wantoptions,
  243. sizeof(struct lcp_options));
  244.     BCOPY (&tmp->lcp_gotoptions, &pInfo->lcp_gotoptions,
  245. sizeof(struct lcp_options));
  246.     BCOPY (&tmp->lcp_allowoptions, &pInfo->lcp_allowoptions,
  247. sizeof(struct lcp_options));
  248.     BCOPY (&tmp->lcp_hisoptions, &pInfo->lcp_hisoptions,
  249. sizeof(struct lcp_options));
  250.     BCOPY (&tmp->lcp_fsm, &pInfo->lcp_fsm, sizeof(struct fsm));
  251.     pInfo->lcp_echos_pending = tmp->lcp_echos_pending;
  252.     pInfo->lcp_echo_number = tmp->lcp_echo_number;
  253.     pInfo->lcp_echo_timer_running = tmp->lcp_echo_timer_running;
  254.     pInfo->lcp_echo_interval = tmp->lcp_echo_interval;
  255.     pInfo->lcp_echo_fails = tmp->lcp_echo_fails;
  256.     /* IPCP variables */ 
  257.     BCOPY (&tmp->ipcp_wantoptions, &pInfo->ipcp_wantoptions,
  258. sizeof(struct ipcp_options));
  259.     BCOPY (&tmp->ipcp_gotoptions, &pInfo->ipcp_gotoptions,
  260. sizeof(struct ipcp_options));
  261.     BCOPY (&tmp->ipcp_allowoptions, &pInfo->ipcp_allowoptions,
  262. sizeof(struct ipcp_options));
  263.     BCOPY (&tmp->ipcp_hisoptions, &pInfo->ipcp_hisoptions,
  264. sizeof(struct ipcp_options));
  265.     BCOPY (&tmp->ipcp_fsm, &pInfo->ipcp_fsm, sizeof(struct fsm));
  266.     /* authentication variables */ 
  267.     BCOPY (&tmp->upap, &pInfo->upap, sizeof(struct upap_state));
  268.     BCOPY (&tmp->chap, &pInfo->chap, sizeof(struct chap_state));
  269.     return (OK);
  270.     }
  271. /*******************************************************************************
  272. *
  273. * pppstatShow - display PPP link statistics
  274. *
  275. * This routine displays statistics for each initialized Point-to-Point
  276. * Protocol (PPP) link.  Detailed are the numbers of bytes and packets received 
  277. * and sent through each PPP interface.
  278. *
  279. * RETURNS: N/A
  280. *
  281. * SEE ALSO: pppLib
  282. */
  283. void pppstatShow (void)
  284.     {
  285.     FAST int i;
  286.     FAST struct ppp_softc *tmp;
  287.     int link_found = 0;
  288.     for (i = 0; i < NPPP; i++)
  289. {
  290. if ((tmp = ppp_softc[i]) == NULL)
  291.     continue;
  292. link_found = 1;
  293. printf ("ppp%drn", i);
  294. printf ("tInputrn");
  295. printf ("tt%-30.30s  %drn", "total bytes ", tmp->sc_bytesrcvd);
  296. printf ("tt%-30.30s  %drn", "total packets ",
  297.         tmp->sc_if.if_ipackets);
  298. printf ("tt%-30.30s  %drn", "ip packets ", tmp->sc_iprcvd);
  299. printf ("tt%-30.30s  %drn", "VJ compressed packets ",
  300.         tmp->sc_comp.sls_compressedin);
  301. printf ("tt%-30.30s  %drn", "VJ uncompressed packets ",
  302.         tmp->sc_comp.sls_uncompressedin);
  303. printf ("tt%-30.30s  %drn", "VJ uncompress errors",
  304.         tmp->sc_comp.sls_errorin);
  305. printf ("tOutputrn");
  306. printf ("tt%-30.30s  %drn", "total bytes ", tmp->sc_bytessent);
  307. printf ("tt%-30.30s  %drn", "total packets ",
  308. tmp->sc_if.if_opackets);
  309. printf ("tt%-30.30s  %drn", "ip packets ", tmp->sc_ipsent);
  310. printf ("tt%-30.30s  %drn", "VJ compressed packets ",
  311.         tmp->sc_comp.sls_compressed);
  312. printf ("tt%-30.30s  %drn", "VJ uncompressed packets ",
  313.         tmp->sc_comp.sls_packets - tmp->sc_comp.sls_compressed);
  314.         }
  315.     if (!link_found)
  316.         printf ("No PPP links are presentrn");
  317.     }
  318. /*******************************************************************************
  319. *
  320. * pppstatGet - get PPP link statistics
  321. *
  322. * This routine gets statistics for the specified Point-to-Point Protocol
  323. * (PPP) link.  Detailed are the numbers of bytes and packets received 
  324. * and sent through the PPP interface.
  325. *
  326. * The PPP link statistics are returned through a PPP_STAT structure, which
  327. * is defined in h/netinet/ppp/pppShow.h.
  328. *
  329. * RETURNS: OK, or ERROR if <unit> is an invalid PPP unit number.
  330. *
  331. * SEE ALSO: pppLib
  332. */
  333. STATUS pppstatGet
  334.     (
  335.     int unit, /* PPP interface unit number to examine */
  336.     PPP_STAT *pStat /* PPP_STAT structure to be filled */
  337.     )
  338.     {
  339.     FAST struct ppp_softc *tmp;
  340.     if (unit < 0 || unit > NPPP || (tmp = ppp_softc[unit]) == NULL ||
  341. pStat == NULL)
  342. return (ERROR);
  343.     pStat->in_bytes = tmp->sc_bytesrcvd;
  344.     pStat->in_pkt = tmp->sc_if.if_ipackets;
  345.     pStat->in_ip_pkt = tmp->sc_iprcvd;
  346.     pStat->in_vj_compr_pkt = tmp->sc_comp.sls_compressedin;
  347.     pStat->in_vj_uncompr_pkt = tmp->sc_comp.sls_uncompressedin;
  348.     pStat->in_vj_compr_error = tmp->sc_comp.sls_errorin;
  349.     
  350.     pStat->out_bytes = tmp->sc_bytessent;
  351.     pStat->out_pkt = tmp->sc_if.if_opackets;
  352.     pStat->out_ip_pkt = tmp->sc_ipsent;
  353.     pStat->out_vj_compr_pkt = tmp->sc_comp.sls_compressed;
  354.     pStat->out_vj_uncompr_pkt = tmp->sc_comp.sls_packets -
  355. tmp->sc_comp.sls_compressed;
  356.     return (OK);
  357.     }
  358. /*******************************************************************************
  359. *
  360. * pppSecretShow - display the PPP authentication secrets table
  361. *
  362. * This routine displays the Point-to-Point Protocol (PPP) authentication
  363. * secrets table.  The information in the secrets table may be used by the
  364. * Password Authentication Protocol (PAP) and Challenge-Handshake Authentication
  365. * Protocol (CHAP) user authentication protocols.
  366. *
  367. * RETURNS: N/A
  368. *
  369. * SEE ALSO: pppLib, pppSecretAdd(), pppSecretDelete()
  370. */
  371. void pppSecretShow (void)
  372.     {
  373.     PPP_SECRET * pSecret = pppSecretHead;
  374.     if (pSecret == NULL) /* list empty ? */
  375. return;
  376.     /* printout header */
  377.     printf ("PPP AUTHENTICAITON SECRETS:n");
  378.     printf ("client            server            secret            address listn");
  379.     printf ("-------------------------------------------------------------------------------n");
  380.     /* printout secrets */
  381.     for (; pSecret != NULL; pSecret = pSecret->secretNext)
  382. {
  383. printf ("%-17.17s ", pSecret->client);
  384. printf ("%-17.17s ", pSecret->server);
  385. printf ("%-17.17s ", pSecret->secret);
  386. printf ("%-25.25sn", pSecret->addrs);
  387. }
  388.     }