禁止内核创建fallback设备

2023-12-19 09:32

本文主要是介绍禁止内核创建fallback设备,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用ip link命令查看接口的时候,会发现一些系统自动创建的隧道fallback设备,如:tunl0、gre0、gretap0、sit0、ip6tnl0和ip6gre0等。

/ # ip link
14: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1link/ipip 0.0.0.0 brd 0.0.0.0
15: gre0@NONE: <NOARP> mtu 1476 qdisc noop state DOWN mode DEFAULT group default qlen 1link/gre 0.0.0.0 brd 0.0.0.0
16: gretap0@NONE: <BROADCAST,MULTICAST> mtu 1462 qdisc noop state DOWN mode DEFAULT group default qlen 1000link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
17: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1link/sit 0.0.0.0 brd 0.0.0.0
18: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN mode DEFAULT group default qlen 1link/tunnel6 :: brd ::
19: ip6gre0@NONE: <NOARP> mtu 1448 qdisc noop state DOWN mode DEFAULT group default qlen 1link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

PROC文件/proc/sys/net/core/fb_tunnels_only_for_init_net用于控制是否创建fallback隧道设备。默认值为0,即为所有的命名空间创建fallback设备。如下函数net_has_fallback_tunnels的实现,如果值等于1,只有init_net命名空间中创建fallback设备。如果值为2,所有命名空间都不创建fallback设备。

/*  * sysctl_fb_tunnels_only_for_init_net == 0 : For all netns*                                     == 1 : For initns only*                                     == 2 : For none.*/ 
static inline bool net_has_fallback_tunnels(const struct net *net)
{   return !IS_ENABLED(CONFIG_SYSCTL) ||!sysctl_fb_tunnels_only_for_init_net ||(net == &init_net && sysctl_fb_tunnels_only_for_init_net == 1);
}

如下,在IPv4隧道的命名空间初始化时,如果net_has_fallback_tunnels返回0,fb_tunnel_dev设置为NULL。

int ip_tunnel_init_net(struct net *net, unsigned int ip_tnl_net_id,struct rtnl_link_ops *ops, char *devname)
{struct ip_tunnel_net *itn = net_generic(net, ip_tnl_net_id);...if (!ops || !net_has_fallback_tunnels(net)) {struct ip_tunnel_net *it_init_net;it_init_net = net_generic(&init_net, ip_tnl_net_id);itn->type = it_init_net->type;itn->fb_tunnel_dev = NULL;return 0;}

如果net_has_fallback_tunnels返回0,sit隧道命名空间初始化函数,将不会创建sit0设备。

static int __net_init sit_init_net(struct net *net)
{struct sit_net *sitn = net_generic(net, sit_net_id);struct ip_tunnel *t;...if (!net_has_fallback_tunnels(net))return 0;sitn->fb_tunnel_dev = alloc_netdev(sizeof(struct ip_tunnel), "sit0",NET_NAME_UNKNOWN, ipip6_tunnel_setup);

如果net_has_fallback_tunnels返回0,vti6隧道命名空间初始化函数,将不会创建ip6_vti0设备。

static int __net_init vti6_init_net(struct net *net)
{struct vti6_net *ip6n = net_generic(net, vti6_net_id);struct ip6_tnl *t = NULL;ip6n->tnls[0] = ip6n->tnls_wc;ip6n->tnls[1] = ip6n->tnls_r_l;if (!net_has_fallback_tunnels(net))return 0;err = -ENOMEM;ip6n->fb_tnl_dev = alloc_netdev(sizeof(struct ip6_tnl), "ip6_vti0",NET_NAME_UNKNOWN, vti6_dev_setup);

如果net_has_fallback_tunnels返回0,ip6gre隧道命名空间初始化函数,将不会创建ip6gre0设备。

static int __net_init ip6gre_init_net(struct net *net)
{struct ip6gre_net *ign = net_generic(net, ip6gre_net_id);struct net_device *ndev;if (!net_has_fallback_tunnels(net))return 0;ndev = alloc_netdev(sizeof(struct ip6_tnl), "ip6gre0",NET_NAME_UNKNOWN, ip6gre_tunnel_setup);

如果net_has_fallback_tunnels返回0,ip6隧道命名空间初始化函数,将不会创建ip6tnl0设备。

static int __net_init ip6_tnl_init_net(struct net *net)
{struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);struct ip6_tnl *t = NULL;ip6n->tnls[0] = ip6n->tnls_wc;ip6n->tnls[1] = ip6n->tnls_r_l;if (!net_has_fallback_tunnels(net))return 0;err = -ENOMEM;ip6n->fb_tnl_dev = alloc_netdev(sizeof(struct ip6_tnl), "ip6tnl0",NET_NAME_UNKNOWN, ip6_tnl_dev_setup);

内核版本 5.10

这篇关于禁止内核创建fallback设备的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511700

相关文章

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

Python列表的创建与删除的操作指南

《Python列表的创建与删除的操作指南》列表(list)是Python中最常用、最灵活的内置数据结构之一,它支持动态扩容、混合类型、嵌套结构,几乎无处不在,但你真的会创建和删除列表吗,本文给大家介绍... 目录一、前言二、列表的创建方式1. 字面量语法(最常用)2. 使用list()构造器3. 列表推导式

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

java创建xls文件放到指定文件夹中实现方式

《java创建xls文件放到指定文件夹中实现方式》本文介绍了如何在Java中使用ApachePOI库创建和操作Excel文件,重点是如何创建一个XLS文件并将其放置到指定文件夹中... 目录Java创建XLS文件并放到指定文件夹中步骤一:引入依赖步骤二:创建XLS文件总结Java创建XLS文件并放到指定文件

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat