You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Sockmap需要任何BPF程序吗?

在使用Sockmap时,需要编写BPF程序来实现所需的功能。以下是一个简单的示例,展示了如何使用Sockmap和BPF程序来实现一个简单的数据包过滤器。

首先,需要准备一个BPF程序,例如名为filter.bpf的文件:

#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/tcp.h>

struct bpf_map_def SEC("maps") sock_map = {
    .type = BPF_MAP_TYPE_SOCKMAP,
    .key_size = sizeof(int),
    .value_size = sizeof(int),
    .max_entries = 1024,
};

SEC("filter")
int filter(struct __sk_buff *skb) {
    struct ethhdr *eth = bpf_hdr_pointer(skb);
    struct iphdr *ip = (struct iphdr *)(eth + 1);
    struct tcphdr *tcp = (struct tcphdr *)(ip + 1);

    // 过滤条件:只接受源端口为80的TCP数据包
    if (ip->protocol == IPPROTO_TCP && tcp->source == htons(80)) {
        int ifindex = skb->ifindex;
        bpf_sock_map_update(skb, &sock_map, &ifindex, BPF_NOEXIST);
    }

    return XDP_PASS;
}

然后,需要编译并加载BPF程序,可以使用clang和bpftool来完成。假设将BPF程序编译为名为filter.o的文件:

$ clang -O2 -target bpf -c filter.bpf -o filter.o
$ bpftool map create /sys/fs/bpf/sock_map type sockmap key 4 value 4 entries 1024
$ bpftool map update pinned /sys/fs/bpf/sock_map key 0 0 0 value pinned /sys/fs/bpf/filter.o

最后,需要在用户空间中编写一个程序来使用Sockmap。以下是一个简单的示例程序,使用libbpf和libbpf_helpers库来加载BPF程序并进行数据包过滤:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <bpf/bpf.h>
#include <bpf/libbpf.h>
#include <bpf/bpf_helpers.h>

