DAN Blog

代码界的女王,Bug 的克星.

浏览器上请求一个网址到出现一个网页的过程

前言 从浏览器上输入一个网址/url,到出现一个网页的过程涉及到网络的方方面面,本文不过多详解http具体原理等,仅对网络中包的封装、转发等简单分析。 在这之前回顾下一些网络基础: TCP比UDP多了拥塞控制、超时重传、流量控制(双方各声明一个窗口,别发的太快或太慢) 要传输的数据可能非常大,直接传出就不好传输,所以当大于MSS,就会分段传输;这样的话,当某一段丢失,只需要重传那一...

零长数组的应用

前言 本来是解决frr在交叉编译时,编译mips架构不可用的问题,后来排查到是因为一个数组的问题,然后无意中看到一个词—零长数组。嘿,还挺新鲜,以前真没用过。研究了一下,感觉还挺实用。 例子 废话不多少,先上例子,看咋用: #include <stdio.h> #include <stdlib.h> #include <string.h> #define...

记录解决frr中重发布功能

frr重发布功能适配

前言 前一阵子解决了一个困扰很久的一个问题,这个问题一直存在,终于下定决心去给解决了,解决完之后 觉得so easy , 不过如此。所以总结一下解决问题的过程,以后不一定遇到同样的问题,但是总结经验教训总是给有一些思考、启发。 问题 当初是做的一个SDWAN,客户的CPE有一个网段是169.254.X.X,需要通过 VPN、OSPF、BGP等组网。最终使我们的CPE设备能学到客户的LAN网...

ohmysh安装使用

前言 之前一直用的是/bin/bash,现阶段不是很忙,各种搜刮新鲜玩意儿,发现了一个神器—ohmysh,他用起来不像是bash sh那么枯燥无味,可以定制各种主题,使shell也能炫酷起来。 安装 系统:ubuntu18.04 查看当前的shell echo $SHELL 然后查看系统现有哪些shell echo /etc/shells 安装zsh sudo apt i...

C程序中段错误的几种原因总结

前言 是不是都被程序中的段错误吓一跳,Segmentation fault (core dumped),这种报错一看吓一跳, 今儿就把遇到的坑 加上网上查到的资料整理一下。 常见的原因 空指针解引用: 当你尝试使用未初始化或者已经释放的指针时,会导致段错误。 数组越界: 访问超出数组边界的元素,或者使用负数作为数组索引会导致段错误。 栈...

内核报错的检查方向

前言 当发生内核报错时,多少都有点恐慌,毕竟是底层的东西,总结之前遇到的内核报错,归纳一下常用的排查方向。 排查方向 内核报错是一个常见但复杂的问题,通常需要仔细的调试方法来解决。以下是一些常见的内核报错调试方法: 查看日志文件: 首先,您可以查看系统的日志文件,通常位于/var/log目录下,以了解有关报错的更多信息。/var/log/messages和/var/log/...

确认内存泄漏以及定位手段

前言 作为一个C程序员,那么内存泄漏不可避免,当排查自己的代码还好一些,但是排查起来别人的“狮山”或者一些开源代码,常常会让自己非常的崩溃,今天总结一下如何确认程序确实发生了内存泄漏以及定位手段。 确认内存泄漏手段 借助工具 LINUX平台中最出名的内存检测工具:Valgrind, 它会生成非常详细的报告,包括泄露的位置和分配的内存大小: valgrind --leak-check=ful...

记录一次shell脚本代替make menuconfig的过程

前言 之前做的项目都是通过jenkins平台自动编译的,后来又加入了一个项目,那个代码别人已经搞了很长一段时间了,他们编译以及发布版本都是在本地手动编译,我们用他们的代码搞别的项目,考虑到在本地编译版本发布版本不太规范,所以想着也要要jenkins上编译,这就需要一个自动编译的脚本。 实现 之前在本地编译 无非就是 先make menuconfig,然后make。make menuconf...

linux内核链表整理

前言 自从做了sdwan项目后,几乎每个项目都要和内核链表打交道。以往都是自己实现链表,用了两年内核链表后,觉得还是挺好用的,直接调用装好的接口:初始化、遍历、添加、删除等等。今儿就整理一下,其实链表的思想都大差不差,无非一个就是自己实现,或者用现成的,内核链表会用了,其他的也自然就会了(以下关于链表的基础知识就不详细介绍了,认为都有基本的数据结构知识)。 简介 链表初始化 内核链表一个双向...

openwrt编译框架整理

前言 搞了openwrt很长一段时间了,一直都是基于它新加一下功能,还没有从系统整体层面深入解剖过它的流程,今儿就整理一下。 结构 编译前原有目录: config : 用于构建系统的配置和选项 include :包含一些Makefile文件,定义构建系统的一些基本的规则和函数。会被其他Makefile文件引用 package :包含一些软...