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,108 @@
1
+ /*
2
+ * $Id: libnet_build_rip.c,v 1.8 2004/01/03 20:31:01 mike Exp $
3
+ *
4
+ * libnet
5
+ * libnet_build_rip.c - RIP packet assembler
6
+ *
7
+ * Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
8
+ * All rights reserved.
9
+ *
10
+ * Redistribution and use in source and binary forms, with or without
11
+ * modification, are permitted provided that the following conditions
12
+ * are met:
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ * 2. Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in the
17
+ * documentation and/or other materials provided with the distribution.
18
+ *
19
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
+ * SUCH DAMAGE.
30
+ *
31
+ */
32
+
33
+ #if (HAVE_CONFIG_H)
34
+ #include "../include/config.h"
35
+ #endif
36
+ #if (!(_WIN32) || (__CYGWIN__))
37
+ #include "../include/libnet.h"
38
+ #else
39
+ #include "../include/win32/libnet.h"
40
+ #endif
41
+
42
+ libnet_ptag_t
43
+ libnet_build_rip(u_int8_t cmd, u_int8_t version, u_int16_t rd, u_int16_t af, u_int16_t rt,
44
+ u_int32_t addr, u_int32_t mask, u_int32_t next_hop, u_int32_t metric,
45
+ u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
46
+ {
47
+ u_int32_t n, h;
48
+ libnet_pblock_t *p;
49
+ struct libnet_rip_hdr rip_hdr;
50
+
51
+ if (l == NULL)
52
+ {
53
+ return (-1);
54
+ }
55
+
56
+ n = LIBNET_RIP_H + payload_s;
57
+ h = 0;
58
+
59
+ /*
60
+ * Find the existing protocol block if a ptag is specified, or create
61
+ * a new one.
62
+ */
63
+ p = libnet_pblock_probe(l, ptag, n, LIBNET_PBLOCK_RIP_H);
64
+ if (p == NULL)
65
+ {
66
+ return (-1);
67
+ }
68
+
69
+ memset(&rip_hdr, 0, sizeof(rip_hdr));
70
+ rip_hdr.rip_cmd = cmd;
71
+ rip_hdr.rip_ver = version;
72
+ rip_hdr.rip_rd = htons(rd);
73
+ rip_hdr.rip_af = htons(af);
74
+ rip_hdr.rip_rt = htons(rt);
75
+ rip_hdr.rip_addr = htonl(addr);
76
+ rip_hdr.rip_mask = htonl(mask);
77
+ rip_hdr.rip_next_hop = htonl(next_hop);
78
+ rip_hdr.rip_metric = htonl(metric);
79
+
80
+ n = libnet_pblock_append(l, p, (u_int8_t *)&rip_hdr, LIBNET_RIP_H);
81
+ if (n == -1)
82
+ {
83
+ goto bad;
84
+ }
85
+
86
+ if ((payload && !payload_s) || (!payload && payload_s))
87
+ {
88
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
89
+ "%s(): payload inconsistency\n", __func__);
90
+ goto bad;
91
+ }
92
+
93
+ if (payload && payload_s)
94
+ {
95
+ n = libnet_pblock_append(l, p, payload, payload_s);
96
+ if (n == -1)
97
+ {
98
+ goto bad;
99
+ }
100
+ }
101
+
102
+ return (ptag ? ptag : libnet_pblock_update(l, p, h, LIBNET_PBLOCK_RIP_H));
103
+ bad:
104
+ libnet_pblock_delete(l, p);
105
+ return (-1);
106
+ }
107
+
108
+ /* EOF */
@@ -0,0 +1,138 @@
1
+ /*
2
+ *
3
+ * libnet
4
+ * libnet_build_rpc.c - RPC packet assembler
5
+ *
6
+ * Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
7
+ * Jason Damron <jdamron@stackheap.org>
8
+ * All rights reserved.
9
+ *
10
+ * Redistribution and use in source and binary forms, with or without
11
+ * modification, are permitted provided that the following conditions
12
+ * are met:
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ * 2. Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in the
17
+ * documentation and/or other materials provided with the distribution.
18
+ *
19
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
+ * SUCH DAMAGE.
30
+ *
31
+ */
32
+
33
+ #if (HAVE_CONFIG_H)
34
+ #include "../include/config.h"
35
+ #endif
36
+ #if (!(_WIN32) || (__CYGWIN__))
37
+ #include "../include/libnet.h"
38
+ #else
39
+ #include "../include/win32/libnet.h"
40
+ #endif
41
+
42
+ libnet_ptag_t
43
+ libnet_build_rpc_call(u_int32_t rm, u_int32_t xid, u_int32_t prog_num,
44
+ u_int32_t prog_vers, u_int32_t procedure, u_int32_t cflavor, u_int32_t clength,
45
+ u_int8_t *cdata, u_int32_t vflavor, u_int32_t vlength, u_int8_t *vdata,
46
+ u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
47
+ {
48
+ u_int32_t n, h;
49
+ libnet_pblock_t *p;
50
+ struct libnet_rpc_call_tcp_hdr rpc_hdr;
51
+
52
+ if (l == NULL)
53
+ {
54
+ return (-1);
55
+ }
56
+
57
+ /* Credential and Verifier buffers not yet implemented.
58
+ * n = LIBNET_RPC_CALL_H + clength + vlength + payload_s;
59
+ */
60
+
61
+ if (rm)
62
+ {
63
+ n = LIBNET_RPC_CALL_TCP_H + payload_s;
64
+ }
65
+ else
66
+ {
67
+ n = LIBNET_RPC_CALL_H + payload_s;
68
+ }
69
+
70
+ h = 0;
71
+
72
+ /*
73
+ * Find the existing protocol block if a ptag is specified, or create
74
+ * a new one.
75
+ */
76
+ p = libnet_pblock_probe(l, ptag, n, LIBNET_PBLOCK_RPC_CALL_H);
77
+ if (p == NULL)
78
+ {
79
+ return (-1);
80
+ }
81
+
82
+ memset(&rpc_hdr, 0, sizeof(rpc_hdr));
83
+ if (rm)
84
+ {
85
+ rpc_hdr.rpc_record_marking = htonl(rm + payload_s);
86
+ }
87
+ rpc_hdr.rpc_common.rpc_xid = htonl(xid);
88
+ rpc_hdr.rpc_common.rpc_type = LIBNET_RPC_CALL;
89
+ rpc_hdr.rpc_common.rpc_call.rpc_rpcvers = htonl(LIBNET_RPC_VERS);
90
+ rpc_hdr.rpc_common.rpc_call.rpc_prognum = htonl(prog_num);
91
+ rpc_hdr.rpc_common.rpc_call.rpc_vers = htonl(prog_vers);
92
+ rpc_hdr.rpc_common.rpc_call.rpc_procedure = htonl(procedure);
93
+ /* XXX Eventually should allow for opaque auth data. */
94
+ rpc_hdr.rpc_common.rpc_call.rpc_credentials.rpc_auth_flavor= htonl(cflavor);
95
+ rpc_hdr.rpc_common.rpc_call.rpc_credentials.rpc_auth_length= htonl(clength);
96
+ rpc_hdr.rpc_common.rpc_call.rpc_verifier.rpc_auth_flavor = htonl(vflavor);
97
+ rpc_hdr.rpc_common.rpc_call.rpc_verifier.rpc_auth_length = htonl(vlength);
98
+
99
+ if (rm)
100
+ {
101
+ n = libnet_pblock_append(l, p, (u_int8_t *)&rpc_hdr,
102
+ LIBNET_RPC_CALL_TCP_H);
103
+ }
104
+ else
105
+ {
106
+ n = libnet_pblock_append(l, p, (u_int8_t *)&rpc_hdr.rpc_common,
107
+ LIBNET_RPC_CALL_H);
108
+ }
109
+
110
+ if (n == -1)
111
+ {
112
+ goto bad;
113
+ }
114
+
115
+ if ((payload && !payload_s) || (!payload && payload_s))
116
+ {
117
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
118
+ "%s(): payload inconsistency\n", __func__);
119
+ goto bad;
120
+ }
121
+
122
+ if (payload && payload_s)
123
+ {
124
+ n = libnet_pblock_append(l, p, payload, payload_s);
125
+ if (n == -1)
126
+ {
127
+ goto bad;
128
+ }
129
+ }
130
+
131
+ return (ptag ? ptag : libnet_pblock_update(l, p, h,
132
+ LIBNET_PBLOCK_RPC_CALL_H));
133
+ bad:
134
+ libnet_pblock_delete(l, p);
135
+ return (-1);
136
+ }
137
+
138
+ /* EOF */
@@ -0,0 +1,108 @@
1
+ /*
2
+ * libnet
3
+ * libnet_build_sebek.c - sebek packet assembler
4
+ *
5
+ * Copyright (c) 2004 Frederic Raynal <pappy@security-labs.org>
6
+ * Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ * 1. Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ * 2. Redistributions in binary form must reproduce the above copyright
15
+ * notice, this list of conditions and the following disclaimer in the
16
+ * documentation and/or other materials provided with the distribution.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28
+ * SUCH DAMAGE.
29
+ *
30
+ */
31
+
32
+ #if (HAVE_CONFIG_H)
33
+ #include "../include/config.h"
34
+ #endif
35
+ #if (!(_WIN32) || (__CYGWIN__))
36
+ #include "../include/libnet.h"
37
+ #else
38
+ #include "../include/win32/libnet.h"
39
+ #endif
40
+
41
+ libnet_ptag_t
42
+ libnet_build_sebek(u_int32_t magic, u_int16_t version, u_int16_t type,
43
+ u_int32_t counter, u_int32_t time_sec, u_int32_t time_usec, u_int32_t pid,
44
+ u_int32_t uid, u_int32_t fd, u_int8_t cmd[SEBEK_CMD_LENGTH], u_int32_t length,
45
+ u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
46
+ {
47
+ u_int32_t n;
48
+ libnet_pblock_t *p;
49
+ struct libnet_sebek_hdr sebek_hdr;
50
+
51
+ if (l == NULL)
52
+ {
53
+ return (-1);
54
+ }
55
+
56
+ n = LIBNET_SEBEK_H + payload_s; /* size of memory block */
57
+
58
+ /*
59
+ * Find the existing protocol block if a ptag is specified, or create
60
+ * a new one.
61
+ */
62
+ p = libnet_pblock_probe(l, ptag, n, LIBNET_PBLOCK_SEBEK_H);
63
+ if (p == NULL)
64
+ {
65
+ return (-1);
66
+ }
67
+
68
+ memset(&sebek_hdr, 0, sizeof(sebek_hdr));
69
+ sebek_hdr.magic = htonl(magic);
70
+ sebek_hdr.version = htons(version);
71
+ sebek_hdr.type = htons(type);
72
+ sebek_hdr.counter = htonl(counter);
73
+ sebek_hdr.time_sec = htonl(time_sec);
74
+ sebek_hdr.time_usec = htonl(time_usec);
75
+ sebek_hdr.pid = htonl(pid);
76
+ sebek_hdr.uid = htonl(uid);
77
+ sebek_hdr.fd = htonl(fd);
78
+ memcpy(sebek_hdr.cmd, cmd, SEBEK_CMD_LENGTH*sizeof(u_int8_t));
79
+ sebek_hdr.length = htonl(length);
80
+
81
+ n = libnet_pblock_append(l, p, (u_int8_t *)&sebek_hdr, LIBNET_SEBEK_H);
82
+ if (n == -1)
83
+ {
84
+ goto bad;
85
+ }
86
+
87
+ if ((payload && !payload_s) || (!payload && payload_s))
88
+ {
89
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
90
+ "%s(): payload inconsistency\n", __func__);
91
+ goto bad;
92
+ }
93
+
94
+ if (payload && payload_s)
95
+ {
96
+ n = libnet_pblock_append(l, p, payload, payload_s);
97
+ if (n == -1)
98
+ {
99
+ goto bad;
100
+ }
101
+ }
102
+
103
+ return (ptag ? ptag : libnet_pblock_update(l, p, 0, LIBNET_PBLOCK_SEBEK_H));
104
+ bad:
105
+ libnet_pblock_delete(l, p);
106
+ return (-1);
107
+ }
108
+ /* EOF */
@@ -0,0 +1,52 @@
1
+ /*
2
+ * $Id: libnet_build_snmp.c,v 1.4 2004/01/03 20:31:01 mike Exp $
3
+ *
4
+ * libnet
5
+ * libnet_build_snmp.c - SNMP packet assembler
6
+ *
7
+ * Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
8
+ * All rights reserved.
9
+ *
10
+ * Redistribution and use in source and binary forms, with or without
11
+ * modification, are permitted provided that the following conditions
12
+ * are met:
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ * 2. Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in the
17
+ * documentation and/or other materials provided with the distribution.
18
+ *
19
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
+ * SUCH DAMAGE.
30
+ *
31
+ */
32
+
33
+ #if (HAVE_CONFIG_H)
34
+ #include "../include/config.h"
35
+ #endif
36
+ #if (!(_WIN32) || (__CYGWIN__))
37
+ #include "../include/libnet.h"
38
+ #else
39
+ #include "../include/win32/libnet.h"
40
+ #endif
41
+
42
+ libnet_ptag_t
43
+ libnet_build_snmp()
44
+ {
45
+ /*
46
+ * We need an ASN.1 BER encoder before we can write this.
47
+ */
48
+ return (-1);
49
+ }
50
+
51
+
52
+ /* EOF */
@@ -0,0 +1,222 @@
1
+ /*
2
+ * $Id: libnet_build_stp.c,v 1.8 2004/01/15 20:11:15 mike Exp $
3
+ *
4
+ * libnet
5
+ * libnet_build_stp.c - STP packet assembler
6
+ *
7
+ * Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
8
+ * All rights reserved.
9
+ *
10
+ * Redistribution and use in source and binary forms, with or without
11
+ * modification, are permitted provided that the following conditions
12
+ * are met:
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ * 2. Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in the
17
+ * documentation and/or other materials provided with the distribution.
18
+ *
19
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
+ * SUCH DAMAGE.
30
+ *
31
+ */
32
+
33
+ #if (HAVE_CONFIG_H)
34
+ #include "../include/config.h"
35
+ #endif
36
+ #if (!(_WIN32) || (__CYGWIN__))
37
+ #include "../include/libnet.h"
38
+ #else
39
+ #include "../include/win32/libnet.h"
40
+ #endif
41
+
42
+ libnet_ptag_t
43
+ libnet_build_stp_conf(u_int16_t id, u_int8_t version, u_int8_t bpdu_type,
44
+ u_int8_t flags, u_int8_t *root_id, u_int32_t root_pc, u_int8_t *bridge_id,
45
+ u_int16_t port_id, u_int16_t message_age, u_int16_t max_age,
46
+ u_int16_t hello_time, u_int16_t f_delay, u_int8_t *payload,
47
+ u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
48
+ {
49
+ u_int32_t n, h;
50
+ libnet_pblock_t *p;
51
+
52
+ /* until we get some data marshalling in place we can't use this */
53
+ /* struct libnet_stp_conf_hdr stp_hdr; */
54
+ u_int8_t stp_hdr[35];
55
+ u_int16_t value_s;
56
+ u_int32_t value_l;
57
+
58
+ if (l == NULL)
59
+ {
60
+ return (-1);
61
+ }
62
+
63
+ n = LIBNET_STP_CONF_H + payload_s; /* size of memory block */
64
+ h = 0; /* no checksum */
65
+
66
+ /*
67
+ * Find the existing protocol block if a ptag is specified, or create
68
+ * a new one.
69
+ */
70
+ p = libnet_pblock_probe(l, ptag, n, LIBNET_PBLOCK_STP_CONF_H);
71
+ if (p == NULL)
72
+ {
73
+ return (-1);
74
+ }
75
+
76
+ /* until we get some data marshalling in place we can't use this */
77
+ /*
78
+ stp_hdr.stp_id = htons(id);
79
+ stp_hdr.stp_version = version;
80
+ stp_hdr.stp_bpdu_type = bpdu_type;
81
+ stp_hdr.stp_flags = flags;
82
+ memcpy(&stp_hdr.stp_rootid, root_id, 8);
83
+ stp_hdr.stp_rootpc = htonl(root_pc);
84
+ memcpy(&stp_hdr.stp_bridgeid, bridge_id, 8);
85
+ stp_hdr.stp_portid = htons(port_id);
86
+ stp_hdr.stp_mage = htons(message_age);
87
+ stp_hdr.stp_maxage = htons(max_age);
88
+ stp_hdr.stp_hellot = htons(hello_time);
89
+ stp_hdr.stp_fdelay = htons(f_delay);
90
+ */
91
+
92
+ value_s = htons(id);
93
+ memcpy(stp_hdr, &value_s, 2);
94
+ stp_hdr[2] = version;
95
+ stp_hdr[3] = bpdu_type;
96
+ stp_hdr[4] = flags;
97
+ memcpy(&stp_hdr[5], root_id, 8);
98
+ value_l = htonl(root_pc);
99
+ memcpy(&stp_hdr[13], &value_l, 4);
100
+ memcpy(&stp_hdr[17], bridge_id, 8);
101
+ value_s = htons(port_id);
102
+ memcpy(&stp_hdr[25], &value_s, 2);
103
+ #if (LIBNET_BIG_ENDIAN == 1)
104
+ value_s = htons(message_age);
105
+ #else
106
+ value_s = message_age;
107
+ #endif
108
+ memcpy(&stp_hdr[27], &value_s, 2);
109
+ #if (LIBNET_BIG_ENDIAN == 1)
110
+ value_s = htons(max_age);
111
+ #else
112
+ value_s = max_age;
113
+ #endif
114
+ memcpy(&stp_hdr[29], &value_s, 2);
115
+ #if (LIBNET_BIG_ENDIAN == 1)
116
+ value_s = htons(hello_time);
117
+ #else
118
+ value_s = hello_time;
119
+ #endif
120
+ memcpy(&stp_hdr[31], &value_s, 2);
121
+ #if (LIBNET_BIG_ENDIAN == 1)
122
+ value_s = htons(f_delay);
123
+ #else
124
+ value_s = f_delay;
125
+ #endif
126
+ memcpy(&stp_hdr[33], &value_s, 2);
127
+
128
+
129
+ /* until we get some data marshalling in place we can't use this */
130
+ /*n = libnet_pblock_append(l, p, (u_int8_t *)&stp_hdr, LIBNET_STP_CONF_H); */
131
+ n = libnet_pblock_append(l, p, stp_hdr, LIBNET_STP_CONF_H);
132
+ if (n == -1)
133
+ {
134
+ goto bad;
135
+ }
136
+
137
+ if ((payload && !payload_s) || (!payload && payload_s))
138
+ {
139
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
140
+ "%s(): payload inconsistency\n", __func__);
141
+ goto bad;
142
+ }
143
+
144
+ if (payload && payload_s)
145
+ {
146
+ n = libnet_pblock_append(l, p, payload, payload_s);
147
+ if (n == -1)
148
+ {
149
+ goto bad;
150
+ }
151
+ }
152
+
153
+ return (ptag ? ptag : libnet_pblock_update(l, p, h,
154
+ LIBNET_PBLOCK_STP_CONF_H));
155
+ bad:
156
+ libnet_pblock_delete(l, p);
157
+ return (-1);
158
+ }
159
+
160
+
161
+ libnet_ptag_t
162
+ libnet_build_stp_tcn(u_int16_t id, u_int8_t version, u_int8_t bpdu_type,
163
+ u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
164
+ {
165
+ u_int32_t n, h;
166
+ libnet_pblock_t *p;
167
+
168
+ struct libnet_stp_tcn_hdr stp_hdr;
169
+
170
+ if (l == NULL)
171
+ {
172
+ return (-1);
173
+ }
174
+
175
+ n = LIBNET_STP_TCN_H + payload_s; /* size of memory block */
176
+ h = 0; /* no checksum */
177
+
178
+ /*
179
+ * Find the existing protocol block if a ptag is specified, or create
180
+ * a new one.
181
+ */
182
+ p = libnet_pblock_probe(l, ptag, n, LIBNET_PBLOCK_STP_TCN_H);
183
+ if (p == NULL)
184
+ {
185
+ return (-1);
186
+ }
187
+
188
+ memset(&stp_hdr, 0, sizeof(stp_hdr));
189
+ stp_hdr.stp_id = htons(id);
190
+ stp_hdr.stp_version = version;
191
+ stp_hdr.stp_bpdu_type = bpdu_type;
192
+
193
+ n = libnet_pblock_append(l, p, (u_int8_t *)&stp_hdr, LIBNET_STP_TCN_H);
194
+ if (n == -1)
195
+ {
196
+ goto bad;
197
+ }
198
+
199
+ if ((payload && !payload_s) || (!payload && payload_s))
200
+ {
201
+ snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
202
+ "%s(): payload inconsistency\n", __func__);
203
+ goto bad;
204
+ }
205
+
206
+ if (payload && payload_s)
207
+ {
208
+ n = libnet_pblock_append(l, p, payload, payload_s);
209
+ if (n == -1)
210
+ {
211
+ goto bad;
212
+ }
213
+ }
214
+
215
+ return (ptag ? ptag : libnet_pblock_update(l, p, h,
216
+ LIBNET_PBLOCK_STP_TCN_H));
217
+ bad:
218
+ libnet_pblock_delete(l, p);
219
+ return (-1);
220
+ }
221
+
222
+ /* EOF */