自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (1)
  • 收藏
  • 关注

原创 千万条URL数据查找匹配问题

千万条大规模字符串查找匹配问题

2022-01-01 01:41:30 637 1

原创 DPDK官方例程分析(4)-flow_classify

前言Flow Classify示例应用程序基于转发应用程序的简单框架示例。它旨在演示使用Flow Classify库API的DPDK转发应用程序的基本组件flow_classify例子对于DPDK的学习具有很重要的意义,是比较重要的章节。有点类似于linux网络中的iptables功能,也有点类似于我们在linux内核中开发的防火墙功能。我们可以使用flow模块对数据包进行统计,丢弃等基本的操作。程序代码ACL介绍首先该例程中主要是面向的对象是IP流量中的五元组信息。即源ip地址,目的ip地址,

2020-10-26 12:09:09 2270

原创 挂载usb设备后,向usb目录拷贝文件,概率性失败问题

前言当我们外接usb设备后,我们会使用mount命令将usb挂载到指定目录中:mount -t fat /dev/sdb /mnt/usb。这个时候但我们使用cp命令将文件复制到/mnt/usb的时候,有可能会复制失败。(这个失败主要是指cp之后,进入/mnt/usb目录使用ls查看。拷贝的文件是存在的。但是当我们拔掉usb设备,接入到电脑中,发现没有该文件)。问题解决那么,为什么会产生这样的问题呢。因为我们只是单纯的使用了cp命令。该命令本身是没有错误的,但是我们忽略了一个很重要的点。Linux

2020-10-23 15:01:58 668

原创 DPDK官方例程分析(3)-rxtx_callbacks

前言在上一篇博客中我们分析了basicfwd。basicfwd是将一个网卡的接收包复制给另一个网卡,并通过另一个网卡发送出去。rxtx_callbacks是基于basicfwd模块,区别在于rxtx_callbacks增加了对于数据包延时的计算(计算100 * 1000 * 1000各数据包的平均延时)。关于basicfwd模块可以参考DPDK官方例程分析(2)-basicfwd有助于理解。该篇博客只讲解和basicfwd模块不同的部分本篇博客是对于官网例程的补充说明:DPDK rxtx_callb

2020-10-19 13:48:14 1086

原创 DPDK官方例程分析(2)-basicfwd

前言basicfwd位于DPDK源代码example目录下的skeleton目录。基本转发示例应用程序是转发应用程序的简单框架示例。它旨在演示DPDK转发应用程序的基本组件。有关更详细的实现,请参阅L2和L3转发示例应用程序。本篇博客是对于官网例程的补充说明:DPDK basicfwd链接地址程序流程分析基本概念首先我们需要理解在DPDK中,网络数据包的是以mbuf来描述的。在这里贴出一篇博客,它详细的阐述了mbuf的一些概念和作用 mbuf概念以及介绍地址链接代码详解下面贴出DPDK例程

2020-10-15 14:09:33 1978 6

原创 DPDK官方例程分析(1)-cmdline

DPDK官方例程分析-cmdline前言该篇博客是对于官方文档的补充。官方例程cmdline说明链接地址命令行示例应用程序是一个简单的应用程序,演示了DPDK中命令行界面的用法。该应用程序是类似于readline的界面,可用于在Linux *应用程序环境中调试DPDK应用程序注意:rte_cmdline库不应在生产代码中使用,因为未按照与其他DPDK库相同的标准进行验证。另请参见发行说明的“已知问题”部分中的“由于有限的测试,不应在生产代码中使用rte_cmdline库”项。命令行示例应用程序支持

2020-10-13 17:03:57 1294

原创 只读文件系统中如何保存私有的配置文件

前言我在工作的很多项目中用到了很多的sdk都是创建的只读的文件系统。只读的文件系统以为着我们不可以在系统上保存系统的配置文件。这样的感受是非常糟糕的。有没有办法让系统能够保存我们的配置文件呢?当然是可以的。解决思路首先我们要在nand flash或者nor flash中分隔出一块内存区域,用于专门存放我们的配置文件。重新挂载该分区,挂载为可读可写的文件系统 / 不挂载该分区,使用dd命令直接操作。在linux内核添加分区网上有很多关于创建分区的文章,这里就不再提了。大家可以在网上找到对应

2020-09-28 17:01:39 450

原创 协议栈数据包快速转发的实现(2)

