home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / internet / tcpipsrc / h / if / NetMisc / c / kiss next >
Encoding:
Text File  |  1994-06-24  |  1.8 KB  |  70 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include "global.h"
  5. #include "mbuf.h"
  6. #include "iface.h"
  7. #include "kiss.h"
  8. #include "trace.h"
  9. #include "ax25.h"
  10. #include "slip.h"
  11. #include "misc.h"
  12.  
  13. /* Send raw data packet on KISS TNC */
  14. int kiss_raw(struct interface *interface, struct mbuf *data)
  15. {
  16.         register struct mbuf *bp;
  17.  
  18.         dump(interface,IF_TRACE_OUT,TRACE_AX25,data);
  19.  
  20.         /* Put type field for KISS TNC on front */
  21.         if((bp = pushdown(data,1)) == NULLBUF){
  22.                 free_p(data);
  23.                 return -1;
  24.         }
  25.         bp->data[0] = KISS_DATA;
  26.  
  27.         return(slip_raw(interface,bp));
  28. }
  29.  
  30. /* Process incoming KISS TNC frame */
  31. void kiss_recv(struct interface *interface, struct mbuf *bp)
  32. {
  33.         char kisstype;
  34.  
  35.         kisstype = pullchar(&bp);
  36.         switch(kisstype & 0xf){
  37.         case KISS_DATA:
  38.                 dump(interface,IF_TRACE_IN,TRACE_AX25,bp);
  39.                 ax_recv(interface,bp);
  40.                 break;
  41.         default:        /* could be a badly formed packet or tnc params */
  42.                 free_p(bp);
  43.         }
  44. }
  45. /* Perform device control on KISS TNC by sending control messages */
  46. int kiss_ioctl(struct interface *interface, int argc, char **argv)
  47. {
  48.         struct mbuf *hbp;
  49.         int i;
  50.         char *cp;
  51.  
  52.         if(argc < 1){
  53.                 cwprintf(NULL, "Data field missing\r\n");
  54.                 return 1;
  55.         }
  56.         /* Allocate space for arg bytes */
  57.         if((hbp = alloc_mbuf((int16)argc)) == NULLBUF){
  58.                 free_p(hbp);
  59.                 return 0;
  60.         }
  61.         hbp->cnt = argc;
  62.         hbp->next = NULLBUF;
  63.         for(i=0,cp = hbp->data;i < argc;)
  64.                 *cp++ = atoi(argv[i++]);
  65.  
  66.         slip_raw(interface,hbp);        /* Even more "raw" than kiss_raw */
  67.         return 0;
  68. }
  69.  
  70.