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.
- data/CHANGELOG +15 -0
- data/LICENSE +28 -0
- data/README +187 -0
- data/Rakefile +110 -0
- data/ext/extconf.rb +60 -0
- data/ext/libnet.c +705 -0
- data/ext/libnet_arp.c +152 -0
- data/ext/libnet_ethernet.c +115 -0
- data/ext/libnet_ipv4.c +140 -0
- data/ext/libnet_ipv6.c +138 -0
- data/ext/libnet_udp.c +112 -0
- data/ext/libnet_vlan.c +131 -0
- data/lib/libnet4r/header.rb +609 -0
- data/lib/libnet4r/helpers.rb +19 -0
- data/lib/libnet4r/libnet.rb +39 -0
- data/libnet/CVS/Entries +24 -0
- data/libnet/CVS/Repository +1 -0
- data/libnet/CVS/Root +1 -0
- data/libnet/Makefile.am +15 -0
- data/libnet/Makefile.am.common +10 -0
- data/libnet/Makefile.in +443 -0
- data/libnet/README +21 -0
- data/libnet/VERSION +1 -0
- data/libnet/acconfig.h +36 -0
- data/libnet/acinclude.m4 +463 -0
- data/libnet/aclocal.m4 +1337 -0
- data/libnet/autom4te.cache/CVS/Entries +1 -0
- data/libnet/autom4te.cache/CVS/Repository +1 -0
- data/libnet/autom4te.cache/CVS/Root +1 -0
- data/libnet/autom4te.cache/output.0 +6225 -0
- data/libnet/autom4te.cache/requests +111 -0
- data/libnet/autom4te.cache/traces.0 +272 -0
- data/libnet/config.guess +1314 -0
- data/libnet/config.sub +1410 -0
- data/libnet/configure +6225 -0
- data/libnet/configure.in +235 -0
- data/libnet/doc/BUGS +19 -0
- data/libnet/doc/CHANGELOG +527 -0
- data/libnet/doc/CONTRIB +53 -0
- data/libnet/doc/COPYING +31 -0
- data/libnet/doc/CVS/Entries +12 -0
- data/libnet/doc/CVS/Repository +1 -0
- data/libnet/doc/CVS/Root +1 -0
- data/libnet/doc/DESIGN_NOTES +134 -0
- data/libnet/doc/MIGRATION +172 -0
- data/libnet/doc/PACKET_BUILDING +161 -0
- data/libnet/doc/PORTED +45 -0
- data/libnet/doc/RAWSOCKET_NON_SEQUITUR +41 -0
- data/libnet/doc/TODO +96 -0
- data/libnet/doc/html/acconfig_8h-source.html +49 -0
- data/libnet/doc/html/annotated.html +17 -0
- data/libnet/doc/html/bpf_8h-source.html +277 -0
- data/libnet/doc/html/config_8h-source.html +125 -0
- data/libnet/doc/html/doxygen.css +169 -0
- data/libnet/doc/html/doxygen.png +0 -0
- data/libnet/doc/html/files.html +29 -0
- data/libnet/doc/html/functions.html +26 -0
- data/libnet/doc/html/functions_vars.html +26 -0
- data/libnet/doc/html/getopt_8h-source.html +97 -0
- data/libnet/doc/html/globals.html +219 -0
- data/libnet/doc/html/globals_defs.html +104 -0
- data/libnet/doc/html/globals_func.html +136 -0
- data/libnet/doc/html/gnuc_8h-source.html +56 -0
- data/libnet/doc/html/graph_legend.dot +22 -0
- data/libnet/doc/html/graph_legend.html +75 -0
- data/libnet/doc/html/ifaddrlist_8h-source.html +65 -0
- data/libnet/doc/html/in__systm_8h-source.html +90 -0
- data/libnet/doc/html/index.html +17 -0
- data/libnet/doc/html/libnet-asn1_8h-source.html +268 -0
- data/libnet/doc/html/libnet-functions_8h-source.html +742 -0
- data/libnet/doc/html/libnet-functions_8h.html +8844 -0
- data/libnet/doc/html/libnet-headers_8h-source.html +1655 -0
- data/libnet/doc/html/libnet-headers_8h.html +3053 -0
- data/libnet/doc/html/libnet-macros_8h-source.html +161 -0
- data/libnet/doc/html/libnet-macros_8h.html +358 -0
- data/libnet/doc/html/libnet-structures_8h-source.html +233 -0
- data/libnet/doc/html/libnet-types_8h-source.html +58 -0
- data/libnet/doc/html/libnet_8h-source.html +119 -0
- data/libnet/doc/html/libnet_8h.html +24 -0
- data/libnet/doc/html/structlibnet__802__1q__hdr.html +145 -0
- data/libnet/doc/html/structlibnet__802__1x__hdr.html +97 -0
- data/libnet/doc/libnet.doxygen.conf +1102 -0
- data/libnet/doc/man/CVS/Entries +1 -0
- data/libnet/doc/man/CVS/Repository +1 -0
- data/libnet/doc/man/CVS/Root +1 -0
- data/libnet/doc/man/man3/libnet-functions.h.3 +3136 -0
- data/libnet/doc/man/man3/libnet-headers.h.3 +1872 -0
- data/libnet/doc/man/man3/libnet-macros.h.3 +172 -0
- data/libnet/doc/man/man3/libnet.h.3 +17 -0
- data/libnet/doc/man/man3/libnet_802_1q_hdr.3 +53 -0
- data/libnet/doc/man/man3/libnet_802_1x_hdr.3 +41 -0
- data/libnet/include/CVS/Entries +10 -0
- data/libnet/include/CVS/Repository +1 -0
- data/libnet/include/CVS/Root +1 -0
- data/libnet/include/Makefile.am +7 -0
- data/libnet/include/Makefile.in +395 -0
- data/libnet/include/bpf.h +264 -0
- data/libnet/include/config.h.in +118 -0
- data/libnet/include/gnuc.h +43 -0
- data/libnet/include/ifaddrlist.h +52 -0
- data/libnet/include/libnet/CVS/Entries +9 -0
- data/libnet/include/libnet/CVS/Repository +1 -0
- data/libnet/include/libnet/CVS/Root +1 -0
- data/libnet/include/libnet/Makefile.am +12 -0
- data/libnet/include/libnet/Makefile.in +294 -0
- data/libnet/include/libnet/libnet-asn1.h +255 -0
- data/libnet/include/libnet/libnet-functions.h +2157 -0
- data/libnet/include/libnet/libnet-headers.h +1662 -0
- data/libnet/include/libnet/libnet-macros.h +186 -0
- data/libnet/include/libnet/libnet-structures.h +222 -0
- data/libnet/include/libnet/libnet-types.h +45 -0
- data/libnet/include/libnet.h.in +132 -0
- data/libnet/include/stamp-h.in +1 -0
- data/libnet/include/win32/CVS/Entries +5 -0
- data/libnet/include/win32/CVS/Repository +1 -0
- data/libnet/include/win32/CVS/Root +1 -0
- data/libnet/include/win32/config.h +112 -0
- data/libnet/include/win32/getopt.h +84 -0
- data/libnet/include/win32/in_systm.h +77 -0
- data/libnet/include/win32/libnet.h +106 -0
- data/libnet/install-sh +250 -0
- data/libnet/libnet-config.in +62 -0
- data/libnet/libnet.doxygen.conf +1102 -0
- data/libnet/man/CVS/Entries +1 -0
- data/libnet/man/CVS/Repository +1 -0
- data/libnet/man/CVS/Root +1 -0
- data/libnet/missing +283 -0
- data/libnet/mkinstalldirs +40 -0
- data/libnet/sample/CVS/Entries +47 -0
- data/libnet/sample/CVS/Repository +1 -0
- data/libnet/sample/CVS/Root +1 -0
- data/libnet/sample/Makefile.am +63 -0
- data/libnet/sample/Makefile.in +729 -0
- data/libnet/sample/arp-new.c +144 -0
- data/libnet/sample/arp.c +151 -0
- data/libnet/sample/bgp4_hdr.c +225 -0
- data/libnet/sample/bgp4_notification.c +242 -0
- data/libnet/sample/bgp4_open.c +266 -0
- data/libnet/sample/bgp4_update.c +337 -0
- data/libnet/sample/cdp.c +187 -0
- data/libnet/sample/dhcp_discover.c +257 -0
- data/libnet/sample/dns.c +260 -0
- data/libnet/sample/dot1x.c +113 -0
- data/libnet/sample/fddi_tcp1.c +213 -0
- data/libnet/sample/fddi_tcp2.c +209 -0
- data/libnet/sample/get_addr.c +112 -0
- data/libnet/sample/gre.c +410 -0
- data/libnet/sample/icmp6_echoreq.c +184 -0
- data/libnet/sample/icmp_echo_cq.c +201 -0
- data/libnet/sample/icmp_redirect.c +200 -0
- data/libnet/sample/icmp_timeexceed.c +190 -0
- data/libnet/sample/icmp_timestamp.c +157 -0
- data/libnet/sample/icmp_unreach.c +204 -0
- data/libnet/sample/ieee.c +177 -0
- data/libnet/sample/ip_link.c +201 -0
- data/libnet/sample/ip_raw.c +180 -0
- data/libnet/sample/isl.c +167 -0
- data/libnet/sample/libnet_test.h +60 -0
- data/libnet/sample/mpls.c +251 -0
- data/libnet/sample/ntp.c +193 -0
- data/libnet/sample/ospf_hello.c +179 -0
- data/libnet/sample/ospf_lsa.c +190 -0
- data/libnet/sample/ping_of_death.c +171 -0
- data/libnet/sample/rpc_tcp.c +214 -0
- data/libnet/sample/rpc_udp.c +213 -0
- data/libnet/sample/sebek.c +299 -0
- data/libnet/sample/smurf.c +194 -0
- data/libnet/sample/stp.c +227 -0
- data/libnet/sample/synflood.c +200 -0
- data/libnet/sample/synflood6.c +209 -0
- data/libnet/sample/synflood6_frag.c +234 -0
- data/libnet/sample/tcp1.c +227 -0
- data/libnet/sample/tcp2.c +192 -0
- data/libnet/sample/tftp.c +207 -0
- data/libnet/sample/tring_tcp1.c +214 -0
- data/libnet/sample/tring_tcp2.c +210 -0
- data/libnet/sample/udp1.c +223 -0
- data/libnet/sample/udp2.c +232 -0
- data/libnet/sample/win32/CVS/Entries +9 -0
- data/libnet/sample/win32/CVS/Repository +1 -0
- data/libnet/sample/win32/CVS/Root +1 -0
- data/libnet/sample/win32/arp/CVS/Entries +2 -0
- data/libnet/sample/win32/arp/CVS/Repository +1 -0
- data/libnet/sample/win32/arp/CVS/Root +1 -0
- data/libnet/sample/win32/arp/arp.vcproj +136 -0
- data/libnet/sample/win32/cdp/CVS/Entries +2 -0
- data/libnet/sample/win32/cdp/CVS/Repository +1 -0
- data/libnet/sample/win32/cdp/CVS/Root +1 -0
- data/libnet/sample/win32/cdp/cdp.vcproj +136 -0
- data/libnet/sample/win32/dhcp_discover/CVS/Entries +2 -0
- data/libnet/sample/win32/dhcp_discover/CVS/Repository +1 -0
- data/libnet/sample/win32/dhcp_discover/CVS/Root +1 -0
- data/libnet/sample/win32/dhcp_discover/dhcp_discover.vcproj +139 -0
- data/libnet/sample/win32/dns/CVS/Entries +2 -0
- data/libnet/sample/win32/dns/CVS/Repository +1 -0
- data/libnet/sample/win32/dns/CVS/Root +1 -0
- data/libnet/sample/win32/dns/dns.vcproj +139 -0
- data/libnet/sample/win32/get_addr/CVS/Entries +2 -0
- data/libnet/sample/win32/get_addr/CVS/Repository +1 -0
- data/libnet/sample/win32/get_addr/CVS/Root +1 -0
- data/libnet/sample/win32/get_addr/get_addr.vcproj +139 -0
- data/libnet/sample/win32/getopt.c +121 -0
- data/libnet/sample/win32/icmp_echo_cq/CVS/Entries +2 -0
- data/libnet/sample/win32/icmp_echo_cq/CVS/Repository +1 -0
- data/libnet/sample/win32/icmp_echo_cq/CVS/Root +1 -0
- data/libnet/sample/win32/icmp_echo_cq/icmp_echo_cq.vcproj +139 -0
- data/libnet/sample/win32/tcp1/CVS/Entries +2 -0
- data/libnet/sample/win32/tcp1/CVS/Repository +1 -0
- data/libnet/sample/win32/tcp1/CVS/Root +1 -0
- data/libnet/sample/win32/tcp1/tcp1.vcproj +142 -0
- data/libnet/sample/win32/udp1/CVS/Entries +3 -0
- data/libnet/sample/win32/udp1/CVS/Repository +1 -0
- data/libnet/sample/win32/udp1/CVS/Root +1 -0
- data/libnet/sample/win32/udp1/dns.vcproj +125 -0
- data/libnet/sample/win32/udp1/udp1.vcproj +139 -0
- data/libnet/src/CVS/Entries +60 -0
- data/libnet/src/CVS/Repository +1 -0
- data/libnet/src/CVS/Root +1 -0
- data/libnet/src/Makefile.am +71 -0
- data/libnet/src/Makefile.in +428 -0
- data/libnet/src/libnet_advanced.c +136 -0
- data/libnet/src/libnet_asn1.c +436 -0
- data/libnet/src/libnet_build_802.1q.c +115 -0
- data/libnet/src/libnet_build_802.1x.c +103 -0
- data/libnet/src/libnet_build_802.2.c +167 -0
- data/libnet/src/libnet_build_802.3.c +101 -0
- data/libnet/src/libnet_build_arp.c +169 -0
- data/libnet/src/libnet_build_bgp.c +350 -0
- data/libnet/src/libnet_build_cdp.c +191 -0
- data/libnet/src/libnet_build_data.c +90 -0
- data/libnet/src/libnet_build_dhcp.c +156 -0
- data/libnet/src/libnet_build_dns.c +129 -0
- data/libnet/src/libnet_build_ethernet.c +173 -0
- data/libnet/src/libnet_build_fddi.c +191 -0
- data/libnet/src/libnet_build_gre.c +427 -0
- data/libnet/src/libnet_build_icmp.c +437 -0
- data/libnet/src/libnet_build_igmp.c +112 -0
- data/libnet/src/libnet_build_ip.c +892 -0
- data/libnet/src/libnet_build_ipsec.c +232 -0
- data/libnet/src/libnet_build_isl.c +113 -0
- data/libnet/src/libnet_build_link.c +90 -0
- data/libnet/src/libnet_build_mpls.c +112 -0
- data/libnet/src/libnet_build_ntp.c +121 -0
- data/libnet/src/libnet_build_ospf.c +699 -0
- data/libnet/src/libnet_build_rip.c +108 -0
- data/libnet/src/libnet_build_rpc.c +138 -0
- data/libnet/src/libnet_build_sebek.c +108 -0
- data/libnet/src/libnet_build_snmp.c +52 -0
- data/libnet/src/libnet_build_stp.c +222 -0
- data/libnet/src/libnet_build_tcp.c +365 -0
- data/libnet/src/libnet_build_token_ring.c +193 -0
- data/libnet/src/libnet_build_udp.c +111 -0
- data/libnet/src/libnet_build_vrrp.c +117 -0
- data/libnet/src/libnet_checksum.c +376 -0
- data/libnet/src/libnet_cq.c +395 -0
- data/libnet/src/libnet_crc.c +113 -0
- data/libnet/src/libnet_dll.c +47 -0
- data/libnet/src/libnet_error.c +55 -0
- data/libnet/src/libnet_if_addr.c +415 -0
- data/libnet/src/libnet_init.c +234 -0
- data/libnet/src/libnet_internal.c +310 -0
- data/libnet/src/libnet_link_bpf.c +348 -0
- data/libnet/src/libnet_link_dlpi.c +785 -0
- data/libnet/src/libnet_link_linux.c +310 -0
- data/libnet/src/libnet_link_nit.c +125 -0
- data/libnet/src/libnet_link_none.c +66 -0
- data/libnet/src/libnet_link_pf.c +179 -0
- data/libnet/src/libnet_link_snit.c +149 -0
- data/libnet/src/libnet_link_snoop.c +166 -0
- data/libnet/src/libnet_link_win32.c +346 -0
- data/libnet/src/libnet_pblock.c +511 -0
- data/libnet/src/libnet_port_list.c +295 -0
- data/libnet/src/libnet_prand.c +106 -0
- data/libnet/src/libnet_raw.c +257 -0
- data/libnet/src/libnet_resolve.c +414 -0
- data/libnet/src/libnet_version.c +54 -0
- data/libnet/src/libnet_write.c +502 -0
- data/libnet/version.h.in +6 -0
- data/libnet/win32/CVS/Entries +15 -0
- data/libnet/win32/CVS/Repository +1 -0
- data/libnet/win32/CVS/Root +1 -0
- data/libnet/win32/Libnet-1.1.1-2002.sln +77 -0
- data/libnet/win32/Libnet-1.1.1-2003.ncb +0 -0
- data/libnet/win32/Libnet-1.1.1-2003.sln +84 -0
- data/libnet/win32/Libnet-1.1.1-2003.suo +0 -0
- data/libnet/win32/Libnet-1.1.1.vcproj +311 -0
- data/libnet/win32/Libnet-latest.ncb +0 -0
- data/libnet/win32/Libnet-latest.opt +0 -0
- data/libnet/win32/Libnet-latest.sln +77 -0
- data/libnet/win32/Libnet-latest.suo +0 -0
- data/libnet/win32/Libnet-latest.vcproj +311 -0
- data/libnet/win32/Libnet.dsp +337 -0
- data/libnet/win32/Libnet.dsw +32 -0
- data/libnet/win32/README.txt +57 -0
- data/libnet/win32/libnet_dll.def +164 -0
- data/test/tc_arp.rb +169 -0
- data/test/tc_class.rb +219 -0
- data/test/tc_ethernet.rb +97 -0
- data/test/tc_header.rb +163 -0
- data/test/tc_init.rb +25 -0
- data/test/tc_ipv4.rb +219 -0
- data/test/tc_ipv6.rb +235 -0
- data/test/tc_udp.rb +229 -0
- data/test/tc_vlan.rb +118 -0
- data/test/ts_all.rb +15 -0
- metadata +401 -0
@@ -0,0 +1,232 @@
|
|
1
|
+
/*
|
2
|
+
* $Id: libnet_build_ipsec.c,v 1.11 2004/01/21 19:01:29 mike Exp $
|
3
|
+
*
|
4
|
+
* libnet
|
5
|
+
* libnet_build_ipsec.c - IP packet assembler
|
6
|
+
*
|
7
|
+
* Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
|
8
|
+
* Copyright (c) 2002 Jose Nazario <jose@crimelabs.net>
|
9
|
+
* All rights reserved.
|
10
|
+
*
|
11
|
+
* Redistribution and use in source and binary forms, with or without
|
12
|
+
* modification, are permitted provided that the following conditions
|
13
|
+
* are met:
|
14
|
+
* 1. Redistributions of source code must retain the above copyright
|
15
|
+
* notice, this list of conditions and the following disclaimer.
|
16
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
17
|
+
* notice, this list of conditions and the following disclaimer in the
|
18
|
+
* documentation and/or other materials provided with the distribution.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
21
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
23
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
24
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
25
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
26
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
27
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
28
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
29
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
30
|
+
* SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#if (HAVE_CONFIG_H)
|
35
|
+
#include "../include/config.h"
|
36
|
+
#endif
|
37
|
+
#if (!(_WIN32) || (__CYGWIN__))
|
38
|
+
#include "../include/libnet.h"
|
39
|
+
#else
|
40
|
+
#include "../include/win32/libnet.h"
|
41
|
+
#endif
|
42
|
+
|
43
|
+
|
44
|
+
libnet_ptag_t
|
45
|
+
libnet_build_ipsec_esp_hdr(u_int32_t spi, u_int32_t seq, u_int32_t iv,
|
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_esp_hdr esp_hdr;
|
51
|
+
|
52
|
+
if (l == NULL)
|
53
|
+
{
|
54
|
+
return (-1);
|
55
|
+
}
|
56
|
+
|
57
|
+
n = LIBNET_IPSEC_ESP_HDR_H + payload_s;/* size of memory block */
|
58
|
+
h = 0;
|
59
|
+
|
60
|
+
memset(&esp_hdr, 0, sizeof(esp_hdr));
|
61
|
+
esp_hdr.esp_spi = htonl(spi); /* SPI */
|
62
|
+
esp_hdr.esp_seq = htonl(seq); /* ESP sequence number */
|
63
|
+
esp_hdr.esp_iv = htonl(iv); /* initialization vector */
|
64
|
+
|
65
|
+
/*
|
66
|
+
* Find the existing protocol block if a ptag is specified, or create
|
67
|
+
* a new one.
|
68
|
+
*/
|
69
|
+
p = libnet_pblock_probe(l, ptag, n, LIBNET_PBLOCK_IPSEC_ESP_HDR_H);
|
70
|
+
if (p == NULL)
|
71
|
+
{
|
72
|
+
return (-1);
|
73
|
+
}
|
74
|
+
|
75
|
+
n = libnet_pblock_append(l, p, (u_int8_t *)&esp_hdr, LIBNET_IPSEC_ESP_HDR_H);
|
76
|
+
if (n == -1)
|
77
|
+
{
|
78
|
+
goto bad;
|
79
|
+
}
|
80
|
+
|
81
|
+
if ((payload && !payload_s) || (!payload && payload_s))
|
82
|
+
{
|
83
|
+
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
|
84
|
+
"%s(): payload inconsistency\n", __func__);
|
85
|
+
goto bad;
|
86
|
+
}
|
87
|
+
|
88
|
+
if (payload && payload_s)
|
89
|
+
{
|
90
|
+
n = libnet_pblock_append(l, p, payload, payload_s);
|
91
|
+
if (n == -1)
|
92
|
+
{
|
93
|
+
goto bad;
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
return (ptag ? ptag : libnet_pblock_update(l, p, h,
|
98
|
+
LIBNET_PBLOCK_IPSEC_ESP_HDR_H));
|
99
|
+
bad:
|
100
|
+
libnet_pblock_delete(l, p);
|
101
|
+
return (-1);
|
102
|
+
}
|
103
|
+
|
104
|
+
|
105
|
+
libnet_ptag_t
|
106
|
+
libnet_build_ipsec_esp_ftr(u_int8_t len, u_int8_t nh, int8_t *auth,
|
107
|
+
u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
|
108
|
+
libnet_ptag_t ptag)
|
109
|
+
{
|
110
|
+
/* XXX we need to know the size of auth */
|
111
|
+
u_int32_t n, h;
|
112
|
+
libnet_pblock_t *p;
|
113
|
+
struct libnet_esp_ftr esp_ftr;
|
114
|
+
|
115
|
+
if (l == NULL)
|
116
|
+
{
|
117
|
+
return (-1);
|
118
|
+
}
|
119
|
+
|
120
|
+
n = LIBNET_IPSEC_ESP_FTR_H + payload_s;/* size of memory block */
|
121
|
+
h = 0;
|
122
|
+
|
123
|
+
memset(&esp_ftr, 0, sizeof(esp_ftr));
|
124
|
+
esp_ftr.esp_pad_len = len; /* pad length */
|
125
|
+
esp_ftr.esp_nh = nh; /* next header pointer */
|
126
|
+
esp_ftr.esp_auth = auth; /* authentication data */
|
127
|
+
|
128
|
+
/*
|
129
|
+
* Find the existing protocol block if a ptag is specified, or create
|
130
|
+
* a new one.
|
131
|
+
*/
|
132
|
+
p = libnet_pblock_probe(l, ptag, n, LIBNET_PBLOCK_IPSEC_ESP_FTR_H);
|
133
|
+
if (p == NULL)
|
134
|
+
{
|
135
|
+
return (-1);
|
136
|
+
}
|
137
|
+
|
138
|
+
n = libnet_pblock_append(l, p, (u_int8_t *)&esp_ftr, LIBNET_IPSEC_ESP_FTR_H);
|
139
|
+
if (n == -1)
|
140
|
+
{
|
141
|
+
goto bad;
|
142
|
+
}
|
143
|
+
|
144
|
+
if ((payload && !payload_s) || (!payload && payload_s))
|
145
|
+
{
|
146
|
+
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
|
147
|
+
"%s(): payload inconsistency\n", __func__);
|
148
|
+
goto bad;
|
149
|
+
}
|
150
|
+
|
151
|
+
if (payload && payload_s)
|
152
|
+
{
|
153
|
+
n = libnet_pblock_append(l, p, payload, payload_s);
|
154
|
+
if (n == -1)
|
155
|
+
{
|
156
|
+
goto bad;
|
157
|
+
}
|
158
|
+
}
|
159
|
+
|
160
|
+
return (ptag ? ptag : libnet_pblock_update(l, p, h,
|
161
|
+
LIBNET_PBLOCK_IPSEC_ESP_FTR_H));
|
162
|
+
bad:
|
163
|
+
libnet_pblock_delete(l, p);
|
164
|
+
return (-1);
|
165
|
+
}
|
166
|
+
|
167
|
+
|
168
|
+
libnet_ptag_t
|
169
|
+
libnet_build_ipsec_ah(u_int8_t nh, u_int8_t len, u_int16_t res,
|
170
|
+
u_int32_t spi, u_int32_t seq, u_int32_t auth, u_int8_t *payload,
|
171
|
+
u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
|
172
|
+
{
|
173
|
+
u_int32_t n, h;
|
174
|
+
libnet_pblock_t *p;
|
175
|
+
struct libnet_ah_hdr ah_hdr;
|
176
|
+
|
177
|
+
if (l == NULL)
|
178
|
+
{
|
179
|
+
return (-1);
|
180
|
+
}
|
181
|
+
|
182
|
+
n = LIBNET_IPSEC_AH_H + payload_s;/* size of memory block */
|
183
|
+
h = 0;
|
184
|
+
|
185
|
+
/*
|
186
|
+
* Find the existing protocol block if a ptag is specified, or create
|
187
|
+
* a new one.
|
188
|
+
*/
|
189
|
+
p = libnet_pblock_probe(l, ptag, n, LIBNET_PBLOCK_IPSEC_AH_H);
|
190
|
+
if (p == NULL)
|
191
|
+
{
|
192
|
+
return (-1);
|
193
|
+
}
|
194
|
+
|
195
|
+
memset(&ah_hdr, 0, sizeof(ah_hdr));
|
196
|
+
ah_hdr.ah_nh = nh; /* next header */
|
197
|
+
ah_hdr.ah_len = len; /* length */
|
198
|
+
ah_hdr.ah_res = (res ? htons(res) : 0);
|
199
|
+
ah_hdr.ah_spi = htonl(spi); /* SPI */
|
200
|
+
ah_hdr.ah_seq = htonl(seq); /* AH sequence number */
|
201
|
+
ah_hdr.ah_auth = htonl(auth); /* authentication data */
|
202
|
+
|
203
|
+
n = libnet_pblock_append(l, p, (u_int8_t *)&ah_hdr, LIBNET_IPSEC_AH_H);
|
204
|
+
if (n == -1)
|
205
|
+
{
|
206
|
+
goto bad;
|
207
|
+
}
|
208
|
+
|
209
|
+
if ((payload && !payload_s) || (!payload && payload_s))
|
210
|
+
{
|
211
|
+
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
|
212
|
+
"%s(): payload inconsistency\n", __func__);
|
213
|
+
goto bad;
|
214
|
+
}
|
215
|
+
|
216
|
+
if (payload && payload_s)
|
217
|
+
{
|
218
|
+
n = libnet_pblock_append(l, p, payload, payload_s);
|
219
|
+
if (n == -1)
|
220
|
+
{
|
221
|
+
goto bad;
|
222
|
+
}
|
223
|
+
}
|
224
|
+
|
225
|
+
return (ptag ? ptag : libnet_pblock_update(l, p, h,
|
226
|
+
LIBNET_PBLOCK_IPSEC_AH_H));
|
227
|
+
bad:
|
228
|
+
libnet_pblock_delete(l, p);
|
229
|
+
return (-1);
|
230
|
+
}
|
231
|
+
|
232
|
+
/* EOF */
|
@@ -0,0 +1,113 @@
|
|
1
|
+
/*
|
2
|
+
* $Id: libnet_build_isl.c,v 1.9 2004/01/03 20:31:01 mike Exp $
|
3
|
+
*
|
4
|
+
* libnet
|
5
|
+
* libnet_build_isl.c - cisco's inter-switch link 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_isl(u_int8_t *dhost, u_int8_t type, u_int8_t user, u_int8_t *shost,
|
44
|
+
u_int16_t len, u_int8_t *snap, u_int16_t vid, u_int16_t index,
|
45
|
+
u_int16_t reserved, u_int8_t *payload, u_int32_t payload_s,
|
46
|
+
libnet_t *l, libnet_ptag_t ptag)
|
47
|
+
{
|
48
|
+
u_int32_t n, h;
|
49
|
+
libnet_pblock_t *p;
|
50
|
+
struct libnet_isl_hdr isl_hdr;
|
51
|
+
|
52
|
+
if (l == NULL)
|
53
|
+
{
|
54
|
+
return (-1);
|
55
|
+
}
|
56
|
+
|
57
|
+
n = LIBNET_ISL_H + payload_s; /* size of memory block */
|
58
|
+
h = 0;
|
59
|
+
|
60
|
+
/*
|
61
|
+
* Find the existing protocol block if a ptag is specified, or create
|
62
|
+
* a new one.
|
63
|
+
*/
|
64
|
+
p = libnet_pblock_probe(l, ptag, n, LIBNET_PBLOCK_ISL_H);
|
65
|
+
if (p == NULL)
|
66
|
+
{
|
67
|
+
return (-1);
|
68
|
+
}
|
69
|
+
|
70
|
+
memset(&isl_hdr, 0, sizeof(isl_hdr));
|
71
|
+
memcpy(&isl_hdr.isl_dhost, dhost, 5);
|
72
|
+
isl_hdr.isl_type = type;
|
73
|
+
isl_hdr.isl_user = user;
|
74
|
+
memcpy(&isl_hdr.isl_shost, shost, 6);
|
75
|
+
isl_hdr.isl_len = htons(len);
|
76
|
+
memcpy(&isl_hdr.isl_dhost, snap, 6);
|
77
|
+
isl_hdr.isl_vid = htons(vid);
|
78
|
+
isl_hdr.isl_index = htons(index);
|
79
|
+
isl_hdr.isl_reserved= htons(reserved);
|
80
|
+
|
81
|
+
n = libnet_pblock_append(l, p, (u_int8_t *)&isl_hdr, LIBNET_ISL_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
|
+
/* we need to compute the CRC for the ethernet frame and the ISL frame */
|
104
|
+
libnet_pblock_setflags(p, LIBNET_PBLOCK_DO_CHECKSUM);
|
105
|
+
return (ptag ? ptag : libnet_pblock_update(l, p, LIBNET_ISL_H,
|
106
|
+
LIBNET_PBLOCK_ISL_H));
|
107
|
+
bad:
|
108
|
+
libnet_pblock_delete(l, p);
|
109
|
+
return (-1);
|
110
|
+
}
|
111
|
+
|
112
|
+
|
113
|
+
/* EOF */
|
@@ -0,0 +1,90 @@
|
|
1
|
+
/*
|
2
|
+
* $Id: libnet_build_link.c,v 1.9 2004/03/04 20:50:20 kkuehl Exp $
|
3
|
+
*
|
4
|
+
* libnet
|
5
|
+
* libnet_build_link.c - link-layer packet assembler
|
6
|
+
*
|
7
|
+
* Copyright (c) 2003 Roberto Larcher <roberto.larcher@libero.it>
|
8
|
+
* Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
|
9
|
+
* All rights reserved.
|
10
|
+
*
|
11
|
+
* Redistribution and use in source and binary forms, with or without
|
12
|
+
* modification, are permitted provided that the following conditions
|
13
|
+
* are met:
|
14
|
+
* 1. Redistributions of source code must retain the above copyright
|
15
|
+
* notice, this list of conditions and the following disclaimer.
|
16
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
17
|
+
* notice, this list of conditions and the following disclaimer in the
|
18
|
+
* documentation and/or other materials provided with the distribution.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
21
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
23
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
24
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
25
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
26
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
27
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
28
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
29
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
30
|
+
* SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#if (HAVE_CONFIG_H)
|
35
|
+
#include "../include/config.h"
|
36
|
+
#endif
|
37
|
+
#if (!(_WIN32) || (__CYGWIN__))
|
38
|
+
#include "../include/libnet.h"
|
39
|
+
#else
|
40
|
+
#include "../include/win32/libnet.h"
|
41
|
+
#endif
|
42
|
+
|
43
|
+
libnet_ptag_t
|
44
|
+
libnet_build_link(u_int8_t *dst, u_int8_t *src, u_int8_t *oui, u_int16_t type,
|
45
|
+
u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
|
46
|
+
|
47
|
+
{
|
48
|
+
u_int8_t org[3] = {0x00, 0x00, 0x00};
|
49
|
+
switch (l->link_type)
|
50
|
+
{
|
51
|
+
/* add FDDI */
|
52
|
+
case DLT_EN10MB:
|
53
|
+
return (libnet_build_ethernet(dst, src, type, payload, payload_s, l,
|
54
|
+
ptag));
|
55
|
+
case DLT_IEEE802:
|
56
|
+
return (libnet_build_token_ring(LIBNET_TOKEN_RING_FRAME,
|
57
|
+
LIBNET_TOKEN_RING_LLC_FRAME, dst, src, LIBNET_SAP_SNAP,
|
58
|
+
LIBNET_SAP_SNAP, 0x03, org, type, payload, payload_s,
|
59
|
+
l, ptag));
|
60
|
+
default:
|
61
|
+
break;
|
62
|
+
}
|
63
|
+
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
|
64
|
+
"%s(): linktype %d not supported\n", __func__, l->link_type);
|
65
|
+
return (-1);
|
66
|
+
}
|
67
|
+
|
68
|
+
libnet_ptag_t
|
69
|
+
libnet_autobuild_link(u_int8_t *dst, u_int8_t *oui, u_int16_t type, libnet_t *l)
|
70
|
+
{
|
71
|
+
u_int8_t org[3] = {0x00, 0x00, 0x00};
|
72
|
+
switch (l->link_type)
|
73
|
+
{
|
74
|
+
/* add FDDI */
|
75
|
+
case DLT_EN10MB:
|
76
|
+
return (libnet_autobuild_ethernet(dst, type, l));
|
77
|
+
case DLT_IEEE802:
|
78
|
+
return (libnet_autobuild_token_ring(LIBNET_TOKEN_RING_FRAME,
|
79
|
+
LIBNET_TOKEN_RING_LLC_FRAME, dst, LIBNET_SAP_SNAP,
|
80
|
+
LIBNET_SAP_SNAP, 0x03, org, TOKEN_RING_TYPE_IP, l));
|
81
|
+
default:
|
82
|
+
break;
|
83
|
+
}
|
84
|
+
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
|
85
|
+
"%s(): linktype %d not supported\n", __func__, l->link_type);
|
86
|
+
return (-1);
|
87
|
+
}
|
88
|
+
|
89
|
+
/* EOF */
|
90
|
+
|
@@ -0,0 +1,112 @@
|
|
1
|
+
/*
|
2
|
+
* $Id: libnet_build_mpls.c,v 1.9 2004/03/01 20:26:12 mike Exp $
|
3
|
+
*
|
4
|
+
* libnet
|
5
|
+
* libnet_build_mpls.c - MPLS 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_mpls(u_int32_t label, u_int8_t experimental, u_int8_t bos,
|
44
|
+
u_int8_t ttl, u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
|
45
|
+
libnet_ptag_t ptag)
|
46
|
+
{
|
47
|
+
u_int32_t n, h;
|
48
|
+
libnet_pblock_t *p;
|
49
|
+
struct libnet_mpls_hdr mpls_hdr;
|
50
|
+
|
51
|
+
if (l == NULL)
|
52
|
+
{
|
53
|
+
return (-1);
|
54
|
+
}
|
55
|
+
|
56
|
+
n = LIBNET_MPLS_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_MPLS_H);
|
64
|
+
if (p == NULL)
|
65
|
+
{
|
66
|
+
return (-1);
|
67
|
+
}
|
68
|
+
|
69
|
+
memset(&mpls_hdr, 0, sizeof(mpls_hdr));
|
70
|
+
mpls_hdr.mpls_les = htonl((((label & 0x000fffff) << 12) |
|
71
|
+
((experimental & 0x07) << 9) |
|
72
|
+
((bos & 0x01) << 8) |
|
73
|
+
((ttl & 0xff))));
|
74
|
+
|
75
|
+
n = libnet_pblock_append(l, p, (u_int8_t *)&mpls_hdr, LIBNET_MPLS_H);
|
76
|
+
if (n == -1)
|
77
|
+
{
|
78
|
+
goto bad;
|
79
|
+
}
|
80
|
+
|
81
|
+
if ((payload && !payload_s) || (!payload && payload_s))
|
82
|
+
{
|
83
|
+
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
|
84
|
+
"%s(): payload inconsistency\n", __func__);
|
85
|
+
goto bad;
|
86
|
+
}
|
87
|
+
|
88
|
+
if (payload && payload_s)
|
89
|
+
{
|
90
|
+
n = libnet_pblock_append(l, p, payload, payload_s);
|
91
|
+
if (n == -1)
|
92
|
+
{
|
93
|
+
goto bad;
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
/*
|
98
|
+
* The link offset is actually 4 bytes further into the header than
|
99
|
+
* before (the MPLS header adds this 4 bytes). We need to update the
|
100
|
+
* link offset pointer. XXX - should we set this here?
|
101
|
+
* Probably not. We should make pblock_coalesce check the pblock type
|
102
|
+
* and adjust accordingly.
|
103
|
+
*/
|
104
|
+
l->link_offset += 4;
|
105
|
+
|
106
|
+
return (ptag ? ptag : libnet_pblock_update(l, p, h, LIBNET_PBLOCK_MPLS_H));
|
107
|
+
bad:
|
108
|
+
libnet_pblock_delete(l, p);
|
109
|
+
return (-1);
|
110
|
+
}
|
111
|
+
|
112
|
+
/* EOF */
|
@@ -0,0 +1,121 @@
|
|
1
|
+
/*
|
2
|
+
* $Id: libnet_build_ntp.c,v 1.9 2004/03/01 20:26:12 mike Exp $
|
3
|
+
*
|
4
|
+
* libnet
|
5
|
+
* libnet_build_ntp.c - NTP 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_ntp(u_int8_t leap_indicator, u_int8_t version, u_int8_t mode,
|
44
|
+
u_int8_t stratum, u_int8_t poll, u_int8_t precision, u_int16_t delay_int,
|
45
|
+
u_int16_t delay_frac, u_int16_t dispersion_int, u_int16_t dispersion_frac,
|
46
|
+
u_int32_t reference_id, u_int32_t ref_ts_int, u_int32_t ref_ts_frac,
|
47
|
+
u_int32_t orig_ts_int, u_int32_t orig_ts_frac, u_int32_t rec_ts_int,
|
48
|
+
u_int32_t rec_ts_frac, u_int32_t xmt_ts_int, u_int32_t xmt_ts_frac,
|
49
|
+
u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag)
|
50
|
+
{
|
51
|
+
u_int32_t n, h;
|
52
|
+
libnet_pblock_t *p;
|
53
|
+
struct libnet_ntp_hdr ntp_hdr;
|
54
|
+
|
55
|
+
if (l == NULL)
|
56
|
+
{
|
57
|
+
return (-1);
|
58
|
+
}
|
59
|
+
|
60
|
+
n = LIBNET_NTP_H + payload_s;
|
61
|
+
h = 0;
|
62
|
+
|
63
|
+
/*
|
64
|
+
* Find the existing protocol block if a ptag is specified, or create
|
65
|
+
* a new one.
|
66
|
+
*/
|
67
|
+
p = libnet_pblock_probe(l, ptag, n, LIBNET_PBLOCK_NTP_H);
|
68
|
+
if (p == NULL)
|
69
|
+
{
|
70
|
+
return (-1);
|
71
|
+
}
|
72
|
+
|
73
|
+
memset(&ntp_hdr, 0, sizeof(ntp_hdr));
|
74
|
+
ntp_hdr.ntp_li_vn_mode = LIBNET_NTP_DO_LI_VN_MODE(
|
75
|
+
leap_indicator, version, mode);
|
76
|
+
ntp_hdr.ntp_stratum = stratum;
|
77
|
+
ntp_hdr.ntp_poll = poll;
|
78
|
+
ntp_hdr.ntp_precision = precision;
|
79
|
+
ntp_hdr.ntp_delay.integer = htons(delay_int);
|
80
|
+
ntp_hdr.ntp_delay.fraction = htons(delay_frac);
|
81
|
+
ntp_hdr.ntp_dispersion.integer = htons(dispersion_int);
|
82
|
+
ntp_hdr.ntp_dispersion.fraction = htons(dispersion_frac);
|
83
|
+
ntp_hdr.ntp_reference_id = htonl(reference_id);
|
84
|
+
ntp_hdr.ntp_ref_ts.integer = htonl(ref_ts_int);
|
85
|
+
ntp_hdr.ntp_ref_ts.fraction = htonl(ref_ts_frac);
|
86
|
+
ntp_hdr.ntp_orig_ts.integer = htonl(orig_ts_int);
|
87
|
+
ntp_hdr.ntp_orig_ts.fraction = htonl(orig_ts_frac);
|
88
|
+
ntp_hdr.ntp_rec_ts.integer = htonl(orig_ts_int);
|
89
|
+
ntp_hdr.ntp_rec_ts.fraction = htonl(orig_ts_frac);
|
90
|
+
ntp_hdr.ntp_xmt_ts.integer = htonl(xmt_ts_int);
|
91
|
+
ntp_hdr.ntp_xmt_ts.fraction = htonl(xmt_ts_frac);
|
92
|
+
|
93
|
+
n = libnet_pblock_append(l, p, (u_int8_t *)&ntp_hdr, LIBNET_NTP_H);
|
94
|
+
if (n == -1)
|
95
|
+
{
|
96
|
+
goto bad;
|
97
|
+
}
|
98
|
+
|
99
|
+
if ((payload && !payload_s) || (!payload && payload_s))
|
100
|
+
{
|
101
|
+
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
|
102
|
+
"%s(): payload inconsistency\n", __func__);
|
103
|
+
goto bad;
|
104
|
+
}
|
105
|
+
|
106
|
+
if (payload && payload_s)
|
107
|
+
{
|
108
|
+
n = libnet_pblock_append(l, p, payload, payload_s);
|
109
|
+
if (n == -1)
|
110
|
+
{
|
111
|
+
goto bad;
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
115
|
+
return (ptag ? ptag : libnet_pblock_update(l, p, h, LIBNET_PBLOCK_NTP_H));
|
116
|
+
bad:
|
117
|
+
libnet_pblock_delete(l, p);
|
118
|
+
return (-1);
|
119
|
+
}
|
120
|
+
|
121
|
+
/* EOF */
|