前言上一篇博客大体上讲解了什么是SNAT和DNAT。然后在博客的最后引入了一个知识点-连接跟踪(conntrack)。今天我们就来看看连接跟踪和我们的数据包快转实现有什么关系,怎么利用连接跟踪来实现数据包快转的功能数据报文唯一性四元组是: 源IP地址、目的IP地址、源端口、目的端口五元组是:源IP地址、目的IP地址、协议号、源端口、目的端口七元组是:源IP地址、目的IP地址、协议号、源端口、目的端口,服务类型以及接口索引协议号:IP是网络层协议,IP头中的协议号用来说明IP报文中承载

2020-09-08 15:18:48 927

原创 协议栈数据包快速转发的实现(1)

前言上一篇博客还是2020-8-17发表的,这篇博客已经推迟了2周了。推迟的原因很简单。第一: 个人知识点有限,以前做的时候似是而非。这次算先给自己充了一次电。第二:这次分享的技术点和知识点晦涩难懂。涉及到很多的知识面。相关的知识我一个人也是讲解不明白的。我也是查找了很多的资料和别人的技术博客。所以在本篇博客中我会大量引用别人的博客和相关资料,原因很简单,其他人在某一个知识点讲解的很好,我比不上。同时,我也建议大家一定要先去看我贴出的一些相关文章的连接地址。不然直接看代码会很麻烦。背景路由转发,

2020-09-01 22:43:33 757

原创 论网卡数据是如何从驱动到桥接/ip层(NAPI方式)

