libnet4r 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. data/CHANGELOG +15 -0
  2. data/LICENSE +28 -0
  3. data/README +187 -0
  4. data/Rakefile +110 -0
  5. data/ext/extconf.rb +60 -0
  6. data/ext/libnet.c +705 -0
  7. data/ext/libnet_arp.c +152 -0
  8. data/ext/libnet_ethernet.c +115 -0
  9. data/ext/libnet_ipv4.c +140 -0
  10. data/ext/libnet_ipv6.c +138 -0
  11. data/ext/libnet_udp.c +112 -0
  12. data/ext/libnet_vlan.c +131 -0
  13. data/lib/libnet4r/header.rb +609 -0
  14. data/lib/libnet4r/helpers.rb +19 -0
  15. data/lib/libnet4r/libnet.rb +39 -0
  16. data/libnet/CVS/Entries +24 -0
  17. data/libnet/CVS/Repository +1 -0
  18. data/libnet/CVS/Root +1 -0
  19. data/libnet/Makefile.am +15 -0
  20. data/libnet/Makefile.am.common +10 -0
  21. data/libnet/Makefile.in +443 -0
  22. data/libnet/README +21 -0
  23. data/libnet/VERSION +1 -0
  24. data/libnet/acconfig.h +36 -0
  25. data/libnet/acinclude.m4 +463 -0
  26. data/libnet/aclocal.m4 +1337 -0
  27. data/libnet/autom4te.cache/CVS/Entries +1 -0
  28. data/libnet/autom4te.cache/CVS/Repository +1 -0
  29. data/libnet/autom4te.cache/CVS/Root +1 -0
  30. data/libnet/autom4te.cache/output.0 +6225 -0
  31. data/libnet/autom4te.cache/requests +111 -0
  32. data/libnet/autom4te.cache/traces.0 +272 -0
  33. data/libnet/config.guess +1314 -0
  34. data/libnet/config.sub +1410 -0
  35. data/libnet/configure +6225 -0
  36. data/libnet/configure.in +235 -0
  37. data/libnet/doc/BUGS +19 -0
  38. data/libnet/doc/CHANGELOG +527 -0
  39. data/libnet/doc/CONTRIB +53 -0
  40. data/libnet/doc/COPYING +31 -0
  41. data/libnet/doc/CVS/Entries +12 -0
  42. data/libnet/doc/CVS/Repository +1 -0
  43. data/libnet/doc/CVS/Root +1 -0
  44. data/libnet/doc/DESIGN_NOTES +134 -0
  45. data/libnet/doc/MIGRATION +172 -0
  46. data/libnet/doc/PACKET_BUILDING +161 -0
  47. data/libnet/doc/PORTED +45 -0
  48. data/libnet/doc/RAWSOCKET_NON_SEQUITUR +41 -0
  49. data/libnet/doc/TODO +96 -0
  50. data/libnet/doc/html/acconfig_8h-source.html +49 -0
  51. data/libnet/doc/html/annotated.html +17 -0
  52. data/libnet/doc/html/bpf_8h-source.html +277 -0
  53. data/libnet/doc/html/config_8h-source.html +125 -0
  54. data/libnet/doc/html/doxygen.css +169 -0
  55. data/libnet/doc/html/doxygen.png +0 -0
  56. data/libnet/doc/html/files.html +29 -0
  57. data/libnet/doc/html/functions.html +26 -0
  58. data/libnet/doc/html/functions_vars.html +26 -0
  59. data/libnet/doc/html/getopt_8h-source.html +97 -0
  60. data/libnet/doc/html/globals.html +219 -0
  61. data/libnet/doc/html/globals_defs.html +104 -0
  62. data/libnet/doc/html/globals_func.html +136 -0
  63. data/libnet/doc/html/gnuc_8h-source.html +56 -0
  64. data/libnet/doc/html/graph_legend.dot +22 -0
  65. data/libnet/doc/html/graph_legend.html +75 -0
  66. data/libnet/doc/html/ifaddrlist_8h-source.html +65 -0
  67. data/libnet/doc/html/in__systm_8h-source.html +90 -0
  68. data/libnet/doc/html/index.html +17 -0
  69. data/libnet/doc/html/libnet-asn1_8h-source.html +268 -0
  70. data/libnet/doc/html/libnet-functions_8h-source.html +742 -0
  71. data/libnet/doc/html/libnet-functions_8h.html +8844 -0
  72. data/libnet/doc/html/libnet-headers_8h-source.html +1655 -0
  73. data/libnet/doc/html/libnet-headers_8h.html +3053 -0
  74. data/libnet/doc/html/libnet-macros_8h-source.html +161 -0
  75. data/libnet/doc/html/libnet-macros_8h.html +358 -0
  76. data/libnet/doc/html/libnet-structures_8h-source.html +233 -0
  77. data/libnet/doc/html/libnet-types_8h-source.html +58 -0
  78. data/libnet/doc/html/libnet_8h-source.html +119 -0
  79. data/libnet/doc/html/libnet_8h.html +24 -0
  80. data/libnet/doc/html/structlibnet__802__1q__hdr.html +145 -0
  81. data/libnet/doc/html/structlibnet__802__1x__hdr.html +97 -0
  82. data/libnet/doc/libnet.doxygen.conf +1102 -0
  83. data/libnet/doc/man/CVS/Entries +1 -0
  84. data/libnet/doc/man/CVS/Repository +1 -0
  85. data/libnet/doc/man/CVS/Root +1 -0
  86. data/libnet/doc/man/man3/libnet-functions.h.3 +3136 -0
  87. data/libnet/doc/man/man3/libnet-headers.h.3 +1872 -0
  88. data/libnet/doc/man/man3/libnet-macros.h.3 +172 -0
  89. data/libnet/doc/man/man3/libnet.h.3 +17 -0
  90. data/libnet/doc/man/man3/libnet_802_1q_hdr.3 +53 -0
  91. data/libnet/doc/man/man3/libnet_802_1x_hdr.3 +41 -0
  92. data/libnet/include/CVS/Entries +10 -0
  93. data/libnet/include/CVS/Repository +1 -0
  94. data/libnet/include/CVS/Root +1 -0
  95. data/libnet/include/Makefile.am +7 -0
  96. data/libnet/include/Makefile.in +395 -0
  97. data/libnet/include/bpf.h +264 -0
  98. data/libnet/include/config.h.in +118 -0
  99. data/libnet/include/gnuc.h +43 -0
  100. data/libnet/include/ifaddrlist.h +52 -0
  101. data/libnet/include/libnet/CVS/Entries +9 -0
  102. data/libnet/include/libnet/CVS/Repository +1 -0
  103. data/libnet/include/libnet/CVS/Root +1 -0
  104. data/libnet/include/libnet/Makefile.am +12 -0
  105. data/libnet/include/libnet/Makefile.in +294 -0
  106. data/libnet/include/libnet/libnet-asn1.h +255 -0
  107. data/libnet/include/libnet/libnet-functions.h +2157 -0
  108. data/libnet/include/libnet/libnet-headers.h +1662 -0
  109. data/libnet/include/libnet/libnet-macros.h +186 -0
  110. data/libnet/include/libnet/libnet-structures.h +222 -0
  111. data/libnet/include/libnet/libnet-types.h +45 -0
  112. data/libnet/include/libnet.h.in +132 -0
  113. data/libnet/include/stamp-h.in +1 -0
  114. data/libnet/include/win32/CVS/Entries +5 -0
  115. data/libnet/include/win32/CVS/Repository +1 -0
  116. data/libnet/include/win32/CVS/Root +1 -0
  117. data/libnet/include/win32/config.h +112 -0
  118. data/libnet/include/win32/getopt.h +84 -0
  119. data/libnet/include/win32/in_systm.h +77 -0
  120. data/libnet/include/win32/libnet.h +106 -0
  121. data/libnet/install-sh +250 -0
  122. data/libnet/libnet-config.in +62 -0
  123. data/libnet/libnet.doxygen.conf +1102 -0
  124. data/libnet/man/CVS/Entries +1 -0
  125. data/libnet/man/CVS/Repository +1 -0
  126. data/libnet/man/CVS/Root +1 -0
  127. data/libnet/missing +283 -0
  128. data/libnet/mkinstalldirs +40 -0
  129. data/libnet/sample/CVS/Entries +47 -0
  130. data/libnet/sample/CVS/Repository +1 -0
  131. data/libnet/sample/CVS/Root +1 -0
  132. data/libnet/sample/Makefile.am +63 -0
  133. data/libnet/sample/Makefile.in +729 -0
  134. data/libnet/sample/arp-new.c +144 -0
  135. data/libnet/sample/arp.c +151 -0
  136. data/libnet/sample/bgp4_hdr.c +225 -0
  137. data/libnet/sample/bgp4_notification.c +242 -0
  138. data/libnet/sample/bgp4_open.c +266 -0
  139. data/libnet/sample/bgp4_update.c +337 -0
  140. data/libnet/sample/cdp.c +187 -0
  141. data/libnet/sample/dhcp_discover.c +257 -0
  142. data/libnet/sample/dns.c +260 -0
  143. data/libnet/sample/dot1x.c +113 -0
  144. data/libnet/sample/fddi_tcp1.c +213 -0
  145. data/libnet/sample/fddi_tcp2.c +209 -0
  146. data/libnet/sample/get_addr.c +112 -0
  147. data/libnet/sample/gre.c +410 -0
  148. data/libnet/sample/icmp6_echoreq.c +184 -0
  149. data/libnet/sample/icmp_echo_cq.c +201 -0
  150. data/libnet/sample/icmp_redirect.c +200 -0
  151. data/libnet/sample/icmp_timeexceed.c +190 -0
  152. data/libnet/sample/icmp_timestamp.c +157 -0
  153. data/libnet/sample/icmp_unreach.c +204 -0
  154. data/libnet/sample/ieee.c +177 -0
  155. data/libnet/sample/ip_link.c +201 -0
  156. data/libnet/sample/ip_raw.c +180 -0
  157. data/libnet/sample/isl.c +167 -0
  158. data/libnet/sample/libnet_test.h +60 -0
  159. data/libnet/sample/mpls.c +251 -0
  160. data/libnet/sample/ntp.c +193 -0
  161. data/libnet/sample/ospf_hello.c +179 -0
  162. data/libnet/sample/ospf_lsa.c +190 -0
  163. data/libnet/sample/ping_of_death.c +171 -0
  164. data/libnet/sample/rpc_tcp.c +214 -0
  165. data/libnet/sample/rpc_udp.c +213 -0
  166. data/libnet/sample/sebek.c +299 -0
  167. data/libnet/sample/smurf.c +194 -0
  168. data/libnet/sample/stp.c +227 -0
  169. data/libnet/sample/synflood.c +200 -0
  170. data/libnet/sample/synflood6.c +209 -0
  171. data/libnet/sample/synflood6_frag.c +234 -0
  172. data/libnet/sample/tcp1.c +227 -0
  173. data/libnet/sample/tcp2.c +192 -0
  174. data/libnet/sample/tftp.c +207 -0
  175. data/libnet/sample/tring_tcp1.c +214 -0
  176. data/libnet/sample/tring_tcp2.c +210 -0
  177. data/libnet/sample/udp1.c +223 -0
  178. data/libnet/sample/udp2.c +232 -0
  179. data/libnet/sample/win32/CVS/Entries +9 -0
  180. data/libnet/sample/win32/CVS/Repository +1 -0
  181. data/libnet/sample/win32/CVS/Root +1 -0
  182. data/libnet/sample/win32/arp/CVS/Entries +2 -0
  183. data/libnet/sample/win32/arp/CVS/Repository +1 -0
  184. data/libnet/sample/win32/arp/CVS/Root +1 -0
  185. data/libnet/sample/win32/arp/arp.vcproj +136 -0
  186. data/libnet/sample/win32/cdp/CVS/Entries +2 -0
  187. data/libnet/sample/win32/cdp/CVS/Repository +1 -0
  188. data/libnet/sample/win32/cdp/CVS/Root +1 -0
  189. data/libnet/sample/win32/cdp/cdp.vcproj +136 -0
  190. data/libnet/sample/win32/dhcp_discover/CVS/Entries +2 -0
  191. data/libnet/sample/win32/dhcp_discover/CVS/Repository +1 -0
  192. data/libnet/sample/win32/dhcp_discover/CVS/Root +1 -0
  193. data/libnet/sample/win32/dhcp_discover/dhcp_discover.vcproj +139 -0
  194. data/libnet/sample/win32/dns/CVS/Entries +2 -0
  195. data/libnet/sample/win32/dns/CVS/Repository +1 -0
  196. data/libnet/sample/win32/dns/CVS/Root +1 -0
  197. data/libnet/sample/win32/dns/dns.vcproj +139 -0
  198. data/libnet/sample/win32/get_addr/CVS/Entries +2 -0
  199. data/libnet/sample/win32/get_addr/CVS/Repository +1 -0
  200. data/libnet/sample/win32/get_addr/CVS/Root +1 -0
  201. data/libnet/sample/win32/get_addr/get_addr.vcproj +139 -0
  202. data/libnet/sample/win32/getopt.c +121 -0
  203. data/libnet/sample/win32/icmp_echo_cq/CVS/Entries +2 -0
  204. data/libnet/sample/win32/icmp_echo_cq/CVS/Repository +1 -0
  205. data/libnet/sample/win32/icmp_echo_cq/CVS/Root +1 -0
  206. data/libnet/sample/win32/icmp_echo_cq/icmp_echo_cq.vcproj +139 -0
  207. data/libnet/sample/win32/tcp1/CVS/Entries +2 -0
  208. data/libnet/sample/win32/tcp1/CVS/Repository +1 -0
  209. data/libnet/sample/win32/tcp1/CVS/Root +1 -0
  210. data/libnet/sample/win32/tcp1/tcp1.vcproj +142 -0
  211. data/libnet/sample/win32/udp1/CVS/Entries +3 -0
  212. data/libnet/sample/win32/udp1/CVS/Repository +1 -0
  213. data/libnet/sample/win32/udp1/CVS/Root +1 -0
  214. data/libnet/sample/win32/udp1/dns.vcproj +125 -0
  215. data/libnet/sample/win32/udp1/udp1.vcproj +139 -0
  216. data/libnet/src/CVS/Entries +60 -0
  217. data/libnet/src/CVS/Repository +1 -0
  218. data/libnet/src/CVS/Root +1 -0
  219. data/libnet/src/Makefile.am +71 -0
  220. data/libnet/src/Makefile.in +428 -0
  221. data/libnet/src/libnet_advanced.c +136 -0
  222. data/libnet/src/libnet_asn1.c +436 -0
  223. data/libnet/src/libnet_build_802.1q.c +115 -0
  224. data/libnet/src/libnet_build_802.1x.c +103 -0
  225. data/libnet/src/libnet_build_802.2.c +167 -0
  226. data/libnet/src/libnet_build_802.3.c +101 -0
  227. data/libnet/src/libnet_build_arp.c +169 -0
  228. data/libnet/src/libnet_build_bgp.c +350 -0
  229. data/libnet/src/libnet_build_cdp.c +191 -0
  230. data/libnet/src/libnet_build_data.c +90 -0
  231. data/libnet/src/libnet_build_dhcp.c +156 -0
  232. data/libnet/src/libnet_build_dns.c +129 -0
  233. data/libnet/src/libnet_build_ethernet.c +173 -0
  234. data/libnet/src/libnet_build_fddi.c +191 -0
  235. data/libnet/src/libnet_build_gre.c +427 -0
  236. data/libnet/src/libnet_build_icmp.c +437 -0
  237. data/libnet/src/libnet_build_igmp.c +112 -0
  238. data/libnet/src/libnet_build_ip.c +892 -0
  239. data/libnet/src/libnet_build_ipsec.c +232 -0
  240. data/libnet/src/libnet_build_isl.c +113 -0
  241. data/libnet/src/libnet_build_link.c +90 -0
  242. data/libnet/src/libnet_build_mpls.c +112 -0
  243. data/libnet/src/libnet_build_ntp.c +121 -0
  244. data/libnet/src/libnet_build_ospf.c +699 -0
  245. data/libnet/src/libnet_build_rip.c +108 -0
  246. data/libnet/src/libnet_build_rpc.c +138 -0
  247. data/libnet/src/libnet_build_sebek.c +108 -0
  248. data/libnet/src/libnet_build_snmp.c +52 -0
  249. data/libnet/src/libnet_build_stp.c +222 -0
  250. data/libnet/src/libnet_build_tcp.c +365 -0
  251. data/libnet/src/libnet_build_token_ring.c +193 -0
  252. data/libnet/src/libnet_build_udp.c +111 -0
  253. data/libnet/src/libnet_build_vrrp.c +117 -0
  254. data/libnet/src/libnet_checksum.c +376 -0
  255. data/libnet/src/libnet_cq.c +395 -0
  256. data/libnet/src/libnet_crc.c +113 -0
  257. data/libnet/src/libnet_dll.c +47 -0
  258. data/libnet/src/libnet_error.c +55 -0
  259. data/libnet/src/libnet_if_addr.c +415 -0
  260. data/libnet/src/libnet_init.c +234 -0
  261. data/libnet/src/libnet_internal.c +310 -0
  262. data/libnet/src/libnet_link_bpf.c +348 -0
  263. data/libnet/src/libnet_link_dlpi.c +785 -0
  264. data/libnet/src/libnet_link_linux.c +310 -0
  265. data/libnet/src/libnet_link_nit.c +125 -0
  266. data/libnet/src/libnet_link_none.c +66 -0
  267. data/libnet/src/libnet_link_pf.c +179 -0
  268. data/libnet/src/libnet_link_snit.c +149 -0
  269. data/libnet/src/libnet_link_snoop.c +166 -0
  270. data/libnet/src/libnet_link_win32.c +346 -0
  271. data/libnet/src/libnet_pblock.c +511 -0
  272. data/libnet/src/libnet_port_list.c +295 -0
  273. data/libnet/src/libnet_prand.c +106 -0
  274. data/libnet/src/libnet_raw.c +257 -0
  275. data/libnet/src/libnet_resolve.c +414 -0
  276. data/libnet/src/libnet_version.c +54 -0
  277. data/libnet/src/libnet_write.c +502 -0
  278. data/libnet/version.h.in +6 -0
  279. data/libnet/win32/CVS/Entries +15 -0
  280. data/libnet/win32/CVS/Repository +1 -0
  281. data/libnet/win32/CVS/Root +1 -0
  282. data/libnet/win32/Libnet-1.1.1-2002.sln +77 -0
  283. data/libnet/win32/Libnet-1.1.1-2003.ncb +0 -0
  284. data/libnet/win32/Libnet-1.1.1-2003.sln +84 -0
  285. data/libnet/win32/Libnet-1.1.1-2003.suo +0 -0
  286. data/libnet/win32/Libnet-1.1.1.vcproj +311 -0
  287. data/libnet/win32/Libnet-latest.ncb +0 -0
  288. data/libnet/win32/Libnet-latest.opt +0 -0
  289. data/libnet/win32/Libnet-latest.sln +77 -0
  290. data/libnet/win32/Libnet-latest.suo +0 -0
  291. data/libnet/win32/Libnet-latest.vcproj +311 -0
  292. data/libnet/win32/Libnet.dsp +337 -0
  293. data/libnet/win32/Libnet.dsw +32 -0
  294. data/libnet/win32/README.txt +57 -0
  295. data/libnet/win32/libnet_dll.def +164 -0
  296. data/test/tc_arp.rb +169 -0
  297. data/test/tc_class.rb +219 -0
  298. data/test/tc_ethernet.rb +97 -0
  299. data/test/tc_header.rb +163 -0
  300. data/test/tc_init.rb +25 -0
  301. data/test/tc_ipv4.rb +219 -0
  302. data/test/tc_ipv6.rb +235 -0
  303. data/test/tc_udp.rb +229 -0
  304. data/test/tc_vlan.rb +118 -0
  305. data/test/ts_all.rb +15 -0
  306. metadata +401 -0
