if.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. #include <Kernel/API/POSIX/sys/socket.h>
  11. #include <Kernel/API/POSIX/sys/types.h>
  12. enum {
  13. IFF_UP = 1 << 0,
  14. IFF_BROADCAST = 1 << 1,
  15. IFF_DEBUG = 1 << 2,
  16. IFF_LOOPBACK = 1 << 3,
  17. IFF_POINTOPOINT = 1 << 4,
  18. IFF_RUNNING = 1 << 5,
  19. IFF_NOARP = 1 << 6,
  20. IFF_PROMISC = 1 << 7,
  21. IFF_ALLMULTI = 1 << 8,
  22. IFF_MULTICAST = 1 << 9,
  23. };
  24. #define IFF_UP IFF_UP
  25. #define IFF_BROADCAST IFF_BROADCAST
  26. #define IFF_DEBUG IFF_DEBUG
  27. #define IFF_LOOPBACK IFF_LOOPBACK
  28. #define IFF_POINTOPOINT IFF_POINTOPOINT
  29. #define IFF_RUNNING IFF_RUNNING
  30. #define IFF_NOARP IFF_NOARP
  31. #define IFF_PROMISC IFF_PROMISC
  32. #define IFF_ALLMULTI IFF_ALLMULTI
  33. #define IFF_MULTICAST IFF_MULTICAST
  34. struct ifconf {
  35. int ifc_len;
  36. union {
  37. void* ifc_buf;
  38. struct ifreq* ifc_req;
  39. };
  40. };
  41. struct ifreq {
  42. #define IFNAMSIZ 16
  43. char ifr_name[IFNAMSIZ];
  44. union {
  45. struct sockaddr ifru_addr;
  46. struct sockaddr ifru_dstaddr;
  47. struct sockaddr ifru_broadaddr;
  48. struct sockaddr ifru_netmask;
  49. struct sockaddr ifru_hwaddr;
  50. short ifru_flags;
  51. int ifru_metric;
  52. int64_t ifru_vnetid;
  53. uint64_t ifru_media;
  54. void* ifru_data;
  55. unsigned int ifru_index;
  56. } ifr_ifru;
  57. #define ifr_addr ifr_ifru.ifru_addr // address
  58. #define ifr_dstaddr ifr_ifru.ifru_dstaddr // other end of p-to-p link
  59. #define ifr_broadaddr ifr_ifru.ifru_broadaddr // broadcast address
  60. #define ifr_netmask ifr_ifru.ifru_netmask // network mask
  61. #define ifr_flags ifr_ifru.ifru_flags // flags
  62. #define ifr_metric ifr_ifru.ifru_metric // metric
  63. #define ifr_mtu ifr_ifru.ifru_metric // mtu (overload)
  64. #define ifr_hardmtu ifr_ifru.ifru_metric // hardmtu (overload)
  65. #define ifr_media ifr_ifru.ifru_media // media options
  66. #define ifr_rdomainid ifr_ifru.ifru_metric // VRF instance (overload)
  67. #define ifr_vnetid ifr_ifru.ifru_vnetid // Virtual Net Id
  68. #define ifr_ttl ifr_ifru.ifru_metric // tunnel TTL (overload)
  69. #define ifr_data ifr_ifru.ifru_data // for use by interface
  70. #define ifr_index ifr_ifru.ifru_index // interface index
  71. #define ifr_llprio ifr_ifru.ifru_metric // link layer priority
  72. #define ifr_hwaddr ifr_ifru.ifru_hwaddr // MAC address
  73. };
  74. #ifdef __cplusplus
  75. }
  76. #endif