前言上一篇博客我们分析了普通的中断方式接收数据包的流程。并且在分析流程和代码的过程中看到napi的入口函数(napi_schedule)。当时提到了该函数,大家应该还有印象。我们这里再次把代码截取一份,来回顾一下调用的地方。__IRAM_GEN static inline void rtl_rx_interrupt_process(unsigned int status, struct dev_priv *cp){ #if defined(REINIT_SWITCH_CORE) if(rtl865

2020-08-17 18:56:53 557 2

原创 论网卡数据是如何从驱动到桥接/ip层(网卡驱动中断分析-中断方式非NAPI)

前言在上一讲中我们分析了网卡驱动的注册流程和中断的注册。这里再回顾一下上一讲的注册中断的代码。在网卡的open函数中调用了request_irq函数注册了网卡中断。网卡一旦有数据到来就会进入该中断rc = request_irq(dev->irq, interrupt_isr, IRQF_DISABLED, dev->name, dev);linux内核接收帧方式在分析网卡中断之前,我们需要来了解一下,驱动接收网卡数据包的方式。(NAPI和中断方式)中断接收方式在老的2.5.x内核

2020-08-10 01:01:24 847 2

原创 论网卡数据是如何从驱动到桥接/ip层(网络设备注册-网卡驱动)

前言今天这篇文章涉及到一部分linux驱动以及硬件相关的知识。因为数据包最开始肯定是从芯片中的寄存器读出来的,然后经过一系列的处理才会交给协议栈。这当中就会涉及到linux中断的注册,linux中断上半部和下半部、网卡接收数据包的几种方式等等。如果有什么疑惑的我们可以一起讨论,我也是边查资料边看代码来进行分析。因为我是从单片机->嵌入式arm(底层驱动开发,应用开发)->linux网络这样一步一步走上去的,所以我会用尽量通俗的语言来讲解。相信大家都可以看得懂。...

2020-07-30 00:08:35 688

原创 无线黑名单实现(将终端踢下线同时禁止终端再次连接)

前言在实际中我们有时候会产生这样一个需求:进制某一台设备接入无线网络,如果已经接入 则让其强制下线。并且,下线后不能再次接入,除非放行该设备这里产生了两个需求:1.将终端设备踢下线。 2.不能让终端设备再次上线。下面我们来分析这两个需求实现的原理无线设备认证和交互流程...

2020-07-25 17:53:07 2313

原创 linux内核中如何修改skb报文

前言在内核开发中,我们很多时候需要修改linux网络数据包的内容。那么怎样修改skb报文才正确?这个问题在网上的资料讲解的不是很全,下面是我这几天梳理的步骤skb修改数据包流程-内核代码中有许多用于计算校验和的API,一下是linux网络技术内幕相关API的截图修改数据包的流程分析和相关api的介绍在内核中构造数据包的时候,我们需要关注三个校验和:分别是sk_buf中的csum,ip_summed,ip头部中的check和udp或者tcp头部中的check用于计算校验和的API:L3

2020-07-17 18:21:37 2879

原创 http 404强制跳转到指定的网页地址

前言有时候我们可能遇到这样一个情况:当我们访问一个不存在的网页,http协议返回给我们404,浏览器会跳转到一个固定的网页(可以是我们产品的官网)。那么对于这样一个需求,我么应该怎样修改内核呢方案思路我这里不会详解http协议,关于http协议可以查看图解http协议这本书。这里我只讲一下我们的思路以及http请求和返回的数据包。http协议本质上是tcp协议。http发送报文http响应报文我们可以看到http的响应格式和发送的格式还是有区别的,我们可以通过判断数据包

2020-07-08 15:17:12 7807

原创 linux内核DNS拦截程序及分析(设备域名绑定)-写法一

前言我们经常有这么一个需求,我们可以通过ip地址来登录我们的设备。但是如果ip地址变化,我们又不知道设备的ip地址的时候,就不能够正常登录到设备,或者很难登录到设备(需要查看设备当前的ip地址才可以)。那么能不能实现我可以通过一个域名来登录设备(即:给设备绑定一个随意的域名,通过域名来访问设备)linux内核数据包桥流程分析这里应用网上比较好的博客,让大家对于linux桥接有一个直观的认识什么是桥接?简单来说,桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复

2020-07-02 18:52:55 2533 6

原创 Mac下网络工具(使用python语言,pyqt作为界面--版本持续迭代)

前言因为从来没有使用过mac笔记本,所以最近换了电脑。使用起来的感受只有两个字(真香)。但是应用软件的缺少是个诟病,在windows下面很多好用的软件,在mac下面却找不到,或者需要花钱购买。一谈到钱我就很激动,我并不排斥收钱,因为软件也是作者开发的,投入了时间和精力,可是我没钱,像我这种初级程序员能够养活自己就已经很好了。(开个玩笑,别当真,不过我工资真不高。具体的原因有很多,这里不一一细说)。于是我就想着自己开发一款,方便自己平时开发调试使用。语言的话我采用了当前最流行的python(说实话写这个程

2020-06-27 00:12:10 513

原创 shell脚本自动检测程序是否运行(bash根据配置文件以及设备的角色、模式检测程序是否死掉,如果死掉则拉起来)

前言在嵌入式设备中,我们有时候有这样一个需求:需要一个程序(python,shell,c程序)来检测我们设备侧运行的程序是否异常退出(需要根据设备的角色,模式以及运行的环境来检测不同的程序)。因为linux嵌入式设备有些是没有python的(python写是最简单的)。所以我们考虑用c语言或者shell脚本来实现。程序设计思路:创建一个配置文件,配置文件中包含需要检测的程序,以及该程序运行的环境等,我的配置文件如下:# space and tab are not allowed in names

2020-06-23 15:32:58 1324

原创 论TCP客户端如何快速判断与服务器断联

TCP客户端如何快速判断与服务器断联问题产生的背景说明 我曾经对接中国电信的服务器的时候,遇到了该问题。中国电信要求和服务器断联之后(异常或者正常断联,其中包括拔掉网线)能够在30s之内连接上中国电信服务器并且接收服务器下发的无线配置。客户端重启无线,能够用无线扫描工具扫描该无线ssid已经被同步。该需求当时面临如下几个问题:1.客户端在和服务器连接的时候需要通过一系列的鉴权机制(dh秘钥协商),然后才可以和服务器通信2. 无线配置到生效(ssid改变),需要花费一定的时间。为了满足这一系列的

2020-06-09 23:03:29 3657 1

原创 论动态库中的全局变量和各种锁以及信号量是否是进程独立或者共享

动态库中的全局变量测试新建一个动态库,代码如下#include <stdio.h>#include "my_lib.h"int g_val = 200;//测试库中的全局变量是否独立或共享static void func_1();void func(int i){ func_1(); g_val = i; printf("===== g_val= %d\n", g_val);}static void func_1(){ printf("==

2020-05-27 16:18:29 1395

原创 UBUS代码例程以及分析

UBUS 相关框架和代码分析UBUS 组成通俗点说,ubus 就是一个用于进程间通信的通用框架。ubus 具有很强的可移植性,可以很方便的移植到其他 Linux 平台上使用。libubus 基础库是根据 libubox 开发出来的,同样 uhttpd 也是基于 libubox 开发。UBUS 数据结构struct ubus_object { struct avl_node a...

2020-03-18 16:45:34 12133 1

数字PID算法控制的研究

数字PID控制算法的研究. 新手学习的好资料 可以下载研究一下

2015-07-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除