1 /* Copyright (C) 2011-2016 Open Information Security Foundation 2 * 3 * You can copy, redistribute or modify this Program under the terms of 4 * the GNU General Public License version 2 as published by the Free 5 * Software Foundation. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * version 2 along with this program; if not, write to the Free Software 14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 15 * 02110-1301, USA. 16 */ 17 18 #ifndef __UTIL_DEVICE_H__ 19 #define __UTIL_DEVICE_H__ 20 21 #include "queue.h" 22 #include "unix-manager.h" 23 24 #define OFFLOAD_FLAG_SG (1<<0) 25 #define OFFLOAD_FLAG_TSO (1<<1) 26 #define OFFLOAD_FLAG_GSO (1<<2) 27 #define OFFLOAD_FLAG_GRO (1<<3) 28 #define OFFLOAD_FLAG_LRO (1<<4) 29 #define OFFLOAD_FLAG_RXCSUM (1<<5) 30 #define OFFLOAD_FLAG_TXCSUM (1<<6) 31 #define OFFLOAD_FLAG_TOE (1<<7) 32 33 void LiveSetOffloadDisable(void); 34 void LiveSetOffloadWarn(void); 35 int LiveGetOffload(void); 36 37 #define MAX_DEVNAME 10 38 39 /** storage for live device names */ 40 typedef struct LiveDevice_ { 41 char *dev; /**< the device (e.g. "eth0") */ 42 char dev_short[MAX_DEVNAME + 1]; 43 bool tenant_id_set; 44 45 int id; 46 47 SC_ATOMIC_DECLARE(uint64_t, pkts); 48 SC_ATOMIC_DECLARE(uint64_t, drop); 49 SC_ATOMIC_DECLARE(uint64_t, bypassed); 50 SC_ATOMIC_DECLARE(uint64_t, invalid_checksums); 51 TAILQ_ENTRY(LiveDevice_) next; 52 53 uint32_t tenant_id; /**< tenant id in multi-tenancy */ 54 uint32_t offload_orig; /**< original offload settings to restore @exit */ 55 } LiveDevice; 56 57 typedef struct LiveDeviceName_ { 58 char *dev; /**< the device (e.g. "eth0") */ 59 TAILQ_ENTRY(LiveDeviceName_) next; 60 } LiveDeviceName; 61 62 void LiveDevRegisterExtension(void); 63 64 int LiveRegisterDeviceName(const char *dev); 65 int LiveGetDeviceNameCount(void); 66 const char *LiveGetDeviceNameName(int number); 67 int LiveRegisterDevice(const char *dev); 68 int LiveDevUseBypass(LiveDevice *dev); 69 void LiveDevSetBypassStats(LiveDevice *dev, uint64_t cnt, int family); 70 void LiveDevAddBypassStats(LiveDevice *dev, uint64_t cnt, int family); 71 void LiveDevSubBypassStats(LiveDevice *dev, uint64_t cnt, int family); 72 void LiveDevAddBypassFail(LiveDevice *dev, uint64_t cnt, int family); 73 void LiveDevAddBypassSuccess(LiveDevice *dev, uint64_t cnt, int family); 74 int LiveGetDeviceCount(void); 75 const char *LiveGetDeviceName(int number); 76 LiveDevice *LiveGetDevice(const char *dev); 77 const char *LiveGetShortName(const char *dev); 78 int LiveBuildDeviceList(const char *base); 79 void LiveDeviceHasNoStats(void); 80 int LiveDeviceListClean(void); 81 int LiveBuildDeviceListCustom(const char *base, const char *itemname); 82 83 LiveDevice *LiveDeviceForEach(LiveDevice **ldev, LiveDevice **ndev); 84 85 void LiveDeviceFinalize(void); 86 87 #ifdef BUILD_UNIX_SOCKET 88 TmEcode LiveDeviceIfaceStat(json_t *cmd, json_t *server_msg, void *data); 89 TmEcode LiveDeviceIfaceList(json_t *cmd, json_t *server_msg, void *data); 90 TmEcode LiveDeviceGetBypassedStats(json_t *cmd, json_t *answer, void *data); 91 #endif 92 93 #endif /* __UTIL_DEVICE_H__ */ 94