自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

~~ LINUX ~~

~~ LINUX ~~

  • 博客(41)
  • 资源 (10)
  • 收藏
  • 关注

转载 Linux MPLS 初探

使用mpls功能,首先需要加载mpls相关的模块:$ sudo modprobe mpls_gso$ sudo modprobe mpls_iptunnel$ sudo modprobe mpls_router 使能mpls的接收和设置labels表项的数量,默认情况下内核不接收mpls报文,如果不使能此项,在如下使用ip命令配置本机环回lo接口接收mpls数据包时就会失败。lab...

2019-08-30 15:47:20 381

转载 被神话的Linux, 一文带你看清Linux在多核可扩展性设计上的不足

本文接着《有关微内核OS史上最透彻一篇 - 写于华为鸿蒙发布一周之际》继续写下去。我其实并不想讨论微内核的概念,也并不擅长去阐述概念,这是百科全书的事,但无奈最近由于鸿蒙的发布导致这个话题过火,也就经不住诱惑,加上我又一直比较喜欢操作系统这个话题,就来个老生常谈吧。说起微内核,其性能往往因为IPC饱受诟病。然而除了这个显而易见的 “缺陷” ,其它方面貌似被关注的很少。因此我写点稍微不同的...

2019-08-28 09:22:38 317

转载 zebra 的Thread机制 -- 003

==========================================================一、线程机制概述zebra这个软件包整体结构大致可分为两大块:协议模块和守护进程模块。协议模块实现各协议的功能,各协议以子模块的形式加载到zebra中;守护进程模块的功能主要是管理各协议的信令传输、表项操作、系统操作调用等事务,为各协议提供底层信息以及相关的硬件处理等功能支持...

2019-08-21 16:27:42 2215 1

转载 对zebra的一点思考 --- 002

此文并不针对zebra的应用,甚至不是一个架构的分析,只是对于Zebra的一点儿思考。Zebra 设计得是如此简洁明快。每一种数据结构均对应于一定的应用,它们之间以一种松耦合的方式共存,而多种数据结构组成的功能模块几乎完美的结合在一起,完成了非常复杂的功能。它的设计思想就在于对C语言面向对象式的应用。虽然很多程序均借鉴面向对象设计方式,但是Zebra的代码风格是易读的,非常易于理解和学习,...

2019-08-21 16:04:34 729

转载 zebra代码简单分析 --- 001

1) zebra是很有名的linux下的开源路由软件项目,代码写的非常漂亮,模块化,很清晰的结构。 关于软件的框架部分就不说了,zebra 官方网站上已经有详细的解释了,简单的来说:zebra作为一个守护进程来维护linux路由信息,其他模块rip, bgp 和这个守护进程通过消息通信来更新和获取路由信息。2) 项目主要是用到了RIP协议功能3) 每一个模块实际上是一个单进程的工作方式,在...

2019-08-21 15:37:24 1632

转载 Zebra 命令模式分析2

1. Zebra 功能认识ZEBRA 提供了一个类Cisco命令行的分级多用户命令解析引擎--VTY(Virtual Terminal)。它是类似于Linux Shell的虚拟终端接口,负责对访问的安全验证、数据缓冲、命令解析、模式切换和命令调用。用户通过VTYSH的每一次接口访问都会发起一个对应的VTY。VTY会根据用户优先级初始化并挂载相应的命令集Command Node。Comman...

2019-08-21 15:34:08 942

转载 Zebra命令模式分析

命令存储结构      对于上图中略去的cmd_elemnt,它代表了一条命令,具体展开如下:   每条命令按上图存储,命令被分拆为tokens,存储在vector中 如此,形成了zebra命令模式的基本框架:所有命令被分类到不同模式下。这里的模式即上面图中的 节点cmd_node,而命令则相当于cmd_element,可见,命令被放到了不同的node下...

2019-08-21 15:21:58 983

转载 zebra的命令存储原理及使用方法

zebra在设计命令格式的时候,将命令节点Node和命令Command分开,整个命令结构是一个树状的,如图:NODEn表示命令节点,CMDn表示具体的命令。在zebra的整个命令行设计当中,zebra用向量的概念将命令和节点连接起来,建立起隶属关系。一个全局向量CMDVEC,指向整个命令结构,CMDVEC的每一个索引值都是一个具体的命令节点(如果有的话);在每个命令节点的结构中又存在...

2019-08-21 15:19:38 1791

原创 FRR -- CLI简要分析