int main() {
    struct bpf_object *obj;
    struct bpf_program *prog;
    int sock_map_fd;
    struct sockaddr_in addr = {
        .sin_family = AF_INET,
        .sin_port = htons(8080),
    };

    // 加载BPF程序
    if (bpf_prog_load("/sys/fs/bpf/filter.o", BPF_PROG_TYPE_SOCKET_FILTER, &obj, &prog) != 0) {
        fprintf(stderr, "Failed to load BPF program\n");
        return 1;
    }

    // 获取Sockmap文件描述符
    if (bpf_object__find_map_fd_by_name(obj, "sock_map", &sock_map_fd) != 0) {
        fprintf(stderr, "Failed to find sock_map\n");
        return 1;
    }

    // 创建Socket
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock < 0) {
        perror("socket");
        return 1;
    }

    // 绑定Socket地址
    if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
        perror("bind");
        return 1;
    }

    // 将Socket绑定到Sockmap
    if (setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, &sock_map_fd, sizeof(sock_map_fd)) < 0) {
        perror("setsockopt");
        return 1;
    }

    // 监听Socket
    if (listen(sock, 128) < 0) {
        perror("listen");
        return 1;
    }

    while (1) {
        // 接受连接
        int client_sock = accept(sock, NULL, NULL);
        if (client_sock < 0) {
            perror("accept");
            return 1;
        }

        // 读取数据
        char buffer[1024];
        ssize_t len = read(client_sock, buffer, sizeof(buffer));
        if (len < 0) {
            perror("read");
            return 1;
        }

        // 打印数据
        printf("Received %ld bytes\n", len);
        printf("%.*
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

Cilium 原理解析:网络数据包在内核中的流转过程

bpfcp/0e25dfaee4434478b25627908575ac5b~tplv-k3u1fbpfcp-zoom-1.image)图片取自《你不好奇 Linux 网络发包过程吗?》([3])通过上图可以看到:- 应用程序需要通过系统调用,来跟 Socket 层进行数据交互;- S... 这两种模式需要网卡驱动的支持,对**于那些不支持 XDP 的驱动,内核提供了 Generic XDP ,这是软件实现的 XDP,性能会低一些, 在实现上就是将 XDP 的执行上移到了核心网络栈。**继续回来介绍 ,分两种情况:native/off...

Kubernetes 观测:基于 eBPF 的云原生深度可观测性实践

如果需要深入内核进行插桩,传统的方式可能会需要重新编译内核,成本和风险极高。* **数据孤岛,缺少全栈视角的串联分析**相关调查数据显示,超过 65% 的企业组织拥有超过 10 种监控工具,而这些工具通常作为独立... eBPF 是一种数据包过滤技术,从 BPF (Berkeley Packet Filter) 技术扩展而来,它起源于 Linux 内核,可以在操作系统内核中运行沙盒程序。eBPF 被用于安全有效地扩展内核的功能,而无需更改内核源代码或加载内核模块,同...

实战:超低延时直播技术的落地实践

我们需要对 WebRTC 进行媒体能力协商的 SDP 标准进行扩展,下面是[《超低延时直播技术白皮书》](https://www.volcengine.com/docs/6469/103017#%E8%A7%86%E9%A2%91-b-%E5%B8%A7%E6%94%AF%E6%8C%81)中关于视频 B 帧支... SDP extmap 示例如下所示。![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/8519e8fea6874ace8e9a9ba1590a4be5~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=171...

边缘网络 eBPF 超能力:eBPF map 原理与性能解析

> 众所周知,大型 eBPF 程序构建过程中 eBPF map 必不可少。火山引擎边缘计算在数据面也大量使用了 eBPF 及其 map 机制。如何用好 map 是 eBPF 网络编程中关键的一环,不同 map 的性能差异也较大。本文组织 eBPF map... It's up to the user process and eBPF program to decide what they store inside maps.### eBPF 数据面中怎么使用 map在 eBPF 数据面中,我们使用 eBPF map需要按照规范定义 map 的结构,然后使用 bpf_map...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

Sockmap需要任何BPF程序吗?-优选内容

网络抓包(tcpdump)
需要安装 libpcap.so.0.8 依赖包,否则会导致命令无法正常使用。 命令语法Linux/macOS获取所有网卡 Bash ./tosutil tcpdump [-sdt=xxx]抓取制定网卡的包 Bash ./tosutil tcpdump device [-o=xxx] [-bpf=xxx] [-t=1]WindowsBash tosutil fcp file_url1 file_url2folder_url2 [-dryRun] [-link] [-tempFileDir=xxx] [-useTempFile] [-u] [-vchecksum] [-dfo] [-fsync] [-rbs=1MB] [-wbs=1MB] [-rdio] [-rmmap] [-wdio] [-wmmap] [-...
Cilium 原理解析:网络数据包在内核中的流转过程
bpfcp/0e25dfaee4434478b25627908575ac5b~tplv-k3u1fbpfcp-zoom-1.image)图片取自《你不好奇 Linux 网络发包过程吗?》([3])通过上图可以看到:- 应用程序需要通过系统调用,来跟 Socket 层进行数据交互;- S... 这两种模式需要网卡驱动的支持,对**于那些不支持 XDP 的驱动,内核提供了 Generic XDP ,这是软件实现的 XDP,性能会低一些, 在实现上就是将 XDP 的执行上移到了核心网络栈。**继续回来介绍 ,分两种情况:native/off...
Kubernetes 观测:基于 eBPF 的云原生深度可观测性实践
如果需要深入内核进行插桩,传统的方式可能会需要重新编译内核,成本和风险极高。* **数据孤岛,缺少全栈视角的串联分析**相关调查数据显示,超过 65% 的企业组织拥有超过 10 种监控工具,而这些工具通常作为独立... eBPF 是一种数据包过滤技术,从 BPF (Berkeley Packet Filter) 技术扩展而来,它起源于 Linux 内核,可以在操作系统内核中运行沙盒程序。eBPF 被用于安全有效地扩展内核的功能,而无需更改内核源代码或加载内核模块,同...
实战:超低延时直播技术的落地实践
我们需要对 WebRTC 进行媒体能力协商的 SDP 标准进行扩展,下面是[《超低延时直播技术白皮书》](https://www.volcengine.com/docs/6469/103017#%E8%A7%86%E9%A2%91-b-%E5%B8%A7%E6%94%AF%E6%8C%81)中关于视频 B 帧支... SDP extmap 示例如下所示。![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/8519e8fea6874ace8e9a9ba1590a4be5~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=171...

Sockmap需要任何BPF程序吗?-相关内容

Flink OLAP 在字节跳动的查询优化和落地实践

而不需要关注 Plan 构建、Task 初始化等阶段的耗时。但是在 OLAP 场景下,优化这些阶段的耗时就变得非常重要。另外,字节 Flink OLAP 基于存算分离架构,有更加强烈的算子下推需求。另一个挑战是,OLAP 业务要求较... =&rk3s=8031ce6d&x-expires=1715703658&x-signature=NwUBfbtXKGBitI1Kyu7jKCSocKM%3D)因此支持了 Classloader 复用的优化,分为两步:首先优化依赖 Jar 包的方式,由于 OLAP 场景下依赖的第三方 Jar 包是相对固定的...

katalyst 支持 OOM 优先级作为 QoS 增强|社区征文

例如当需要给两个都映射到原生的 burstable 级别的 shared_cores pods 设定 OOM 优先级;或者当需要在两个原生都是 guaranteed 级别的 dedicated_cores pod 和 shared_cores pod 之间设定 shared_cores pod 要早于 dedicated_cores pod OOM。此外,当前 kubelet 中提供的静态 oom_score_adj 计算机制,不支持 OOM 优先级的动态调整。因此我们希望提供一个关于 OOM 优先级的 Katalyst QoS Enhancement,支持更加灵活地为 pods 设置 OO...

基于 Ray 的大规模离线推理

需要对模型进行切分。![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/28b2aa8a65154099b71a1f7594507785~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=171544... =&rk3s=8031ce6d&x-expires=1715444455&x-signature=VQ5IG6jewBpFiOypcaO2lNAd8CY%3D)案例:Vit + Albert以下是一个实际的案例,也是一个多模态的例子—— Vit + Albert 双塔的模型。在这个案例中,我们同时对...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

veLinux特性说明

增加ebpf通用helper函数,支持通过模块添加ebpf功能。 优化了cgroup slab memory controller。 VDUSE设备模拟框架。 PSI特性:针对cgroup级别的CPU stall增加了FULL模式,优化了memory stall FULL模式的实现和进程阻塞切换的开销。 系统组件火山引擎自研软件包,如下。 atop atop是开源社区的一个性能监测工具,火山引擎在社区版本的基础上进行了定制开发,新增feature包括: 支持筛选记录Top N线程的监控数据记录。 支持JSON格式...

采集容器文本日志(DaemonSet-控制台方式)

即需与 ConfigMap 中设置的 ${your_labels} 的值一致,例如 nginx-log。 限制说明采集容器标准输出时:Docker 容器引擎仅支持 JSON 类型的日志驱动。 如果某些容器匹配了多个采集配置,那么在该容器上仅最新的采集配... 不同类型容器引擎的访问路径限制如下:Docker:LogCollector 通过宿主机的 /run/docker.sock 访问 Docker 容器引擎,请确保该路径存在且 LogCollector 具备访问权限。 Containerd:LogCollector 通过宿主机的 /run/con...

采集容器标准输出(DaemonSet-控制台方式)

不同类型容器引擎的访问路径限制如下:Docker:LogCollector 通过宿主机的 /run/docker.sock 访问 Docker 容器引擎,请确保该路径存在且 LogCollector 具备访问权限。 Containerd:LogCollector 通过宿主机的 /run/con... 在全部机器组区域中选择需要采集日志的机器组,并在已选机器组区域中确认选择的机器组是否正确。 单击下一步。 步骤二 配置采集规则填写基本规则配置。 配置 说明 规则名称 规则名称即 LogCollector 采集配置的...

Go应用接入

您可以对应用程序进行性能分析,定位性能瓶颈,请根据业务需求判断是否需要接入。接入示例代码: Go import ( "github.com/volcengine/apminsight-server-sdk-go/trace/aiprofiler")func main() { InitTracer(... .spec: template: spec: containers: - name: xxx image: dockerhub.com:5000/xxx:latest imagePullPolicy: Always volumeMounts: - name: agent-sock mo...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询