Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #ifndef _GPXE_SOCKET_H
  2. #define _GPXE_SOCKET_H
  3. /** @file
  4. *
  5. * Socket addresses
  6. *
  7. */
  8. FILE_LICENCE ( GPL2_OR_LATER );
  9. #include <stdint.h>
  10. /**
  11. * @defgroup commtypes Communication semantics
  12. *
  13. * @{
  14. */
  15. /** Connection-based, reliable streams */
  16. extern int tcp_sock_stream;
  17. #define TCP_SOCK_STREAM 0x1
  18. #define SOCK_STREAM tcp_sock_stream
  19. /** Connectionless, unreliable streams */
  20. extern int udp_sock_dgram;
  21. #define UDP_SOCK_DGRAM 0x2
  22. #define SOCK_DGRAM udp_sock_dgram
  23. /** @} */
  24. /**
  25. * Name communication semantics
  26. *
  27. * @v semantics Communication semantics (e.g. SOCK_STREAM)
  28. * @ret name Name of communication semantics
  29. */
  30. static inline __attribute__ (( always_inline )) const char *
  31. socket_semantics_name ( int semantics ) {
  32. /* Cannot use a switch() because of the {TCP_UDP}_SOCK_XXX hack */
  33. if ( semantics == SOCK_STREAM ) {
  34. return "SOCK_STREAM";
  35. } else if ( semantics == SOCK_DGRAM ) {
  36. return "SOCK_DGRAM";
  37. } else {
  38. return "SOCK_UNKNOWN";
  39. }
  40. }
  41. /**
  42. * @defgroup addrfam Address families
  43. *
  44. * @{
  45. */
  46. #define AF_INET 1 /**< IPv4 Internet addresses */
  47. #define AF_INET6 2 /**< IPv6 Internet addresses */
  48. /** @} */
  49. /**
  50. * Name address family
  51. *
  52. * @v family Address family (e.g. AF_INET)
  53. * @ret name Name of address family
  54. */
  55. static inline __attribute__ (( always_inline )) const char *
  56. socket_family_name ( int family ) {
  57. switch ( family ) {
  58. case AF_INET: return "AF_INET";
  59. case AF_INET6: return "AF_INET6";
  60. default: return "AF_UNKNOWN";
  61. }
  62. }
  63. /** A socket address family */
  64. typedef uint16_t sa_family_t;
  65. /** Length of a @c struct @c sockaddr */
  66. #define SA_LEN 32
  67. /**
  68. * Generalized socket address structure
  69. *
  70. * This contains the fields common to socket addresses for all address
  71. * families.
  72. */
  73. struct sockaddr {
  74. /** Socket address family
  75. *
  76. * This is an AF_XXX constant.
  77. */
  78. sa_family_t sa_family;
  79. /** Padding
  80. *
  81. * This ensures that a struct @c sockaddr_tcpip is large
  82. * enough to hold a socket address for any TCP/IP address
  83. * family.
  84. */
  85. char pad[ SA_LEN - sizeof ( sa_family_t ) ];
  86. } __attribute__ (( may_alias ));
  87. #endif /* _GPXE_SOCKET_H */