FRR作为一个路由器软件,自然要提供人机接口。FRR提供snmp管理接口,而且,自然就会有对应的命令行管理格式,当然一般路由软件不会提供界面形式的,也许有webui,然而FRR并没有。我们要看的就是这个命令行处理的代码 command。接触过类似命令行的朋友肯定有一点点好奇吧,那么数量庞大的命令和参数输入,还可以提供提示和自动补齐,这肯定不是一件很简单的事情。下面是一个配置示例:...

2019-08-21 14:50:06 4432

原创 Virtual Routing and Forwarding

一 简介VRF策略和路由规则配合在Linux网络协议栈中提供了一种创建虚拟路由与转发域地能力。一个典型的例子就是多租户问题,租户有自己地路由表,并且是不同的网关。进程清晰地知道使用哪个VRF,通过将socket绑定在特定的VRF策略上。数据包通过socket系统调用后,使用与VRF策略关联的路由表发出。VRF策略实现的一个重要特性就是它只影响L3层及以上,所以L2工具(如LLDP)不受影响...

2019-08-20 10:50:55 1564

转载 【组播技术入门 02】组播IP地址及组播MAC地址

1.组播IP地址在组播环境中,组播源地址使用的是单播地址,它向一个组播IP地址发送组播流量,凡是加入到该组播组的用户都会接收到源发送出来的组播数据。组播IP地址是扁平的,也就是不能划分子网的。使用D类地址空间,范围是224.0.0.0 – 239.255.255.255。组播地址代表一个接收者的集合,组播接收者加入特定的组播组,即是声称自己愿意接收目的IP为该组播地址的数据。注意,组...

2019-08-19 09:55:46 3686

转载 【组播技术入门 01】IP组播概述

1.单播(unicast)每一个数据包都有确切的源和目的;如果我们在一个业务场景中有多个数据接收者,这意味着源需要为每个接收者都发送一份数据的拷贝。当接受者增加到成百上千时,将极大加重服务器为相同数据创建和发送多份拷贝的负担,网络设备也将承受更大的性能损耗。例如视频类的服务,如果采用单播的方式实现,恐怕就有比较大的短板。2.广播(Broadcast)广...

2019-08-16 10:19:22 288

转载 LINUX内核协议栈分析初探

