Virtual Net Kernel Module 1.0.0
Модуль ядра Linux на C, который создаёт виртуальный сетевой интерфейс, позволяет задавать IPv4 через `procfs/sysctl` и отвечает на `ping`.
Загрузка...
Поиск...
Не найдено
Файл virtual_net.h

Общие определения для модуля виртуального сетевого интерфейса. Подробнее...

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/netdevice.h>
#include <linux/inet.h>
#include <linux/sysctl.h>
#include <linux/rtnetlink.h>
#include <linux/types.h>
#include <net/ip.h>
Граф включаемых заголовочных файлов для virtual_net.h:
Граф файлов, в которые включается этот файл:

См. исходные тексты.

Структуры данных

struct  vnet_priv
 Приватные данные интерфейса vnet. Подробнее...
 

Макросы

#define VNET_IFNAME   "vnet0"
 Имя создаваемого виртуального интерфейса.
 
#define VNET_DEFAULT_IP   "10.0.0.1"
 IPv4 адрес интерфейса по умолчанию.
 

Функции

static DEFINE_SPINLOCK (vnet_ip_lock)
 Spinlock для синхронизации чтения/записи vnet_ip_str.
 
static int __init virtual_net_init (void)
 Инициализация и регистрация модуля в ядре.
 
static void __exit virtual_net_exit (void)
 Выгрузка и очистка ресурсов модуля.
 
static netdev_tx_t vnet_xmit (struct sk_buff *skb, struct net_device *dev)
 Обработчик передачи пакета с эмуляцией ARP/ICMP ответа.
 
static void vnet_get_stats64 (struct net_device *dev, struct rtnl_link_stats64 *stats)
 Возвращает статистику интерфейса.
 
static void vnet_arp_reply (struct sk_buff const *skb, struct net_device *dev, __u32 target_ip)
 Формирует и отправляет ARP reply для целевого IP.
 
static int vnet_sysctl_handler (const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)
 Обработчик записи/чтения /proc/sys/net/vnet/ip_addr.
 
static bool str_to_ip (__u32 *ip_out, const char *ip_str, spinlock_t *lock)
 Преобразует IPv4 строку в сетевой формат.
 
static int modify_vif_ip_userspace (const char *name, const char *ip_str, bool is_add)
 Изменяет IPv4 интерфейса через userspace-утилиту ip.
 

Переменные

static char vnet_ip_str [16] = VNET_DEFAULT_IP
 Текущее значение IPv4 адреса интерфейса в строковом виде.
 
static struct ctl_table_header * vnet_sysctl_header
 Дескриптор Зарегистрированной таблицы sysctl.
 
static struct net_device * vnet_dev
 Указатель на зарегистрированное сетевое устройство vnet.
 
static const struct net_device_ops vnet_ops
 Операции сетевого устройства vnet.
 
static struct ctl_table vnet_table []
 Таблица sysctl для /proc/sys/net/vnet/ip_addr.
 

Подробное описание

Общие определения для модуля виртуального сетевого интерфейса.

См. определение в файле virtual_net.h

Макросы

◆ VNET_DEFAULT_IP

#define VNET_DEFAULT_IP   "10.0.0.1"

IPv4 адрес интерфейса по умолчанию.

См. определение в файле virtual_net.h строка 22

◆ VNET_IFNAME

#define VNET_IFNAME   "vnet0"

Имя создаваемого виртуального интерфейса.

См. определение в файле virtual_net.h строка 19

Функции

◆ DEFINE_SPINLOCK()

static DEFINE_SPINLOCK ( vnet_ip_lock  )
static

Spinlock для синхронизации чтения/записи vnet_ip_str.

Блокировка доступа к строке IP адреса.

◆ modify_vif_ip_userspace()

static int modify_vif_ip_userspace ( const char *  name,
const char *  ip_str,
bool  is_add 
)
static

Изменяет IPv4 интерфейса через userspace-утилиту ip.

◆ str_to_ip()

static bool str_to_ip ( __u32 *  ip_out,
const char *  ip_str,
spinlock_t *  lock 
)
static

Преобразует IPv4 строку в сетевой формат.

◆ virtual_net_exit()

static void __exit virtual_net_exit ( void  )
static

Выгрузка и очистка ресурсов модуля.

◆ virtual_net_init()

static int __init virtual_net_init ( void  )
static

Инициализация и регистрация модуля в ядре.

◆ vnet_arp_reply()

static void vnet_arp_reply ( struct sk_buff const *  skb,
struct net_device *  dev,
__u32  target_ip 
)
static

Формирует и отправляет ARP reply для целевого IP.

◆ vnet_get_stats64()

static void vnet_get_stats64 ( struct net_device *  dev,
struct rtnl_link_stats64 *  stats 
)
static

Возвращает статистику интерфейса.

◆ vnet_sysctl_handler()

static int vnet_sysctl_handler ( const struct ctl_table *  table,
int  write,
void *  buffer,
size_t *  lenp,
loff_t *  ppos 
)
static

Обработчик записи/чтения /proc/sys/net/vnet/ip_addr.

◆ vnet_xmit()

static netdev_tx_t vnet_xmit ( struct sk_buff *  skb,
struct net_device *  dev 
)
static

Обработчик передачи пакета с эмуляцией ARP/ICMP ответа.

Переменные

◆ vnet_dev

struct net_device* vnet_dev
static

Указатель на зарегистрированное сетевое устройство vnet.

Указатель на net_device виртуального интерфейса.

См. определение в файле virtual_net.h строка 31

◆ vnet_ip_str

char vnet_ip_str[16] = VNET_DEFAULT_IP
static

Текущее значение IPv4 адреса интерфейса в строковом виде.

Текущий IPv4 адрес интерфейса в строковом виде.

См. определение в файле virtual_net.h строка 25

◆ vnet_ops

const struct net_device_ops vnet_ops
static
Инициализатор
= {
.ndo_start_xmit = vnet_xmit,
.ndo_get_stats64 = vnet_get_stats64,
}
static void vnet_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
Возвращает статистику интерфейса.
static netdev_tx_t vnet_xmit(struct sk_buff *skb, struct net_device *dev)
Обработчик передачи пакета с эмуляцией ARP/ICMP ответа.

Операции сетевого устройства vnet.

См. определение в файле virtual_net.h строка 63

◆ vnet_sysctl_header

struct ctl_table_header* vnet_sysctl_header
static

Дескриптор Зарегистрированной таблицы sysctl.

Хендлер таблицы /proc/sys/net/vnet.

См. определение в файле virtual_net.h строка 29

◆ vnet_table

struct ctl_table vnet_table[]
static
Инициализатор
= {
{
.procname = "ip_addr",
.data = vnet_ip_str,
.maxlen = sizeof(vnet_ip_str),
.mode = 0644,
.proc_handler = vnet_sysctl_handler,
},
}
static char vnet_ip_str[16]
Текущее значение IPv4 адреса интерфейса в строковом виде.
Definition virtual_net.h:25
static int vnet_sysctl_handler(const struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos)
Обработчик записи/чтения /proc/sys/net/vnet/ip_addr.

Таблица sysctl для /proc/sys/net/vnet/ip_addr.

См. определение в файле virtual_net.h строка 69