linux
n1wer
这个作者很懒,什么都没留下…
展开
-
DPAA dqrr eqcr的逻辑分析
DPAA中收包队列是dqrr,发包队列是eqcr。原创 2023-07-07 10:58:27 · 484 阅读 · 0 评论 -
l2fwd收发队列的分析。
ring队列的创建是通过mempool_ops_alloc_once创建的,mempool_ops_alloc_once调用rte_mempool_ops_alloc,rte_mempool_ops_alloc根据ops_index,查找对应alloc接口,本文主要讲ring队列调用的是common_ring_alloc接口。rte_pktmbuf_free_seg用于把内存还给队列,会调用rte_mbuf_raw_free,rte_mbuf_raw_free调用rte_mempool_put,原创 2023-01-16 16:24:29 · 345 阅读 · 0 评论 -
linux网络收包流程
本文主要关注转发相关流程。并以igb驱动举例。⾸先当数据帧从⽹线到达⽹卡上的时候,第⼀站是⽹卡的接收队列。⽹卡在分配给⾃⼰的RingBuffer 中寻找可⽤的内存位置,找到后 DMA 引擎会把数据 DMA 到⽹卡之前关联的内存⾥,这个时候 CPU 都是⽆感的。当 DMA 操作完成以后,⽹卡会向 CPU 发起⼀个硬中断,通知 CPU 有数据到达。网卡驱动会注册一个终端服务函数,以igb驱动为例,通过request_irq,注册了一个终端服务程序igb_msix_ring。原创 2022-12-20 17:16:10 · 141 阅读 · 0 评论 -
iptable 内核流程
记录一下iptables指令在内核的流程,分为配置和匹配原创 2022-12-01 11:34:27 · 278 阅读 · 0 评论 -
json字符串和普通字符串,性能对比
实现方案是解析出来的数据放到一个队列,发送线程定时1s从队列中读出数据,通过json来拼装一个字符串,最后通过sokect把数据发出去。但是当数据量大时,出现了发送线程慢的问题,就是说写队列(有分内存)比读队列快(释放内存),所以导致了内存堆积,最后内存号完了。json拼装字符串的工作,看着很简单,但是深入json源码,发现代码逻辑还是比较复杂的。所以决定测一下性能,感觉json最后生成的字符串比较简单,所以采用了字符串直接拼接来做对比。解决这个问题,就是对列大小做了限制,超过了一定数量就不入队了,原创 2022-11-11 18:36:38 · 974 阅读 · 0 评论 -
linux编译自定义模块,添加自定义宏的方法
有KBUILD_CFLAGS这一句编译之后加载驱动输出 “hello world”,屏蔽掉KBUILD_CFLAGS这一句编译之后,加载驱动输出“hello world 1111”通过KBUILD_CFLAGS 来添加你需要的宏。原创 2022-10-11 17:32:07 · 1116 阅读 · 0 评论 -
selinx 基于角色的控制
selinx role原创 2022-09-06 16:11:37 · 327 阅读 · 0 评论 -
[netfilter]--arp的主要流程
本文主要简单介绍arp的收包流程,以及钩子点的使用.arp的收包主要有两个流程,1,arp_rcv,主要收包到本地,涉及到的钩子点NF_ARP_IN,NF_ARP_OUT,2,通过桥接转发,__br_forward最后遍历hook函数,如果是arp包,找到br_nf_forward_arp,2.1,br_nf_forward_arp,遍历NFPROTO_ARP,NF_ARP_FORWARD找到对应hook注册 NFPROTO_ARP,NF_ARP_IN钩子arp_hook的堆栈情..原创 2022-03-16 16:40:30 · 563 阅读 · 0 评论 -
arptables 流程
arptables 流程配置1,do_command (filter) //只能添加在filter表1.1 handle = arptc_init -->TC_INIT 从通过getsockopt 从内核获取filter表hook相关信息1.2 append_entry --> arptc_append_entry --> TC_APPEND_ENTRY //添加规则 handle->entries.entrytable 2,arptc_commit -...原创 2022-03-08 17:30:46 · 186 阅读 · 0 评论 -
Makefile 变量如果是shell 语句,需要变成执行之后的结果
Makefile 变量原创 2022-02-09 16:46:17 · 850 阅读 · 0 评论 -
go 交叉编译arm版本,引用zmq库的处理方法
一,通过程序1,编写autologin.c#include <unistd.h>int main() {//execlp("login","login","-f","root",0);system("/etc/cy_install.sh");return 0;}2,在设备上gcc -o autologin autologin.c 生成autologin程序,3,修改属性chmod +x autologin,并复制到/sbin目录4,进入/lib/syste原创 2021-08-03 16:53:10 · 482 阅读 · 0 评论 -
iptables: Protocol wrong type for socket
网上报iptables: Protocol wrong type for socket这个问题,说是iptables的版本和内核版本不一致导致,因为我的是ubuntu18.04,默认的iptables就是1.16.1,所以觉得应该不是这个问题,正好我重新编译过内核,所以J觉得是内核的问题.通过dmesg发现如下打印:connlimit:cannot load conntrack support for address family 2跟踪内核代码发现是CONFIG_NF_CONNTRACK_IP原创 2021-03-25 13:44:14 · 1003 阅读 · 0 评论 -
x86_64的调用栈,简析
简单分析一下x86_64位电脑的调用栈情况以下列程序为例:#include <stdio.h>int sum_test(int a,int b){ int sum=0; sum=a+b; return sum;}void main(){ int total=0; total = sum_test(10,12);}gdb进入之后disassemble得到如下汇编代码设置断点...原创 2021-02-04 15:11:11 · 344 阅读 · 0 评论 -
linux 启动脚本前台输出,可用户输入
最近在ubuntu18.04上要做一个系统启动之后能做一个配置的脚本,尝试了两种方法:1,用systemd创建一个启动项,虽然脚本可以跑起来,但是日志都只能通过journalctl查看,也无法用read获取用户输入.2,修改serial-getty\@.service,因为是在串口下启动的,最后会运行serial-getty这个服务来调出login,让用户登录,查看serial-getty\@.service内容,发现是通过agetty来实现用户登录的,agetty的参数如下:-n可以跳原创 2021-01-29 11:00:21 · 443 阅读 · 0 评论