1说明本文档制作基于版本linux-2.6.32,本文档的目的是让有一定的网络协议基础的人了解到网络数据包在协议栈中的传输流程,大致理解到从网卡收到数据包传输到应用层所经历的步骤,以及每个步骤所做的事情。 图片贴到最后。本文档阅读基础:C语言基础,C语言回调函数,UML建模基础,C++面向对象封装思想,TCP/IP协议或网络基础。2TCP协议本章摘自[...

2019-08-14 09:48:09 1501

原创 网络协议栈分析好的网址

https://blog.csdn.net/geekcome/article/category/786460https://blog.csdn.net/zxorange321/article/details/75676063https://blog.csdn.net/lee244868149/article/category/2806025https://blog.c...

2019-08-14 09:22:42 137

转载 路由重发布Route Redistribution

在实际的组网中,我们可能会遇到这样一个场景:在一个网络中同时存在两种或者两种以上的路由协议。例如客户的网络原先是纯CISCO的设备,使用EIGRP协议将网络的路由打通。但是后来网络扩容,增加了一批华为的设备,而华为的设备是不支持EIGRP的,因此可能就在扩容的网络中跑一个OSPF,但是这两部分网络依然是需要路由互通的,这就面临一个问题。因为这毕竟是两个不同的路由协议域,在两个域的边界,路由信息是相...

2019-08-13 19:33:05 4361

转载 netlink 011 -- generic netlink 编程入门

一、generic netlink 消息结构消息以流的形式在程序之间进行传递,一个流中可能包含多个消息。对于每个消息消息来说,为了便于维护和方便使用,还需要一些有关记录消息的信息。一个 netlink message 结构如下:其中 nlmsghdr 结构里记录了该条 netlink message 的如下信息:struct nlmsghdr { __u32 ...

2019-08-13 15:56:29 637

转载 netlink 0010 -- Generic Netlink 实现通信

前一篇博文中分析了Generic Netlink的消息结构及内核初始化流程,本文中通过一个示例程序来了解Generic Netlink在内核和应用层之间的单播通信流程。示例程序:demo_genetlink_kern.c(内核模块)、demo_genetlink_user.c(应用层Demo程序)、demo_genetlink.h程序主要功能:应用层程序接收用户的输入“字符串”和“数据”向...

2019-08-13 15:16:06 256

转载 netlink 009 -- Generic Netlink初始化

Generic Netlink 是内核专门为了扩展netlink协议簇而设计的“通用netlink协议簇”。由于netlink协议最多支持32个协议簇,目前Linux4.1的内核中已经使用其中21个,对于用户需要定制特殊的协议类型略显不够,而且用户还需自行在include/linux/netlink.h中添加簇定义(略显不妥),为此Linux设计了这种通用Netlink协议簇,用户可在此之上定义更...

2019-08-13 15:13:05 321

转载 Netlink 0008 --- 通信

在前一篇博文《Netlink 内核实现分析(一):创建》中已经较为详细的分析了Linux内核netlink子系统的初始化流程、内核netlink套接字的创建、应用层netlink套接字的创建和绑定流程,本文来详细的分析一下内核是如何实现netlink消息在内核和应用进程之间全双工异步通信的。一、netlink通信数据结构1、netlink消息报头:structnlmsghdrstru...

2019-08-13 14:48:09 160

转载 Netlink 0007 --- 创建实现分析

Netlink 是一种IPC(Inter Process Commumicate)机制,它是一种用于内核与用户空间通信的机制,同时它也以用于进程间通信(Netlink更多用于内核通信,进程之间通信更多使用Unix域套接字)。在一般情况下,用户态和内核态通信会使用传统的Ioctl、sysfs属性文件或者procfs属性文件,这3种通信方式都是同步通信方式,由用户态主动发起向内核态的通信,内核无法主...

2019-08-13 14:40:38 278

原创 netlink 0006 --- genetlink代码例子

/* getdelays.c * * Utility to get per-pid and per-tgid delay accounting statistics * Also illustrates usage of the taskstats interface * * Copyright (C) Shailabh Nagar, IBM Corp. 2005 * Copyrig...

2019-08-13 14:01:25 564

原创 netlink 0005 -- Generic Netlink详解

netlink socket是一种用于用户态进程和内核态进程之间的通信机制。它通过为内核模块提供一组特殊的API,并为用户程序提供了一组标准的socket接口的方式,实现了全双工的通讯连接。Netlink的特点:双向传输,异步通信 用户空间中使用标准socket API 内核空间中使用专门的API 支持多播 可由内核端发起通信 支持32种协议类型netlink仅支持32种协议...

2019-08-13 13:59:39 653

转载 Netlink0004 --- 多播机制的用法

在上一篇博文中我们所遇到的情况都是用户空间作为消息进程的发起者,Netlink还支持内核作为消息的发送方的情况。这一般用于内核主动向用户空间报告一些内核状态,例如我们在用户空间看到的USB的热插拔事件的通告就是这样的应用。先说一下我们的目标,内核线程每个一秒钟往一个多播组里发送一条消息,然后用户空间所以加入了该组的进程都会收到这样的消息,并将消息内容打印出来。Netlink地址结构体中的n...

2019-08-13 11:23:33 614

转载 Netlink 0003 -- Netlink动手实践

今天我们来动手演练一下Netlink的用法,看看它到底是如何实现用户-内核空间的数据通信的。我们依旧是在2.6.21的内核环境下进行开发。在文件里包含了Netlink协议簇已经定义好的一些预定义协议:#define NETLINK_ROUTE0/*Routing/device hook*/#define NETLINK_UNUS...

2019-08-13 11:13:39 259

转载 Netlink 0002 -- 什么是Netlink

引言 Alan Cox在内核1.3版本的开发阶段最先引入了Netlink,刚开始时Netlink是以字符驱动接口的方式提供内核与用户空间的双向数据通信;随后,在2.1内核开发过程中,Alexey Kuznetsov将Netlink改写成一个更加灵活、且易于扩展的基于消息通信接口,并将其应用到高级路由子系统的基础框架里。自那时起,Netlink就成了Linux内核子系统和用户态的应用程序通...

2019-08-13 10:44:15 267

原创 netlink 0001 --- 基础简介

netlink是一种基于网络的机制,允许在内核内部以及内核与用户层之间进行通信。最早在内核2.2引入,旨在替代笨拙的IOCTL,IOCTL不能从内核向用户空间发送异步消息,而且必须定义IOCTL号。Netlink协议定义在RFC3549中。以前是可以编译成模块,现在直接集成到内核了。与profs和sysfs相比,有一些优势如下:不需要轮询;系统调用和ioctl也能从用户层想内核传递信息,但...

2019-08-13 10:31:35 324

原创 FRR -- Process Architecture

FRR inherited its overall design architecture from Quagga. The chosen model for Quagga is that of a suite of independent daemons that do IPC via Unix domain sockets. Within each daemon, the architectu...

2019-08-12 17:47:27 1322

原创 Ubuntu的LTS 18.04 安装FRR

第-1步,安装samba(我是先下载V7.1到了本地,其实可以直接git clone下载即可,安装samba是为了copy进去)下载releases发布的版本 V7.1到了本地https://github.com/FRRouting/frr/releasesapt-get install samba samba-commonvim /etc/samba/smb.conf复制到文末...

2019-08-12 15:47:27 2994 4

转载 版本控制工具——Git常用操作(下)

摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复现场的操作。学会以后已经足够我们使用Git参加协作开发了,但是在开发的过程中难免会出错,本文主要介绍版本控制的过程中出错了的场景,以及Git开发的一些技巧,让我们用的更流畅。上集回顾:Git的基本概念 一个人使用Git时的代码版本控制--(提交、拉代码...

2019-08-12 10:46:16 480

转载 版本控制工具——Git常用操作(上)

摘要:用了很久的Git和svn,由于总是眼高手低,没能静下心来写这些程序员日常开发最常用的知识点。现在准备开一个专题,专门来总结一下版本控制工具,让我们从git开始。完成本系列博客的阅读以后,你将掌握git的基本概念与git的基本命令,可以在本地随心所欲的完成代码的提交撤销保存修改等操作、可以流畅的参与多人协作,本文致力于快速的入门,如果涉及到更高级的功能需要进行更深一步的学习。本文核心点:...

2019-08-12 10:44:06 250

原创 BGP概述

BGP是为了在AS之间更高效率的传递路由和维护大量的路由而产生的一个外部网关协议。BGP定义BGP(Border Gateway Protocol)是一种用于自治系统AS(Autonomous System)之间的动态路由协议。早期发布的三个版本分别是BGP-1、BGP-2和BGP-3,主要用于交换AS之间的可达路由信息,构建AS域间的传播路径,防止路由环路的产生,并在AS级别应用一些...

2019-08-07 15:08:42 564

转载 KVM 介绍(8):使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 [Nova Libvirt QEMU/KVM Live Migration]

学习 KVM 的系列文章:(1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration)...

2019-08-02 15:40:39 659

转载 KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 (Nova Instances Snapshot Libvirt)

学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (m...

2019-08-02 15:39:46 352

转载 KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]

学习 KVM 的系列文章:(1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration)...

2019-08-02 15:38:38 279

转载 KVM 介绍(5):libvirt 介绍 [ Libvrit for KVM/QEMU ]

学习 KVM 的系列文章:(1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration...

2019-08-02 15:36:19 410

转载 KVM 介绍(4):I/O 设备直接分配和 SR-IOV [KVM PCI/PCIe Pass-Through SR-IOV]

学习 KVM 的系列文章:(1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration...

2019-08-02 15:34:43 563

转载 KVM 介绍(3):I/O 全虚拟化和准虚拟化 [KVM I/O QEMU Full-Virtualizaiton Para-virtualization]

学习 KVM 的系列文章:(1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration...

2019-08-02 15:33:16 317

转载 KVM 介绍(2):CPU 和内存虚拟化

学习 KVM 的系列文章:(1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration...

2019-08-02 15:31:49 500

转载 KVM 介绍(1):简介及安装

学习 KVM 的系列文章:(1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration...

2019-08-02 15:10:50 201

转载 一篇极好的Git 总结

常用命令简单的,常用的命令也就几个。但是想非常熟练使用,怕是要记住几十个。Workspace:工作区(clone或者原始内容) Index/Stage:暂存区(有增删改查后add到临时区) Repository:本地仓库(保存了本地的增删改查记录) Remote:远程仓库(git.code.oa.com,本地的记录提交到远端,供团队所有人查看使用)有意思的事代码更新之...

2019-08-02 14:44:50 155

汇编语言 王爽

汇编语言 王爽写的好书,学习汇编不错的入门书籍

2013-07-30

ARM硬件结构

学习ARM的硬件体系结构,可以入门看看,或者给别人讲解使用

2013-07-30

基于ARM的嵌入式程序设计

学习ARM体系、学习基于ARM的嵌入式程序设计方法,入门

2013-07-30

ARM体系结构

ARM体系结构介绍,用于学习ARM体系结构

2013-07-30

攻克U-BOOT资料汇总---找了好多关于U-BOOt的移植资料

攻克U-BOOT资料汇总---找了好多关于U-BOOt的移植资料,大家可以参考下

2011-03-15

18B20温度传感器

18B20温度传感器,搞这个的可以看看,介绍了温度传感器的应用

2010-08-21

空空如也

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

TA关注的人

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