首页 > 其他分享 >eBPF约束

eBPF约束

时间:2024-05-05 09:05:14浏览次数:16  
标签:map bpf eBPF 用户 约束 内核 go

内核态约束

1. 内核态eBPF无法使用C语言标准库。因为不支持malloc,所以无法扩展skb空间且无法直接从内核态拷贝整个报文到用户态。
2. 内核态eBPF无法获取当前时间,bpf_ktime_get_ns函数返回系统启动后运行纳秒数,不包括系统暂停时间。

https://www.man7.org/linux/man-pages/man7/bpf-helpers.7.html

3. 内核态和用户态只能通过全局变量(本质也是map)和map来完成数据交互。推荐使用pinning map即持久化map,对应目录是/sys/fs/bpf/,方便用户态加载。
4. 内核态实时上报数据必须用BPF_MAP_TYPE_PERF_EVENT_ARRAY。写法参考cilium中上报trace和drop事件的map,定义在bpf/lib/events.h。

用户态约束

1. 用户态cilium/ebpf库中,bpf2go生成的go结构体首字母小写即开头是bpf,后面是变量名改成驼峰,只有main包才能访问。为了避免循环引用,可以通过go channel把别的包数据传递给main包。
2. 用户态cilium/ebpf库中,bpf2go使用反射把eBPF map内的数据转为go结构体,完成内核态与用户态之间传输。用户态手动定义结构体的问题在于,除了首字母大写,go-binary库不是简单的memcpy,可能会让go结构体成员读到的值是错误的。推荐自动生成Go结构体,bpf2go -type参数指定C结构体类型,C代码中加上struct key类型 *unused_xxx __attribute__((unused));

 

标签:map,bpf,eBPF,用户,约束,内核,go
From: https://www.cnblogs.com/WJQ2017/p/18173195

相关文章

  • eBPF基于LPM实现路由匹配
    基于eBPFlpmmap,icmp只有匹配上路由才能通。最终目录结构效果展示启动应用前,可以ping通192.168.0.1和192.168.0.105。启动应用后,无法ping通192.168.0.1,可以ping通192.168.0.105。停止应用后,可以ping通192.168.0.1和192.168.0.105。icmp/drop-icmp.c#include"../heade......
  • SQL Server实战三:数据库表完整性约束及索引、视图的创建、编辑与删除
      本文介绍基于MicrosoftSQLServer软件,实现数据库表完整性约束、索引与视图的创建、编辑与删除等操作的方法。目录1交互式为数据库表S创建PRIMARYKEY约束2交互式创建数据库表TEST_SC,创建PRIMARYKEY约束3T-SQL创建数据库表T的PRIMARYKEY约束4T-SQL创建数据库表TEST_C,以......
  • openGauss 约束
    约束约束子句用于声明约束,新行或者更新的行必须满足这些约束才能成功插入或更新。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过CREATETABLE语句),或者在表创建之后规定(通过ALTERTABLE语句)。约束可以是列级或表级。列级约束仅适用于列,表级约束......
  • IDELAY约束测试
    前置条件:DDR模式LRRISE:1.9-2.1FALL:1.9-2.1约束情况1:value:0IBUF-BUFG-IDELAYE2-IDDRvalue:0IBUF-IDELAYE2-IDDRmodulergmii_dphy(inputwiresys_rst_n,inputwiresys_ref_200mhz,//ethinputwire......
  • 数据库——一些复健(主要是约束和索引相关练习)
    重要的是练习,写作业时写的絮絮叨叨就忽略吧。  强化学习2                    【练习9.1】在stusys数据库中创建course1表,以列级完整性约束方式定义主键。  【练习9.2】在stusys数据库中创建course2表,以表级完整性约束方式定义主键。  ......
  • ebpf在Android安全上的应用:ebpf的一些基础知识(上篇)
    ebpf在Android安全上的应用:ebpf的一些基础知识(上篇)一、ebpf介绍eBPF是一项革命性的技术,起源于Linux内核,它可以在特权上下文中(如操作系统内核)运行沙盒程序。它用于安全有效地扩展内核的功能,而无需通过更改内核源代码或加载内核模块的方式来实现。(PS:介绍来源于https://ebpf.i......
  • 【面试准备】【SQL】数据库有哪些约束?
    数据库中的约束(constraints)是用来确保数据库中数据的准确性和可靠性的一种规则。以下是一些常见的数据库约束:PRIMARYKEY(主键):确保列的值是唯一的,并且不能为NULL。FOREIGNKEY(外键):用于在两个表之间建立链接,并确保引用的数据的完整性。UNIQUE(唯一):确保所有列的组合在表中是......
  • 在 SQL Server 中 你可以使用以下查询来找到引用 的 FOREIGN KEY 约束
    SELECTf.nameASForeignKeyName,OBJECT_NAME(f.parent_object_id)ASReferencingTable,COL_NAME(fc.parent_object_id,fc.parent_column_id)ASReferencingColumn,OBJECT_NAME(f.referenced_object_id)ASReferencedTable,COL_NAME(fc.referenced_object_id,fc.re......
  • 开源Python几何约束求解器GeoSolver
    GeoSolver是一个用于几何约束求解的Python包。几何约束问题(GCP)是几何变量上/之间的一组几何约束。问题是找到几何变量的配置以满足所有约束。几何变量是位置、方向、形状、大小等未知的对象。GCP中的变量可以是点、线、平面、球体、圆柱体和更复杂的形状。几何约束是诸如对象......
  • 【.NET】利用 IL 魔法实现随心随意的泛型约束
    众所周知,C#只支持对基类/接口/class/struct/new()以及一些IDE魔法的约束,比如这样publicstaticstringTest<T>(Tvalue)whereT:ITest{returnvalue.Test();}publicinterfaceITest{stringTest();}但是如果我们想要随心所欲的约束就不行了publicst......