邻居子系统
文章平均质量分 71
fanxiaoyu321
天道酬勤
展开
-
邻居子系统之代理功能
文章目录代理条件通用代理机制延时处理请求代理请求入队列: pneigh_enqueue()代理请求处理定时器: neigh_proxy_process()代理类型目的地址代理配置项: pneigh_entry目低地址代理配置项查询: pneigh_lookup()ARP代理arp_process()arp代理启用条件: arp_fwd_proxy()邻居子系统支持代理功能,即主机在收到一个目的地址查询不属于自己地址的ARP请求时,可以代替真正的主机做出响应,这就是邻居代理。代理条件当然,主机不能对任何原创 2021-11-29 22:17:00 · 1870 阅读 · 1 评论 -
邻居子系统之邻居项的回收
文章目录邻居项的销毁: neigh_destroy()垃圾回收同步清理异步清理邻居项的刷新L3地址变化: neigh_ifdown()L2地址变化: neigh_changeaddr()neigh_flush_dev()邻居项删除涉及邻居子系统的垃圾回收机制,所以这里单独分析其代码实现。邻居项删除主要有如下三个原因:邻居子系统感知到该邻居项不可达,将邻居项状态设置成了NUD_FAILED,这种邻居项会有异步垃圾回收机制回收;该邻居项关联的L2地址发生了变化,但是它L3地址不变,这种邻居项需要先进入原创 2021-11-29 22:15:33 · 681 阅读 · 0 评论 -
邻居子系统之Netlink接口
文章目录数据结构邻居项Netlink命令消息: ndmsg命令行添加邻居项: neigh_add()删除邻居项: neigh_delete()设置邻居协议参数: neightbl_set()在邻居子系统框架的系统初始化函数neigh_init()中,有看到其向RtNetlink注册了几个事件用于配置邻居项,这篇笔记分析下邻居项的配置过程。数据结构邻居项Netlink命令消息: ndmsgstruct ndmsg{ __u8 ndm_family; __u8 ndm_pad1; __u16原创 2021-11-29 22:13:15 · 979 阅读 · 0 评论 -
邻居子系统之ARP协议数据处理过程
ARP协议报文格式原创 2020-03-05 00:18:30 · 1107 阅读 · 0 评论 -
邻居子系统之邻居项状态更新
邻居项可取状态如下:名称值描述NUD_NONE0x00邻居项新建后的状态,此时还没有有效的映射信息,如果需要可以启动可达性确认过程NUD_INCOMPLETE0x01邻居地址正在解析时出于该状态,此时正在发送solicitations多播请求NUD_REACHABLE0x02NUD_STALE0x04邻居项有映射地址,但是该地址已经有一段时...原创 2020-03-01 22:41:31 · 1548 阅读 · 1 评论 -
邻居子系统之数据发送流程
邻居子系统只影响数据包的发送过程,为了使系统更加灵活,邻居子系统首先引入了一个协议无关层,L3协议只需要和该协议无关层交互即可,如下图所示。这里面起作用的一个核心数据结构是sturct neigh_ops,每个邻居项都关联一个该结构,L3协议只需要在不同的上下文环境中调用该结构的函数就可以了,具体这些函数指针的实现方是谁,由邻居子系统根据邻居项的状态和各自的逻辑决定。这种设计使得邻居子系统向上...原创 2020-03-01 12:24:27 · 558 阅读 · 0 评论 -
邻居子系统之概述
邻居协议的管理邻居子系统框架将所有的邻居协议组织成一个链表来维护。// 系统中所有的邻居协议实例组织到该链表中static struct neigh_table *neigh_tables;// 该读写锁只保护neigh_tables的增加和删除,并不保护其中某个邻居协议实例的内容static DEFINE_RWLOCK(neigh_tbl_lock);注册邻居协议:neigh_ta...原创 2020-03-01 11:20:00 · 765 阅读 · 0 评论 -
邻居子系统之ARP概述
arp_init()void __init arp_init(void){ // 向系统注册arp邻居协议,注册过程中也会对arp_tbl中的邻居子系统公共字段进行初始化 neigh_table_init(&arp_tbl); // 向网络设备接口层注册数据包接收回调,这样当网卡收到arp报文时,将交给本协议处理 dev_add_pack(&arp_packet_typ...原创 2020-03-01 00:50:58 · 816 阅读 · 0 评论