网络子系统38_ip子系统初始化

//ip子系统初始化
//调用路径inet_init->ip_init
//包括路由子系统的初始化,inet_peer缓存的初始化
1.1 void __init ip_init(void)
{
	dev_add_pack(&ip_packet_type);//添加l3协议处理函数
	ip_rt_init(); //路由子系统初始化
	inet_initpeers();//inet_peer缓存
}

//调用路径ip_init->inet_initpeers
//inet_peer缓存初始化
//	1.每一个与linux通过inet协议交换过数据的主机,都会被认为是一个ip peer,linux为每个peer分配一个inet_peer结构。
//	2.inet_peer的主要目的,使不同ip使用不同的ip id生成器。
//	3.系统中所有的inet_peer实例组织成一课avl树,方便查找。
1.2 void __init inet_initpeers(void)
{
	struct sysinfo si;

	//获取系统内存信息
	si_meminfo(&si);
	//系统中inet_peer数量的阀值
	if (si.totalram <= (32768*1024)/PAGE_SIZE)
		inet_peer_threshold >>= 1; /* max pool size about 1MB on IA32 */
	if (si.totalram <= (16384*1024)/PAGE_SIZE)
		inet_peer_threshold >>= 1; /* about 512KB */
	if (si.totalram <= (8192*1024)/PAGE_SIZE)
		inet_peer_threshold >>= 2; /* about 128KB */
	//inet_peer SLAB cache
	peer_cachep = kmem_cache_create("inet_peer_cache",
			sizeof(struct inet_peer),
			0, SLAB_HWCACHE_ALIGN|SLAB_PANIC,
			NULL);
	//垃圾回收
	peer_periodic_timer.expires = jiffies
		+ net_random() % inet_peer_gc_maxtime
		+ inet_peer_gc_maxtime;
	add_timer(&peer_periodic_timer);
}
时间: 2024-09-12 08:36:38

网络子系统38_ip子系统初始化的相关文章

网络子系统11_arp子系统初始化

// 1.邻居: // 网络中的邻居指连接到同一个LAN中,且至少有一个接口有相同的ip子网配置 // 2.邻居协议的作用: // 通过l3地址获取主机的l2地址 // 3.通过l3获取l2地址办法: // 3.1 点到点连接,此时不需要l2地址 // 3.2 特殊的l3地址,通过简单的规则获取l2的映射 // 3.3 多播地址通过简单的转换规则转换为l2地址 // 3.4 ip中使用arp协议完成映射 // arp协议的初始化 // 向内核邻居子系统注册arp地址解析协议. // 调用路径:i

网络子系统10_inet模块初始化

//inet模块初始化 //inet功能以模块的形式提供 //1.sock_register(inet_family_ops)向socket注册地址族,保存在net_families数组中,socket通过地址族查找对应的inet_family_ops //2.struct inet_protosw 由l4使用,表示地址族(协议族)中某一具体协议的操作,保存在inetsw链表数组中,通过协议类型查找对应的协议操作 //3.struct net_protocol 由l3使用,表示l4协议的回调函数

网络子系统65_路由表初始化

// 多路由表 // 编译支持多路由表,系统提供255张路由表,由系统使用id为253,254,255的路由表 1.1 enum rt_class_t { RT_TABLE_UNSPEC=0, RT_TABLE_DEFAULT=253, RT_TABLE_MAIN=254, RT_TABLE_LOCAL=255, __RT_TABLE_MAX }; #define RT_TABLE_MAX (__RT_TABLE_MAX - 1) struct fib_table *fib_tables[RT_

网络子系统66_策略路由初始化

// 策略路由链表 // 系统中所有策略路由通过fib_rules链接在一起 static struct fib_rule default_rule = { .r_clntref = ATOMIC_INIT(2),//引用计数 .r_preference = 0x7FFF,//路由规则优先级 .r_table = RT_TABLE_DEFAULT,//路由表标示符 .r_action = RTN_UNICAST,//路由类型,间接定义了当路由查找匹配时应采取的动作 }; static struc

时间子系统11_tsc时钟初始化

// tsc时钟源初始化 // 调用路径:time_init->tsc_init // 函数任务: // 1.矫正tsc,获取tsc频率,设置cpu频率等于tsc频率 // 2.初始化基于tsc的延迟函数 // 3.检查tsc的特性 // 3.1 tsc之间是否同步 // 3.1.1 如果tsc之间不同步,标记tsc不稳定,设置rating=0 // 3.2 tsc是否稳定 // 4.注册tsc时钟源设备 1.1 void __init tsc_init(void) { u64 lpj; int

时间子系统1_lapic时钟初始化

// 参考:http://www.bluezd.info/archives/reg_clock_event_device_1 // x86平台初始化 // 注:arch/x86/kernel/x86_init.c 1.1 struct x86_init_ops x86_init __initdata = { ... //apic控制器初始化 .irqs = { .pre_vector_init = init_ISA_irqs, .intr_init = native_init_IRQ, .tra

时间子系统10_hpet时钟初始化

// 时钟mult :mult/2^shift = ns/cyc // 参考:http://www.bluezd.info/archives/reg_clock_event_device_1 // x86平台初始化 // 注:arch/x86/kernel/x86_init.c 1.1 struct x86_init_ops x86_init __initdata = { ... //时钟初始化 .timers = { .setup_percpu_clockev = setup_boot_API

cgroup子系统3_freezer子系统

freezer子系统用于挂起和恢复cgroup中的进程.freezer有一个控制文件:freezer.state,将FROZEN写入该文件, 可以将cgroup中的进程挂起,将THAWED写入该文件,可以将已挂起的进程恢复.通过遍历cgroup中的进程,对其freeze或者wake_up. freeze操作通过freeze框架实现,设置进程的TIF_SIGPENDING函数(伪信号),唤醒进程,然后进程在返回用户态时,信号处理入 口get_signal_to_deliver中通过try_to_f

cgroup子系统2_devices子系统

devices子系统用于控制cgroup中所有进程可以访问哪些设备,三个控制文件:devices.allow,devices.deny,devices.list. devices.allow用于指定cgroup中的进程可以访问的设备, devices.deny用于指定cgroup中的进程不能访问的设备, devices.list用于报告cgroup中的进程访问的设备.devices.allow文件中包含若干条目,每个条目有四个字段:type.major.minor 和 access. type.