home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / udp.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.6 KB  |  93 lines

  1. /*
  2.  * INET        An implementation of the TCP/IP protocol suite for the LINUX
  3.  *        operating system.  INET is implemented using the  BSD Socket
  4.  *        interface as the means of communication with the user level.
  5.  *
  6.  *        Definitions for the UDP protocol.
  7.  *
  8.  * Version:    @(#)udp.h    1.0.2    04/28/93
  9.  *
  10.  * Author:    Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  11.  *
  12.  *        This program is free software; you can redistribute it and/or
  13.  *        modify it under the terms of the GNU General Public License
  14.  *        as published by the Free Software Foundation; either version
  15.  *        2 of the License, or (at your option) any later version.
  16.  */
  17. #ifndef _LINUX_UDP_H
  18. #define _LINUX_UDP_H
  19.  
  20. #include <linux/types.h>
  21.  
  22. struct udphdr {
  23.     __be16    source;
  24.     __be16    dest;
  25.     __be16    len;
  26.     __sum16    check;
  27. };
  28.  
  29. /* UDP socket options */
  30. #define UDP_CORK    1    /* Never send partially complete segments */
  31. #define UDP_ENCAP    100    /* Set the socket to accept encapsulated packets */
  32.  
  33. /* UDP encapsulation types */
  34. #define UDP_ENCAP_ESPINUDP_NON_IKE    1 /* draft-ietf-ipsec-nat-t-ike-00/01 */
  35. #define UDP_ENCAP_ESPINUDP    2 /* draft-ietf-ipsec-udp-encaps-06 */
  36. #define UDP_ENCAP_L2TPINUDP    3 /* rfc2661 */
  37.  
  38. #ifdef __KERNEL__
  39. #include <net/inet_sock.h>
  40. #include <linux/skbuff.h>
  41. #include <net/netns/hash.h>
  42.  
  43. static inline struct udphdr *udp_hdr(const struct sk_buff *skb)
  44. {
  45.     return (struct udphdr *)skb_transport_header(skb);
  46. }
  47.  
  48. #define UDP_HTABLE_SIZE        128
  49.  
  50. static inline int udp_hashfn(struct net *net, const unsigned num)
  51. {
  52.     return (num + net_hash_mix(net)) & (UDP_HTABLE_SIZE - 1);
  53. }
  54.  
  55. struct udp_sock {
  56.     /* inet_sock has to be the first member */
  57.     struct inet_sock inet;
  58.     int         pending;    /* Any pending frames ? */
  59.     unsigned int     corkflag;    /* Cork is required */
  60.       __u16         encap_type;    /* Is this an Encapsulation socket? */
  61.     /*
  62.      * Following member retains the information to create a UDP header
  63.      * when the socket is uncorked.
  64.      */
  65.     __u16         len;        /* total length of pending frames */
  66.     /*
  67.      * Fields specific to UDP-Lite.
  68.      */
  69.     __u16         pcslen;
  70.     __u16         pcrlen;
  71. /* indicator bits used by pcflag: */
  72. #define UDPLITE_BIT      0x1          /* set by udplite proto init function */
  73. #define UDPLITE_SEND_CC  0x2          /* set via udplite setsockopt         */
  74. #define UDPLITE_RECV_CC  0x4        /* set via udplite setsocktopt        */
  75.     __u8         pcflag;        /* marks socket as UDP-Lite if > 0    */
  76.     __u8         unused[3];
  77.     /*
  78.      * For encapsulation sockets.
  79.      */
  80.     int (*encap_rcv)(struct sock *sk, struct sk_buff *skb);
  81. };
  82.  
  83. static inline struct udp_sock *udp_sk(const struct sock *sk)
  84. {
  85.     return (struct udp_sock *)sk;
  86. }
  87.  
  88. #define IS_UDPLITE(__sk) (udp_sk(__sk)->pcflag)
  89.  
  90. #endif
  91.  
  92. #endif    /* _LINUX_UDP_H */
  93.