1/* 2 ** Copyright (c) 2015, Asim Jamshed, Robin Sommer, Seth Hall 3 ** and the International Computer Science Institute. All rights reserved. 4 ** 5 ** Redistribution and use in source and binary forms, with or without 6 ** modification, are permitted provided that the following conditions are met: 7 ** 8 ** (1) Redistributions of source code must retain the above copyright 9 ** notice, this list of conditions and the following disclaimer. 10 ** 11 ** (2) Redistributions in binary form must reproduce the above copyright 12 ** notice, this list of conditions and the following disclaimer in the 13 ** documentation and/or other materials provided with the distribution. 14 ** 15 ** 16 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 20 ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 ** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 ** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 ** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 ** POSSIBILITY OF SUCH DAMAGE. 27 **/ 28#ifndef LB_PKT_HASH_H 29#define LB_PKT_HASH_H 30/*---------------------------------------------------------------------*/ 31/** 32 ** Packet header hashing function utility - This file contains functions 33 ** that parse the packet headers and computes hash functions based on 34 ** the header fields. Please see pkt_hash.c for more details... 35 **/ 36/*---------------------------------------------------------------------*/ 37/* for type def'n */ 38#include <stdint.h> 39/*---------------------------------------------------------------------*/ 40#ifdef __GNUC__ 41#define likely(x) __builtin_expect(!!(x), 1) 42#define unlikely(x) __builtin_expect(!!(x), 0) 43#else 44#define likely(x) (x) 45#define unlikely(x) (x) 46#endif 47 48#define HTONS(n) (((((unsigned short)(n) & 0xFF)) << 8) | \ 49 (((unsigned short)(n) & 0xFF00) >> 8)) 50#define NTOHS(n) (((((unsigned short)(n) & 0xFF)) << 8) | \ 51 (((unsigned short)(n) & 0xFF00) >> 8)) 52 53#define HTONL(n) (((((unsigned long)(n) & 0xFF)) << 24) | \ 54 ((((unsigned long)(n) & 0xFF00)) << 8) | \ 55 ((((unsigned long)(n) & 0xFF0000)) >> 8) | \ 56 ((((unsigned long)(n) & 0xFF000000)) >> 24)) 57 58#define NTOHL(n) (((((unsigned long)(n) & 0xFF)) << 24) | \ 59 ((((unsigned long)(n) & 0xFF00)) << 8) | \ 60 ((((unsigned long)(n) & 0xFF0000)) >> 8) | \ 61 ((((unsigned long)(n) & 0xFF000000)) >> 24)) 62/*---------------------------------------------------------------------*/ 63typedef struct vlanhdr { 64 uint16_t pri_cfi_vlan; 65 uint16_t proto; 66} vlanhdr; 67/*---------------------------------------------------------------------*/ 68/** 69 ** Analyzes the packet header of computes a corresponding 70 ** hash function. 71 **/ 72uint32_t 73pkt_hdr_hash(const unsigned char *buffer, 74 uint8_t hash_split, 75 uint8_t seed); 76/*---------------------------------------------------------------------*/ 77#endif /* LB_PKT_HASH_H */ 78 79