nin.inc 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. Function IN_CLASSA(a: in_addr_t): Boolean;
  2. begin
  3. Result:=((a and $80000000)=0);
  4. end;
  5. Function IN_CLASSB(a: in_addr_t): Boolean;
  6. begin
  7. Result:=((a and $c0000000)=$80000000);
  8. end;
  9. Function IN_CLASSC(a: in_addr_t): Boolean;
  10. begin
  11. Result:=((a and $e0000000)=$c0000000);
  12. end;
  13. Function IN_CLASSD(a: in_addr_t): Boolean;
  14. begin
  15. Result:=((a and $f0000000)=$e0000000);
  16. end;
  17. Function IN_MULTICAST(a: in_addr_t): Boolean;
  18. begin
  19. Result:=IN_CLASSD(a);
  20. end;
  21. Function IN_EXPERIMENTAL(a: in_addr_t): Boolean;
  22. begin
  23. Result:=((a and $e0000000)=$e0000000);
  24. end;
  25. Function IN_BADCLASS(a: in_addr_t): Boolean;
  26. begin
  27. Result:=((a and $f0000000)=$f0000000);
  28. end;
  29. Function IN6_IS_ADDR_UNSPECIFIED(const a: in6_addr): Boolean;
  30. begin
  31. Result:=(a.s6_addr32[0]=0) and
  32. (a.s6_addr32[1]=0) and
  33. (a.s6_addr32[2]=0) and
  34. (a.s6_addr32[3]=0);
  35. end;
  36. Function IN6_IS_ADDR_LOOPBACK(const a: in6_addr): Boolean;
  37. begin
  38. Result:=(a.s6_addr32[0]=0) and
  39. (a.s6_addr32[1]=0) and
  40. (a.s6_addr32[2]=0) and
  41. (a.s6_addr32[3]=htonl(1));
  42. end;
  43. Function IN6_IS_ADDR_MULTICAST(const a: in6_addr): Boolean;
  44. begin
  45. Result:=(a.s6_addr[0]=$ff);
  46. end;
  47. Function IN6_IS_ADDR_LINKLOCAL(const a: in6_addr): Boolean;
  48. begin
  49. Result:=((a.s6_addr32[0] and htonl($ffc00000))=htonl($fe800000));
  50. end;
  51. Function IN6_IS_ADDR_SITELOCAL(const a: in6_addr): Boolean;
  52. begin
  53. Result:=((a.s6_addr32[0] and htonl($ffc00000))=htonl($fec00000))
  54. end;
  55. Function IN6_IS_ADDR_V4MAPPED(const a: in6_addr): Boolean;
  56. begin
  57. Result:=(a.s6_addr32[0]=0) and
  58. (a.s6_addr32[1]=0) and
  59. (a.s6_addr32[2]=htonl($ffff));
  60. end;
  61. Function IN6_IS_ADDR_V4COMPAT(const a: in6_addr): Boolean;
  62. begin
  63. Result:=(a.s6_addr32[0]=0) and
  64. (a.s6_addr32[1]=0) and
  65. (a.s6_addr32[2]=0) and
  66. (ntohl(a.s6_addr32[3]) > 1);
  67. end;
  68. Function IN6_ARE_ADDR_EQUAL(const a, b: in6_addr): Boolean;
  69. begin
  70. Result:=(a.s6_addr32[0]=b.s6_addr32[0]) and
  71. (a.s6_addr32[1]=b.s6_addr32[1]) and
  72. (a.s6_addr32[2]=b.s6_addr32[2]) and
  73. (a.s6_addr32[3]=b.s6_addr32[3]);
  74. end;
  75. Function IN6_IS_ADDR_MC_NODELOCAL(const a: in6_addr): Boolean;
  76. begin
  77. Result:=IN6_IS_ADDR_MULTICAST(a) and
  78. ((a.s6_addr[1] and $f)=$1);
  79. end;
  80. Function IN6_IS_ADDR_MC_LINKLOCAL(const a: in6_addr): Boolean;
  81. begin
  82. Result:=IN6_IS_ADDR_MULTICAST(a) and
  83. ((a.s6_addr[1] and $f)=$2);
  84. end;
  85. Function IN6_IS_ADDR_MC_SITELOCAL(const a: in6_addr): Boolean;
  86. begin
  87. Result:=IN6_IS_ADDR_MULTICAST(a) and
  88. ((a.s6_addr[1] and $f)=$5);
  89. end;
  90. Function IN6_IS_ADDR_MC_ORGLOCAL(const a: in6_addr): Boolean;
  91. begin
  92. Result:=IN6_IS_ADDR_MULTICAST(a) and
  93. ((a.s6_addr[1] and $f)=$8);
  94. end;
  95. Function IN6_IS_ADDR_MC_GLOBAL(const a: in6_addr): Boolean;
  96. begin
  97. Result:=IN6_IS_ADDR_MULTICAST(a) and
  98. ((a.s6_addr[1] and $f)=$e);
  99. end;