Thu Apr 28 2011 17:14:00

Asterisk developer's documentation


portinfo.c File Reference

Interface to mISDN - port info. More...

#include "isdn_lib.h"
#include "isdn_lib_intern.h"
Include dependency graph for portinfo.c:

Go to the source code of this file.

Functions

void isdn_port_info (void)
int main ()

Detailed Description

Interface to mISDN - port info.

Author:
Christian Richter <crich@beronet.com>

Definition in file portinfo.c.


Function Documentation

void isdn_port_info ( void  )

Definition at line 14 of file portinfo.c.

References buff, and errno.

Referenced by main().

{
   int err;
   int i, ii, p;
   int useable, nt, pri;
   unsigned char buff[1025];
   iframe_t *frm = (iframe_t *)buff;
   stack_info_t *stinf;
   int device;

   /* open mISDN */
   if ((device = mISDN_open()) < 0)
   {
      fprintf(stderr, "mISDN_open() failed: ret=%d errno=%d (%s) Check for mISDN modules and device.\n", device, errno, strerror(errno));
      exit(-1);
   }

   /* get number of stacks */
   i = 1;
   ii = mISDN_get_stack_count(device);
   printf("\n");
   if (ii <= 0)
   {
      printf("Found no card. Please be sure to load card drivers.\n");
   }

   /* loop the number of cards and get their info */
   while(i <= ii)
   {
      err = mISDN_get_stack_info(device, i, buff, sizeof(buff));
      if (err <= 0)
      {
         fprintf(stderr, "mISDN_get_stack_info() failed: port=%d err=%d\n", i, err);
         break;
      }
      stinf = (stack_info_t *)&frm->data.p;

      nt = pri = 0;
      useable = 1;

      /* output the port info */
      printf("Port %2d: ", i);
      switch(stinf->pid.protocol[0] & ~ISDN_PID_FEATURE_MASK)
      {
         case ISDN_PID_L0_TE_S0:
         printf("TE-mode BRI S/T interface line (for phone lines)");
#if 0
         if (stinf->pid.protocol[0] & ISDN_PID_L0_TE_S0_HFC & ISDN_PID_FEATURE_MASK)
            printf(" HFC multiport card");
#endif
         break;
         case ISDN_PID_L0_NT_S0:
         nt = 1;
         printf("NT-mode BRI S/T interface port (for phones)");
#if 0
         if (stinf->pid.protocol[0] & ISDN_PID_L0_NT_S0_HFC & ISDN_PID_FEATURE_MASK)
            printf(" HFC multiport card");
#endif
         break;
         case ISDN_PID_L0_TE_U:
         printf("TE-mode BRI U   interface line");
         break;
         case ISDN_PID_L0_NT_U:
         nt = 1;
         printf("NT-mode BRI U   interface port");
         break;
         case ISDN_PID_L0_TE_UP2:
         printf("TE-mode BRI Up2 interface line");
         break;
         case ISDN_PID_L0_NT_UP2:
         nt = 1;
         printf("NT-mode BRI Up2 interface port");
         break;
         case ISDN_PID_L0_TE_E1:
         pri = 1;
         printf("TE-mode PRI E1  interface line (for phone lines)");
#if 0
         if (stinf->pid.protocol[0] & ISDN_PID_L0_TE_E1_HFC & ISDN_PID_FEATURE_MASK)
            printf(" HFC-E1 card");
#endif
         break;
         case ISDN_PID_L0_NT_E1:
         nt = 1;
         pri = 1;
         printf("NT-mode PRI E1  interface port (for phones)");
#if 0
         if (stinf->pid.protocol[0] & ISDN_PID_L0_NT_E1_HFC & ISDN_PID_FEATURE_MASK)
            printf(" HFC-E1 card");
#endif
         break;
         default:
         useable = 0;
         printf("unknown type 0x%08x",stinf->pid.protocol[0]);
      }
      printf("\n");

      if (nt)
      {
         if (stinf->pid.protocol[1] == 0)
         {
            useable = 0;
            printf(" -> Missing layer 1 NT-mode protocol.\n");
         }
         p = 2;
         while(p <= MAX_LAYER_NR) {
            if (stinf->pid.protocol[p])
            {
               useable = 0;
               printf(" -> Layer %d protocol 0x%08x is detected, but not allowed for NT lib.\n", p, stinf->pid.protocol[p]);
            }
            p++;
         }
         if (useable)
         {
            if (pri)
               printf(" -> Interface is Point-To-Point (PRI).\n");
            else
               printf(" -> Interface can be Poin-To-Point/Multipoint.\n");
         }
      } else
      {
         if (stinf->pid.protocol[1] == 0)
         {
            useable = 0;
            printf(" -> Missing layer 1 protocol.\n");
         }
         if (stinf->pid.protocol[2] == 0)
         {
            useable = 0;
            printf(" -> Missing layer 2 protocol.\n");
         }
         if (stinf->pid.protocol[2] & ISDN_PID_L2_DF_PTP)
         {
            printf(" -> Interface is Poin-To-Point.\n");
         }
         if (stinf->pid.protocol[3] == 0)
         {
            useable = 0;
            printf(" -> Missing layer 3 protocol.\n");
         } else
         {
            printf(" -> Protocol: ");
            switch(stinf->pid.protocol[3] & ~ISDN_PID_FEATURE_MASK)
            {
               case ISDN_PID_L3_DSS1USER:
               printf("DSS1 (Euro ISDN)");
               break;

               default:
               useable = 0;
               printf("unknown protocol 0x%08x",stinf->pid.protocol[3]);
            }
            printf("\n");
         }
         p = 4;
         while(p <= MAX_LAYER_NR) {
            if (stinf->pid.protocol[p])
            {
               useable = 0;
               printf(" -> Layer %d protocol 0x%08x is detected, but not allowed for TE lib.\n", p, stinf->pid.protocol[p]);
            }
            p++;
         }
         printf(" -> childcnt: %d\n",stinf->childcnt);
      }

      if (!useable)
         printf(" * Port NOT useable for PBX\n");

      printf("--------\n");

      i++;
   }
   printf("\n");

   /* close mISDN */
   if ((err = mISDN_close(device)))
   {
      fprintf(stderr, "mISDN_close() failed: err=%d '%s'\n", err, strerror(err));
      exit(-1);
   }
}
int main ( )

Definition at line 198 of file portinfo.c.

References isdn_port_info().

{
  isdn_port_info();
  return 0;
}