@@ -0,0 +1,463 @@
1
+ dnl $Id: acinclude.m4,v 1.3 2004/01/15 23:53:06 mike Exp $
2
+ dnl
3
+ dnl Libnet specific autoconf macros
4
+ dnl Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
5
+ dnl All rights reserved.
6
+ dnl
7
+
8
+ dnl
9
+ dnl Check for the Linux /proc filesystem
10
+ dnl
11
+ dnl usage: AC_LIBNET_LINUX_PROCFS
12
+ dnl results: HAVE_LINUX_PROCFS
13
+ dnl
14
+ AC_DEFUN(AC_LIBNET_LINUX_PROCFS,
15
+ [AC_MSG_CHECKING(for Linux proc filesystem)
16
+ AC_CACHE_VAL(ac_cv_libnet_linux_procfs,
17
+ if test "x`cat /proc/sys/kernel/ostype 2>&-`" = "xLinux" ; then
18
+ ac_cv_libnet_linux_procfs=yes
19
+ else
20
+ ac_cv_libnet_linux_procfs=no
21
+ fi)
22
+ AC_MSG_RESULT($ac_cv_libnet_linux_procfs)
23
+ if test $ac_cv_libnet_linux_procfs = yes ; then
24
+ AC_DEFINE(HAVE_LINUX_PROCFS, 1,
25
+ [Define if you have the Linux /proc filesystem.])
26
+ fi])
27
+
28
+ dnl
29
+ dnl Checks to see if this linux kernel has a working PF_PACKET
30
+ dnl
31
+ dnl usage:
32
+ dnl
33
+ dnl AC_LIBNET_CHECK_PF_PACKET
34
+ dnl
35
+ dnl results:
36
+ dnl
37
+ dnl HAVE_PACKET_SOCKET (DEFINED)
38
+ dnl
39
+
40
+ AC_DEFUN(AC_LIBNET_CHECK_PF_PACKET,
41
+ [
42
+ AC_MSG_CHECKING(for packet socket (PF_SOCKET))
43
+ AC_CACHE_VAL(ac_libnet_have_packet_socket,
44
+
45
+ [case "$target_os" in
46
+
47
+ linux)
48
+ ac_libnet_have_packet_socket = no
49
+ ;;
50
+ *)
51
+
52
+ cat > pf_packet-test.c << EOF
53
+ #include <stdio.h>
54
+ #include <errno.h>
55
+ #include <stdlib.h>
56
+ #include <netinet/in.h>
57
+ #include <sys/socket.h>
58
+ #include <features.h> /* for the glibc version number */
59
+ #if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
60
+ #include <netpacket/packet.h>
61
+ #include <net/ethernet.h> /* the L2 protocols */
62
+ #else
63
+ #include <asm/types.h>
64
+ #include <linux/if_packet.h>
65
+ #include <linux/if_ether.h> /* The L2 protocols */
66
+ #endif
67
+
68
+ #ifndef SOL_PACKET
69
+ #define SOL_PACKET 263
70
+ #endif /* SOL_PACKET */
71
+
72
+ int
73
+ main(int argc, char **argv)
74
+ {
75
+ int fd;
76
+
77
+ fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
78
+ if (fd == -1)
79
+ {
80
+ if (errno == EPERM)
81
+ {
82
+ /* user's UID != 0 */
83
+ printf("probably");
84
+ exit (EXIT_FAILURE);
85
+ }
86
+ printf("no");
87
+ exit (EXIT_FAILURE);
88
+ }
89
+ printf("yes");
90
+ exit (EXIT_SUCCESS);
91
+ }
92
+ EOF
93
+ ${CC-cc} -o pf_packet-test $CFLAGS pf_packet-test.c >/dev/null 2>&1
94
+
95
+ # Oopz 4.3 BSD doesn't have this. Sorry.
96
+ if test ! -x ./pf_packet-test ; then
97
+ ac_libnet_have_packet_socket=choked
98
+ else
99
+ ac_libnet_have_packet_socket=`./pf_packet-test`;
100
+ fi
101
+ if test $ac_libnet_have_packet_socket = choked; then
102
+ AC_MSG_RESULT(test program compile choked... assuming no)
103
+ elif test $ac_libnet_have_packet_socket = yes; then
104
+ AC_MSG_RESULT(yes)
105
+ elif test $ac_libnet_have_packet_socket = probably; then
106
+ AC_MSG_RESULT(test program got EPERM... assuming yes)
107
+ elif test $ac_libnet_have_packet_socket = no; then
108
+ AC_MSG_RESULT(no)
109
+ fi
110
+
111
+ rm -f pf_packet-test* core core.pf_packet-test
112
+ ;;
113
+ esac])
114
+
115
+ if test $ac_libnet_have_packet_socket = yes -o $ac_libnet_have_packet_socket = probably; then
116
+ AC_DEFINE(HAVE_PACKET_SOCKET)
117
+ fi
118
+ ])
119
+
120
+ dnl
121
+ dnl Looks for a previous libnet version and attempts to determine which verion
122
+ dnl it is. Version 0.8 was the first version that actually knew internally
123
+ dnl what version it was.
124
+ dnl
125
+ dnl usage:
126
+ dnl
127
+ dnl AC_LIBNET_CHECK_LIBNET_VERSION
128
+ dnl
129
+ dnl results:
130
+ dnl
131
+ dnl
132
+ dnl
133
+
134
+ AC_DEFUN(AC_LIBNET_CHECK_LIBNET_VER,
135
+ [
136
+ AC_CHECK_LIB(net, libnet_build_ip, AC_MSG_CHECKING(version) \
137
+
138
+ changequote(<<, >>)dnl
139
+ if [[ ! -f $LIB_PREFIX/libnet.a ]] ; then
140
+ changequote([, ])dnl
141
+ AC_MSG_RESULT($LIB_PREFIX/libnet.a doesn't exist)
142
+ AC_MSG_RESULT(previous libnet install lives elsewhere, you should probably find it)
143
+ else
144
+ __LIBNET_VERSION=`strings $LIB_PREFIX/libnet.a | grep "libnet version"\
145
+ | cut -f3 -d" "`;\
146
+ if test -z "$__LIBNET_VERSION"; then
147
+ AC_MSG_RESULT(<0.8)
148
+ else
149
+ AC_MSG_RESULT($__LIBNET_VERSION)
150
+ fi
151
+ fi\
152
+ )
153
+ ])
154
+
155
+
156
+ dnl
157
+ dnl Checks to see if this linux kernel uses ip_sum or ip_csum
158
+ dnl (Pulled from queso)
159
+ dnl
160
+ dnl usage:
161
+ dnl
162
+ dnl AC_LIBNET_CHECK_IP_CSUM
163
+ dnl
164
+ dnl results:
165
+ dnl
166
+ dnl HAVE_STRUCT_IP_CSUM (DEFINED)
167
+ dnl
168
+
169
+ AC_DEFUN(AC_LIBNET_CHECK_IP_CSUM,
170
+ [
171
+ AC_MSG_CHECKING([struct ip contains ip_csum])
172
+ AC_TRY_COMPILE([
173
+ #define __BSD_SOURCE
174
+ #define _BSD_SOURCE
175
+ #include <sys/types.h>
176
+ #include <netinet/in.h>
177
+ #include <netinet/in_systm.h>
178
+ #include <netinet/ip.h>],
179
+ [
180
+ struct ip ip;
181
+ ip.ip_csum = 0;
182
+ ],
183
+ [AC_MSG_RESULT(yes);
184
+ AC_DEFINE(HAVE_STRUCT_IP_CSUM)],
185
+ [AC_MSG_RESULT(no);
186
+ ])
187
+ ])
188
+
189
+ dnl
190
+ dnl Checks to see if unaligned memory accesses fail
191
+ dnl (Pulled from libpcap)
192
+ dnl
193
+ dnl usage:
194
+ dnl
195
+ dnl AC_LBL_UNALIGNED_ACCESS
196
+ dnl
197
+ dnl results:
198
+ dnl
199
+ dnl LBL_ALIGN (DEFINED)
200
+ dnl
201
+
202
+ AC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
203
+ [AC_MSG_CHECKING(if unaligned accesses fail)
204
+ AC_CACHE_VAL(ac_cv_lbl_unaligned_fail,
205
+ [case "$target_cpu" in
206
+
207
+ alpha|hp*|mips|sparc)
208
+ ac_cv_lbl_unaligned_fail=yes
209
+ ;;
210
+
211
+ *)
212
+ cat >conftest.c <<EOF
213
+ # include <sys/types.h>
214
+ # include <sys/wait.h>
215
+ # include <stdio.h>
216
+ unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
217
+ main()
218
+ {
219
+ unsigned int i;
220
+ pid_t pid;
221
+ int status;
222
+ /* avoid "core dumped" message */
223
+ pid = fork();
224
+ if (pid < 0)
225
+ {
226
+ exit(2);
227
+ }
228
+ if (pid > 0)
229
+ {
230
+ /* parent */
231
+ pid = waitpid(pid, &status, 0);
232
+ if (pid < 0)
233
+ {
234
+ exit(3);
235
+ }
236
+ exit(!WIFEXITED(status));
237
+ }
238
+ /* child */
239
+ i = *(unsigned int *)&a[[1]];
240
+ printf("%d\n", i);
241
+ exit(0);
242
+ }
243
+ EOF
244
+ ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
245
+ conftest.c $LIBS > /dev/null 2>&1
246
+ # Oopz 4.3 BSD doesn't have this. Sorry.
247
+ if test ! -x conftest ; then
248
+ dnl failed to compile for some reason
249
+ ac_cv_lbl_unaligned_fail=yes
250
+ else
251
+ ./conftest > conftest.out
252
+ if test ! -s conftest.out ; then
253
+ ac_cv_lbl_unaligned_fail=yes
254
+ else
255
+ ac_cv_lbl_unaligned_fail=no
256
+ fi
257
+ fi
258
+ rm -f conftest* core core.conftest
259
+ ;;
260
+ esac])
261
+ AC_MSG_RESULT($ac_cv_lbl_unaligned_fail)
262
+ if test $ac_cv_lbl_unaligned_fail = yes ; then
263
+ AC_DEFINE(LBL_ALIGN)
264
+ fi
265
+ ])
266
+
267
+
268
+ dnl
269
+ dnl Checks endianess
270
+ dnl
271
+ dnl usage:
272
+ dnl
273
+ dnl AC_LIBNET_ENDIAN_CHECK
274
+ dnl
275
+ dnl results:
276
+ dnl
277
+ dnl LIBNET_BIG_ENDIAN = 1 or
278
+ dnl LIBNET_LIL_ENDIAN = 1
279
+ dnl
280
+
281
+ AC_DEFUN(AC_LIBNET_ENDIAN_CHECK,
282
+ [AC_MSG_CHECKING(machine endianess)
283
+
284
+ cat > conftest.c << EOF
285
+ # include <stdio.h>
286
+ # include <stdlib.h>
287
+
288
+ int main()
289
+ {
290
+ union
291
+ {
292
+ short s;
293
+ char c[[sizeof(short)]];
294
+ } un;
295
+
296
+ un.s = 0x0102;
297
+ if (sizeof (short) == 2)
298
+ {
299
+ if (un.c [[0]] == 1 && un.c [[1]] == 2)
300
+ {
301
+ printf("B\n");
302
+ }
303
+ else
304
+ {
305
+ if (un.c [[0]] == 2 && un.c [[1]] == 1)
306
+ {
307
+ printf("L\n");
308
+ }
309
+ }
310
+ }
311
+ else
312
+ {
313
+ printf("?\n");
314
+ }
315
+ return (EXIT_SUCCESS);
316
+ }
317
+ EOF
318
+ ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS > /dev/null 2>&1
319
+ # Oopz 4.3 BSD doesn't have this. Sorry.
320
+ if test ! -x conftest ; then
321
+ dnl failed to compile for some reason
322
+ ac_cv_libnet_endianess=unknown
323
+ else
324
+ ./conftest > conftest.out
325
+ result=`cat conftest.out`
326
+ if test $result = "B"; then
327
+ ac_cv_libnet_endianess=big
328
+ elif test $result = "L"; then
329
+ ac_cv_libnet_endianess=lil
330
+ else
331
+ ac_cv_libnet_endianess=unknown
332
+ fi
333
+ fi
334
+ rm -f conftest* core core.conftest
335
+
336
+ AC_MSG_RESULT($ac_cv_libnet_endianess)
337
+
338
+ if test $ac_cv_libnet_endianess = big ; then
339
+ AC_DEFINE(LIBNET_BIG_ENDIAN)
340
+ ENDIANESS="LIBNET_BIG_ENDIAN"
341
+ LIBNET_CONFIG_DEFINES="$LIBNET_CONFIG_DEFINES -DLIBNET_BIG_ENDIAN"
342
+ elif test $ac_cv_libnet_endianess = lil ; then
343
+ AC_DEFINE(LIBNET_LIL_ENDIAN)
344
+ ENDIANESS="LIBNET_LIL_ENDIAN"
345
+ LIBNET_CONFIG_DEFINES="$LIBNET_CONFIG_DEFINES -DLIBNET_LIL_ENDIAN"
346
+ fi
347
+ ])
348
+
349
+ dnl
350
+ dnl Improved version of AC_CHECK_LIB
351
+ dnl
352
+ dnl Thanks to John Hawkinson (jhawk@mit.edu)
353
+ dnl
354
+ dnl usage:
355
+ dnl
356
+ dnl AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
357
+ dnl ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
358
+ dnl
359
+ dnl results:
360
+ dnl
361
+ dnl LIBS
362
+ dnl
363
+
364
+ define(AC_LBL_CHECK_LIB,
365
+ [AC_MSG_CHECKING([for $2 in -l$1])
366
+ dnl Use a cache variable name containing both the library and function name,
367
+ dnl because the test really is for library $1 defining function $2, not
368
+ dnl just for library $1. Separate tests with the same $1 and different $2's
369
+ dnl may have different results.
370
+ ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
371
+ AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
372
+ [ac_save_LIBS="$LIBS"
373
+ LIBS="-l$1 $5 $LIBS"
374
+ AC_TRY_LINK(dnl
375
+ ifelse([$2], [main], , dnl Avoid conflicting decl of main.
376
+ [/* Override any gcc2 internal prototype to avoid an error. */
377
+ ]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
378
+ extern "C"
379
+ #endif
380
+ ])dnl
381
+ [/* We use char because int might match the return type of a gcc2
382
+ builtin and then its argument prototype would still apply. */
383
+ char $2();
384
+ ]),
385
+ [$2()],
386
+ eval "ac_cv_lbl_lib_$ac_lib_var=yes",
387
+ eval "ac_cv_lbl_lib_$ac_lib_var=no")
388
+ LIBS="$ac_save_LIBS"
389
+ ])dnl
390
+ if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
391
+ AC_MSG_RESULT(yes)
392
+ ifelse([$3], ,
393
+ [changequote(, )dnl
394
+ ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
395
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
396
+ changequote([, ])dnl
397
+ AC_DEFINE_UNQUOTED($ac_tr_lib)
398
+ LIBS="-l$1 $LIBS"
399
+ ], [$3])
400
+ else
401
+ AC_MSG_RESULT(no)
402
+ ifelse([$4], , , [$4
403
+ ])dnl
404
+ fi
405
+ ])
406
+
407
+ dnl
408
+ dnl AC_LBL_LIBRARY_NET
409
+ dnl
410
+ dnl This test is for network applications that need socket() and
411
+ dnl gethostbyname() -ish functions. Under Solaris, those applications
412
+ dnl need to link with "-lsocket -lnsl". Under IRIX, they need to link
413
+ dnl with "-lnsl" but should *not* link with "-lsocket" because
414
+ dnl libsocket.a breaks a number of things (for instance:
415
+ dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
416
+ dnl versions of IRIX).
417
+ dnl
418
+ dnl Unfortunately, many application developers are not aware of this,
419
+ dnl and mistakenly write tests that cause -lsocket to be used under
420
+ dnl IRIX. It is also easy to write tests that cause -lnsl to be used
421
+ dnl under operating systems where neither are necessary (or useful),
422
+ dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
423
+ dnl
424
+ dnl This test exists so that every application developer does not test
425
+ dnl this in a different, and subtly broken fashion.
426
+
427
+ dnl It has been argued that this test should be broken up into two
428
+ dnl seperate tests, one for the resolver libraries, and one for the
429
+ dnl libraries necessary for using Sockets API. Unfortunately, the two
430
+ dnl are carefully intertwined and allowing the autoconf user to use
431
+ dnl them independantly potentially results in unfortunate ordering
432
+ dnl dependancies -- as such, such component macros would have to
433
+ dnl carefully use indirection and be aware if the other components were
434
+ dnl executed. Since other autoconf macros do not go to this trouble,
435
+ dnl and almost no applications use sockets without the resolver, this
436
+ dnl complexity has not been implemented.
437
+ dnl
438
+ dnl The check for libresolv is in case you are attempting to link
439
+ dnl statically and happen to have a libresolv.a lying around (and no
440
+ dnl libnsl.a).
441
+ dnl
442
+ AC_DEFUN(AC_LBL_LIBRARY_NET, [
443
+ # Most operating systems have gethostbyname() in the default searched
444
+ # libraries (i.e. libc):
445
+ AC_CHECK_FUNC(gethostbyname, ,
446
+ # Some OSes (eg. Solaris) place it in libnsl:
447
+ AC_LBL_CHECK_LIB(nsl, gethostbyname, ,
448
+ # Some strange OSes (SINIX) have it in libsocket:
449
+ AC_LBL_CHECK_LIB(socket, gethostbyname, ,
450
+ # Unfortunately libsocket sometimes depends on libnsl.
451
+ # AC_CHECK_LIB's API is essentially broken so the
452
+ # following ugliness is necessary:
453
+ AC_LBL_CHECK_LIB(socket, gethostbyname,
454
+ LIBS="-lsocket -lnsl $LIBS",
455
+ AC_CHECK_LIB(resolv, gethostbyname),
456
+ -lnsl))))
457
+ AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
458
+ AC_LBL_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", ,
459
+ -lnsl)))
460
+ # DLPI needs putmsg under HPUX so test for -lstr while we're at it
461
+ AC_CHECK_LIB(str, putmsg)
462
+ ])
463
+