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,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 */
|