You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

socket.h 2.0KB

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