File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libnet / include / libnet / libnet-macros.h
Revision 1.1.1.3 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Sep 27 11:11:38 2023 UTC (18 months, 3 weeks ago) by misho
Branches: libnet, MAIN
CVS tags: v1_2p1, HEAD
Version 1.2p1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>