linux网络
文章平均质量分 91
viewsky11
这个作者很懒,什么都没留下…
展开
-
Linux 设备管理(linux网络协议栈笔记)
Linux 设备管理设备初始化是我们要分析的第三和第四个大步骤,这个部分要涉及到一些设备驱动的背景知识。 设备管理的目标是能对所有的外设进行良好的读、写、控制等操作。但是如果众多设备没有一个统 一的接口,则不利于开发人员的工作。因此 Linux 采用了类似 UNIX 的方法,使用设备文件来实现这个 统一接口。由此可见,设备文件的相关概念是设备管理的最基础部分。 要让操作系统感知到设备的存在,必须原创 2016-11-30 22:39:55 · 2438 阅读 · 1 评论 -
mac80211解析三
在ieee80211_register_hw函数中,实现了无线网络设备的的注册,网络接口的注册和建立主要由ieee80211_if_add 函数来完成,即:result = ieee80211_if_add(local, "wlan%d", NULL, NL80211_IFTYPE_STATION, NULL); 一般注册生成wlan0,函数ieee80211_原创 2017-02-20 23:08:55 · 3574 阅读 · 0 评论 -
mac80211解析四
mac80211中创建station由用户空间通过nl80211发起,首先要分配sta_info对象空间,sta_info的定义如下: /** * struct sta_info - STA information * * This structure collects information about a station that * mac80211 is communicating原创 2017-02-20 23:58:15 · 2487 阅读 · 0 评论 -
mac80211解析五
mac80211驱动会使用到cfg80211模块,分析cfg80211,初始化模块如下: static int __init cfg80211_init(void){ int err; err = register_pernet_device(&cfg80211_pernet_ops); if (err) goto out_fail_pernet; er原创 2017-02-22 00:09:41 · 3795 阅读 · 1 评论 -
mac80211解析六
mac80211的扫描请求由用户空间通过nl80211发起,调用了mac80211中的ieee80211_scan,该函数内容如下:static int ieee80211_scan(struct wiphy *wiphy, struct cfg80211_scan_request *req){ struct ieee80211_sub_if_data *sd原创 2017-02-22 23:24:55 · 2817 阅读 · 0 评论 -
qcacld-2.0的wlan分析
qcacld-2.0是Qualcomm WLAN Driver。 分析开放的驱动代码: https://github.com/myrom/opensource_wlan_qcacld-2.0.git git得到源码。 根据__init找到入口文件opensource_wlan_qcacld-2.0/CORE/HDD/src/wlan_hdd_main.c static int __init原创 2017-02-07 17:34:34 · 7937 阅读 · 0 评论 -
mac80211概览
mac80211是linux kernel中的一个子系统,它为无线设备soft-MAC/half-MAC提供了分享实施方案,包含MLME和另外一些代码。 mac80211的架构 其他相关联的还有TX/RX路径(包含一些软件加密) 为网络管理,IBSS,mesh等提供的控制路径 一些AP的管理,如省电缓冲 mac80211的代码结构最重要的是kernel提供的驱动API,该文件定义了mac8011原创 2017-02-11 19:56:57 · 9705 阅读 · 1 评论 -
qcacld-2.0的wlan分析之二
在设备进行pci总线注册之后,进入pci驱动的probe函数,该函数中最为重要的就是开启wlan的主机设备驱动,即hdd_wlan_startup()函数:/**--------------------------------------------------------------------------- \brief hdd_wlan_startup() - HDD init funct原创 2017-02-14 23:37:59 · 5580 阅读 · 0 评论 -
hostapd_cli命令源码分析
hostapd提供了控制命令hostapd_cli,使用方法可以查看usage。源码中的main函数:int main(int argc, char *argv[]){ int warning_displayed = 0; int c; int daemonize = 0; if (os_program_init())//不同操作体统平台下执行不同的环境初始化原创 2017-02-15 14:33:43 · 7408 阅读 · 0 评论 -
wireless-tools源码分析-iwconfig
Wireless Tools包含了一下工具: iwconfig:设置基本无线参数 iwlist:扫描、列出频率,比特率,密钥等 iwspy:获取每个节点链接的质量(只能查阅与之相连的节点) iwpriv:操作Wireless Extensions 特定驱动 ifrename: 基于各种静态标准命名接口大多数 Linux 发行版本都在其网络初始化脚本中集成Wir原创 2017-02-23 22:12:08 · 5868 阅读 · 1 评论 -
wireless-tools源码分析-iwlist
iwlistiwlist主要用来显示无线网卡的一些附加信息。 iwlist的用法: useage: iwlist [interface] options scanning 扫描一定范围内的无线接入点和Ad-Hoc单元信息,包括ESSID,信号质量,频段以及无线模式等 frequency 频率 channel显示设备支持的频道及当前所在的频道 rate/bitrate 设备支持的速率原创 2017-02-24 00:07:40 · 5734 阅读 · 0 评论 -
wireless-tools源码分析-iwpriv
iwpriv是Wireless Extensions 操作的特定驱动。通过iwpriv,可以得到AP的一些参数设置,也可以设置自己的WIFI参数。[root@root- /]#iwprivwlan0 Available private ioctls : extscan (8BFA) : set 0 int & get 2 char ho原创 2017-02-24 12:19:25 · 6041 阅读 · 0 评论 -
mac80211解析二
在实现无线网络设备分配时,ieee80211_register_hw关联了ieee80211_ops结构体:ieee80211_ops结构体是mac80211到设备驱动的回调操作函数集合,定义如下:/** * struct ieee80211_ops - callbacks from mac80211 to the driver * * This structure contains vari原创 2017-02-17 14:18:33 · 3660 阅读 · 0 评论 -
mac80211解析七
mac80211的模块初始化的时候,也初始化了minstrel,minstrel是调用速率控制函数模快,通过tx.c中的ieee80211_tx_h_rate_ctrl句柄填充结构体ieee80211_tx_info的速率变量ieee80211_tx_rate。模块初始化后调用了ieee80211_rate_control_register进行速率控制注册,注册了定义好的速率控制操作结构体mac80原创 2017-02-24 17:22:24 · 3233 阅读 · 1 评论 -
mac80211解析八
Full-mac和Softmac对比Infrastructure BSS NOTE: Infrastructure BSS != IBSS – IBSS = Independent BSS. (Ad-Hoc mode)IBSSMesh modefull mesh和 partial mesh对比 The 802.11 MAC Header每个mac帧都包含了一个mac原创 2017-02-26 21:40:23 · 3071 阅读 · 0 评论 -
rt2860v2源码解析四
在pci设备的probe函数rt2860_probe中,有获取设备的初始化操作: /* get DRIVER operations */RTMP_DRV_OPS_FUNCTION(pRtmpDrvOps, NULL, &PciConfig, NULL);RTMP_DRV_OPS_FUNCTION函数调用了RtmpDrvOpsInit函数进行驱动设备操作的初始化,内容如下: VOID RtmpD原创 2017-03-05 22:14:41 · 2527 阅读 · 0 评论 -
cfg80211 subsystem中的cfg80211_ops
每个无线设备和每个无线虚拟接口都要提供一组配置操作和功能操作,这些操作都由用户空间激发,进而调用驱动操作,每一个操作的执行都是在操作结构体重分开描述和关联。 结构体struct cfg80211_ops描述了无线的配置操作,它通过fullmac或者无线协议注册来关联相应的接口请求操作。 /** * struct cfg80211_ops - backend description for原创 2017-02-11 17:29:32 · 8356 阅读 · 0 评论 -
模拟网络驱动snull
snull.h文件/* * snull.h -- definitions for the network module * * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet * Copyright (C) 2001 O'Reilly & Associates * * The source code in this fil原创 2017-02-28 23:45:19 · 633 阅读 · 0 评论 -
ip_forward参数对Linux内核转发影响分析
在进行Linux内核转发时,需要在proc文件系统的proc/sys目录设置转发的参数,可以使用下面的方法查看该参数的值cat /proc/sys/net/ipv4/ip_forward,该参数的默认值为0,可以使用下面的方法进行修改该值,使能Linux内核的IP层的数据抓发,但是下面的方法在系统重启后不再生效。echo 1 > /proc/sys/net/ipv4/ip_forward在Linu转载 2016-12-01 21:58:09 · 7007 阅读 · 0 评论 -
网络配置过程分析(linux网络协议栈笔记)
配置过程分析在本篇,我们先介绍配置普通设备的IP地址的内部过程,接着再转到loopback接口的配置过程,这两个过程有相似之处,所以一起解说。然后再转入FIB系统,讲解路由系统,并用图例演示路由表的变化。最后介绍接口状态的变化,这对于驱动程序开发人员来说也是比较重要的。 .1)配置是如何下达到内核的? 我们假设在安装我们的Linux系统时,没有配置IP地址,也没有挂上网线,完完全全是一台“裸机”原创 2016-12-01 21:19:52 · 2377 阅读 · 1 评论 -
网络配置过程分析二(linux网络协议栈笔记)
Loopback接口的配置过程前篇分析了给本机系统配置IP地址的过程,本篇介绍一下loopback接口的“配置”过程,之所以用引号,是因为此配置不完全是用户自己控制的,为什么不先介绍loopback的配置,原因也在此。上篇我们已经对配置的过程一步一步做了分解,那么我们可以一下子来了解loopback接口的初始化及配置过程,这也是对普通设备的初始化和配置过程的一个回顾。 要使Loopback接口起作用原创 2016-12-02 16:12:53 · 1669 阅读 · 1 评论 -
linux网络深入理解笔记一
常用的缩写: 缩写 意义 L2 链路层(如ethernet) L3 网络层(如ip) L4 传输层(如tcp/udp/icmp) BH 下半部(Bottom Half) IRQ 中断(事件) RX 接收 TX 发送圾收集: 内存是有限的共享资源,不应该浪费,特别是在内存中,因为内核不使用虚拟内存。多数内核子系统会实现某种垃圾收集,以回收由未使用的或无效的数据结构实例原创 2016-11-20 20:21:31 · 1491 阅读 · 0 评论 -
fib系统分析(linux网络协议栈笔记)
FIB系统初始化在Linux路由系统中主要保存了三种与路由相关的数据,第一种是在物理上和本机相连接的主机地址信息表——相邻表:neigh_table{ },第二种是保存了在网络访问中判断一个网络地址应该走什么路由的数据表——路由规则表:fib_table{ },第三种表是最新使用过的查询路由地址的缓存地址数据表——路由缓存:rtcache,由rtable{ }节点组成。它们三者之间的关系如下图:原创 2016-12-02 17:39:20 · 7937 阅读 · 2 评论 -
linux网络协议栈-socket
1、TCP/IP参考模型 为了实现各种网络的互连,国际标准化组织(ISO)制定了开放式系统互连(OSI)参考模型。尽管OSI的体系结构从理论上讲是比较完整的,但实际上,完全符合OSI各层协议的商用产品却很少进入市场。而使用TCP/IP 协议的产品却大量涌入市场,几乎所有的工作站都配有TCP/IP协议,使得TCP/IP 成为计算机网络的实际的国际标准。 2、套接字(socket) soc转载 2016-11-23 22:39:37 · 593 阅读 · 0 评论 -
iptables/netfilter
Iptables/Netfilter原理分析Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能: 1) 网络地址转换(Network Address Translate) 2) 数据包内容修改 3) 以及数据包过滤的防火墙功能 Netfilter平台中制定了五个数据包的挂载点(Hook Point,我们可以理解为回调函数点,数据包到达这些位置的时候会主动调用原创 2016-11-21 20:51:47 · 690 阅读 · 0 评论 -
FIB系统分析二(linux网络协议栈笔记)
FIB配置过程续当给设备设置IP地址的的时候,内核给inetdev_chain通知链发送了一个NETDEV_UP事件,FIB系统正好对这个事件感兴趣,就把下面这个结构注册到了inetaddr_chain上: static struct notifier_block fib_inetaddr_notifier = { .notifier_call = fib_inetaddr_event,原创 2016-12-12 23:18:04 · 4777 阅读 · 3 评论 -
adb源码分析
ADB是Android debug bridge的缩写,它使用PC机可以通过USB或网络与android设备通讯。 adb的源码位于system/core/adb目录下,先来看下编译脚本Android.mk: # Copyright 2005 The Android Open Source Project # # Android.mk for adb # LOCAL_PATH:= $转载 2016-11-28 15:36:23 · 1520 阅读 · 0 评论 -
网络层实现初步探究(linux网络协议栈笔记)
从Ping 127.0.0.1开始Ping是潜水艇人员的专用术语,表示回应的声纳脉冲,在网络中Ping 是一个十分好用的TCP/IP工具。它主要的功能是用来检测网络的连通情况和分析网络速度。 先给出一段部分ping的代码基本实现:/****统计数据函数****/void statistics(int sig){ computer_rtt(); //计算rtt prin原创 2016-12-15 22:04:39 · 1345 阅读 · 0 评论 -
网络层路由系统(linux网络协议栈笔记)
查找出口当要发送一个报文时,必定要查询发送接口,这个过程被Linux分为3个步骤: 第一个步骤是查询路由cache, 第二个步骤是查询FIB表, 第三步是将查询结果填入路由cache中以便将来查询。现在来介绍一下路由cache。 路由cache 当确定了一条路由时,路由表项就被放入路由cache中,这意味着一旦知道路由并放入cache后,经过同样路由的报文能够立即找到出口。一个报文在本地机原创 2016-12-17 20:12:08 · 1605 阅读 · 1 评论 -
hostapd的分析
Hostapd的功能就是作为AP的认证服务器,负责控制管理stations(通常可以认为带无线网卡的PC)的接入和认证。 通过Hostapd可以将无线网卡切换为AP/Master模式,通过修改配置文件,可以建立一个开放式的(不加密)的,WEP,WPA或WPA2的无线网络。并且通过修改配置文件可以设置无线网卡的各种参数,包括频率,信号,beacon包时间间隔,是否发送beacon包,如果响应探针请求原创 2017-02-07 11:19:23 · 12146 阅读 · 0 评论 -
mac80211解析一
解析mac80211从ieee80211_alloc_hw函数分配 和ieee80211_register_hw 函数注册开始。以pci无线网络设备为例,底层pci实现连接并注册pci设备之后,开始在ieee80211_alloc_hw函数中实现无线网络设备的一些列初始化和设备分配,并关联ieee80211_ops操作函数,实现mac层的操作。struct ieee80211_hw *ieee802原创 2017-02-16 23:30:27 · 5441 阅读 · 1 评论 -
linux网络设备驱动
网络设备驱动架构Linux网络设备驱动程序的体系结构,依次为网络协议接口层,网络设备接口层,提供实际功能的设备驱动功能层以及网络设备与媒介层。 网络协议接口层向网络层协议提供统一的数据包收发接口,不论上层协议是ARP,还是IP,都通过dev_queue_xmit()函数发送数据,并通过netif_rx()函数接受数据。 网络设备接口层向协议接口层提供统一的用于描述具体网络属性和操作的结构体net原创 2017-02-08 21:44:18 · 1856 阅读 · 0 评论 -
cfg80211 subsystem中的wiphy
无线网络设备驱动使用cfg80211需要硬件设备在cfg80211中实现注册。实现注册就要定义一系列的硬件功能描述的结构体。 每个设备的基础性结构体是wiphy,设备连接到系统时,都要使用。每个wiphy有0个,1个或者许多个虚拟接口相关联。 struct wiphy定义在内核include/net/cfg80211.h中struct wiphy { /* assign these f原创 2017-02-09 17:23:09 · 9399 阅读 · 1 评论 -
rt2860v2源码分析三
在rt2860_probe函数中调用了RtmpPhyNetDevInit为无线网络设备进行初始化,实质是分配建立了pNetDevHook结构体:PNET_DEV RtmpPhyNetDevInit( IN VOID *pAd, IN RTMP_OS_NETDEV_OP_HOOK *pNetDevHook){ struct net_原创 2017-02-26 23:53:07 · 2659 阅读 · 0 评论