使用hash_map list实现用户信息缓冲

本文介绍了一个用于缓存和管理用户信息的C++类CTransAddrBuffer,该类使用哈希映射存储用户数据,并通过双向队列实现LRU(最近最少使用)缓存淘汰策略。文章详细解释了类的设计原理及其实现细节。
//transaddrbuffer.h
#pragma once #include <hash_map> #include <memory> #include <windows.h> #include "unicomodbclib.h"
#pragma pack(push,4)
using stdext::hash_map; using std::list; using std::pair; using std::auto_ptr;
class CTransAddrBuffer { private:  class CacheInfo;  typedef hash_map<__int64, CacheInfo>  _T_Map;  typedef list<_T_Map::iterator>    _T_Queue;  typedef pair<_T_Map::iterator, bool>  _T_Pair;  typedef pair<__int64, CacheInfo>   _T_Value;  typedef list<_T_Map::iterator>::iterator _T_Pointor;
 enum{   CACHE_TIME_OUT = 5,    //超时5m   MAX_CACHE_ITEM = 1024   //缓冲1024  };
 class CacheInfo  {  public:   time_t   mAddTime;   _T_Pointor  moQueueWhere;
  WORD   mwAcsId;   BYTE   mbyConnectionType;   unsigned long  mulIpAddr;   WORD   mwPort;   long   mlLoginTime;
  char   macVersion[VERSION_LEN+1];   //STRU_ODBC_USER_STATUS  moInfo;  };
 static void assign(CacheInfo& to, const STRU_ODBC_USER_STATUS& from)  {   to.mAddTime   = time(NULL);   to.mwAcsId   = from.mwLoginAcsId;   to.mbyConnectionType= from.mbyConnectType;   to.mulIpAddr  = from.mulUserIpAddr;   to.mwPort   = from.mwUserPort;   to.mlLoginTime  = from.mlLoginDate;
  memcpy(to.macVersion, from.macVersion, VERSION_LEN+1);  }
 static void assign(STRU_ODBC_USER_STATUS& to, const CacheInfo& from)  {   to.mwLoginAcsId  = from.mwAcsId;   to.mbyConnectType = from.mbyConnectionType;   to.mulUserIpAddr = from.mulIpAddr;   to.mwUserPort  = from.mwPort;   to.mlLoginDate  = from.mlLoginTime;
  memcpy(to.macVersion, from.macVersion, VERSION_LEN+1);  }
 int   hit;  int ClearOldItem();  CTransAddrBuffer(void);  ~CTransAddrBuffer(void);  CRITICAL_SECTION moAccess;
 _T_Queue moQueue;  _T_Map  moCache;
 static CTransAddrBuffer* instance;
 friend class auto_ptr<CTransAddrBuffer>; public:  void Dump();  void CachUserInfo(__int64 aiUserID, STRU_ODBC_USER_STATUS& aoInfo);  bool GetUserInfo(__int64 aiUserID, STRU_ODBC_USER_STATUS& aoInfo);
 static CTransAddrBuffer& GetInstance();
 static void destructure()  {   CTransAddrBuffer* temp = instance;   instance = NULL;
  delete temp;  } };
#pragma pack(pop)
//transaddrbuffer.cpp
#include "stdafx.h" #include "./transaddrbuffer.h"
#include "help/AutoLock.h"
//静态初始化 CTransAddrBuffer* CTransAddrBuffer::instance = NULL;
CTransAddrBuffer::CTransAddrBuffer(void) {  //printf("CTransAddrBuffer 构造 %X/n", this);  hit = 0;  InitializeCriticalSection(&moAccess); }
CTransAddrBuffer::~CTransAddrBuffer(void) {  //printf("CTransAddrBuffer 析构 %X/n", this);  DeleteCriticalSection(&moAccess); }
//清除超时的缓冲对象 int CTransAddrBuffer::ClearOldItem() {  int ret = 0;  time_t now = time(NULL);  _T_Map::iterator iterator;
 if(moCache.size() > 200)  {   while(!moQueue.empty())   {    iterator = moQueue.back();    if(now - iterator->second.mAddTime > CACHE_TIME_OUT)    {     moQueue.pop_back();
    //清楚缓存表     moCache.erase(iterator);     ret ++;    }    else    {     break;    }   }  }  return ret; }
//输出调试信息清除没有用的缓冲项 void CTransAddrBuffer::Dump() {  int liDelItems;  int liHit;
 int liQueueSize;  int liMapSize;
 {   CAutoLock lock(moAccess);   liMapSize = moCache.size();   liQueueSize = moQueue.size();
  liHit = hit;   hit = 0;   liDelItems = ClearOldItem();  }
 RecordLog0("CTransAddrBuffer::CachUserInfo Map size:%d Queue size:%d./n", liMapSize, liQueueSize);  RecordLog0("CTransAddrBuffer::CachUserInfo Hit:%d Delete time out:%d/n", liHit, liDelItems); }
//缓冲用户信息 void CTransAddrBuffer::CachUserInfo(__int64 aiUserID, STRU_ODBC_USER_STATUS& aoInfo) {  _T_Map::iterator iterator;
 CAutoLock lock(moAccess);
 try  {   //保证队列长度   iterator = moCache.find(aiUserID);
  if(iterator != moCache.end())   {    //更新缓存信息    assign(iterator->second, aoInfo);
   //更新在队列的位置    if(moQueue.begin()!=(iterator->second.moQueueWhere))    {     moQueue.erase(iterator->second.moQueueWhere);     moQueue.push_front(iterator);     iterator->second.moQueueWhere = moQueue.begin();    }   }   else   {    _T_Pair ret;    _T_Value value;
   value.first = aiUserID;    assign(value.second, aoInfo);
   if(moQueue.size() >= MAX_CACHE_ITEM)    {     iterator = moQueue.back();     moQueue.pop_back();     moCache.erase(iterator);    }
   //添加到队列    ret = moCache.insert(value);
   if(ret.second)    {     moQueue.push_front(ret.first);     (ret.first)->second.moQueueWhere = moQueue.begin();    }   }  }  catch(...)  {   moCache.erase(aiUserID);
  RecordLog0("CTransAddrBuffer::CachUserInfo Catch Exception/n");  } }
//查找用户信息 bool CTransAddrBuffer::GetUserInfo(__int64 aiUserID, STRU_ODBC_USER_STATUS& aoInfo) {  CAutoLock lock(moAccess);
 _T_Map::iterator it = moCache.find(aiUserID);
 if(it==moCache.end())  {   return false;  }  if(time(NULL) - it->second.mAddTime < CACHE_TIME_OUT)  {   hit ++;   assign(aoInfo, it->second);   aoInfo.mbiUserId = aiUserID;
  return true;  }  return false; }
//返回实例 CTransAddrBuffer& CTransAddrBuffer::GetInstance() {  if(instance)  {   return *instance;  }  else  {   auto_ptr<CTransAddrBuffer> pointer(new CTransAddrBuffer());
  if(0 == InterlockedCompareExchange((LONG*)&instance, (LONG)pointer.get(), 0))   {    pointer.release();
   atexit(destructure);   }  }
 return *instance; }
execve("./whitelist_kern", ["./whitelist_kern", "lo"], 0x7ffe9bf66ae8 /* 42 vars */) = 0 brk(NULL) = 0xb3f000 arch_prctl(0x3001 /* ARCH_??? */, 0x7fff50800dc0) = -1 EINVAL (无效的参数) access("/etc/ld.so.preload", R_OK) = -1 ENOENT (没有那个文件或目录) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=38163, ...}) = 0 mmap(NULL, 38163, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f53ee026000 close(3) = 0 openat(AT_FDCWD, "/lib64/librt.so.1", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000$\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=42744, ...}) = 0 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f53ee024000 mmap(NULL, 4225984, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f53ed9fa000 mmap(0x7f53eda00000, 2128832, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x7f53eda00000 munmap(0x7f53ed9fa000, 24576) = 0 munmap(0x7f53edc08000, 2071488) = 0 mprotect(0x7f53eda07000, 2093056, PROT_NONE) = 0 mmap(0x7f53edc06000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7f53edc06000 close(3) = 0 openat(AT_FDCWD, "/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\16\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=19128, ...}) = 0 mmap(NULL, 4206752, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f53ed5fc000 mmap(0x7f53ed600000, 2109600, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x7f53ed600000 munmap(0x7f53ed5fc000, 16384) = 0 munmap(0x7f53ed804000, 2076832) = 0 mprotect(0x7f53ed603000, 2093056, PROT_NONE) = 0 mmap(0x7f53ed802000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f53ed802000 close(3) = 0 openat(AT_FDCWD, "/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 p\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=150472, ...}) = 0 mmap(NULL, 4322528, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f53ed1e0000 mmap(0x7f53ed200000, 2225376, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x7f53ed200000 munmap(0x7f53ed1e0000, 131072) = 0 munmap(0x7f53ed420000, 1963232) = 0 mprotect(0x7f53ed21b000, 2093056, PROT_NONE) = 0 mmap(0x7f53ed41a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a000) = 0x7f53ed41a000 mmap(0x7f53ed41c000, 13536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f53ed41c000 close(3) = 0 openat(AT_FDCWD, "/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \305\0\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=1598816, ...}) = 0 mmap(NULL, 5771584, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f53ecc7e000 mmap(0x7f53ece00000, 3674432, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x7f53ece00000 munmap(0x7f53ecc7e000, 1581056) = 0 munmap(0x7f53ed182000, 512320) = 0 mprotect(0x7f53ecf81000, 2093056, PROT_NONE) = 0 mmap(0x7f53ed180000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x180000) = 0x7f53ed180000 close(3) = 0 openat(AT_FDCWD, "/lib64/libelf.so.1", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0203\0\0\0\0\0\0"..., 832) = 832 lseek(3, 94200, SEEK_SET) = 94200 read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32 fstat(3, {st_mode=S_IFREG|0755, st_size=104792, ...}) = 0 lseek(3, 94200, SEEK_SET) = 94200 read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32 mmap(NULL, 4292624, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f53ec9e7000 mmap(0x7f53eca00000, 2195472, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x7f53eca00000 munmap(0x7f53ec9e7000, 102400) = 0 munmap(0x7f53ecc19000, 1990672) = 0 mprotect(0x7f53eca18000, 2093056, PROT_NONE) = 0 mmap(0x7f53ecc17000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7f53ecc17000 mmap(0x7f53ecc18000, 16, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f53ecc18000 close(3) = 0 openat(AT_FDCWD, "/lib64/libz.so.1", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240'\0\0\0\0\0\0"..., 832) = 832 lseek(3, 88768, SEEK_SET) = 88768 read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32 fstat(3, {st_mode=S_IFREG|0755, st_size=99592, ...}) = 0 lseek(3, 88768, SEEK_SET) = 88768 read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32 mmap(NULL, 4288520, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f53ec5e8000 mmap(0x7f53ec600000, 2191368, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x7f53ec600000 munmap(0x7f53ec5e8000, 98304) = 0 munmap(0x7f53ec818000, 1994760) = 0 mprotect(0x7f53ec616000, 2097152, PROT_NONE) = 0 mmap(0x7f53ec816000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x7f53ec816000 mmap(0x7f53ec817000, 8, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f53ec817000 close(3) = 0 openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\256\3\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=2090288, ...}) = 0 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f53ee022000 lseek(3, 808, SEEK_SET) = 808 read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32 mmap(NULL, 6047968, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f53ec03b000 mmap(0x7f53ec200000, 3950816, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x7f53ec200000 munmap(0x7f53ec03b000, 1855488) = 0 munmap(0x7f53ec5c5000, 239840) = 0 mprotect(0x7f53ec3bc000, 2093056, PROT_NONE) = 0 mmap(0x7f53ec5bb000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bb000) = 0x7f53ec5bb000 mmap(0x7f53ec5c1000, 14560, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f53ec5c1000 close(3) = 0 mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f53ee01f000 arch_prctl(ARCH_SET_FS, 0x7f53ee01f740) = 0 mprotect(0x7f53ec5bb000, 16384, PROT_READ) = 0 mprotect(0x7f53ec816000, 4096, PROT_READ) = 0 mprotect(0x7f53ecc17000, 4096, PROT_READ) = 0 mprotect(0x7f53ed180000, 4096, PROT_READ) = 0 mprotect(0x7f53ed41a000, 4096, PROT_READ) = 0 mprotect(0x7f53ed802000, 4096, PROT_READ) = 0 mprotect(0x7f53edc06000, 4096, PROT_READ) = 0 mprotect(0x652000, 4096, PROT_READ) = 0 mprotect(0x7f53ee030000, 4096, PROT_READ) = 0 munmap(0x7f53ee026000, 38163) = 0 set_tid_address(0x7f53ee01fa10) = 12810 set_robust_list(0x7f53ee01fa20, 24) = 0 rt_sigaction(SIGRTMIN, {sa_handler=0x7f53ed206aa0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7f53ed212ec0}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {sa_handler=0x7f53ed206b30, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f53ed212ec0}, NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0 prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0 access("/proc/net", R_OK) = 0 access("/proc/net/unix", R_OK) = 0 socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3 ioctl(3, SIOCGIFINDEX, {ifr_name="lo", ifr_ifindex=1}) = 0 close(3) = 0 getrandom("\x1a\xd9\x43\xcd\x6d\xa8\xd8\xb9", 8, GRND_NONBLOCK) = 8 brk(NULL) = 0xb3f000 brk(0xb60000) = 0xb60000 brk(NULL) = 0xb60000 faccessat(AT_FDCWD, "/proc/version_signature", R_OK) = -1 ENOENT (没有那个文件或目录) uname({sysname="Linux", nodename="localhost.localdomain", ...}) = 0 memfd_create("libbpf-placeholder-fd", MFD_CLOEXEC|0x8) = -1 EINVAL (无效的参数) memfd_create("libbpf-placeholder-fd", MFD_CLOEXEC) = 3 memfd_create("libbpf-placeholder-fd", MFD_CLOEXEC|0x8) = -1 EINVAL (无效的参数) memfd_create("libbpf-placeholder-fd", MFD_CLOEXEC) = 4 memfd_create("libbpf-placeholder-fd", MFD_CLOEXEC|0x8) = -1 EINVAL (无效的参数) memfd_create("libbpf-placeholder-fd", MFD_CLOEXEC) = 5 memfd_create("libbpf-placeholder-fd", MFD_CLOEXEC|0x8) = -1 EINVAL (无效的参数) memfd_create("libbpf-placeholder-fd", MFD_CLOEXEC) = 6 openat(AT_FDCWD, "/sys/fs/bpf", O_RDONLY|O_DIRECTORY) = 7 bpf(0x24 /* BPF_??? */, 0x7fff508007f0, 8) = -1 EINVAL (无效的参数) close(7) = 0 bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=2, insns=0x7fff508007a0, license="GPL", log_level=0, log_size=0, log_buf=NULL, kern_version=KERNEL_VERSION(0, 0, 0), prog_flags=0, prog_name="", prog_ifindex=0, expected_attach_type=BPF_CGROUP_INET_INGRESS, prog_btf_fd=0, func_info_rec_size=0, func_info=NULL, func_info_cnt=0, line_info_rec_size=0, line_info=NULL, line_info_cnt=0, attach_btf_id=0, attach_prog_fd=0}, 148) = -1 EPERM (不允许的操作) prlimit64(0, RLIMIT_MEMLOCK, {rlim_cur=RLIM64_INFINITY, rlim_max=RLIM64_INFINITY}, NULL) = 0 bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=2, insns=0x7fff50800940, license="GPL", log_level=0, log_size=0, log_buf=NULL, kern_version=KERNEL_VERSION(0, 0, 0), prog_flags=0, prog_name="", prog_ifindex=0, expected_attach_type=BPF_CGROUP_INET_INGRESS, prog_btf_fd=0, func_info_rec_size=0, func_info=NULL, func_info_cnt=0, line_info_rec_size=0, line_info=NULL, line_info_cnt=0, attach_btf_id=0, attach_prog_fd=0}, 152) = 7 close(7) = 0 bpf(BPF_BTF_LOAD, {btf="\237\353\1\0\30\0\0\0\0\0\0\0000\0\0\0000\0\0\0\t\0\0\0\1\0\0\0\0\0\0\1"..., btf_log_buf=NULL, btf_size=81, btf_log_size=0, btf_log_level=0}, 40) = 7 close(7) = 0 bpf(BPF_BTF_LOAD, {btf="\237\353\1\0\30\0\0\0\0\0\0\0000\0\0\0000\0\0\0\5\0\0\0\0\0\0\0\0\0\0\1"..., btf_log_buf=NULL, btf_size=77, btf_log_size=0, btf_log_level=0}, 40) = -1 EINVAL (无效的参数) bpf(BPF_BTF_LOAD, {btf="\237\353\1\0\30\0\0\0\0\0\0\0l\0\0\0l\0\0\0\16\0\0\0\1\0\0\0\0\0\0\1"..., btf_log_buf=NULL, btf_size=146, btf_log_size=0, btf_log_level=0}, 40) = -1 EINVAL (无效的参数) bpf(BPF_BTF_LOAD, {btf="\237\353\1\0\30\0\0\0\0\0\0\0\20\0\0\0\20\0\0\0\5\0\0\0\1\0\0\0\0\0\0\1"..., btf_log_buf=NULL, btf_size=45, btf_log_size=0, btf_log_level=0}, 40) = 7 close(7) = 0 bpf(BPF_BTF_LOAD, {btf="\237\353\1\0\30\0\0\0\0\0\0\0000\0\0\0000\0\0\0\t\0\0\0\1\0\0\0\0\0\0\1"..., btf_log_buf=NULL, btf_size=81, btf_log_size=0, btf_log_level=0}, 40) = 7 close(7) = 0 bpf(BPF_BTF_LOAD, {btf="\237\353\1\0\30\0\0\0\0\0\0\08\0\0\08\0\0\0\t\0\0\0\0\0\0\0\0\0\0\1"..., btf_log_buf=NULL, btf_size=89, btf_log_size=0, btf_log_level=0}, 40) = 7 close(7) = 0 bpf(BPF_BTF_LOAD, {btf="\237\353\1\0\30\0\0\0\0\0\0\0\f\0\0\0\f\0\0\0\7\0\0\0\1\0\0\0\0\0\0\20"..., btf_log_buf=NULL, btf_size=43, btf_log_size=0, btf_log_level=0}, 40) = -1 EINVAL (无效的参数) bpf(BPF_BTF_LOAD, {btf="\237\353\1\0\30\0\0\0\0\0\0\0(\0\0\0(\0\0\0\5\0\0\0\0\0\0\0\0\0\0\1"..., btf_log_buf=NULL, btf_size=69, btf_log_size=0, btf_log_level=0}, 40) = -1 EINVAL (无效的参数) bpf(BPF_BTF_LOAD, {btf="\237\353\1\0\30\0\0\0\0\0\0\0\f\0\0\0\f\0\0\0\10\0\0\0\1\0\0\0\0\0\0\23"..., btf_log_buf=NULL, btf_size=44, btf_log_size=0, btf_log_level=0}, 40) = -1 EINVAL (无效的参数) bpf(BPF_BTF_LOAD, {btf="\237\353\1\0\30\0\0\0\0\0\0\08\0\0\08\0\0\0\n\0\0\0\0\0\0\0\0\0\0\1"..., btf_log_buf=NULL, btf_size=90, btf_log_size=0, btf_log_level=0}, 40) = -1 EINVAL (无效的参数) bpf(BPF_BTF_LOAD, {btf="\237\353\1\0\30\0\0\0\0\0\0\0l\5\0\0l\5\0\0e\v\0\0\0\0\0\0\0\0\0\2"..., btf_log_buf=NULL, btf_size=4329, btf_log_size=0, btf_log_level=0}, 40) = 7 bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_SOCKET_FILTER, insn_cnt=2, insns=0x7fff50800730, license="GPL", log_level=0, log_size=0, log_buf=NULL, kern_version=KERNEL_VERSION(0, 0, 0), prog_flags=0, prog_name="libbpf_nametest", prog_ifindex=0, expected_attach_type=BPF_CGROUP_INET_INGRESS, prog_btf_fd=0, func_info_rec_size=0, func_info=NULL, func_info_cnt=0, line_info_rec_size=0, line_info=NULL, line_info_cnt=0, attach_btf_id=0, attach_prog_fd=0}, 148) = 8 close(8) = 0 bpf(BPF_MAP_CREATE, {map_type=BPF_MAP_TYPE_ARRAY, key_size=4, value_size=4, max_entries=4, map_flags=0, inner_map_fd=0, map_name="config_map", map_ifindex=0, btf_fd=7, btf_key_type_id=8, btf_value_type_id=8, btf_vmlinux_value_type_id=0}, 80) = 8 dup3(8, 3, O_CLOEXEC) = 3 close(8) = 0 bpf(BPF_MAP_CREATE, {map_type=BPF_MAP_TYPE_PERCPU_ARRAY, key_size=4, value_size=16, max_entries=1, map_flags=0, inner_map_fd=0, map_name="state_map", map_ifindex=0, btf_fd=7, btf_key_type_id=8, btf_value_type_id=17, btf_vmlinux_value_type_id=0}, 80) = 8 dup3(8, 4, O_CLOEXEC) = 4 close(8) = 0 bpf(BPF_MAP_CREATE, {map_type=BPF_MAP_TYPE_RINGBUF, key_size=0, value_size=0, max_entries=262144, map_flags=0, inner_map_fd=0, map_name="alerts_map", map_ifindex=0, btf_fd=7, btf_key_type_id=0, btf_value_type_id=0, btf_vmlinux_value_type_id=0}, 80) = 8 dup3(8, 5, O_CLOEXEC) = 5 close(8) = 0 bpf(BPF_MAP_CREATE, {map_type=BPF_MAP_TYPE_HASH, key_size=40, value_size=1, max_entries=2048, map_flags=0, inner_map_fd=0, map_name="whitelist_map", map_ifindex=0, btf_fd=7, btf_key_type_id=31, btf_value_type_id=36, btf_vmlinux_value_type_id=0}, 80) = 8 dup3(8, 6, O_CLOEXEC) = 6 close(8) = 0 bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_CGROUP_SOCK, insn_cnt=2, insns=0x7fff507fff50, license="GPL", log_level=0, log_size=0, log_buf=NULL, kern_version=KERNEL_VERSION(0, 0, 0), prog_flags=0, prog_name="", prog_ifindex=0, expected_attach_type=BPF_CGROUP_INET_SOCK_CREATE, prog_btf_fd=0, func_info_rec_size=0, func_info=NULL, func_info_cnt=0, line_info_rec_size=0, line_info=NULL, line_info_cnt=0, attach_btf_id=0, attach_prog_fd=0}, 152) = 8 close(8) = 0 bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_XDP, insn_cnt=262, insns=0xb40030, license="GPL", log_level=0, log_size=0, log_buf=NULL, kern_version=KERNEL_VERSION(5, 10, 134), prog_flags=0x40 /* BPF_F_??? */, prog_name="xdp_whitelist", prog_ifindex=0, expected_attach_type=BPF_XDP, prog_btf_fd=7, func_info_rec_size=8, func_info=0xb3f640, func_info_cnt=1, line_info_rec_size=16, line_info=0xb3f660, line_info_cnt=91, attach_btf_id=0, attach_prog_fd=0}, 152) = -1 EINVAL (无效的参数) mmap(NULL, 16781312, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f53eb1ff000 bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_XDP, insn_cnt=262, insns=0xb40030, license="GPL", log_level=1, log_size=16777215, log_buf="", kern_version=KERNEL_VERSION(5, 10, 134), prog_flags=0x40 /* BPF_F_??? */, prog_name="xdp_whitelist", prog_ifindex=0, expected_attach_type=BPF_XDP, prog_btf_fd=7, func_info_rec_size=8, func_info=0xb3f640, func_info_cnt=1, line_info_rec_size=16, line_info=0xb3f660, line_info_cnt=91, attach_btf_id=0, attach_prog_fd=0}, 152) = -1 EINVAL (无效的参数) write(2, "libbpf: prog 'xdp_whitelist': BP"..., 63) = 63 munmap(0x7f53eb1ff000, 16781312) = 0 write(2, "libbpf: prog 'xdp_whitelist': fa"..., 54) = 54 close(3) = 0 close(4) = 0 close(5) = 0 close(6) = 0 write(2, "libbpf: failed to load object 'w"..., 51) = 51 write(2, "libbpf: failed to load BPF skele"..., 66) = 66 write(2, "Failed to load BPF skeleton: -22"..., 33) = 33 write(2, "libbpf: bpf_xdp_attach_opts has "..., 53) = 53 close(7) = 0 exit_group(-22) = ? +++ exited with 234 +++
07-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值