In yesterday's article , I make complaints about it. Linux Incomplete design of various virtual network cards , Just make complaints about it. , I didn't mean anything else , I'm too lazy to do some hack To avoid these imperfections , I just want to make complaints about it .

last night , Some netizens asked me to give some solutions , Because he also encountered this problem :

* He wants to be bonding Of eth0 Can work independently , yes , As a management port .
therefore , This friend asked me to give a solution , I realize the universality of this need , And not everyone wants to configure something macvlan,ipvlan Of , therefore , I just want to write more .

In my environment :

* enp0s9 cover bonding reach bond0.
* I hope bond0 handle 2.0.0.0/8 Of traffic .
* I hope enp0s9 handle 1.0.0.0/8 Of traffic .
* I do not want the above communications to be subject to bonding Of mode.
So let's get started .

Let's see why we are in the enp0s9 cover bonding It doesn't work after that ,stap I can see it all at once , Look at the phenomenon first :
[root@localhost bond]# arp -n Address HWtype HWaddress Flags Mask Iface
192.168.56.1 ether 0a:00:27:00:00:00 C enp0s8[root@localhost bond]# ping 1.1.1.2
PING 1.1.1.2(1.1.1.2) 56(84) bytes of data. From 1.1.1.1 icmp_seq=1
Destination Host Unreachable From 1.1.1.1 icmp_seq=2 Destination Host
Unreachable From 1.1.1.1 icmp_seq=3 Destination Host Unreachable From 1.1.1.1
icmp_seq=4 Destination Host Unreachable ^C --- 1.1.1.2 ping statistics --- 4
packets transmitted, 0 received, +4 errors, 100% packet loss,time 2999ms pipe 4
[root@localhost bond]# arp -n Address HWtype HWaddress Flags Mask Iface 1.1.1.2
(incomplete) enp0s9 192.168.56.1 ether 0a:00:27:00:00:00 C enp0s8
It's clear, isn't it ?

Look again stap The output of :
[root@localhost bond]# stap -e 'probe kernel.function("arp_process"){name =
kernel_string($skb->dev->name); printf("%s\n", name);}' bond0 bond0 bond0
Oh,yes!arp cover bond0 Took over ,enp0s9 As slave Independent network card is no longer present .

What should I do? ? It's changed !

Here I think it is bonding Itself and its rx_handler There is a problem with the implementation !! use MAC Just distinguish the address ??
master hold slave Shielding itself is not reasonable !!

good , I follow my usage scenarios , Changed it , first , I take as master Of bond0 And as slave Of enp0s9 Of MAC Address discrimination , Set separately , Then modify it arp_process Processing logic of :
%{ #include <linux/module.h> #include <net/bonding.h> %} function change_indev:
long(skb:long) %{ struct sk_buff *_skb = (struct sk_buff *)STAP_ARG_skb;
STAP_PRINTF(" aa :%s\n", _skb->dev->name); if (!strcmp(_skb->dev->name, "bond0")
) { struct bonding *bond = netdev_priv(_skb->dev); struct slave *curr = bond->
curr_active_slave; STAP_PRINTF(" aa :%s\n", curr->dev->name); // Change the reception device that will do
_skb->dev = curr->dev; } %} probe kernel.function("arp_process") { change_indev(
$skb); } probe begin { }
OK, Once more :
[root@localhost bond]# stap -g ./probe.stp WARNING: side-effect-free probe:
keyword at ./probe.stp:27:1 source: probe begin ^ aa :bond0 aa :enp0s9 ^C^[[A[
start ping bar :
[root@localhost bond]# ping 1.1.1.2 PING 1.1.1.2 (1.1.1.2) 56(84) bytes of
data. 64 bytes from 1.1.1.2: icmp_seq=1 ttl=64 time=0.480 ms 64 bytes from
1.1.1.2: icmp_seq=2 ttl=64 time=0.417 ms ^C --- 1.1.1.2 ping statistics --- 2
packets transmitted, 2 received, 0% packet loss,time 1001ms rtt min/avg/max/mdev
= 0.417/0.448/0.480/0.037 ms
Yes .

These are small problems , It's easy to solve , One might say , Configure one macvlan Doesn't it smell good ? ha-ha , I don't think it's a problem at all .

I don't know if it hurts , General rule no pain , If it doesn't work, just straighten it out , What else , I don't care .

You can tell 1000 There's a reason why it's unreasonable , You can tell 1000 There are reasons to justify this , How to put it? ? It's all leather shoes .

Zhejiang Wenzhou shoes wet , Rain and water will not make you fat !

Technology
©2019-2020 Toolsou All rights reserved,
Final review of database : Summary of comprehensive application questions use Python Make simple games Laplance operator ( Second derivative ) Convert hard disk to GPT Partition format Python Implementation of Hanoi Tower code about String How to create objects vue3 Learning journey 1—— establish vue3 project java String from back to front _Java String String summary use Python Write a story about plants versus zombies 【 Greedy Algorithm 】 Huffman coding problem