Annotation of embedaddon/libnet/src/libnet_advanced.c, revision 1.1.1.1
1.1 misho 1: /*
2: * $Id: libnet_advanced.c,v 1.7 2004/02/16 23:13:38 mike Exp $
3: *
4: * libnet
5: * libnet_advanced.c - Advanced routines
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: int
43: libnet_adv_cull_packet(libnet_t *l, u_int8_t **packet, u_int32_t *packet_s)
44: {
45: *packet = NULL;
46: *packet_s = 0;
47:
48: if (l->injection_type != LIBNET_LINK_ADV)
49: {
50: snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
51: "%s(): advanced link mode not enabled\n", __func__);
52: return (-1);
53: }
54:
55: /* checksums will be written in */
56: return (libnet_pblock_coalesce(l, packet, packet_s));
57: }
58:
59: int
60: libnet_adv_cull_header(libnet_t *l, libnet_ptag_t ptag, u_int8_t **header,
61: u_int32_t *header_s)
62: {
63: libnet_pblock_t *p;
64:
65: *header = NULL;
66: *header_s = 0;
67:
68: if (l->injection_type != LIBNET_LINK_ADV)
69: {
70: snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
71: "%s(): advanced link mode not enabled\n", __func__);
72: return (-1);
73: }
74:
75: p = libnet_pblock_find(l, ptag);
76: if (p == NULL)
77: {
78: snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
79: "%s(): ptag not found, you sure it exists?\n", __func__);
80: return (-1);
81: }
82: *header = p->buf;
83: *header_s = p->b_len;
84:
85: return (1);
86: }
87:
88: int
89: libnet_adv_write_link(libnet_t *l, u_int8_t *packet, u_int32_t packet_s)
90: {
91: int c;
92:
93: if (l->injection_type != LIBNET_LINK_ADV)
94: {
95: snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
96: "%s(): advanced link mode not enabled\n", __func__);
97: return (-1);
98: }
99: c = libnet_write_link(l, packet, packet_s);
100:
101: /* do statistics */
102: if (c == packet_s)
103: {
104: l->stats.packets_sent++;
105: l->stats.bytes_written += c;
106: }
107: else
108: {
109: l->stats.packet_errors++;
110: /*
111: * XXX - we probably should have a way to retrieve the number of
112: * bytes actually written (since we might have written something).
113: */
114: if (c > 0)
115: {
116: l->stats.bytes_written += c;
117: }
118: }
119: return (c);
120: }
121:
122: void
123: libnet_adv_free_packet(libnet_t *l, u_int8_t *packet)
124: {
125: /*
126: * Restore original pointer address so free won't complain about a
127: * modified chunk pointer.
128: */
129: if (l->aligner > 0)
130: {
131: packet = packet - l->aligner;
132: }
133: free(packet);
134: }
135:
136: /* EOF */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>