⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utils.h

📁 思科路由器仿真器,用来仿7200系列得,可以在电脑上模拟路由器-Cisco router simulator, used to fake a 7200 series can be simulated
💻 H
字号:
/* * Cisco 7200 (Predator) simulation platform. * Copyright (c) 2005,2006 Christophe Fillot (cf@utc.fr) */#ifndef __UTILS_H__#define __UTILS_H__#include <stdarg.h>#include <sys/types.h>#include <sys/mman.h>#include <sys/time.h>#include <time.h>#include <netinet/in.h>/* True/False definitions */#ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE  1#endif/* Endianness */#define ARCH_BIG_ENDIAN     0x4321#define ARCH_LITTLE_ENDIAN  0x1234#if defined(PPC) || defined(__powerpc__) || defined(__ppc__)#define ARCH_BYTE_ORDER ARCH_BIG_ENDIAN#elif defined(__sparc) || defined(__sparc__)#define ARCH_BYTE_ORDER ARCH_BIG_ENDIAN#elif defined(__alpha) || defined(__alpha__)#define ARCH_BYTE_ORDER ARCH_LITTLE_ENDIAN#elif defined(__i386) || defined(__i386__) || defined(i386)#define ARCH_BYTE_ORDER ARCH_LITTLE_ENDIAN#elif defined(__x86_64__)#define ARCH_BYTE_ORDER ARCH_LITTLE_ENDIAN#endif#ifndef ARCH_BYTE_ORDER#error Please define your architecture in utils.h!#endif/* Host to VM (big-endian) conversion functions */#if ARCH_BYTE_ORDER == ARCH_BIG_ENDIAN#define htovm16(x) (x)#define htovm32(x) (x)#define htovm64(x) (x)#define vmtoh16(x) (x)#define vmtoh32(x) (x)#define vmtoh64(x) (x)#else#define htovm16(x) (htons(x))#define htovm32(x) (htonl(x))#define htovm64(x) (swap64(x))#define vmtoh16(x) (ntohs(x))#define vmtoh32(x) (ntohl(x))#define vmtoh64(x) (swap64(x))#endif/* Useful attributes for functions */#define asmlinkage __attribute__((regparm(0)))#define fastcall   __attribute__((regparm(3)))#if __GNUC__ > 2#define forced_inline inline __attribute__((always_inline))#define no_inline __attribute__ ((noinline))#else#define forced_inline inline#define no_inline#endif#if __GNUC__ > 2/* http://kerneltrap.org/node/4705 */#define likely(x)    __builtin_expect((x),1)#define unlikely(x)  __builtin_expect((x),0)#else#define likely(x)    (x)#define unlikely(x)  (x)#endif/* Common types */typedef unsigned char m_uint8_t;typedef signed char m_int8_t;typedef unsigned short m_uint16_t;typedef signed short m_int16_t;typedef unsigned int m_uint32_t;typedef signed int m_int32_t;typedef unsigned long long m_uint64_t;typedef signed long long m_int64_t;typedef unsigned long m_iptr_t;typedef m_uint64_t m_tmcnt_t;/* Forward declarations */typedef struct vm_instance vm_instance_t;typedef struct insn_block insn_block_t;typedef struct insn_exec_page insn_exec_page_t;/* MIPS instruction */typedef m_uint32_t mips_insn_t;/* Max and min macro */#define m_max(a,b) (((a) > (b)) ? (a) : (b))#define m_min(a,b) (((a) < (b)) ? (a) : (b))/* A simple macro for adjusting pointers */#define PTR_ADJUST(type,ptr,size) (type)((char *)(ptr) + (size))/* Size of a field in a structure */#define SIZEOF(st,field) (sizeof(((st *)NULL)->field))/* Compute offset of a field in a structure */#define OFFSET(st,f)     ((long)&((st *)(NULL))->f)/* MMAP */#ifndef MAP_ANONYMOUS#define MAP_ANONYMOUS MAP_ANON#endif/* List item */typedef struct m_list m_list_t;struct m_list {   void *data;   m_list_t *next;};/* MTS mapping info */typedef struct {   m_uint64_t vaddr;   m_uint64_t paddr;   m_uint64_t len;   m_uint32_t cached;   m_uint32_t tlb_index;}mts_map_t;/* Global logfile */extern FILE *log_file;/* Check status of a bit */static inline int check_bit(u_int old,u_int new,u_int bit){   int mask = 1 << bit;   if ((old & mask) && !(new & mask))      return(1);   /* bit unset */      if (!(old & mask) && (new & mask))      return(2);   /* bit set */   /* no change */   return(0);}/* Sign-extension */static forced_inline m_int64_t sign_extend(m_int64_t x,int len){   len = 64 - len;   return (x << len) >> len;}/* Extract bits from a 32-bit values */static inline int bits(m_uint32_t val,int start,int end){   return((val >> start) & ((1 << (end-start+1)) - 1));}/* Normalize a size */static inline u_int normalize_size(u_int val,u_int nb,int shift) {   return(((val+nb-1) & ~(nb-1)) >> shift);}/* Convert a 16-bit number between little and big endian */static forced_inline m_uint16_t swap16(m_uint16_t value){   return((value >> 8) | ((value & 0xFF) << 8));}/* Convert a 32-bit number between little and big endian */static forced_inline m_uint32_t swap32(m_uint32_t value){   m_uint32_t result;   result = value >> 24;   result |= ((value >> 16) & 0xff) << 8;   result |= ((value >> 8)  & 0xff) << 16;   result |= (value & 0xff) << 24;   return(result);}/* Convert a 64-bit number between little and big endian */static forced_inline m_uint64_t swap64(m_uint64_t value){   m_uint64_t result;   result = (m_uint64_t)swap32(value & 0xffffffff) << 32;   result |= swap32(value >> 32);   return(result);}/* Get current time in number of msec since epoch */static inline m_tmcnt_t m_gettime(void){   struct timeval tvp;   gettimeofday(&tvp,NULL);   return(((m_tmcnt_t)tvp.tv_sec * 1000) + ((m_tmcnt_t)tvp.tv_usec / 1000));}/* Get current time in number of usec since epoch */static inline m_tmcnt_t m_gettime_usec(void){   struct timeval tvp;   gettimeofday(&tvp,NULL);   return(((m_tmcnt_t)tvp.tv_sec * 1000000) + (m_tmcnt_t)tvp.tv_usec);}#ifdef __CYGWIN__#define GET_TIMEZONE _timezone#else#define GET_TIMEZONE timezone#endif/* Get current time in number of ms (localtime) */static inline m_tmcnt_t m_gettime_adj(void){   struct timeval tvp;   struct tm tmx;   time_t gmt_adjust;   time_t ct;   gettimeofday(&tvp,NULL);   ct = tvp.tv_sec;   localtime_r(&ct,&tmx);#if defined(__CYGWIN__) || defined(SUNOS)   gmt_adjust = -(tmx.tm_isdst ? GET_TIMEZONE - 3600 : GET_TIMEZONE);#else   gmt_adjust = tmx.tm_gmtoff;#endif   tvp.tv_sec += gmt_adjust;   return(((m_tmcnt_t)tvp.tv_sec * 1000) + ((m_tmcnt_t)tvp.tv_usec / 1000));}/* Add an element to a list */m_list_t *m_list_add(m_list_t **head,void *data);/* Dynamic sprintf */char *dyn_sprintf(const char *fmt,...);/* Split a string */int m_strsplit(char *str,char delim,char **array,int max_count);/* Tokenize a string */int m_strtok(char *str,char delim,char **array,int max_count);/* Quote a string */char *m_strquote(char *buffer,size_t buf_len,char *str);/* Ugly function that dumps a structure in hexa and ascii. */void mem_dump(FILE *f_output,u_char *pkt,u_int len);/* Logging function */void m_flog(FILE *fd,char *module,char *fmt,va_list ap);/* Logging function */void m_log(char *module,char *fmt,...);/* Returns a line from specified file (remove trailing '\n') */char *m_fgets(char *buffer,int size,FILE *fd);/* Read a file and returns it in a buffer */ssize_t m_read_file(char *filename,char **buffer);/* Allocate aligned memory */void *m_memalign(size_t boundary,size_t size);/* Block specified signal for calling thread */int m_signal_block(int sig);/* Unblock specified signal for calling thread */int m_signal_unblock(int sig);/* Set non-blocking mode on a file descriptor */int m_fd_set_non_block(int fd);/* Map a memory zone from a file */u_char *memzone_map_file(int fd,size_t len);/* Map a memory zone from a file, with copy-on-write (COW) */u_char *memzone_map_cow_file(int fd,size_t len);/* Create a file to serve as a memory zone */int memzone_create_file(char *filename,size_t len,u_char **ptr);/* Open a file to serve as a COW memory zone */int memzone_open_cow_file(char *filename,size_t len,u_char **ptr);/* Open a file and map it in memory */int memzone_open_file(char *filename,u_char **ptr,off_t *fsize);/* Compute NVRAM checksum */m_uint16_t nvram_cksum(m_uint16_t *ptr,size_t count);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -