драйвера сетевых устройств
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
драйвера сетевых устройств
простой виртуальный сетевой интерфейс
Модуль ядра Linux. Виртуальный сетевой интерфейс.
Виртуальное сетевой устройство с криптованием
Ну и, естественно:
практикум по Linux Kernel
Но...
Всё это делалось и работоспособно максимум для ядра 3.19 ... а сейчас в обиходе 5.4, и стабильное 5.18 ...
И всё раньше сделанное на 70-80% просто не компилируется!
И всё нужно переделывать по-новой...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: драйвера сетевых устройств
Это соответствует каталог /net предыдущей книги и архива.
Это уже работающие варианты ... относительно регистрации сетевых устройств (интерфейсов!).
P.S. Это выкладывается не для того чтобы скачивать ... а в качестве справочника промежуточной версии.
Но если кого заинтересует - всё соответствует тексту книги 2015 года, но работает с ядром 5.4.120
- Вложения
-
- net.7.262.tgz
- (38.42 КБ) 57 скачиваний
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: драйвера сетевых устройств
Особый интерес представляет перенос всего этого кино на платформу ARM ... всякие мелки наладонники. То что на то время (2012г.) просто не было возможности проверить.
Это вот создание сетевых интерфейсов:
Код: Выделить всё
olej@raspberrypi:~/2022/kernel/examples/network/net $ modinfo mulnet.ko
filename: /home/olej/2022/kernel/examples/network/net/mulnet.ko
license: GPL v2
description: LDD:1.0 s_24/lab1_network.c
author: Oleg Tsiliuric
author: Tatsuo Kawasaki
author: Jerry Cooperstein
author: Bill Shubert
srcversion: 80160630547B3EB682B2D50
depends:
name: mulnet
vermagic: 5.15.32-v7+ SMP mod_unload modversions ARMv7 p2v8
parm: num:int
parm: title:charp
parm: digit:int
parm: mode:int
Код: Выделить всё
olej@raspberrypi:~/2022/kernel/examples/network/net $ sudo insmod mulnet.ko num=4 title=zx
Код: Выделить всё
olej@raspberrypi:~/2022/kernel/examples/network/net $ ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether b8:27:eb:7e:2c:a8 brd ff:ff:ff:ff:ff:ff
4: zx0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 00:01:02:03:04:05 brd ff:ff:ff:ff:ff:ff
5: zx1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 01:02:03:04:05:06 brd ff:ff:ff:ff:ff:ff
6: zx2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 02:03:04:05:06:07 brd ff:ff:ff:ff:ff:ff
7: zx3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 03:04:05:06:07:08 brd ff:ff:ff:ff:ff:ff
Код: Выделить всё
olej@raspberrypi:~/2022/kernel/examples/network/net $ sudo rmmod mulnet
Код: Выделить всё
olej@raspberrypi:~/2022/kernel/examples/network/net $ ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether b8:27:eb:7e:2c:a8 brd ff:ff:ff:ff:ff:ff
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: драйвера сетевых устройств
А это вот как "перелистываются" сетевые интерфейся - существувющие и вновь созданные:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/net$ uname -a
Linux R420 5.4.0-120-generic #136-Ubuntu SMP Fri Jun 10 13:40:48 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/net$ sudo insmod mulnet.ko num=4 title=abc
[sudo] пароль для olej:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/net$ ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 90:b1:1c:54:3a:46 brd ff:ff:ff:ff:ff:ff
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 90:b1:1c:54:3a:47 brd ff:ff:ff:ff:ff:ff
4: team1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
link/ether ee:8b:90:64:9b:dd brd ff:ff:ff:ff:ff:ff
5: abc0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 00:01:02:03:04:05 brd ff:ff:ff:ff:ff:ff
6: abc1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 01:02:03:04:05:06 brd ff:ff:ff:ff:ff:ff
7: abc2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 02:03:04:05:06:07 brd ff:ff:ff:ff:ff:ff
8: abc3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 03:04:05:06:07:08 brd ff:ff:ff:ff:ff:ff
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/net$ sudo insmod devices.ko
insmod: ERROR: could not insert module devices.ko: Operation not permitted
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/net$ dmesg | tail -n 10
[18147.771220] Hello: module loaded at 0xffffffffc0d24000
[18147.771222] Hello: dev_base address=0xffff95f48b20e000
[18147.771228] name=lo irq=0 MAC=00:00:00:00:00:00 rx_bytes=9602226 tx_bytes=9602226
[18147.771232] name=eno1 irq=16 MAC=90:b1:1c:54:3a:46 rx_bytes=33949503 tx_bytes=11483504
[18147.771235] name=eno2 irq=17 MAC=90:b1:1c:54:3a:47 rx_bytes=22621614 tx_bytes=7072507
[18147.771240] name=team1 irq=0 MAC=ee:8b:90:64:9b:dd rx_bytes=0 tx_bytes=0
[18147.771242] name=abc0 irq=0 MAC=00:01:02:03:04:05 rx_bytes=0 tx_bytes=0
[18147.771244] name=abc1 irq=0 MAC=01:02:03:04:05:06 rx_bytes=0 tx_bytes=0
[18147.771246] name=abc2 irq=0 MAC=02:03:04:05:06:07 rx_bytes=0 tx_bytes=0
[18147.771248] name=abc3 irq=0 MAC=03:04:05:06:07:08 rx_bytes=0 tx_bytes=0
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: драйвера сетевых устройств
Виртуальный сетевой интерфейс. Делаем и проверяем.
В архиве их 3:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/virt$ ls -l *.ko
-rw-rw-r-- 1 olej olej 12328 июн 20 10:58 virt1.ko
-rw-rw-r-- 1 olej olej 12208 июн 20 10:58 virt2.ko
-rw-rw-r-- 1 olej olej 12248 июн 20 10:58 virt.ko
Выглядит это примерно так:
Код: Выделить всё
#include <linux/module.h>
#include <linux/version.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/moduleparam.h>
#include <net/arp.h>
#define ERR(...) printk(KERN_ERR "! "__VA_ARGS__)
#define LOG(...) printk(KERN_INFO "! "__VA_ARGS__)
static char* link = "eth0";
module_param(link, charp, 0);
static char* ifname = "virt";
module_param(ifname, charp, 0);
static struct net_device *child = NULL;
struct priv {
struct net_device_stats stats;
struct net_device *parent;
};
static rx_handler_result_t handle_frame(struct sk_buff **pskb) {
struct sk_buff *skb = *pskb;
if(child) {
struct priv *priv = netdev_priv(child);
priv->stats.rx_packets++;
priv->stats.rx_bytes += skb->len;
LOG("rx: injecting frame from %s to %s", skb->dev->name, child->name);
skb->dev = child;
/* netif_receive_skb(skb);
return RX_HANDLER_CONSUMED; */
return RX_HANDLER_ANOTHER;
}
return RX_HANDLER_PASS;
}
static int open(struct net_device *dev) {
netif_start_queue(dev);
LOG("%s: device opened", dev->name);
return 0;
}
static int stop(struct net_device *dev) {
netif_stop_queue(dev);
LOG("%s: device closed", dev->name);
return 0;
}
static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) {
struct priv *priv = netdev_priv(dev);
priv->stats.tx_packets++;
priv->stats.tx_bytes += skb->len;
if(priv->parent) {
skb->dev = priv->parent;
skb->priority = 1;
dev_queue_xmit(skb);
LOG("tx: injecting frame from %s to %s", dev->name, skb->dev->name);
return 0;
}
return NETDEV_TX_OK;
}
static struct net_device_stats *get_stats(struct net_device *dev) {
return &((struct priv*)netdev_priv(dev))->stats;
}
static struct net_device_ops crypto_net_device_ops = {
.ndo_open = open,
.ndo_stop = stop,
.ndo_get_stats = get_stats,
.ndo_start_xmit = start_xmit,
};
// #define MAX_ADDR_LEN 32 <netdev.h>
// #define ETH_ALEN 6 /* Octets in one ethernet addr */ <if_ether.h>
static void setup(struct net_device *dev) {
int j;
ether_setup(dev);
memset(netdev_priv(dev), 0, sizeof(struct priv));
dev->netdev_ops = &crypto_net_device_ops;
for(j = 0; j < ETH_ALEN; ++j) // fill in the MAC address with a phoney
dev->dev_addr[j]= (char)j;
}
int __init init(void) {
int err = 0;
struct priv *priv;
char ifstr[40];
sprintf(ifstr, "%s%s", ifname, "%d");
#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0))
child = alloc_netdev(sizeof(struct priv), ifstr, setup);
#else
child = alloc_netdev(sizeof(struct priv), ifstr, NET_NAME_UNKNOWN, setup);
#endif
if(child == NULL) {
ERR("%s: allocate error", THIS_MODULE->name); return -ENOMEM;
}
priv = netdev_priv(child);
priv->parent = __dev_get_by_name(&init_net, link); // parent interface
if(!priv->parent) {
ERR("%s: no such link: %s", THIS_MODULE->name, link);
err = -ENODEV; goto err;
}
if(priv->parent->type != ARPHRD_ETHER && priv->parent->type != ARPHRD_LOOPBACK) {
ERR("%s: illegal net type", THIS_MODULE->name);
err = -EINVAL; goto err;
}
/* also, and clone its IP, MAC and other information */
memcpy(child->dev_addr, priv->parent->dev_addr, ETH_ALEN);
memcpy(child->broadcast, priv->parent->broadcast, ETH_ALEN);
if((err = dev_alloc_name(child, child->name))) {
ERR("%s: allocate name, error %i", THIS_MODULE->name, err);
err = -EIO; goto err;
}
register_netdev(child);
rtnl_lock();
netdev_rx_handler_register(priv->parent, &handle_frame, NULL);
rtnl_unlock();
LOG("module %s loaded", THIS_MODULE->name);
LOG("%s: create link %s", THIS_MODULE->name, child->name);
LOG("%s: registered rx handler for %s", THIS_MODULE->name, priv->parent->name);
return 0;
err:
free_netdev(child);
return err;
}
void __exit virt_exit(void) {
struct priv *priv = netdev_priv(child);
if(priv->parent) {
rtnl_lock();
netdev_rx_handler_unregister(priv->parent);
rtnl_unlock();
LOG("unregister rx handler for %s\n", priv->parent->name);
}
unregister_netdev(child);
free_netdev(child);
LOG("module %s unloaded", THIS_MODULE->name);
}
module_init(init);
module_exit(virt_exit);
MODULE_AUTHOR("Oleg Tsiliuric");
MODULE_AUTHOR("Nikita Dorokhin");
MODULE_LICENSE("GPL v2");
MODULE_VERSION("3.2");
Для сетевых экспериментов - это сила!
- Вложения
-
- virt.7.264.tgz
- (8.36 КБ) 53 скачивания
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: драйвера сетевых устройств
Итак...
Имею сервер:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/virt$ inxi -MCSxxx
System: Host: R420 Kernel: 5.4.0-120-generic x86_64 bits: 64 compiler: gcc v: 9.4.0 Desktop: Cinnamon 5.2.7
wm: muffin 5.2.1 dm: LightDM 1.30.0 Distro: Linux Mint 20.3 Una base: Ubuntu 20.04 focal
Machine: Type: Server System: Dell product: PowerEdge R420 v: N/A serial: <superuser/root required> Chassis: type: 23
serial: <superuser/root required>
Mobo: Dell model: 0CN7CM v: A06 serial: <superuser/root required> BIOS: Dell v: 2.9.0 date: 01/09/2020
CPU: Topology: 2x 10-Core model: Intel Xeon E5-2470 v2 bits: 64 type: MT MCP SMP arch: Ivy Bridge rev: 4
L2 cache: 50.0 MiB
flags: avx lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx bogomips: 192080
Speed: 1241 MHz min/max: 1200/3200 MHz Core speeds (MHz): 1: 1495 2: 1331 3: 2955 4: 1733 5: 2872 6: 1500 7: 2843
8: 1864 9: 2880 10: 1574 11: 2899 12: 1578 13: 1479 14: 2495 15: 1387 16: 1249 17: 1345 18: 1277 19: 1390 20: 1680
21: 1448 22: 2788 23: 1494 24: 1289 25: 2880 26: 1399 27: 2861 28: 1389 29: 2899 30: 1432 31: 2901 32: 1274
33: 2885 34: 1558 35: 1841 36: 1288 37: 2202 38: 1242 39: 1572 40: 1714
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/virt$ ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 90:b1:1c:54:3a:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.14/24 brd 192.168.1.255 scope global noprefixroute eno1
valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 90:b1:1c:54:3a:47 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.13/24 brd 192.168.1.255 scope global noprefixroute eno2
valid_lft forever preferred_lft forever
4: team1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether ee:22:fc:60:77:8a brd ff:ff:ff:ff:ff:ff
2 физических адаптера:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/virt$ inxi -Nxxx
Network: Device-1: Broadcom and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe vendor: Dell driver: tg3
v: 3.137 port: fc00 bus ID: 02:00.0 chip ID: 14e4:165f
Device-2: Broadcom and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe vendor: Dell driver: tg3
v: 3.137 port: fc00 bus ID: 02:00.1 chip ID: 14e4:165f
- "навесить" на интерфейс eno2 виртуальный интерфейс ...
- и конфигурировать этот виртуальный адаптер для работы в сетке 192.168.5.0
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: драйвера сетевых устройств
Но прежде чем конфигурировать сервер сетку 192.168.5.0, нужно создать ответную часть в этой сети...
Для этого, и для усложнения жизни и условий эксперимента выбираю ответным хостом в LAN - Raspberry Pi ... совершенно разнородное создание: ARM процессор, 32 бит...
Код: Выделить всё
olej@raspberrypi:~ $ ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:7e:2c:a8 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.142/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
valid_lft 95709sec preferred_lft 67134sec
inet6 fe80::5b06:3ef5:5b91:15d3/64 scope link
valid_lft forever preferred_lft forever
Код: Выделить всё
olej@raspberrypi:~ $ inxi -Sxxx
System: Host: raspberrypi Kernel: 5.15.32-v7+ armv7l bits: 32 compiler: gcc v: 10.2.1 Desktop: Openbox 3.6.1 info: lxpanel
dm: LightDM 1.26.0 Distro: Raspbian GNU/Linux 11 (bullseye)
Код: Выделить всё
olej@raspberrypi:~ $ ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:7e:2c:a8 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.142/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
valid_lft 95709sec preferred_lft 67134sec
inet6 fe80::5b06:3ef5:5b91:15d3/64 scope link
valid_lft forever preferred_lft forever
Код: Выделить всё
olej@raspberrypi:~ $ sudo ifconfig eth0:1 192.168.5.142
Код: Выделить всё
olej@raspberrypi:~ $ ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:7e:2c:a8 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.142/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
valid_lft 95653sec preferred_lft 67078sec
inet 192.168.5.142/24 brd 192.168.5.255 scope global eth0:1
valid_lft forever preferred_lft forever
inet6 fe80::5b06:3ef5:5b91:15d3/64 scope link
valid_lft forever preferred_lft forever
Код: Выделить всё
olej@raspberrypi:~ $ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.3 0.0.0.0 UG 202 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.5.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Теперь всё готово для испытаний...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: драйвера сетевых устройств
Навешиваю виртуальный интерфейс:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/net$ sudo insmod devices.ko
insmod: ERROR: could not insert module devices.ko: Operation not permitted
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/virt$ ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 90:b1:1c:54:3a:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.14/24 brd 192.168.1.255 scope global noprefixroute eno1
valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 90:b1:1c:54:3a:47 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.13/24 brd 192.168.1.255 scope global noprefixroute eno2
valid_lft forever preferred_lft forever
4: team1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether ee:22:fc:60:77:8a brd ff:ff:ff:ff:ff:ff
5: virt0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether 90:b1:1c:54:3a:47 brd ff:ff:ff:ff:ff:ff
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/net$ sudo insmod devices.ko
insmod: ERROR: could not insert module devices.ko: Operation not permitted
Код: Выделить всё
...
Jun 20 10:24:36 R420 kernel: [ 3310.530333] ! rx: injecting frame from eno2 to virt0
Jun 20 10:24:36 R420 kernel: [ 3313.207319] Hello: module loaded at 0xffffffffc0eda000
Jun 20 10:24:36 R420 kernel: [ 3313.207321] Hello: dev_base address=0xffffa0f60b20a000
Jun 20 10:24:36 R420 kernel: [ 3313.207326] name=lo irq=0 MAC=00:00:00:00:00:00 rx_bytes=88590 tx_bytes=88590
Jun 20 10:24:36 R420 kernel: [ 3313.207331] name=eno1 irq=16 MAC=90:b1:1c:54:3a:46 rx_bytes=3237288 tx_bytes=1231065
Jun 20 10:24:36 R420 kernel: [ 3313.207334] name=eno2 irq=17 MAC=90:b1:1c:54:3a:47 rx_bytes=8418264 tx_bytes=2129813
Jun 20 10:24:36 R420 kernel: [ 3313.207343] name=team1 irq=0 MAC=ee:22:fc:60:77:8a rx_bytes=0 tx_bytes=0
Jun 20 10:24:36 R420 kernel: [ 3313.207345] name=virt0 irq=0 MAC=90:b1:1c:54:3a:47 rx_bytes=0 tx_bytes=0
Jun 20 10:24:39 R420 kernel: [ 3313.530309] ! rx: injecting frame from eno2 to virt0
Jun 20 10:24:42 R420 kernel: [ 3316.530384] ! rx: injecting frame from eno2 to virt0
Jun 20 10:24:43 R420 kernel: [ 3319.530619] ! rx: injecting frame from eno2 to virt0
Jun 20 10:24:45 R420 kernel: [ 3320.246571] ! rx: injecting frame from eno2 to virt0
Jun 20 10:24:48 R420 kernel: [ 3322.530873] ! rx: injecting frame from eno2 to virt0
Jun 20 10:24:51 R420 kernel: [ 3325.531131] ! rx: injecting frame from eno2 to virt0
Jun 20 10:24:53 R420 kernel: [ 3328.531422] ! rx: injecting frame from eno2 to virt0
...
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/virt$ sudo ifconfig virt0 192.168.5.240 up
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/virt$ route -n
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.3 0.0.0.0 UG 100 0 0 eno1
0.0.0.0 192.168.1.6 0.0.0.0 UG 20101 0 0 eno2
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno1
192.168.1.0 0.0.0.0 255.255.255.0 U 101 0 0 eno2
192.168.5.0 0.0.0.0 255.255.255.0 U 0 0 0 virt0
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/virt$ sudo ifconfig virt0
virt0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.5.240 netmask 255.255.255.0 broadcast 192.168.5.255
ether 90:b1:1c:54:3a:47 txqueuelen 1000 (Ethernet)
RX packets 274 bytes 32518 (32.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 36 bytes 4064 (4.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: драйвера сетевых устройств
ping по LAN с 2-х концов...
С сервера на Raspberry Pi:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/virt$ ping -I virt0 -c3 192.168.5.142
PING 192.168.5.142 (192.168.5.142) from 192.168.5.240 virt0: 56(84) bytes of data.
64 bytes from 192.168.5.142: icmp_seq=1 ttl=64 time=9.02 ms
64 bytes from 192.168.5.142: icmp_seq=2 ttl=64 time=3.87 ms
64 bytes from 192.168.5.142: icmp_seq=3 ttl=64 time=3.95 ms
--- 192.168.5.142 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.871/5.614/9.020/2.408 ms
Код: Выделить всё
olej@raspberrypi:~ $ ping -c3 192.168.5.240
PING 192.168.5.240 (192.168.5.240) 56(84) bytes of data.
64 bytes from 192.168.5.240: icmp_seq=1 ttl=64 time=5.02 ms
64 bytes from 192.168.5.240: icmp_seq=2 ttl=64 time=12.7 ms
64 bytes from 192.168.5.240: icmp_seq=3 ttl=64 time=4.58 ms
--- 192.168.5.240 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 4.581/7.416/12.651/3.705 ms
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/virt$ ping -I eno1 -c3 192.168.1.142
PING 192.168.1.142 (192.168.1.142) from 192.168.1.14 eno1: 56(84) bytes of data.
64 bytes from 192.168.1.142: icmp_seq=1 ttl=64 time=3.83 ms
64 bytes from 192.168.1.142: icmp_seq=2 ttl=64 time=3.80 ms
64 bytes from 192.168.1.142: icmp_seq=3 ttl=64 time=6.34 ms
--- 192.168.1.142 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 3.799/4.656/6.344/1.193 ms
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/network/virt$ ping -I eno2 -c3 192.168.1.142
PING 192.168.1.142 (192.168.1.142) from 192.168.1.13 eno2: 56(84) bytes of data.
From 192.168.1.13 icmp_seq=1 Destination Host Unreachable
From 192.168.1.13 icmp_seq=2 Destination Host Unreachable
From 192.168.1.13 icmp_seq=3 Destination Host Unreachable
--- 192.168.1.142 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2037ms
pipe 3
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей