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

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _UDP_H
  2. #define _UDP_H
  3. #ifndef _GLOBAL_H
  4. #include "global.h"
  5. #endif
  6. #ifndef _MBUF_H
  7. #include "mbuf.h"
  8. #endif
  9. #ifndef _IFACE_H
  10. #include "iface.h"
  11. #endif
  12. #ifndef _INTERNET_H
  13. #include "internet.h"
  14. #endif
  15. #ifndef _IP_H
  16. #include "ip.h"
  17. #endif
  18. #ifndef _NETUSER_H
  19. #include "netuser.h"
  20. #endif
  21. /* SNMP MIB variables, used for statistics and control. See RFC 1066 */
  22. extern struct mib_entry Udp_mib[];
  23. #define udpInDatagrams Udp_mib[1].value.integer
  24. #define udpNoPorts Udp_mib[2].value.integer
  25. #define udpInErrors Udp_mib[3].value.integer
  26. #define udpOutDatagrams Udp_mib[4].value.integer
  27. #define NUMUDPMIB 4
  28. /* User Datagram Protocol definitions */
  29. /* Structure of a UDP protocol header */
  30. struct udp {
  31. uint16 source; /* Source port */
  32. uint16 dest; /* Destination port */
  33. uint16 length; /* Length of header and data */
  34. uint16 checksum; /* Checksum over pseudo-header, header and data */
  35. };
  36. #define UDPHDR 8 /* Length of UDP header */
  37. /* User Datagram Protocol control block
  38.  * Each entry on the receive queue consists of the
  39.  * remote socket structure, followed by any data
  40.  */
  41. struct udp_cb {
  42. struct udp_cb *next;
  43. struct socket socket; /* Local port accepting datagrams */
  44. void (*r_upcall)(struct iface *iface,struct udp_cb *,int);
  45. /* Function to call when one arrives */
  46. struct mbuf *rcvq; /* Queue of pending datagrams */
  47. int rcvcnt; /* Count of pending datagrams */
  48. int user; /* User link */
  49. };
  50. extern struct udp_cb *Udps; /* Hash table for UDP structures */
  51. /* UDP primitives */
  52. /* In udp.c: */
  53. int del_udp(struct udp_cb *up);
  54. struct udp_cb *open_udp(struct socket *lsocket,
  55. void (*r_upcall)(struct iface *iface,struct udp_cb *,int));
  56. int recv_udp(struct udp_cb *up,struct socket *fsocket,struct mbuf **bp);
  57. int send_udp(struct socket *lsocket,struct socket *fsocket,char tos,
  58. char ttl,struct mbuf **data,uint16 length,uint16 id,char df);
  59. void udp_input(struct iface *iface,struct ip *ip,struct mbuf **bp,
  60. int rxbroadcast,int32 said);
  61. void udp_garbage(int drastic);
  62. #ifdef HOPCHECK
  63. void udp_icmp(int32 icsource, int32 ipsource,int32 ipdest,
  64. char ictype,char iccode,struct mbuf **bpp);
  65. /* In hop.c: */
  66. void hop_icmp(struct udp_cb *ucb, int32 icsource, int32 ipdest,
  67. uint16 udpdest, char ictype, char iccode);
  68. #endif
  69. /* In udpcmd.c: */
  70. int st_udp(struct udp_cb *udp,int n);
  71. /* In udphdr.c: */
  72. void htonudp(struct udp *udp,struct mbuf **data,struct pseudo_header *ph);
  73. int ntohudp(struct udp *udp,struct mbuf **bpp);
  74. uint16 udpcksum(struct mbuf *bp);
  75. #endif /* _UDP_H */