iface.h
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:5k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _IFACE_H
  2. #define _IFACE_H
  3. #ifndef _GLOBAL_H
  4. #include "global.h"
  5. #endif
  6. #ifndef _MBUF_H
  7. #include "mbuf.h"
  8. #endif
  9. #ifndef _PROC_H
  10. #include "proc.h"
  11. #endif
  12. /* Interface encapsulation mode table entry. An array of these structures
  13.  * are initialized in config.c with all of the information necessary
  14.  * to attach a device.
  15.  */
  16. struct iface; /* Defined later */
  17. struct iftype {
  18. char *name; /* Name of encapsulation technique */
  19. int (*send)(struct mbuf **,struct iface *,int32,uint8);
  20. /* Routine to send an IP datagram */
  21. int (*output)(struct iface *,uint8 *,uint8 *,uint16,struct mbuf **);
  22. /* Routine to send link packet */
  23. char *(*format)(char *,uint8 *);
  24. /* Function that formats addresses */
  25. int (*scan)(uint8 *,char *);
  26. /* Reverse of format */
  27. int type; /* Type field for network process */
  28. int hwalen; /* Length of hardware address, if any */
  29. void (*rcvf)(struct iface *,struct mbuf **);
  30. /* Function that handles incoming packets */
  31. int (*addrtest)(struct iface *,struct mbuf *);
  32. /* Function that tests incoming addresses */
  33. void (*trace)(FILE *,struct mbuf **,int);
  34. /* Function that decodes protocol headers */
  35. int (*dinit)(struct iface *,int32,int,char **);
  36. /* Function to initialize demand dialing */
  37. int (*dstat)(struct iface *);
  38. /* Function to display dialer status */
  39. };
  40. extern struct iftype Iftypes[];
  41. /* Interface control structure */
  42. struct iface {
  43. struct iface *next; /* Linked list pointer */
  44. char *name; /* Ascii string with interface name */
  45. int32 addr; /* IP address */
  46. int32 broadcast; /* Broadcast address */
  47. int32 netmask; /* Network mask */
  48. uint16 mtu; /* Maximum transmission unit size */
  49. uint16 trace; /* Trace flags */
  50. #define IF_TRACE_OUT 0x01 /* Output packets */
  51. #define IF_TRACE_IN 0x10 /* Packets to me except broadcast */
  52. #define IF_TRACE_ASCII 0x100 /* Dump packets in ascii */
  53. #define IF_TRACE_HEX 0x200 /* Dump packets in hex/ascii */
  54. #define IF_TRACE_NOBC 0x1000 /* Suppress broadcasts */
  55. #define IF_TRACE_RAW 0x2000 /* Raw dump, if supported */
  56. FILE *trfp; /* Stream to trace to */
  57. struct iface *forw; /* Forwarding interface for output, if rx only */
  58. struct proc *rxproc; /* Receiver process, if any */
  59. struct proc *txproc; /* IP send process */
  60. struct proc *supv; /* Supervisory process, if any */
  61. struct mbuf *outq; /* IP datagram transmission queue */
  62. int outlim; /* Limit on outq length */
  63. int txbusy; /* Transmitter is busy */
  64. void *dstate; /* Demand dialer link state, if any */
  65. int (*dtickle)(struct iface *);
  66. /* Function to tickle dialer, if any */
  67. void (*dstatus)(struct iface *);
  68. /* Function to display dialer state, if any */
  69. /* Device dependent */
  70. int dev; /* Subdevice number to pass to send */
  71. /* To device -- control */
  72. int32 (*ioctl)(struct iface *,int cmd,int set,int32 val);
  73. /* From device -- when status changes */
  74. int (*iostatus)(struct iface *,int cmd,int32 val);
  75. /* Call before detaching */
  76. int (*stop)(struct iface *);
  77. uint8 *hwaddr; /* Device hardware address, if any */
  78. /* Encapsulation dependent */
  79. void *edv; /* Pointer to protocol extension block, if any */
  80. int xdev; /* Associated Slip or Nrs channel, if any */
  81. struct iftype *iftype; /* Pointer to appropriate iftype entry */
  82. /* Routine to send an IP datagram */
  83. int (*send)(struct mbuf **,struct iface *,int32,uint8);
  84. /* Encapsulate any link packet */
  85. int (*output)(struct iface *,uint8 *,uint8 *,uint16,struct mbuf **);
  86. /* Send raw packet */
  87. int (*raw)(struct iface *,struct mbuf **);
  88. /* Display status */
  89. void (*show)(struct iface *);
  90. int (*discard)(struct iface *,struct mbuf **);
  91. int (*echo)(struct iface *,struct mbuf **);
  92. /* Counters */
  93. int32 ipsndcnt;  /* IP datagrams sent */
  94. int32 rawsndcnt; /* Raw packets sent */
  95. int32 iprecvcnt; /* IP datagrams received */
  96. int32 rawrecvcnt; /* Raw packets received */
  97. int32 lastsent; /* Clock time of last send */
  98. int32 lastrecv; /* Clock time of last receive */
  99. };
  100. extern struct iface *Ifaces; /* Head of interface list */
  101. extern struct iface  Loopback; /* Optional loopback interface */
  102. extern struct iface  Encap; /* IP-in-IP pseudo interface */
  103. /* Header put on front of each packet sent to an interface */
  104. struct qhdr {
  105. uint8 tos;
  106. int32 gateway;
  107. };
  108. extern char Noipaddr[];
  109. extern struct mbuf *Hopper;
  110. /* In iface.c: */
  111. int bitbucket(struct iface *ifp,struct mbuf **bp);
  112. int if_detach(struct iface *ifp);
  113. struct iface *if_lookup(char *name);
  114. char *if_name(struct iface *ifp,char *comment);
  115. void if_tx(int dev,void *arg1,void *unused);
  116. struct iface *ismyaddr(int32 addr);
  117. void network(int i,void *v1,void *v2);
  118. int nu_send(struct mbuf **bpp,struct iface *ifp,int32 gateway,uint8 tos);
  119. int nu_output(struct iface *,uint8 *,uint8 *,uint16,struct mbuf **);
  120. int setencap(struct iface *ifp,char *mode);
  121. /* In config.c: */
  122. int net_route(struct iface *ifp,struct mbuf **bpp);
  123. #endif /* _IFACE_H */