Annotation of embedaddon/libnet/include/libnet/libnet-macros.h, revision 1.1.1.2
1.1 misho 1: /*
1.1.1.2 ! misho 2: * $Id: libnet-macros.h,v 1.7 2004/04/13 17:32:28 mike Exp $
1.1 misho 3: *
4: * libnet-macros.h - Network routine library macro header file
5: *
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: #ifndef __LIBNET_MACROS_H
33: #define __LIBNET_MACROS_H
34: /**
35: * @file libnet-macros.h
1.1.1.2 ! misho 36: * @brief libnet macros and symbolic constants
1.1 misho 37: */
38:
39: /* for systems without snprintf */
40: #if defined(NO_SNPRINTF)
41: #define snprintf(buf, len, args...) sprintf(buf, ##args)
42: #endif
43:
44:
45: /**
46: * Used for libnet's name resolution functions, specifies that no DNS lookups
47: * should be performed and the IP address should be kept in numeric form.
48: */
49: #define LIBNET_DONT_RESOLVE 0
50:
51: /**
52: * Used for libnet's name resolution functions, specifies that a DNS lookup
53: * can be performed if needed to resolve the IP address to a canonical form.
54: */
55: #define LIBNET_RESOLVE 1
56:
57: /**
58: * Used several places, to specify "on" or "one"
59: */
60: #define LIBNET_ON 0
61:
62: /**
63: * Used several places, to specify "on" or "one"
64: */
65: #define LIBNET_OFF 1
66:
67: /**
68: * IPv6 error code
69: */
70: #ifndef IN6ADDR_ERROR_INIT
71: #define IN6ADDR_ERROR_INIT { { { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
72: 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
73: 0xff, 0xff } } }
74: #endif
75:
76: /**
77: * Used for libnet_get_prand() to specify function disposition
78: */
79: #define LIBNET_PR2 0
80: #define LIBNET_PR8 1
81: #define LIBNET_PR16 2
82: #define LIBNET_PRu16 3
83: #define LIBNET_PR32 4
84: #define LIBNET_PRu32 5
85: #define LIBNET_PRAND_MAX 0xffffffff
86:
87: /**
88: * The biggest an IP packet can be -- 65,535 bytes.
89: */
90: #define LIBNET_MAX_PACKET 0xffff
91: #ifndef IP_MAXPACKET
92: #define IP_MAXPACKET 0xffff
93: #endif
94:
95:
96: /* ethernet addresses are 6 octets long */
97: #ifndef ETHER_ADDR_LEN
98: #define ETHER_ADDR_LEN 0x6
99: #endif
100:
101: /* FDDI addresses are 6 octets long */
102: #ifndef FDDI_ADDR_LEN
103: #define FDDI_ADDR_LEN 0x6
104: #endif
105:
106: /* token ring addresses are 6 octets long */
107: #ifndef TOKEN_RING_ADDR_LEN
108: #define TOKEN_RING_ADDR_LEN 0x6
109: #endif
110:
111: /* LLC Organization Code is 3 bytes long */
112: #define LIBNET_ORG_CODE_SIZE 0x3
113:
114: /**
115: * The libnet error buffer is 256 bytes long.
116: */
117: #define LIBNET_ERRBUF_SIZE 0x100
118:
119: /**
120: * IP and TCP options can be up to 40 bytes long.
121: */
122: #define LIBNET_MAXOPTION_SIZE 0x28
123:
124: /* some BSD variants have this endianess problem */
125: #if (LIBNET_BSD_BYTE_SWAP)
126: #define FIX(n) ntohs(n)
127: #define UNFIX(n) htons(n)
128: #else
129: #define FIX(n) (n)
130: #define UNFIX(n) (n)
131: #endif
132:
1.1.1.2 ! misho 133: /* used internally for packet builders */
! 134: #define LIBNET_DO_PAYLOAD(l, p) \
! 135: if (payload_s && !payload) \
! 136: { \
! 137: snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, \
! 138: "%s(): payload inconsistency\n", __func__); \
! 139: goto bad; \
! 140: } \
! 141: if (payload_s) \
! 142: { \
! 143: n = libnet_pblock_append(l, p, payload, payload_s); \
! 144: if (n == (uint32_t) - 1) \
! 145: { \
! 146: goto bad; \
! 147: } \
! 148: } \
! 149:
! 150:
1.1 misho 151: /* used internally for checksum stuff */
152: #define LIBNET_CKSUM_CARRY(x) \
153: (x = (x >> 16) + (x & 0xffff), (~(x + (x >> 16)) & 0xffff))
154:
155: /* used interally for OSPF stuff */
156: #define LIBNET_OSPF_AUTHCPY(x, y) \
1.1.1.2 ! misho 157: memcpy((uint8_t *)x, (uint8_t *)y, sizeof(y))
1.1 misho 158: #define LIBNET_OSPF_CKSUMBUF(x, y) \
1.1.1.2 ! misho 159: memcpy((uint8_t *)x, (uint8_t *)y, sizeof(y))
1.1 misho 160:
161: /* used internally for NTP leap indicator, version, and mode */
162: #define LIBNET_NTP_DO_LI_VN_MODE(li, vn, md) \
1.1.1.2 ! misho 163: ((uint8_t)((((li) << 6) & 0xc0) | (((vn) << 3) & 0x38) | ((md) & 0x7)))
1.1 misho 164:
165: /* Not all systems have IFF_LOOPBACK */
166: #ifdef IFF_LOOPBACK
167: #define LIBNET_ISLOOPBACK(p) ((p)->ifr_flags & IFF_LOOPBACK)
168: #else
1.1.1.2 ! misho 169: #define LIBNET_ISLOOPBACK(p) (strcmp((p)->ifr_name, "lo") == 0)
1.1 misho 170: #endif
171:
172: /* advanced mode check */
173: #define LIBNET_ISADVMODE(x) (x & 0x08)
174:
175: /* context queue macros and constants */
176: #define LIBNET_LABEL_SIZE 64
177: #define LIBNET_LABEL_DEFAULT "cardshark"
178: #define CQ_LOCK_UNLOCKED (u_int)0x00000000
179: #define CQ_LOCK_READ (u_int)0x00000001
180: #define CQ_LOCK_WRITE (u_int)0x00000002
181:
182: /**
183: * Provides an interface to iterate through the context queue of libnet
184: * contexts. Before calling this macro, be sure to set the queue using
185: * libnet_cq_head().
186: */
187: #define for_each_context_in_cq(l) \
188: for (l = libnet_cq_head(); libnet_cq_last(); l = libnet_cq_next())
189:
190: /* return 1 if write lock is set on cq */
191: #define cq_is_wlocked() (l_cqd.cq_lock & CQ_LOCK_WRITE)
192:
193: /* return 1 if read lock is set on cq */
194: #define cq_is_rlocked() (l_cqd.cq_lock & CQ_LOCK_READ)
195:
196: /* return 1 if any lock is set on cq */
197: #define cq_is_locked() (l_cqd.cq_lock & (CQ_LOCK_READ | CQ_LOCK_WRITE))
198:
199: /* check if a context queue is locked */
200: #define check_cq_lock(x) (l_cqd.cq_lock & x)
201:
202: #endif /* __LIBNET_MACROS_H */
203:
204: /* EOF */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>