- 博客(394)
- 资源 (9)
- 收藏
- 关注
原创 Kernel notifier详解
内核中大量的通知链表来处理相应的状态变化,主要用来解耦各个模块,时期可以相对独立的完成各自的工作,而互不干涉。比如下面这个kgdb要在系统重启前处理一些信息,那么就注册了相应的函数,来处理。通知链根据不通需求分为4中,原子链,阻塞链,原始链,同步链。各个链的注册也不相同,不过最终大同小异。下面手动写一个类似的事件通知函数来做相应的事情。有不懂的可以参考结构体定义。
2025-02-19 15:09:54
182
原创 Qualcomm NSS硬件加速简介
随着移动互联网的普及,基础带宽的提升,各种视频等富媒体应用越来越多的情况下,对于路由器的挑战也越来越大,普通的路由器已经无法满足用户对带宽的需求,而传统普通家用路由器一般采用Linux操作系统,其数据报文的处理都是通过中断来实现的,这就导致了CPU占用率非常高,网络的吞吐量上不去,用户的体验不佳,因此产生了很多的新技术,如DPDK等方案的产生,都是通过将数据报文的处理导到应用层通过轮询的方式来解决。
2024-12-30 11:41:05
839
转载 WiFi EasyMesh简单介绍
Wi-Fi EasyMesh is a certification program that defines multiple access point home and small office Wi-Fi networks that are easy to install and use, self-adapting, and add multi-vendor interoperability. This technology brings both consumers and service prov
2024-10-22 16:10:32
118
原创 Linux kernel xfrm 调用流程
XFRM 架构目的主要服务于IP Security, 俗称IPsec. 应用程序主要是strongswan结合,企业级的VPN基本基于这个构建。xfrm函数调用流程正常的数据报文。sendto/sendmsg -> udp_sendmsg-> ip_make_skb()->ip_send_skb()->ip_local_out(skb)udp_rcv->__udp4_lib_rcv->udp_queue_rcv_skb->encap_rcvup->
2024-09-05 16:01:37
418
1
原创 Linux Kernel USBNET 分析
这个模块的作用是将网络层的数据转换成usb可用的样子发送出去。同时,将收到的外部网络数据接收并传递到设备内部的网络层。抽象点: 中间人的角色,跟以太网卡功能类似,只不过这个人事多,要转换一轮。
2024-09-05 16:01:03
450
原创 C语言通用函数 - 判断ip是否合法
原理很简单就是根据点分十进制的样式进行比对,一个字符一个字符的匹配,存在三个点,且字符为数字,并且值小于等于255,大于等于0.自己写个供大家参考吧,省的到处搜,浪费时间。经常找类似的函数,但是总是不尽如人意。
2024-08-26 17:09:14
450
原创 IPTABLES MARK 多值复用 - 解决QOS和策略路由兼容问题
对进入路由器的系统,打mark可以让其走指定的路由表出去,但是,如果这个时候需要对数据报文进行分类,就需要对其打mark了,那么两个mark怎么共存呢?
2024-08-23 14:18:05
300
原创 Dead loop on virtual device ppp301, fix it urgently! 与cisco路由问题解决方案
设备作为L2TP client背靠背连接思科的路由器的时候一直提示这个错误。
2022-12-21 19:12:57
496
原创 Linux Kernel存储udp server的socket信息跟踪
前言工作中遇到一个内核的bug,同事给内核增加了socket绑定设备接口id的功能,主要用在绑定VRF的时候,绑定特定的设备。最近测试发现了,加了这个补丁后,导致不同vlan的dhcp server不能同时工作,为了解决这个问题,我对linux kernel如何存储socket的相关功能进行了跟踪,记录如下。应用层UDP Server创建应用层调用socket, bind创建udp server socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); bind(sock
2020-09-07 16:46:44
567
1
原创 Intel Eval Board L2TP/IPSec客户端搭建Ubuntu系统
L2TP over IPSec on Ubuntu由于Windows自带的L2TP/IPSec无法与Intel Eval Board建立连接, 这个是Intel的bug.从头搭建L2TP/IPsec 隧道。服务器端配置准备 环境: Intel Eval Board 系统:sdk 基于openwrt 主要构成软件: xl2tpd-1.3.1, strongswan, iperf3(可选,测试性能)配置/etc/xl2tpd/xl2tpd.conf[global]listen-add
2020-07-08 16:55:28
715
原创 Linux VRF 移植遇到的无法绑定VRF interface发送单播数据包问题
起因系统内核版本3.10.104, 然而VRF的multicast支持在4.4版本才开始,而且版本之间很多问题也不一样,后续导致了一些问题。理解错误?在我的理解中,如果要绑定VRF interface,在发送数据包的时候需要提供ifindex, 也就是真实的接口的ifindex,而不是VRF接口的ifindex.VRF 作者的pdfVRF 作者在论坛中回复问题之前的移植,发送广播的时候没什么问题,发送IPv6单播的时候就出现问题了。无法绑定vlan interface,或者VRF interf
2020-06-15 14:12:25
633
2
原创 工作记录- 移植BGP md5支持到linux 2.6.16
需求客户需要BGP协议支持MD5加密这种安全性,所以需要实现IPv6两种协议的支持,然而标准内核在2.6.20才支持这个功能,所以,我们的活儿来了。移植参考Linux-2.6.20 将这个setsocketopt的操作抽象为回调函数,这样方便同时支持两种协议。然后就参照实现,自己添加喽,计算md5的方式参考IPv4实现,其他的参考新的内核实现。问题由于对IPv6 md5使用的不熟悉,测...
2019-08-16 15:45:11
318
原创 工作记录 - Linux 的socket TCP keep-alive功能在特定情况下失效的原因
问题TCP socket keep-alive 失败,导致正在进行的业务失败。分析根据数据报文发现,每次tcp ack keep-alive数据报文请求发送后如果发送别的数据,就会出现socket超时, 判断是内核处理tcp keepalive出现问题导致的。问题重现我根据这种情况,实现了一个类似的socket,发送keep-alive然后在程序中sleep特定时间,然后发送数据,模拟紧...
2019-08-16 15:36:42
1072
原创 Linux网络中的桥 (Bridge)
桥简介桥,从字面来讲就是在一条河流上面建造一条路,对,就是这样,甭管是多大多长跨江还是跨海,它都是起到连接两岸的作用。在计算机的网络世界中也存在这种连接的两个网络的设备,这也是一种桥,虚拟的桥。网络中的桥OK, 回归主题,什么是网络中的桥?我们在90年用的Repeater(一个比特一个比特的转发数据),后来的网桥(一帧一帧的转发),再到后来的交换机(多个端口的桥)。这些都是桥的不同形态的设...
2019-08-16 15:15:52
1147
原创 Qemu 使用记录
简介一直想研究qemu很久了,都是浅尝辄止,看一半的文档就不搞了,要下载那么多的镜像很讨厌的。最近觉得这两年实在是没什么长进确实应该深入看看了。命令行先了解这个命令怎么用吧,首先下载个TinyCore-current.iso 官网上下载才16MBqemu-system-i386 -m 2G -smp 2 -vga vmware TinyCore-current.iso -enable-k...
2019-07-31 19:10:46
419
原创 Linux中的虚拟路由转发VRF
无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点 这里可以跳转到教程。VRF 简单概念虚拟路由转发(Virtual Routing and Forwarding)顾明思义,虚拟的路由转发,讲路由分成不同的分组,然后根据请求的接口,目的地址进行路由的转发,这个是工作在单台设备内的,出了这个设备就...
2019-07-22 21:48:16
2107
原创 自动下载Twitter视频图片golang实现
Github地址Github: https://github.com/gohiweeds/twitterdownloader.git功能支持Socks5代理配置国内的:支持设置SOCK5 代理,下载Twitter视频图片 如果已经配置了就不需要了使用SOCK5下载了,如下,直接下载即可,无须配置HTTP代理。 MacOS: export http_proxy=...
2018-09-03 14:30:23
7179
原创 利用go-ethereum创建自己的以太坊账户
转载请注明出处 本人首发在github上 http://blog.hiweeds.net最近两天一直搜索哪里有开源的Go实现的Ethereum的钱包,但是发现其实那么多的开源项目并没有 符合我想看的,兜兜转转,还是看了go-ethereum的源码,然后在stackoverflow上看到了下面的 实现,值得一试。package mainimport "github.com/ethere...
2018-05-30 16:09:33
3035
原创 IPFS 是什么?
IPFS 全称IPFS 英文全称: InterPlanetary File System , 翻译: 星际文件系统技术基础基于Git, BitTorrent, Kademlia, SFS 和Web, 他就像是一群bittorrent, 交换git对象。IPFS提供http接口操作,你也可以挂载文件系统/ipfs.Git - Linus发明的分布式源码管理工具BitTorrent...
2018-04-24 17:03:52
1637
原创 吐槽下dnsmasq源码
吐槽下dnsmasq源码首先表示下感谢,作者提供简单的设计,丰富的功能,充分降低了我们这些普通程序员的工作,但是要理解起来还是不那么称心如意,主要有那么几点。1. 无关设计, 代码缩进问题。无处不再的空格,偶尔有几行tab,真的不好看阿,阅读起来很麻烦2. 整体设计的感想程序主要架构是select侦听socket的状态进行操作 -- 【决定其只能在小网络架构中使用】采用struct dnsmasq
2017-09-01 11:25:56
5658
原创 git push: error 401 Unauthorized while accessing
git push origin mastererror: The requested URL returned error: 401 Unauthorized while accessing https://git.oschina.net/qianguozheng/mtk7620a.git/info/refsvi .git/config将 [remote “origin”] url
2017-05-15 16:59:08
1915
原创 go-workerpool 支持每分钟百万并发的抽象原型
使用 Golang 实现了一个简单的消费者模式, 主要解决每分钟百万请求的问题。基本原理:建立固定的工作线程去缓冲池中取数据处理。以此来控制固定时间内处理的请求数源码地址https://github.com/qianguozheng/go-workerpool.git用途控制goroutine的数目简练模型实际使用场景及灵感来源http://marcio.io/2015/07/handling
2017-01-14 23:22:32
2909
原创 go http异常处理
原文出处: https://github.com/qianguozheng/ideas/blob/master/golang-http-panic-recover-usage.mdGolang http post panic recover usageBrief IntroductionIn golang, some abnormal case would cause program crash,
2017-01-10 13:00:32
1771
原创 大小端再测
以前就对这写概念理解的不够透彻, 每次都是死记硬背大小端的概念, 现在其实也记得不是很清晰。 现在终于是心理稍微有点普了, 0x1234, 低位是0x34, 高位是0x12. short是两个字节。 char 是一个字节。 存到低位的值是低位, 0x12高位, 则主机为大端序 存到低位的值是低位, 0x34低位, 则主机为小端序#include<stdio.h>in
2016-11-02 20:10:37
474
原创 Go语言字符串反转
实现字符串翻转也就是将“abcd” 转换为 “dcba”func reverse(str string) string { rs := []rune(str) len := len(rs) var tt []rune tt = make([]rune, 0) for i := 0; i < len; i++ { tt = append(tt, r
2016-10-12 14:33:52
3180
1
原创 Golang截取字符串(支持中文)
Go内置函数不支持截取字符串转换为rune slice之后,一个中文就是一个“字符”, 所以你可以一个一个的替换,取出等操作。func SubString(str string, begin, length int) string { fmt.Println("Substring =", str) rs := []rune(str) lth := len(rs) fm
2016-10-12 11:09:34
5747
转载 Ubuntu更新出现 The system is running in low-graphics mode解决
一第一步: 出现上面的界面的时候 : 按ctrl +alt+f1 第二步: 按照相应的显卡输入以下命令1.对于最新的Nvidia二进制驱动:sudo add-apt-repository ppa:ubuntu-x-swat/x-updates sudo apt-get update sudo apt-get install nvidia-current nvidia-current-mo
2016-09-28 17:45:10
508
转载 openwrt取消strip 软件包
https://forum.openwrt.org/viewtopic.php?id=15195Hi all , anybody out there who are familiar with makefiles ? sorry for asking , if i for example write in the makefile for a package the following line
2016-09-20 15:43:03
1402
原创 valgrind在openwrt 系统下无法工作原因
http://stackoverflow.com/questions/15840091/cross-compiled-valgrind-does-not-detect-obvious-leaks It turns out that openwrt strips all libraries including valgrind’s vgpreload_xxxxxx.so libs and libc
2016-09-20 15:07:07
1989
原创 error: ext4_allocate_best_fit_partial: failed to allocate 742 blocks, out of space?
I hope this reply doesn’t come too late for you, but I ran into the same problem, in my case:error: ext4_allocate_best_fit_partial: failed to allocate 1579 blocks, out of space?I solved the problem by
2016-09-20 14:58:45
5000
原创 字节数int, long, double
和机器字长及编译器有关系:所以,int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的): 1 sizeof(short int)<=sizeof(int) 2 sizeof(int)<=sizeof(long int) 3 short int至少应为16位(2字节) 4 long int至少应为32位。 unsigned 是
2016-09-19 14:45:56
711
原创 protobuf-c应用样例
源码源码地址: https://github.com/protobuf-c/protobuf-c.git编译./autogen.sh && ./configure && make && make install应用根据协议格式生成源码与头文件amessage.proto 文件内容如下: message AMessage { required int32 a=1; optio
2016-09-18 13:44:31
1386
转载 openwrt toolchain 编译错误 *** [s-attrtab] Killed
[转载] http://www.aganzai.com/post-42.htmlmake[5]: *** [s-attrtab] Killedmake[5]: Leaving directory `/home/work/openwrt/barrier_breaker/build_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/gcc-l
2016-08-21 10:48:25
2187
原创 我会如何从头搭建嵌入式系统
让我从头搭建一个类似openwrt的系统,我才不干,我也干不出那么好。 虽然心里一直说这个系统那么烂,但是不得不为其设计思想感到折服。openwrt的自动下载这个块,设计的思路非常简单,就是按照规则写Makefile由解析程序去下载,解压编译安装。 这套对于普通用户来说很爽,但是如果经常需要编译或者修改就不是很友好。几个字概况就是,不适合产品化。openwrt的内核更新较快,相关软件也有相应升级,
2016-07-02 21:28:24
909
原创 OpenWrt分区
近期与同行交流,问我openwrt分区记忆加深。uboot+firmware+art 其实关于分区叫什么名称,我觉得是随便改,但是功能基本类似。主要是firmware里面又分了两个,之前还遇到过这个事情,竟然忘记了。 firmware=kernel+ rootfs+rootfs_datauboot启动不需要知道分区吗? 需要知道传递给内核的分区参数吧,还有就是要知道内核的烧写地址吧。dev:
2016-07-02 21:20:51
2617
原创 Linux C语言strlcpy,strlcat函数
常用字符串操作函数strcat, 连接字符串strcpy, 拷贝字符串以上两个函数经常会出现stack overflow问题,长度问题导致的等。以下两个是相对安全一点的。strncatstrncpy但是,我个人常用的是snprintf函数,这个函数保证以NUL结尾的。所以从来不参考以上的函数。发现新大陆重温privoxy源码,发现了下面的函数strlcpystrlcat只不过这两个函数并
2016-06-30 23:39:55
1208
5G NR _ the next generation wireless access technology-Academic Press (2018)
2018-12-06
AIO nginx C10K
2012-03-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人