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

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