Annotation of embedaddon/strongswan/src/libstrongswan/networking/packet.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2012 Tobias Brunner
3: * Copyright (C) 2005-2006 Martin Willi
4: * Copyright (C) 2005 Jan Hutter
5: * HSR Hochschule fuer Technik Rapperswil
6: *
7: * This program is free software; you can redistribute it and/or modify it
8: * under the terms of the GNU General Public License as published by the
9: * Free Software Foundation; either version 2 of the License, or (at your
10: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
11: *
12: * This program is distributed in the hope that it will be useful, but
13: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15: * for more details.
16: */
17:
18: /**
19: * @defgroup packet packet
20: * @{ @ingroup networking
21: */
22:
23: #ifndef PACKET_H_
24: #define PACKET_H_
25:
26: typedef struct packet_t packet_t;
27:
28: #include <library.h>
29: #include <networking/host.h>
30:
31: /**
32: * Maximum packet size we handle by default
33: */
34: #define PACKET_MAX_DEFAULT 10000
35:
36: /**
37: * Abstraction of an IP/UDP-Packet, contains data, sender and receiver.
38: */
39: struct packet_t {
40:
41: /**
42: * Set the source address.
43: *
44: * @param source address to set as source (gets owned)
45: */
46: void (*set_source)(packet_t *packet, host_t *source);
47:
48: /**
49: * Set the destination address.
50: *
51: * @param source address to set as destination (gets owned)
52: */
53: void (*set_destination)(packet_t *packet, host_t *destination);
54:
55: /**
56: * Get the source address.
57: *
58: * @return source address (internal data)
59: */
60: host_t *(*get_source)(packet_t *packet);
61:
62: /**
63: * Get the destination address.
64: *
65: * @return destination address (internal data)
66: */
67: host_t *(*get_destination)(packet_t *packet);
68:
69: /**
70: * Get the data from the packet.
71: *
72: * @return chunk containing the data (internal data)
73: */
74: chunk_t (*get_data)(packet_t *packet);
75:
76: /**
77: * Set the data in the packet.
78: *
79: * @param data chunk with data to set (gets owned)
80: */
81: void (*set_data)(packet_t *packet, chunk_t data);
82:
83: /**
84: * Get the DiffServ Code Point set on this packet.
85: *
86: * @return DSCP value
87: */
88: uint8_t (*get_dscp)(packet_t *this);
89:
90: /**
91: * Set the DiffServ Code Point to use on this packet.
92: *
93: * @param value DSCP value
94: */
95: void (*set_dscp)(packet_t *this, uint8_t value);
96:
97: /**
98: * Increase the offset where the actual packet data starts.
99: *
100: * The total offset applies to future calls of get_data() and clone().
101: *
102: * @note The offset is reset to 0 when set_data() is called.
103: *
104: * @param bytes the number of additional bytes to skip
105: */
106: void (*skip_bytes)(packet_t *packet, size_t bytes);
107:
108: /**
109: * Clones a packet_t object.
110: *
111: * @note Data is cloned without skipped bytes.
112: *
113: * @param clone clone of the packet
114: */
115: packet_t* (*clone)(packet_t *packet);
116:
117: /**
118: * Destroy the packet, freeing contained data.
119: */
120: void (*destroy)(packet_t *packet);
121: };
122:
123: /**
124: * Create an empty packet
125: *
126: * @return packet_t object
127: */
128: packet_t *packet_create();
129:
130: /**
131: * Create a packet from the supplied data
132: *
133: * @param src source address (gets owned)
134: * @param dst destination address (gets owned)
135: * @param data packet data (gets owned)
136: * @return packet_t object
137: */
138: packet_t *packet_create_from_data(host_t *src, host_t *dst, chunk_t data);
139:
140: #endif /** PACKET_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>